diff --git a/api/go1.25.txt b/api/go1.25.txt deleted file mode 100644 index d50d19545f163a..00000000000000 --- a/api/go1.25.txt +++ /dev/null @@ -1,111 +0,0 @@ -pkg crypto, func SignMessage(Signer, io.Reader, []uint8, SignerOpts) ([]uint8, error) #63405 -pkg crypto, type MessageSigner interface { Public, Sign, SignMessage } #63405 -pkg crypto, type MessageSigner interface, Public() PublicKey #63405 -pkg crypto, type MessageSigner interface, Sign(io.Reader, []uint8, SignerOpts) ([]uint8, error) #63405 -pkg crypto, type MessageSigner interface, SignMessage(io.Reader, []uint8, SignerOpts) ([]uint8, error) #63405 -pkg crypto/ecdsa, func ParseRawPrivateKey(elliptic.Curve, []uint8) (*PrivateKey, error) #63963 -pkg crypto/ecdsa, func ParseUncompressedPublicKey(elliptic.Curve, []uint8) (*PublicKey, error) #63963 -pkg crypto/ecdsa, method (*PrivateKey) Bytes() ([]uint8, error) #63963 -pkg crypto/ecdsa, method (*PublicKey) Bytes() ([]uint8, error) #63963 -pkg crypto/sha3, method (*SHA3) Clone() (hash.Cloner, error) #69521 -pkg crypto/tls, type Config struct, GetEncryptedClientHelloKeys func(*ClientHelloInfo) ([]EncryptedClientHelloKey, error) #71920 -pkg crypto/tls, type ConnectionState struct, CurveID CurveID #67516 -pkg debug/elf, const PT_RISCV_ATTRIBUTES = 1879048195 #72843 -pkg debug/elf, const PT_RISCV_ATTRIBUTES ProgType #72843 -pkg debug/elf, const SHT_RISCV_ATTRIBUTES = 1879048195 #72843 -pkg debug/elf, const SHT_RISCV_ATTRIBUTES SectionType #72843 -pkg go/ast, const FilterFuncDuplicates //deprecated #73088 -pkg go/ast, const FilterImportDuplicates //deprecated #73088 -pkg go/ast, const FilterUnassociatedComments //deprecated #73088 -pkg go/ast, func FilterPackage //deprecated #73088 -pkg go/ast, func MergePackageFiles //deprecated #73088 -pkg go/ast, func PackageExports //deprecated #73088 -pkg go/ast, func PreorderStack(Node, []Node, func(Node, []Node) bool) #73319 -pkg go/ast, type MergeMode //deprecated #73088 -pkg go/parser, func ParseDir //deprecated #71122 -pkg go/token, method (*FileSet) AddExistingFiles(...*File) #73205 -pkg go/types, const FieldVar = 6 #70250 -pkg go/types, const FieldVar VarKind #70250 -pkg go/types, const LocalVar = 2 #70250 -pkg go/types, const LocalVar VarKind #70250 -pkg go/types, const PackageVar = 1 #70250 -pkg go/types, const PackageVar VarKind #70250 -pkg go/types, const ParamVar = 4 #70250 -pkg go/types, const ParamVar VarKind #70250 -pkg go/types, const RecvVar = 3 #70250 -pkg go/types, const RecvVar VarKind #70250 -pkg go/types, const ResultVar = 5 #70250 -pkg go/types, const ResultVar VarKind #70250 -pkg go/types, func LookupSelection(Type, bool, *Package, string) (Selection, bool) #70737 -pkg go/types, method (*Var) Kind() VarKind #70250 -pkg go/types, method (*Var) SetKind(VarKind) #70250 -pkg go/types, method (VarKind) String() string #70250 -pkg go/types, type VarKind uint8 #70250 -pkg hash, type Cloner interface { BlockSize, Clone, Reset, Size, Sum, Write } #69521 -pkg hash, type Cloner interface, BlockSize() int #69521 -pkg hash, type Cloner interface, Clone() (Cloner, error) #69521 -pkg hash, type Cloner interface, Reset() #69521 -pkg hash, type Cloner interface, Size() int #69521 -pkg hash, type Cloner interface, Sum([]uint8) []uint8 #69521 -pkg hash, type Cloner interface, Write([]uint8) (int, error) #69521 -pkg hash, type XOF interface { BlockSize, Read, Reset, Write } #69518 -pkg hash, type XOF interface, BlockSize() int #69518 -pkg hash, type XOF interface, Read([]uint8) (int, error) #69518 -pkg hash, type XOF interface, Reset() #69518 -pkg hash, type XOF interface, Write([]uint8) (int, error) #69518 -pkg hash/maphash, method (*Hash) Clone() (hash.Cloner, error) #69521 -pkg io/fs, func Lstat(FS, string) (FileInfo, error) #49580 -pkg io/fs, func ReadLink(FS, string) (string, error) #49580 -pkg io/fs, type ReadLinkFS interface { Lstat, Open, ReadLink } #49580 -pkg io/fs, type ReadLinkFS interface, Lstat(string) (FileInfo, error) #49580 -pkg io/fs, type ReadLinkFS interface, Open(string) (File, error) #49580 -pkg io/fs, type ReadLinkFS interface, ReadLink(string) (string, error) #49580 -pkg log/slog, func GroupAttrs(string, ...Attr) Attr #66365 -pkg log/slog, method (Record) Source() *Source #70280 -pkg mime/multipart, func FileContentDisposition(string, string) string #46771 -pkg net/http, func NewCrossOriginProtection() *CrossOriginProtection #73626 -pkg net/http, method (*CrossOriginProtection) AddInsecureBypassPattern(string) #73626 -pkg net/http, method (*CrossOriginProtection) AddTrustedOrigin(string) error #73626 -pkg net/http, method (*CrossOriginProtection) Check(*Request) error #73626 -pkg net/http, method (*CrossOriginProtection) Handler(Handler) Handler #73626 -pkg net/http, method (*CrossOriginProtection) SetDenyHandler(Handler) #73626 -pkg net/http, type CrossOriginProtection struct #73626 -pkg os, method (*Root) Chmod(string, fs.FileMode) error #67002 -pkg os, method (*Root) Chown(string, int, int) error #67002 -pkg os, method (*Root) Chtimes(string, time.Time, time.Time) error #67002 -pkg os, method (*Root) Lchown(string, int, int) error #67002 -pkg os, method (*Root) Link(string, string) error #67002 -pkg os, method (*Root) MkdirAll(string, fs.FileMode) error #67002 -pkg os, method (*Root) ReadFile(string) ([]uint8, error) #73126 -pkg os, method (*Root) Readlink(string) (string, error) #67002 -pkg os, method (*Root) RemoveAll(string) error #67002 -pkg os, method (*Root) Rename(string, string) error #67002 -pkg os, method (*Root) Symlink(string, string) error #67002 -pkg os, method (*Root) WriteFile(string, []uint8, fs.FileMode) error #73126 -pkg reflect, func TypeAssert[$0 interface{}](Value) ($0, bool) #62121 -pkg runtime, func SetDefaultGOMAXPROCS() #73193 -pkg runtime/trace, func NewFlightRecorder(FlightRecorderConfig) *FlightRecorder #63185 -pkg runtime/trace, method (*FlightRecorder) Enabled() bool #63185 -pkg runtime/trace, method (*FlightRecorder) Start() error #63185 -pkg runtime/trace, method (*FlightRecorder) Stop() #63185 -pkg runtime/trace, method (*FlightRecorder) WriteTo(io.Writer) (int64, error) #63185 -pkg runtime/trace, type FlightRecorder struct #63185 -pkg runtime/trace, type FlightRecorderConfig struct #63185 -pkg runtime/trace, type FlightRecorderConfig struct, MaxBytes uint64 #63185 -pkg runtime/trace, type FlightRecorderConfig struct, MinAge time.Duration #63185 -pkg sync, method (*WaitGroup) Go(func()) #63796 -pkg testing, method (*B) Attr(string, string) #43936 -pkg testing, method (*B) Output() io.Writer #59928 -pkg testing, method (*F) Attr(string, string) #43936 -pkg testing, method (*F) Output() io.Writer #59928 -pkg testing, method (*T) Attr(string, string) #43936 -pkg testing, method (*T) Output() io.Writer #59928 -pkg testing, type TB interface, Attr(string, string) #43936 -pkg testing, type TB interface, Output() io.Writer #59928 -pkg testing/fstest, method (MapFS) Lstat(string) (fs.FileInfo, error) #49580 -pkg testing/fstest, method (MapFS) ReadLink(string) (string, error) #49580 -pkg testing/synctest, func Test(*testing.T, func(*testing.T)) #67434 -pkg testing/synctest, func Wait() #67434 -pkg unicode, var CategoryAliases map[string]string #70780 -pkg unicode, var Cn *RangeTable #70780 -pkg unicode, var LC *RangeTable #70780 diff --git a/api/next/46771.txt b/api/next/46771.txt new file mode 100644 index 00000000000000..f7aad4b04aae6a --- /dev/null +++ b/api/next/46771.txt @@ -0,0 +1 @@ +pkg mime/multipart, func FileContentDisposition(string, string) string #46771 diff --git a/api/next/49580.txt b/api/next/49580.txt new file mode 100644 index 00000000000000..ce213cc9ca6816 --- /dev/null +++ b/api/next/49580.txt @@ -0,0 +1,8 @@ +pkg io/fs, func Lstat(FS, string) (FileInfo, error) #49580 +pkg io/fs, func ReadLink(FS, string) (string, error) #49580 +pkg io/fs, type ReadLinkFS interface { Lstat, Open, ReadLink } #49580 +pkg io/fs, type ReadLinkFS interface, Lstat(string) (FileInfo, error) #49580 +pkg io/fs, type ReadLinkFS interface, Open(string) (File, error) #49580 +pkg io/fs, type ReadLinkFS interface, ReadLink(string) (string, error) #49580 +pkg testing/fstest, method (MapFS) Lstat(string) (fs.FileInfo, error) #49580 +pkg testing/fstest, method (MapFS) ReadLink(string) (string, error) #49580 diff --git a/api/next/63796.txt b/api/next/63796.txt new file mode 100644 index 00000000000000..624ee9db3b1b85 --- /dev/null +++ b/api/next/63796.txt @@ -0,0 +1 @@ +pkg sync, method (*WaitGroup) Go(func()) #63769 diff --git a/api/next/67002.txt b/api/next/67002.txt new file mode 100644 index 00000000000000..112f477e8ec6c7 --- /dev/null +++ b/api/next/67002.txt @@ -0,0 +1,8 @@ +pkg os, method (*Root) Chmod(string, fs.FileMode) error #67002 +pkg os, method (*Root) Chown(string, int, int) error #67002 +pkg os, method (*Root) Chtimes(string, time.Time, time.Time) error #67002 +pkg os, method (*Root) Lchown(string, int, int) error #67002 +pkg os, method (*Root) Link(string, string) error #67002 +pkg os, method (*Root) Readlink(string) (string, error) #67002 +pkg os, method (*Root) Rename(string, string) error #67002 +pkg os, method (*Root) Symlink(string, string) error #67002 diff --git a/api/next/67516.txt b/api/next/67516.txt new file mode 100644 index 00000000000000..a9b6007d06a3d4 --- /dev/null +++ b/api/next/67516.txt @@ -0,0 +1 @@ +pkg crypto/tls, type ConnectionState struct, CurveID CurveID #67516 diff --git a/api/next/70250.txt b/api/next/70250.txt new file mode 100644 index 00000000000000..faad356cefbb4a --- /dev/null +++ b/api/next/70250.txt @@ -0,0 +1,17 @@ +pkg go/types, const FieldVar = 6 #70250 +pkg go/types, const FieldVar VarKind #70250 +pkg go/types, const LocalVar = 2 #70250 +pkg go/types, const LocalVar VarKind #70250 +pkg go/types, const PackageVar = 1 #70250 +pkg go/types, const PackageVar VarKind #70250 +pkg go/types, const ParamVar = 4 #70250 +pkg go/types, const ParamVar VarKind #70250 +pkg go/types, const RecvVar = 3 #70250 +pkg go/types, const RecvVar VarKind #70250 +pkg go/types, const ResultVar = 5 #70250 +pkg go/types, const ResultVar VarKind #70250 +pkg go/types, func LookupSelection(Type, bool, *Package, string) (Selection, bool) #70737 +pkg go/types, method (*Var) Kind() VarKind #70250 +pkg go/types, method (*Var) SetKind(VarKind) #70250 +pkg go/types, method (VarKind) String() string #70250 +pkg go/types, type VarKind uint8 #70250 diff --git a/api/next/71122.txt b/api/next/71122.txt new file mode 100644 index 00000000000000..a679899e0ccdd5 --- /dev/null +++ b/api/next/71122.txt @@ -0,0 +1 @@ +pkg go/parser, func ParseDir //deprecated #71122 diff --git a/api/next/72843.txt b/api/next/72843.txt new file mode 100644 index 00000000000000..efd45ccc6f5c86 --- /dev/null +++ b/api/next/72843.txt @@ -0,0 +1,4 @@ +pkg debug/elf, const PT_RISCV_ATTRIBUTES = 1879048195 #72843 +pkg debug/elf, const PT_RISCV_ATTRIBUTES ProgType #72843 +pkg debug/elf, const SHT_RISCV_ATTRIBUTES = 1879048195 #72843 +pkg debug/elf, const SHT_RISCV_ATTRIBUTES SectionType #72843 diff --git a/doc/go_spec.html b/doc/go_spec.html index 183bc7fb372755..479605e36c1bdb 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -7894,7 +7894,7 @@

Handling panics

The protect function in the example below invokes the function argument g and protects callers from -run-time panics caused by g. +run-time panics raised by g.

diff --git a/doc/godebug.md b/doc/godebug.md
index 15be9da5df0acb..f3ad820d3cddea 100644
--- a/doc/godebug.md
+++ b/doc/godebug.md
@@ -169,26 +169,6 @@ Go command will follow symlinks to regular files embedding files.
 The default value `embedfollowsymlinks=0` does not allow following
 symlinks. `embedfollowsymlinks=1` will allow following symlinks.
 
-Go 1.25 added a new `containermaxprocs` setting that controls whether the Go
-runtime will consider cgroup CPU limits when setting the default GOMAXPROCS.
-The default value `containermaxprocs=1` will use cgroup limits in addition to
-the total logical CPU count and CPU affinity. `containermaxprocs=0` will
-disable consideration of cgroup limits. This setting only affects Linux.
-
-Go 1.25 added a new `updatemaxprocs` setting that controls whether the Go
-runtime will periodically update GOMAXPROCS for new CPU affinity or cgroup
-limits. The default value `updatemaxprocs=1` will enable periodic updates.
-`updatemaxprocs=0` will disable periodic updates.
-
-Go 1.25 disabled SHA-1 signature algorithms in TLS 1.2 according to RFC 9155.
-The default can be reverted using the `tlssha1=1` setting.
-
-Go 1.25 switched to SHA-256 to fill in missing SubjectKeyId in
-crypto/x509.CreateCertificate. The setting `x509sha256skid=0` reverts to SHA-1.
-
-Go 1.25 corrected the semantics of contention reports for runtime-internal locks,
-and so removed the [`runtimecontentionstacks` setting](/pkg/runtime#hdr-Environment_Variable).
-
 ### Go 1.24
 
 Go 1.24 added a new `fips140` setting that controls whether the Go
@@ -390,7 +370,7 @@ certificate policy OIDs with components larger than 31 bits. By default this
 field is only used during parsing, when it is populated with policy OIDs, but
 not used during marshaling. It can be used to marshal these larger OIDs, instead
 of the existing PolicyIdentifiers field, by using the
-[`x509usepolicies` setting](/pkg/crypto/x509/#CreateCertificate).
+[`x509usepolicies` setting.](/pkg/crypto/x509/#CreateCertificate).
 
 
 ### Go 1.21
diff --git a/doc/next/1-intro.md b/doc/next/1-intro.md
new file mode 100644
index 00000000000000..77a9aed59f244c
--- /dev/null
+++ b/doc/next/1-intro.md
@@ -0,0 +1,8 @@
+
+
+## DRAFT RELEASE NOTES — Introduction to Go 1.N {#introduction}
+
+**Go 1.25 is not yet released. These are work-in-progress release notes.
+Go 1.25 is expected to be released in August 2025.**
diff --git a/doc/next/2-language.md b/doc/next/2-language.md
new file mode 100644
index 00000000000000..61030bd67606b0
--- /dev/null
+++ b/doc/next/2-language.md
@@ -0,0 +1,3 @@
+## Changes to the language {#language}
+
+
diff --git a/doc/next/3-tools.md b/doc/next/3-tools.md
new file mode 100644
index 00000000000000..886852b784eacf
--- /dev/null
+++ b/doc/next/3-tools.md
@@ -0,0 +1,35 @@
+## Tools {#tools}
+
+### Go command {#go-command}
+
+The `go build` `-asan` option now defaults to doing leak detection at
+program exit.
+This will report an error if memory allocated by C is not freed and is
+not referenced by any other memory allocated by either C or Go.
+These new error reports may be disabled by setting
+`ASAN_OPTIONS=detect_leaks=0` in the environment when running the
+program.
+
+
+
+The new `work` package pattern matches all packages in the work (formerly called main)
+modules: either the single work module in module mode or the set of workspace modules
+in workspace mode.
+
+
+
+When the go command updates the `go` line in a `go.mod` or `go.work` file,
+it [no longer](/ref/mod#go-mod-file-toolchain) adds a toolchain line
+specifying the command's current version.
+
+### Cgo {#cgo}
+
+### Vet {#vet}
+
+
+
+The `go vet` command now includes the
+[waitgroup](https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/waitgroup)
+analyzer, which reports misplaced calls to [sync.WaitGroup.Add].
+
+
diff --git a/doc/next/4-runtime.md b/doc/next/4-runtime.md
new file mode 100644
index 00000000000000..b6b50f1c0a755f
--- /dev/null
+++ b/doc/next/4-runtime.md
@@ -0,0 +1,26 @@
+## Runtime {#runtime}
+
+
+
+The message printed when a program exits due to an unhandled panic
+that was recovered and re-raised no longer repeats the text of
+the panic value.
+
+Previously, a program which panicked with `panic("PANIC")`,
+recovered the panic, and then re-panicked with the original
+value would print:
+
+    panic: PANIC [recovered]
+      panic: PANIC
+
+This program will now print:
+
+    panic: PANIC [recovered, reraised]
+
+
+
+On Linux systems with kernel support for anonymous VMA names
+(`CONFIG_ANON_VMA_NAME`), the Go runtime will annotate anonymous memory
+mappings with context about their purpose. e.g., `[anon: Go: heap]` for heap
+memory. This can be disabled with the [GODEBUG setting](/doc/godebug)
+`decoratemappings=0`.
diff --git a/doc/next/5-toolchain.md b/doc/next/5-toolchain.md
new file mode 100644
index 00000000000000..c4d4744168d780
--- /dev/null
+++ b/doc/next/5-toolchain.md
@@ -0,0 +1,44 @@
+## Compiler {#compiler}
+
+
+
+The compiler and linker in Go 1.25 now generate debug information
+using [DWARF version 5](https://dwarfstd.org/dwarf5std.html); the
+newer DWARF version reduces the space required for debuging
+information in Go binaries.
+DWARF 5 generation is gated by the "dwarf5" GOEXPERIMENT; this
+functionality can be disabled (for now) using GOEXPERIMENT=nodwarf5.
+
+
+
+The compiler [has been fixed](/cl/657715)
+to ensure that nil pointer checks are performed promptly. Programs like the following,
+which used to execute successfully, will now panic with a nil-pointer exception:
+
+```
+package main
+
+import "os"
+
+func main() {
+	f, err := os.Open("nonExistentFile")
+	name := f.Name()
+	if err != nil {
+		return
+	}
+	println(name)
+}
+```
+
+This program is incorrect in that it uses the result of `os.Open` before checking
+the error. The main result of `os.Open` can be a nil pointer if the error result is non-nil.
+But because of [a compiler bug](/issue/72860), this program ran successfully under
+Go versions 1.21 through 1.24 (in violation of the Go spec). It will no longer run
+successfully in Go 1.25. If this change is affecting your code, the solution is to put
+the non-nil error check earlier in your code, preferrably immediately after
+the error-generating statement.
+
+## Assembler {#assembler}
+
+## Linker {#linker}
+
diff --git a/doc/next/6-stdlib/0-heading.md b/doc/next/6-stdlib/0-heading.md
new file mode 100644
index 00000000000000..a992170d433326
--- /dev/null
+++ b/doc/next/6-stdlib/0-heading.md
@@ -0,0 +1,2 @@
+## Standard library {#library}
+
diff --git a/doc/next/6-stdlib/99-minor/0-heading.md b/doc/next/6-stdlib/99-minor/0-heading.md
new file mode 100644
index 00000000000000..a98105e8ccba7f
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/0-heading.md
@@ -0,0 +1,3 @@
+### Minor changes to the library {#minor_library_changes}
+
+
diff --git a/doc/next/6-stdlib/99-minor/README b/doc/next/6-stdlib/99-minor/README
new file mode 100644
index 00000000000000..fac778de050642
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/README
@@ -0,0 +1 @@
+API changes and other small changes to the standard library go here.
diff --git a/doc/next/6-stdlib/99-minor/archive/tar/49580.md b/doc/next/6-stdlib/99-minor/archive/tar/49580.md
new file mode 100644
index 00000000000000..8fa43681fa4163
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/archive/tar/49580.md
@@ -0,0 +1,2 @@
+The [*Writer.AddFS] implementation now supports symbolic links
+for filesystems that implement [io/fs.ReadLinkFS].
diff --git a/doc/next/6-stdlib/99-minor/crypto/elliptic/hidden.md b/doc/next/6-stdlib/99-minor/crypto/elliptic/hidden.md
new file mode 100644
index 00000000000000..eb3bef50d3babb
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/crypto/elliptic/hidden.md
@@ -0,0 +1,2 @@
+The hidden and undocumented `Inverse` and `CombinedMult` methods on some [Curve]
+implementations have been removed.
diff --git a/doc/next/6-stdlib/99-minor/crypto/tls/67516.md b/doc/next/6-stdlib/99-minor/crypto/tls/67516.md
new file mode 100644
index 00000000000000..3790533d16f86d
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/crypto/tls/67516.md
@@ -0,0 +1,2 @@
+The new [ConnectionState.CurveID] field exposes the key exchange mechanism used
+to establish the connection.
diff --git a/doc/next/6-stdlib/99-minor/crypto/tls/fips.md b/doc/next/6-stdlib/99-minor/crypto/tls/fips.md
new file mode 100644
index 00000000000000..0f0c9459cee0c2
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/crypto/tls/fips.md
@@ -0,0 +1,2 @@
+When [FIPS 140-3 mode](/doc/security/fips140) is enabled, Extended Master Secret
+is now required in TLS 1.2, and Ed25519 and X25519MLKEM768 are now allowed.
diff --git a/doc/next/6-stdlib/99-minor/debug/elf/72843.md b/doc/next/6-stdlib/99-minor/debug/elf/72843.md
new file mode 100644
index 00000000000000..491c2dc1a11d53
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/debug/elf/72843.md
@@ -0,0 +1,4 @@
+The [debug/elf] package adds two new constants:
+- [PT_RISCV_ATTRIBUTES]
+- [SHT_RISCV_ATTRIBUTES]
+for RISC-V ELF parsing.
diff --git a/doc/next/6-stdlib/99-minor/go/parser/71122.md b/doc/next/6-stdlib/99-minor/go/parser/71122.md
new file mode 100644
index 00000000000000..2043d3040366eb
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/go/parser/71122.md
@@ -0,0 +1 @@
+The [ParseDir] function is deprecated.
diff --git a/doc/next/6-stdlib/99-minor/go/types/70250.md b/doc/next/6-stdlib/99-minor/go/types/70250.md
new file mode 100644
index 00000000000000..49fbdadfe91282
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/go/types/70250.md
@@ -0,0 +1,3 @@
+[Var] now has a [Var.Kind] method that classifies the variable as one
+of: package-level, receiver, parameter, result, or local variable, or
+a struct field.
diff --git a/doc/next/6-stdlib/99-minor/go/types/70737.md b/doc/next/6-stdlib/99-minor/go/types/70737.md
new file mode 100644
index 00000000000000..6d1b4136bf03ab
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/go/types/70737.md
@@ -0,0 +1,3 @@
+The new [LookupSelection] function looks up the field or method of a
+given name and receiver type, like the existing [LookupFieldOrMethod]
+function, but returns the result in the form of a [Selection].
diff --git a/doc/next/6-stdlib/99-minor/io/fs/49580.md b/doc/next/6-stdlib/99-minor/io/fs/49580.md
new file mode 100644
index 00000000000000..c1cba5a3957dcb
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/io/fs/49580.md
@@ -0,0 +1 @@
+A new [ReadLinkFS] interface provides the ability to read symbolic links in a filesystem.
diff --git a/doc/next/6-stdlib/99-minor/mime/multipart/46771.md b/doc/next/6-stdlib/99-minor/mime/multipart/46771.md
new file mode 100644
index 00000000000000..b8b8641b7848e6
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/mime/multipart/46771.md
@@ -0,0 +1,2 @@
+The new helper function [FieldContentDisposition] builds multipart
+Content-Disposition header fields.
\ No newline at end of file
diff --git a/doc/next/6-stdlib/99-minor/net/56025.md b/doc/next/6-stdlib/99-minor/net/56025.md
new file mode 100644
index 00000000000000..2e3b230ef01cd3
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/net/56025.md
@@ -0,0 +1,5 @@
+[LookupMX] and [*Resolver.LookupMX] now return DNS names that look
+like valid IP address, as well as valid domain names.
+Previously if a name server returned an IP address as a DNS name,
+LookupMX would discard it, as required by the RFCs.
+However, name servers in practice do sometimes return IP addresses.
diff --git a/doc/next/6-stdlib/99-minor/os/15388.md b/doc/next/6-stdlib/99-minor/os/15388.md
new file mode 100644
index 00000000000000..04b3e91d8bb7e2
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/os/15388.md
@@ -0,0 +1,14 @@
+On Windows, [NewFile] now supports handles opened for asynchronous I/O (that is,
+[syscall.FILE_FLAG_OVERLAPPED] is specified in the [syscall.CreateFile] call).
+These handles are associated with the Go runtime's I/O completion port,
+which provides the following benefits for the resulting [File]:
+
+- I/O methods ([File.Read], [File.Write], [File.ReadAt], and [File.WriteAt]) do not block an OS thread.
+- Deadline methods ([File.SetDeadline], [File.SetReadDeadline], and [File.SetWriteDeadline]) are supported.
+
+This enhancement is especially beneficial for applications that communicate via named pipes on Windows.
+
+Note that a handle can only be associated with one completion port at a time.
+If the handle provided to [NewFile] is already associated with a completion port,
+the returned [File] is downgraded to synchronous I/O mode.
+In this case, I/O methods will block an OS thread, and the deadline methods have no effect.
diff --git a/doc/next/6-stdlib/99-minor/os/49580.md b/doc/next/6-stdlib/99-minor/os/49580.md
new file mode 100644
index 00000000000000..18d8831e7be6ef
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/os/49580.md
@@ -0,0 +1,2 @@
+The filesystem returned by [DirFS] implements the new [io/fs.ReadLinkFS] interface.
+[CopyFS] supports symlinks when copying filesystems that implement [io/fs.ReadLinkFS].
diff --git a/doc/next/6-stdlib/99-minor/os/67002.md b/doc/next/6-stdlib/99-minor/os/67002.md
new file mode 100644
index 00000000000000..84661c6c407579
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/os/67002.md
@@ -0,0 +1,10 @@
+The [os.Root] type supports the following additional methods:
+
+  * [os.Root.Chmod]
+  * [os.Root.Chown]
+  * [os.Root.Chtimes]
+  * [os.Root.Lchown]
+  * [os.Root.Link]
+  * [os.Root.Readlink]
+  * [os.Root.Rename]
+  * [os.Root.Symlink]
diff --git a/doc/next/6-stdlib/99-minor/sync/63769.md b/doc/next/6-stdlib/99-minor/sync/63769.md
new file mode 100644
index 00000000000000..60d91a949a04e4
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/sync/63769.md
@@ -0,0 +1,2 @@
+[WaitGroup] has added a new method [WaitGroup.Go],
+that makes the common pattern of creating and counting goroutines more convenient.
diff --git a/doc/next/6-stdlib/99-minor/testing/fstest/49580.md b/doc/next/6-stdlib/99-minor/testing/fstest/49580.md
new file mode 100644
index 00000000000000..5b3c0d6a84eb22
--- /dev/null
+++ b/doc/next/6-stdlib/99-minor/testing/fstest/49580.md
@@ -0,0 +1,3 @@
+[MapFS] implements the new [io/fs.ReadLinkFS] interface.
+[TestFS] will verify the functionality of the [io/fs.ReadLinkFS] interface if implemented.
+[TestFS] will no longer follow symlinks to avoid unbounded recursion.
diff --git a/doc/next/7-ports.md b/doc/next/7-ports.md
new file mode 100644
index 00000000000000..eb4f0d5a9703c4
--- /dev/null
+++ b/doc/next/7-ports.md
@@ -0,0 +1,11 @@
+## Ports {#ports}
+
+### Darwin
+
+
+As [announced](/doc/go1.24#darwin) in the Go 1.24 release notes, Go 1.25 requires macOS 12 Monterey or later; support for previous versions has been discontinued.
+
+### Windows
+
+
+Go 1.25 is the last release that contains the [broken](/doc/go1.24#windows) 32-bit windows/arm port (`GOOS=windows` `GOARCH=arm`). It will be removed in Go 1.26.
diff --git a/lib/fips140/inprocess.txt b/lib/fips140/inprocess.txt
deleted file mode 100644
index 0ec25f7505c14b..00000000000000
--- a/lib/fips140/inprocess.txt
+++ /dev/null
@@ -1 +0,0 @@
-v1.0.0
diff --git a/lib/time/update.bash b/lib/time/update.bash
index 66494752ea3c4b..940596fb11221f 100755
--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -24,8 +24,8 @@
 # in the CL match the update.bash in the CL.
 
 # Versions to use.
-CODE=2025b
-DATA=2025b
+CODE=2025a
+DATA=2025a
 
 set -e
 
diff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip
index b107695d1ef042..f8099b1b494fc9 100644
Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ
diff --git a/src/all.bash b/src/all.bash
index adbc60e361f4a6..1b8ca093e45896 100755
--- a/src/all.bash
+++ b/src/all.bash
@@ -10,4 +10,4 @@ if [ ! -f make.bash ]; then
 fi
 . ./make.bash "$@" --no-banner
 bash run.bash --no-rebuild
-../bin/go tool dist banner # print build info
+"$GOTOOLDIR/dist" banner  # print build info
diff --git a/src/all.rc b/src/all.rc
index ad8c3e143e5349..45b1261a2064a6 100755
--- a/src/all.rc
+++ b/src/all.rc
@@ -13,4 +13,4 @@ if(! test -f make.rc){
 . ./make.rc --no-banner $*
 bind -b $GOROOT/bin /bin
 ./run.rc --no-rebuild
-../bin/go tool dist banner # print build info
+$GOTOOLDIR/dist banner  # print build info
diff --git a/src/bufio/scan.go b/src/bufio/scan.go
index 1a0a3907c9eb85..a26b2ff17d3a26 100644
--- a/src/bufio/scan.go
+++ b/src/bufio/scan.go
@@ -260,11 +260,8 @@ func (s *Scanner) setErr(err error) {
 	}
 }
 
-// Buffer controls memory allocation by the Scanner.
-// It sets the initial buffer to use when scanning
+// Buffer sets the initial buffer to use when scanning
 // and the maximum size of buffer that may be allocated during scanning.
-// The contents of the buffer are ignored.
-//
 // The maximum token size must be less than the larger of max and cap(buf).
 // If max <= cap(buf), [Scanner.Scan] will use this buffer only and do no allocation.
 //
diff --git a/src/bytes/buffer.go b/src/bytes/buffer.go
index 9684513942da88..f90d9eca0fe496 100644
--- a/src/bytes/buffer.go
+++ b/src/bytes/buffer.go
@@ -21,12 +21,6 @@ type Buffer struct {
 	buf      []byte // contents are the bytes buf[off : len(buf)]
 	off      int    // read at &buf[off], write at &buf[len(buf)]
 	lastRead readOp // last read operation, so that Unread* can work correctly.
-
-	// Copying and modifying a non-zero Buffer is prone to error,
-	// but we cannot employ the noCopy trick used by WaitGroup and Mutex,
-	// which causes vet's copylocks checker to report misuse, as vet
-	// cannot reliably distinguish the zero and non-zero cases.
-	// See #26462, #25907, #47276, #48398 for history.
 }
 
 // The readOp constants describe the last action performed on
diff --git a/src/bytes/buffer_test.go b/src/bytes/buffer_test.go
index b46ba1204eb806..97fca5a9d136f9 100644
--- a/src/bytes/buffer_test.go
+++ b/src/bytes/buffer_test.go
@@ -354,7 +354,7 @@ func TestWriteAppend(t *testing.T) {
 		got.Write(b)
 	}
 	if !Equal(got.Bytes(), want) {
-		t.Fatalf("Bytes() = %q, want %q", &got, want)
+		t.Fatalf("Bytes() = %q, want %q", got, want)
 	}
 
 	// With a sufficiently sized buffer, there should be no allocations.
diff --git a/src/bytes/bytes.go b/src/bytes/bytes.go
index a0a8fa0b2986e1..8198415c3e1938 100644
--- a/src/bytes/bytes.go
+++ b/src/bytes/bytes.go
@@ -1228,7 +1228,7 @@ func ReplaceAll(s, old, new []byte) []byte {
 func EqualFold(s, t []byte) bool {
 	// ASCII fast path
 	i := 0
-	for n := min(len(s), len(t)); i < n; i++ {
+	for ; i < len(s) && i < len(t); i++ {
 		sr := s[i]
 		tr := t[i]
 		if sr|tr >= utf8.RuneSelf {
diff --git a/src/bytes/bytes_test.go b/src/bytes/bytes_test.go
index 0f6cf4993af642..14b52a80358bb7 100644
--- a/src/bytes/bytes_test.go
+++ b/src/bytes/bytes_test.go
@@ -2128,9 +2128,8 @@ func TestContainsFunc(t *testing.T) {
 var makeFieldsInput = func() []byte {
 	x := make([]byte, 1<<20)
 	// Input is ~10% space, ~10% 2-byte UTF-8, rest ASCII non-space.
-	r := rand.New(rand.NewSource(99))
 	for i := range x {
-		switch r.Intn(10) {
+		switch rand.Intn(10) {
 		case 0:
 			x[i] = ' '
 		case 1:
@@ -2149,9 +2148,8 @@ var makeFieldsInput = func() []byte {
 var makeFieldsInputASCII = func() []byte {
 	x := make([]byte, 1<<20)
 	// Input is ~10% space, rest ASCII non-space.
-	r := rand.New(rand.NewSource(99))
 	for i := range x {
-		if r.Intn(10) == 0 {
+		if rand.Intn(10) == 0 {
 			x[i] = ' '
 		} else {
 			x[i] = 'x'
@@ -2248,9 +2246,8 @@ func makeBenchInputHard() []byte {
 		"hello", "world",
 	}
 	x := make([]byte, 0, 1<<20)
-	r := rand.New(rand.NewSource(99))
 	for {
-		i := r.Intn(len(tokens))
+		i := rand.Intn(len(tokens))
 		if len(x)+len(tokens[i]) >= 1<<20 {
 			break
 		}
diff --git a/src/bytes/example_test.go b/src/bytes/example_test.go
index c489b950e59a91..71a4a9e2ca2f23 100644
--- a/src/bytes/example_test.go
+++ b/src/bytes/example_test.go
@@ -245,9 +245,9 @@ func ExampleCut() {
 }
 
 func ExampleCutPrefix() {
-	show := func(s, prefix string) {
-		after, found := bytes.CutPrefix([]byte(s), []byte(prefix))
-		fmt.Printf("CutPrefix(%q, %q) = %q, %v\n", s, prefix, after, found)
+	show := func(s, sep string) {
+		after, found := bytes.CutPrefix([]byte(s), []byte(sep))
+		fmt.Printf("CutPrefix(%q, %q) = %q, %v\n", s, sep, after, found)
 	}
 	show("Gopher", "Go")
 	show("Gopher", "ph")
@@ -257,9 +257,9 @@ func ExampleCutPrefix() {
 }
 
 func ExampleCutSuffix() {
-	show := func(s, suffix string) {
-		before, found := bytes.CutSuffix([]byte(s), []byte(suffix))
-		fmt.Printf("CutSuffix(%q, %q) = %q, %v\n", s, suffix, before, found)
+	show := func(s, sep string) {
+		before, found := bytes.CutSuffix([]byte(s), []byte(sep))
+		fmt.Printf("CutSuffix(%q, %q) = %q, %v\n", s, sep, before, found)
 	}
 	show("Gopher", "Go")
 	show("Gopher", "er")
diff --git a/src/bytes/iter.go b/src/bytes/iter.go
index b2abb2c9ba3dc6..8e9ee8b98d88db 100644
--- a/src/bytes/iter.go
+++ b/src/bytes/iter.go
@@ -31,20 +31,26 @@ func Lines(s []byte) iter.Seq[[]byte] {
 	}
 }
 
+// explodeSeq returns an iterator over the runes in s.
+func explodeSeq(s []byte) iter.Seq[[]byte] {
+	return func(yield func([]byte) bool) {
+		for len(s) > 0 {
+			_, size := utf8.DecodeRune(s)
+			if !yield(s[:size:size]) {
+				return
+			}
+			s = s[size:]
+		}
+	}
+}
+
 // splitSeq is SplitSeq or SplitAfterSeq, configured by how many
 // bytes of sep to include in the results (none or all).
 func splitSeq(s, sep []byte, sepSave int) iter.Seq[[]byte] {
+	if len(sep) == 0 {
+		return explodeSeq(s)
+	}
 	return func(yield func([]byte) bool) {
-		if len(sep) == 0 {
-			for len(s) > 0 {
-				_, size := utf8.DecodeRune(s)
-				if !yield(s[:size:size]) {
-					return
-				}
-				s = s[size:]
-			}
-			return
-		}
 		for {
 			i := Index(s, sep)
 			if i < 0 {
diff --git a/src/bytes/iter_test.go b/src/bytes/iter_test.go
deleted file mode 100644
index e37fdfb96d1b61..00000000000000
--- a/src/bytes/iter_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package bytes_test
-
-import (
-	. "bytes"
-	"testing"
-)
-
-func BenchmarkSplitSeqEmptySeparator(b *testing.B) {
-	for range b.N {
-		for range SplitSeq(benchInputHard, nil) {
-		}
-	}
-}
-
-func BenchmarkSplitSeqSingleByteSeparator(b *testing.B) {
-	sep := []byte("/")
-	for range b.N {
-		for range SplitSeq(benchInputHard, sep) {
-		}
-	}
-}
-
-func BenchmarkSplitSeqMultiByteSeparator(b *testing.B) {
-	sep := []byte("hello")
-	for range b.N {
-		for range SplitSeq(benchInputHard, sep) {
-		}
-	}
-}
-
-func BenchmarkSplitAfterSeqEmptySeparator(b *testing.B) {
-	for range b.N {
-		for range SplitAfterSeq(benchInputHard, nil) {
-		}
-	}
-}
-
-func BenchmarkSplitAfterSeqSingleByteSeparator(b *testing.B) {
-	sep := []byte("/")
-	for range b.N {
-		for range SplitAfterSeq(benchInputHard, sep) {
-		}
-	}
-}
-
-func BenchmarkSplitAfterSeqMultiByteSeparator(b *testing.B) {
-	sep := []byte("hello")
-	for range b.N {
-		for range SplitAfterSeq(benchInputHard, sep) {
-		}
-	}
-}
diff --git a/src/cmd/api/api_test.go b/src/cmd/api/api_test.go
index 98ebf168ef3949..32da68982bce45 100644
--- a/src/cmd/api/api_test.go
+++ b/src/cmd/api/api_test.go
@@ -99,11 +99,6 @@ func TestGolden(t *testing.T) {
 }
 
 func TestCompareAPI(t *testing.T) {
-	if *flagCheck {
-		// not worth repeating in -check
-		t.Skip("skipping with -check set")
-	}
-
 	tests := []struct {
 		name                          string
 		features, required, exception []string
@@ -185,11 +180,6 @@ func TestCompareAPI(t *testing.T) {
 }
 
 func TestSkipInternal(t *testing.T) {
-	if *flagCheck {
-		// not worth repeating in -check
-		t.Skip("skipping with -check set")
-	}
-
 	tests := []struct {
 		pkg  string
 		want bool
@@ -304,20 +294,14 @@ func TestIssue41358(t *testing.T) {
 }
 
 func TestIssue64958(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping with -short")
-	}
-	if *flagCheck {
-		// slow, not worth repeating in -check
-		t.Skip("skipping with -check set")
-	}
-	testenv.MustHaveGoBuild(t)
-
 	defer func() {
 		if x := recover(); x != nil {
 			t.Errorf("expected no panic; recovered %v", x)
 		}
 	}()
+
+	testenv.MustHaveGoBuild(t)
+
 	for _, context := range contexts {
 		w := NewWalker(context, "testdata/src/issue64958")
 		pkg, err := w.importFrom("p", "", 0)
diff --git a/src/cmd/asm/internal/arch/loong64.go b/src/cmd/asm/internal/arch/loong64.go
index bf5175f4a0bad6..d9e428d953bb99 100644
--- a/src/cmd/asm/internal/arch/loong64.go
+++ b/src/cmd/asm/internal/arch/loong64.go
@@ -46,14 +46,6 @@ func IsLoong64RDTIME(op obj.As) bool {
 	return false
 }
 
-func IsLoong64PRELD(op obj.As) bool {
-	switch op {
-	case loong64.APRELD, loong64.APRELDX:
-		return true
-	}
-	return false
-}
-
 func IsLoong64AMO(op obj.As) bool {
 	return loong64.IsAtomicInst(op)
 }
diff --git a/src/cmd/asm/internal/asm/asm.go b/src/cmd/asm/internal/asm/asm.go
index 9a6e22cab2c282..a1f6a73d708103 100644
--- a/src/cmd/asm/internal/asm/asm.go
+++ b/src/cmd/asm/internal/asm/asm.go
@@ -654,12 +654,6 @@ func (p *Parser) asmInstruction(op obj.As, cond string, a []obj.Addr) {
 				prog.RegTo2 = a[1].Reg
 				break
 			}
-
-			if arch.IsLoong64PRELD(op) {
-				prog.From = a[0]
-				prog.AddRestSource(a[1])
-				break
-			}
 		}
 		prog.From = a[0]
 		prog.To = a[1]
@@ -676,11 +670,6 @@ func (p *Parser) asmInstruction(op obj.As, cond string, a []obj.Addr) {
 				prog.From = a[0]
 				prog.To = a[1]
 				prog.RegTo2 = a[2].Reg
-
-			case arch.IsLoong64PRELD(op):
-				prog.From = a[0]
-				prog.AddRestSourceArgs([]obj.Addr{a[1], a[2]})
-
 			default:
 				prog.From = a[0]
 				prog.Reg = p.getRegister(prog, op, &a[1])
diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s
index bfff555782e9f7..ad0ffa33d68c7b 100644
--- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s
+++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s
@@ -6,16 +6,12 @@
 
 TEXT asmtest(SB),DUPOK|NOSPLIT,$0
 lable1:
-	BFPT	1(PC)				// 00050048
-	BFPT	lable1		// BFPT 2	// 1ffdff4b
-	BFPT	FCC0, lable1	// BFPT FCC0, 2	// 1ff9ff4b
-	BFPT	FCC7, lable1	// BFPT FCC7, 2	// fff5ff4b
+	BFPT	1(PC)			// 00050048
+	BFPT	lable1	// BFPT 2	//1ffdff4b
 
 lable2:
-	BFPF	1(PC)				// 00040048
-	BFPF	lable2		// BFPF 6 	// 1ffcff4b
-	BFPF	FCC0, lable2	// BFPF FCC0, 6	// 1ff8ff4b
-	BFPF	FCC7, lable2	// BFPF FCC7, 6	// fff4ff4b
+	BFPF	1(PC)			// 00040048
+	BFPF	lable2	// BFPF 4 	// 1ffcff4b
 
 	// relocation in play so the assembled offset should be 0
 	JMP	foo(SB)			// 00000050
@@ -547,22 +543,12 @@ lable2:
 	VNORV		V1, V2, V3      // 43842771
 	VANDNV		V1, V2, V3      // 43042871
 	VORNV		V1, V2, V3      // 43842871
-	VANDV		V1, V2		// 42042671
-	VORV		V1, V2		// 42842671
-	VXORV		V1, V2		// 42042771
-	VNORV		V1, V2		// 42842771
-	VANDNV		V1, V2		// 42042871
-	VORNV		V1, V2		// 42842871
 
 	// VANDB,VORB,VXORB,VNORB
 	VANDB		$0, V2, V3      // 4300d073
 	VORB		$64, V2, V3     // 4300d573
 	VXORB		$128, V2, V3    // 4300da73
 	VNORB		$255, V2, V3    // 43fcdf73
-	VANDB		$0, V2		// 4200d073
-	VORB		$64, V2		// 4200d573
-	VXORB		$128, V2	// 4200da73
-	VNORB		$255, V2	// 42fcdf73
 
 	// XVANDV,XVORV,XVXORV,XVNORV,XVANDNV,XVORNV
 	XVANDV		X1, X2, X3      // 43042675
@@ -571,22 +557,12 @@ lable2:
 	XVNORV		X1, X2, X3      // 43842775
 	XVANDNV		X1, X2, X3      // 43042875
 	XVORNV		X1, X2, X3      // 43842875
-	XVANDV		X1, X2		// 42042675
-	XVORV		X1, X2		// 42842675
-	XVXORV		X1, X2		// 42042775
-	XVNORV		X1, X2		// 42842775
-	XVANDNV		X1, X2		// 42042875
-	XVORNV		X1, X2		// 42842875
 
 	// XVANDB,XVORB,XVXORB,XVNORB
 	XVANDB		$0, X2, X3      // 4300d077
 	XVORB		$1, X2, X3      // 4304d477
 	XVXORB		$127, X2, X3    // 43fcd977
 	XVNORB		$255, X2, X3    // 43fcdf77
-	XVANDB		$0, X2		// 4200d077
-	XVORB		$1, X2		// 4204d477
-	XVXORB		$127, X2	// 42fcd977
-	XVNORB		$255, X2	// 42fcdf77
 
 	// MOVV C_DCON12_0, r
 	MOVV    $0x7a90000000000000, R4         // MOVV $8831558869273542656, R4        // 04a41e03
@@ -984,54 +960,3 @@ lable2:
 	XVSETALLNEH	X1, FCC0	// 20b49c76
 	XVSETALLNEW	X1, FCC0	// 20b89c76
 	XVSETALLNEV	X1, FCC0	// 20bc9c76
-
-	// [X]VFRINT[{RNE/RZ/RP/RM}].{S/D} instructions
-	VFRINTRNEF	V1, V2		// 22749d72
-	VFRINTRNED	V1, V2		// 22789d72
-	VFRINTRZF	V1, V2		// 22649d72
-	VFRINTRZD	V1, V2		// 22689d72
-	VFRINTRPF	V1, V2		// 22549d72
-	VFRINTRPD	V1, V2		// 22589d72
-	VFRINTRMF	V1, V2		// 22449d72
-	VFRINTRMD	V1, V2		// 22489d72
-	VFRINTF		V1, V2		// 22349d72
-	VFRINTD		V1, V2		// 22389d72
-	XVFRINTRNEF	X1, X2		// 22749d76
-	XVFRINTRNED	X1, X2		// 22789d76
-	XVFRINTRZF	X1, X2		// 22649d76
-	XVFRINTRZD	X1, X2		// 22689d76
-	XVFRINTRPF	X1, X2		// 22549d76
-	XVFRINTRPD	X1, X2		// 22589d76
-	XVFRINTRMF	X1, X2		// 22449d76
-	XVFRINTRMD	X1, X2		// 22489d76
-	XVFRINTF	X1, X2		// 22349d76
-	XVFRINTD	X1, X2		// 22389d76
-
-	// [X]VF{ADD/SUB/MUL/DIV}.{S/D} instructions
-	VADDF		V1, V2, V3	// 43843071
-	VADDD		V1, V2, V3	// 43043171
-	VSUBF		V1, V2, V3	// 43843271
-	VSUBD		V1, V2, V3	// 43043371
-	VMULF		V1, V2, V3	// 43843871
-	VMULD		V1, V2, V3	// 43043971
-	VDIVF		V1, V2, V3	// 43843a71
-	VDIVD		V1, V2, V3	// 43043b71
-	XVADDF		X1, X2, X3	// 43843075
-	XVADDD		X1, X2, X3	// 43043175
-	XVSUBF		X1, X2, X3	// 43843275
-	XVSUBD		X1, X2, X3	// 43043375
-	XVMULF		X1, X2, X3	// 43843875
-	XVMULD		X1, X2, X3	// 43043975
-	XVDIVF		X1, X2, X3	// 43843a75
-	XVDIVD		X1, X2, X3	// 43043b75
-
-	// [X]VFCLASS.{S/D} instructions
-	VFCLASSF	V1, V2		// 22d49c72
-	VFCLASSD	V1, V2		// 22d89c72
-	XVFCLASSF	X1, X2		// 22d49c76
-	XVFCLASSD	X1, X2		// 22d89c76
-
-	// PRELD{,X} instructions
-	PRELD	(R4), $0		// 8000c02a
-	PRELD	-1(R4), $8		// 88fcff2a
-	PRELD	8(R4),  $31		// 9f20c02a
diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc5.s b/src/cmd/asm/internal/asm/testdata/loong64enc5.s
index b7ecd6b63b33d8..423e5c3b01c02e 100644
--- a/src/cmd/asm/internal/asm/testdata/loong64enc5.s
+++ b/src/cmd/asm/internal/asm/testdata/loong64enc5.s
@@ -15,8 +15,3 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0
 	AND	$0xfedcba9876543210, R4		// AND	$-81985529216486896, R4		// 7ea8ec14de4388031e539717deb73f0384f81400
 	AND	$0xfedcba9876543210, R5, R4	// AND	$-81985529216486896, R5, R4	// 7ea8ec14de4388031e539717deb73f03a4f81400
 
-	PRELDX	0(R7), $0x80001021, $0		// PRELDX (R7), $2147487777, $0		// 1e020014de0380031e000016de130003e0782c38
-	PRELDX	-1(R7), $0x1021, $2		// PRELDX -1(R7), $4129, $2		// fe030014deffbf031e000016de030003e2782c38
-	PRELDX	8(R7), $0x80100800, $31		// PRELDX 8(R7), $2148534272, $31	// 1ee00714de238003fe1f0016de130003ff782c38
-	PRELDX	16(R7), $0x202040, $1		// PRELDX 16(R7), $2105408, $1		// 1e200014de4380033e000216de030003e1782c38
-
diff --git a/src/cmd/asm/internal/asm/testdata/riscv64.s b/src/cmd/asm/internal/asm/testdata/riscv64.s
index 75abcefa10227b..1bb52e997dc22c 100644
--- a/src/cmd/asm/internal/asm/testdata/riscv64.s
+++ b/src/cmd/asm/internal/asm/testdata/riscv64.s
@@ -438,9 +438,9 @@ start:
 	VSETVLI	X10, E32, M2, TA, MA, X12		// 5776150d
 	VSETVLI	X10, E32, M4, TA, MA, X12		// 5776250d
 	VSETVLI	X10, E32, M8, TA, MA, X12		// 5776350d
-	VSETVLI	X10, E32, MF8, TA, MA, X12		// 5776550d
+	VSETVLI	X10, E32, MF2, TA, MA, X12		// 5776550d
 	VSETVLI	X10, E32, MF4, TA, MA, X12		// 5776650d
-	VSETVLI	X10, E32, MF2, TA, MA, X12		// 5776750d
+	VSETVLI	X10, E32, MF8, TA, MA, X12		// 5776750d
 	VSETVLI	X10, E32, M1, TA, MA, X12		// 5776050d
 	VSETVLI	$15, E32, M1, TA, MA, X12		// 57f607cd
 	VSETIVLI $0, E32, M1, TA, MA, X12		// 577600cd
@@ -623,27 +623,17 @@ start:
 	VADCVXM		X11, V2, V0, V3			// d7c12540
 	VADCVIM		$15, V2, V0, V3			// d7b12740
 	VMADCVVM	V1, V2, V0, V3			// d7812044
-	VMADCVVM	V1, V2, V0, V0			// 57802044
 	VMADCVXM	X11, V2, V0, V3			// d7c12544
-	VMADCVXM	X11, V2, V0, V0			// 57c02544
 	VMADCVIM	$15, V2, V0, V3			// d7b12744
-	VMADCVIM	$15, V2, V0, V0			// 57b02744
 	VMADCVV		V1, V2, V3			// d7812046
-	VMADCVV		V1, V2, V0			// 57802046
 	VMADCVX		X11, V2, V3			// d7c12546
-	VMADCVX		X11, V2, V0			// 57c02546
 	VMADCVI		$15, V2, V3			// d7b12746
-	VMADCVI		$15, V2, V0			// 57b02746
 	VSBCVVM		V1, V2, V0, V3			// d7812048
 	VSBCVXM		X11, V2, V0, V3			// d7c12548
 	VMSBCVVM	V1, V2, V0, V3			// d781204c
-	VMSBCVVM	V1, V2, V0, V0			// 5780204c
 	VMSBCVXM	X11, V2, V0, V3			// d7c1254c
-	VMSBCVXM	X11, V2, V0, V0			// 57c0254c
 	VMSBCVV		V1, V2, V3			// d781204e
-	VMSBCVV		V1, V2, V0			// 5780204e
 	VMSBCVX		X11, V2, V3			// d7c1254e
-	VMSBCVX		X11, V2, V0			// 57c0254e
 
 	// 31.11.5: Vector Bitwise Logical Instructions
 	VANDVV		V1, V2, V3			// d7812026
@@ -830,38 +820,38 @@ start:
 	VWMULSUVX	X10, V2, V0, V3			// d76125e8
 
 	// 31.11.13: Vector Single-Width Integer Multiply-Add Instructions
-	VMACCVV		V2, V1, V3			// d7a120b6
-	VMACCVV		V2, V1, V0, V3			// d7a120b4
-	VMACCVX		V2, X10, V3			// d76125b6
-	VMACCVX		V2, X10, V0, V3			// d76125b4
-	VNMSACVV	V2, V1, V3			// d7a120be
-	VNMSACVV	V2, V1, V0, V3			// d7a120bc
-	VNMSACVX	V2, X10, V3			// d76125be
-	VNMSACVX	V2, X10, V0, V3			// d76125bc
-	VMADDVV		V2, V1, V3			// d7a120a6
-	VMADDVV		V2, V1, V0, V3			// d7a120a4
-	VMADDVX		V2, X10, V3			// d76125a6
-	VMADDVX		V2, X10, V0, V3			// d76125a4
-	VNMSUBVV	V2, V1, V3			// d7a120ae
-	VNMSUBVV	V2, V1, V0, V3			// d7a120ac
-	VNMSUBVX	V2, X10, V3			// d76125ae
-	VNMSUBVX	V2, X10, V0, V3			// d76125ac
+	VMACCVV		V1, V2, V3			// d7a120b6
+	VMACCVV		V1, V2, V0, V3			// d7a120b4
+	VMACCVX		X10, V2, V3			// d76125b6
+	VMACCVX		X10, V2, V0, V3			// d76125b4
+	VNMSACVV	V1, V2, V3			// d7a120be
+	VNMSACVV	V1, V2, V0, V3			// d7a120bc
+	VNMSACVX	X10, V2, V3			// d76125be
+	VNMSACVX	X10, V2, V0, V3			// d76125bc
+	VMADDVV		V1, V2, V3			// d7a120a6
+	VMADDVV		V1, V2, V0, V3			// d7a120a4
+	VMADDVX		X10, V2, V3			// d76125a6
+	VMADDVX		X10, V2, V0, V3			// d76125a4
+	VNMSUBVV	V1, V2, V3			// d7a120ae
+	VNMSUBVV	V1, V2, V0, V3			// d7a120ac
+	VNMSUBVX	X10, V2, V3			// d76125ae
+	VNMSUBVX	X10, V2, V0, V3			// d76125ac
 
 	// 31.11.14: Vector Widening Integer Multiply-Add Instructions
-	VWMACCUVV	V2, V1, V3			// d7a120f2
-	VWMACCUVV	V2, V1, V0, V3			// d7a120f0
-	VWMACCUVX	V2, X10, V3			// d76125f2
-	VWMACCUVX	V2, X10, V0, V3			// d76125f0
-	VWMACCVV	V2, V1, V3			// d7a120f6
-	VWMACCVV	V2, V1, V0, V3			// d7a120f4
-	VWMACCVX	V2, X10, V3			// d76125f6
-	VWMACCVX	V2, X10, V0, V3			// d76125f4
-	VWMACCSUVV	V2, V1, V3			// d7a120fe
-	VWMACCSUVV	V2, V1, V0, V3			// d7a120fc
-	VWMACCSUVX	V2, X10, V3			// d76125fe
-	VWMACCSUVX	V2, X10, V0, V3			// d76125fc
-	VWMACCUSVX	V2, X10, V3			// d76125fa
-	VWMACCUSVX	V2, X10, V0, V3			// d76125f8
+	VWMACCUVV	V1, V2, V3			// d7a120f2
+	VWMACCUVV	V1, V2, V0, V3			// d7a120f0
+	VWMACCUVX	X10, V2, V3			// d76125f2
+	VWMACCUVX	X10, V2, V0, V3			// d76125f0
+	VWMACCVV	V1, V2, V3			// d7a120f6
+	VWMACCVV	V1, V2, V0, V3			// d7a120f4
+	VWMACCVX	X10, V2, V3			// d76125f6
+	VWMACCVX	X10, V2, V0, V3			// d76125f4
+	VWMACCSUVV	V1, V2, V3			// d7a120fe
+	VWMACCSUVV	V1, V2, V0, V3			// d7a120fc
+	VWMACCSUVX	X10, V2, V3			// d76125fe
+	VWMACCSUVX	X10, V2, V0, V3			// d76125fc
+	VWMACCUSVX	X10, V2, V3			// d76125fa
+	VWMACCUSVX	X10, V2, V0, V3			// d76125f8
 
 	// 31.11.15: Vector Integer Merge Instructions
 	VMERGEVVM	V1, V2, V0, V3			// d781205c
@@ -947,343 +937,6 @@ start:
 	VNCLIPWI	$16, V2, V3			// d73128be
 	VNCLIPWI	$16, V2, V0, V3			// d73128bc
 
-	// 31.13.2: Vector Single-Width Floating-Point Add/Subtract Instructions
-	VFADDVV		V1, V2, V3			// d7912002
-	VFADDVV		V1, V2, V0, V3			// d7912000
-	VFADDVF		F10, V2, V3			// d7512502
-	VFADDVF		F10, V2, V0, V3			// d7512500
-	VFSUBVV		V1, V2, V3			// d791200a
-	VFSUBVV		V1, V2, V0, V3			// d7912008
-	VFSUBVF		F10, V2, V3			// d751250a
-	VFSUBVF		F10, V2, V0, V3			// d7512508
-	VFRSUBVF	F10, V2, V3			// d751259e
-	VFRSUBVF	F10, V2, V0, V3			// d751259c
-
-	// 31.13.3: Vector Widening Floating-Point Add/Subtract Instructions
-	VFWADDVV	V1, V2, V3			// d79120c2
-	VFWADDVV	V1, V2, V0, V3			// d79120c0
-	VFWADDVF	F10, V2, V3			// d75125c2
-	VFWADDVF	F10, V2, V0, V3			// d75125c0
-	VFWSUBVV	V1, V2, V3			// d79120ca
-	VFWSUBVV	V1, V2, V0, V3			// d79120c8
-	VFWSUBVF	F10, V2, V3			// d75125ca
-	VFWSUBVF	F10, V2, V0, V3			// d75125c8
-	VFWADDWV	V1, V2, V3			// d79120d2
-	VFWADDWV	V1, V2, V0, V3			// d79120d0
-	VFWADDWF	F10, V2, V3			// d75125d2
-	VFWADDWF	F10, V2, V0, V3			// d75125d0
-	VFWSUBWV	V1, V2, V3			// d79120da
-	VFWSUBWV	V1, V2, V0, V3			// d79120d8
-	VFWSUBWF	F10, V2, V3			// d75125da
-	VFWSUBWF	F10, V2, V0, V3			// d75125d8
-
-	// 31.13.4: Vector Single-Width Floating-Point Multiply/Divide Instructions
-	VFMULVV		V1, V2, V3			// d7912092
-	VFMULVV		V1, V2, V0, V3			// d7912090
-	VFMULVF		F10, V2, V3			// d7512592
-	VFMULVF		F10, V2, V0, V3			// d7512590
-	VFDIVVV		V1, V2, V3			// d7912082
-	VFDIVVV		V1, V2, V0, V3			// d7912080
-	VFDIVVF		F10, V2, V3			// d7512582
-	VFDIVVF		F10, V2, V0, V3			// d7512580
-	VFRDIVVF	F10, V2, V3			// d7512586
-	VFRDIVVF	F10, V2, V0, V3			// d7512584
-
-	// 31.13.5: Vector Widening Floating-Point Multiply
-	VFWMULVV	V1, V2, V3			// d79120e2
-	VFWMULVV	V1, V2, V0, V3			// d79120e0
-	VFWMULVF	F10, V2, V3			// d75125e2
-	VFWMULVF	F10, V2, V0, V3			// d75125e0
-
-	// 31.13.6: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
-	VFMACCVV	V2, V1, V3			// d79120b2
-	VFMACCVV	V2, V1, V0, V3			// d79120b0
-	VFMACCVF	V2, F10, V3			// d75125b2
-	VFMACCVF	V2, F10, V0, V3			// d75125b0
-	VFNMACCVV	V2, V1, V3			// d79120b6
-	VFNMACCVV	V2, V1, V0, V3			// d79120b4
-	VFNMACCVF	V2, F10, V3			// d75125b6
-	VFNMACCVF	V2, F10, V0, V3			// d75125b4
-	VFMSACVV	V2, V1, V3			// d79120ba
-	VFMSACVV	V2, V1, V0, V3			// d79120b8
-	VFMSACVF	V2, F10, V3			// d75125ba
-	VFMSACVF	V2, F10, V0, V3			// d75125b8
-	VFNMSACVV	V2, V1, V3			// d79120be
-	VFNMSACVV	V2, V1, V0, V3			// d79120bc
-	VFNMSACVF	V2, F10, V3			// d75125be
-	VFNMSACVF	V2, F10, V0, V3			// d75125bc
-	VFMADDVV	V2, V1, V3			// d79120a2
-	VFMADDVV	V2, V1, V0, V3			// d79120a0
-	VFMADDVF	V2, F10, V3			// d75125a2
-	VFMADDVF	V2, F10, V0, V3			// d75125a0
-	VFNMADDVV	V2, V1, V3			// d79120a6
-	VFNMADDVV	V2, V1, V0, V3			// d79120a4
-	VFNMADDVF	V2, F10, V3			// d75125a6
-	VFNMADDVF	V2, F10, V0, V3			// d75125a4
-	VFMSUBVV	V2, V1, V3			// d79120aa
-	VFMSUBVV	V2, V1, V0, V3			// d79120a8
-	VFMSUBVF	V2, F10, V3			// d75125aa
-	VFMSUBVF	V2, F10, V0, V3			// d75125a8
-	VFNMSUBVV	V2, V1, V3			// d79120ae
-	VFNMSUBVV	V2, V1, V0, V3			// d79120ac
-	VFNMSUBVF	V2, F10, V3			// d75125ae
-	VFNMSUBVF	V2, F10, V0, V3			// d75125ac
-
-	// 31.13.7: Vector Widening Floating-Point Fused Multiply-Add Instructions
-	VFWMACCVV	V2, V1, V3			// d79120f2
-	VFWMACCVV	V2, V1, V0, V3			// d79120f0
-	VFWMACCVF	V2, F10, V3			// d75125f2
-	VFWMACCVF	V2, F10, V0, V3			// d75125f0
-	VFWNMACCVV	V2, V1, V3			// d79120f6
-	VFWNMACCVV	V2, V1, V0, V3			// d79120f4
-	VFWNMACCVF	V2, F10, V3			// d75125f6
-	VFWNMACCVF	V2, F10, V0, V3			// d75125f4
-	VFWMSACVV	V2, V1, V3			// d79120fa
-	VFWMSACVV	V2, V1, V0, V3			// d79120f8
-	VFWMSACVF	V2, F10, V3			// d75125fa
-	VFWMSACVF	V2, F10, V0, V3			// d75125f8
-	VFWNMSACVV	V2, V1, V3			// d79120fe
-	VFWNMSACVV	V2, V1, V0, V3			// d79120fc
-	VFWNMSACVF	V2, F10, V3			// d75125fe
-	VFWNMSACVF	V2, F10, V0, V3			// d75125fc
-
-	// 31.13.8: Vector Floating-Point Square-Root Instruction
-	VFSQRTV		V2, V3				// d711204e
-	VFSQRTV		V2, V0, V3			// d711204c
-
-	// 31.13.9: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
-	VFRSQRT7V	V2, V3				// d711224e
-	VFRSQRT7V	V2, V0, V3			// d711224c
-
-	// 31.13.10: Vector Floating-Point Reciprocal Estimate Instruction
-	VFREC7V		V2, V3				// d791224e
-	VFREC7V		V2, V0, V3			// d791224c
-
-	// 31.13.11: Vector Floating-Point MIN/MAX Instructions
-	VFMINVV		V1, V2, V3			// d7912012
-	VFMINVV		V1, V2, V0, V3			// d7912010
-	VFMINVF		F10, V2, V3			// d7512512
-	VFMINVF		F10, V2, V0, V3			// d7512510
-	VFMAXVV		V1, V2, V3			// d791201a
-	VFMAXVV		V1, V2, V0, V3			// d7912018
-	VFMAXVF		F10, V2, V3			// d751251a
-	VFMAXVF		F10, V2, V0, V3			// d7512518
-
-	// 31.13.12: Vector Floating-Point Sign-Injection Instructions
-	VFSGNJVV	V1, V2, V3			// d7912022
-	VFSGNJVV	V1, V2, V0, V3			// d7912020
-	VFSGNJVF	F10, V2, V3			// d7512522
-	VFSGNJVF	F10, V2, V0, V3			// d7512520
-	VFSGNJNVV	V1, V2, V3			// d7912026
-	VFSGNJNVV	V1, V2, V0, V3			// d7912024
-	VFSGNJNVF	F10, V2, V3			// d7512526
-	VFSGNJNVF	F10, V2, V0, V3			// d7512524
-	VFSGNJXVV	V1, V2, V3			// d791202a
-	VFSGNJXVV	V1, V2, V0, V3			// d7912028
-	VFSGNJXVF	F10, V2, V3			// d751252a
-	VFSGNJXVF	F10, V2, V0, V3			// d7512528
-	VFNEGV		V2, V3				// d7112126
-	VFNEGV		V2, V0, V3			// d7112124
-	VFABSV		V2, V3				// d711212a
-	VFABSV		V2, V0, V3			// d7112128
-
-	// 31.13.13: Vector Floating-Point Compare Instructions
-	VMFEQVV		V1, V2, V3			// d7912062
-	VMFEQVV		V1, V2, V0, V3			// d7912060
-	VMFEQVF		F10, V2, V3			// d7512562
-	VMFEQVF		F10, V2, V0, V3			// d7512560
-	VMFNEVV		V1, V2, V3			// d7912072
-	VMFNEVV		V1, V2, V0, V3			// d7912070
-	VMFNEVF		F10, V2, V3			// d7512572
-	VMFNEVF		F10, V2, V0, V3			// d7512570
-	VMFLTVV		V1, V2, V3			// d791206e
-	VMFLTVV		V1, V2, V0, V3			// d791206c
-	VMFLTVF		F10, V2, V3			// d751256e
-	VMFLTVF		F10, V2, V0, V3			// d751256c
-	VMFLEVV		V1, V2, V3			// d7912066
-	VMFLEVV		V1, V2, V0, V3			// d7912064
-	VMFLEVF		F10, V2, V3			// d7512566
-	VMFLEVF		F10, V2, V0, V3			// d7512564
-	VMFGTVF		F10, V2, V3			// d7512576
-	VMFGTVF		F10, V2, V0, V3			// d7512574
-	VMFGEVF		F10, V2, V3			// d751257e
-	VMFGEVF		F10, V2, V0, V3			// d751257c
-	VMFGTVV		V1, V2, V3			// d711116e
-	VMFGTVV		V1, V2, V0, V3			// d711116c
-	VMFGEVV		V1, V2, V3			// d7111166
-	VMFGEVV		V1, V2, V0, V3			// d7111164
-
-	// 31.13.14: Vector Floating-Point Classify Instruction
-	VFCLASSV	V2, V3				// d711284e
-	VFCLASSV	V2, V0, V3			// d711284c
-
-	// 31.13.15: Vector Floating-Point Merge Instruction
-	VFMERGEVFM	F10, V2, V0, V3			// d751255c
-
-	// 31.13.16: Vector Floating-Point Move Instruction
-	VFMVVF		F10, V3				// d751055e
-
-	// 31.13.17: Single-Width Floating-Point/Integer Type-Convert Instructions
-	VFCVTXUFV	V2, V3				// d711204a
-	VFCVTXUFV	V2, V0, V3			// d7112048
-	VFCVTXFV	V2, V3				// d791204a
-	VFCVTXFV	V2, V0, V3			// d7912048
-	VFCVTRTZXUFV	V2, V3				// d711234a
-	VFCVTRTZXUFV	V2, V0, V3			// d7112348
-	VFCVTRTZXFV	V2, V3				// d791234a
-	VFCVTRTZXFV	V2, V0, V3			// d7912348
-	VFCVTFXUV	V2, V3				// d711214a
-	VFCVTFXUV	V2, V0, V3			// d7112148
-	VFCVTFXV	V2, V3				// d791214a
-	VFCVTFXV	V2, V0, V3			// d7912148
-
-	// 31.13.18: Widening Floating-Point/Integer Type-Convert Instructions
-	VFWCVTXUFV	V2, V3				// d711244a
-	VFWCVTXUFV	V2, V0, V3			// d7112448
-	VFWCVTXFV	V2, V3				// d791244a
-	VFWCVTXFV	V2, V0, V3			// d7912448
-	VFWCVTRTZXUFV	V2, V3				// d711274a
-	VFWCVTRTZXUFV	V2, V0, V3			// d7112748
-	VFWCVTRTZXFV	V2, V3				// d791274a
-	VFWCVTRTZXFV	V2, V0, V3			// d7912748
-	VFWCVTFXUV	V2, V3				// d711254a
-	VFWCVTFXUV	V2, V0, V3			// d7112548
-	VFWCVTFXV	V2, V3				// d791254a
-	VFWCVTFXV	V2, V0, V3			// d7912548
-	VFWCVTFFV	V2, V3				// d711264a
-	VFWCVTFFV	V2, V0, V3			// d7112648
-
-	// 31.13.19: Narrowing Floating-Point/Integer Type-Convert Instructions
-	VFNCVTXUFW	V2, V3				// d711284a
-	VFNCVTXUFW	V2, V0, V3			// d7112848
-	VFNCVTXFW	V2, V3				// d791284a
-	VFNCVTXFW	V2, V0, V3			// d7912848
-	VFNCVTRTZXUFW	V2, V3				// d7112b4a
-	VFNCVTRTZXUFW	V2, V0, V3			// d7112b48
-	VFNCVTRTZXFW	V2, V3				// d7912b4a
-	VFNCVTRTZXFW	V2, V0, V3			// d7912b48
-	VFNCVTFXUW	V2, V3				// d711294a
-	VFNCVTFXUW	V2, V0, V3			// d7112948
-	VFNCVTFXW	V2, V3				// d791294a
-	VFNCVTFXW	V2, V0, V3			// d7912948
-	VFNCVTFFW	V2, V3				// d7112a4a
-	VFNCVTFFW	V2, V0, V3			// d7112a48
-	VFNCVTRODFFW	V2, V3				// d7912a4a
-	VFNCVTRODFFW	V2, V0, V3			// d7912a48
-
-	// 31.14.1: Vector Single-Width Integer Reduction Instructions
-	VREDSUMVS	V1, V2, V3			// d7a12002
-	VREDSUMVS	V1, V2, V0, V3			// d7a12000
-	VREDMAXUVS	V1, V2, V3			// d7a1201a
-	VREDMAXUVS	V1, V2, V0, V3			// d7a12018
-	VREDMAXVS	V1, V2, V3			// d7a1201e
-	VREDMAXVS	V1, V2, V0, V3			// d7a1201c
-	VREDMINUVS	V1, V2, V3			// d7a12012
-	VREDMINUVS	V1, V2, V0, V3			// d7a12010
-	VREDMINVS	V1, V2, V3			// d7a12016
-	VREDMINVS	V1, V2, V0, V3			// d7a12014
-	VREDANDVS	V1, V2, V3			// d7a12006
-	VREDANDVS	V1, V2, V0, V3			// d7a12004
-	VREDORVS	V1, V2, V3			// d7a1200a
-	VREDORVS	V1, V2, V0, V3			// d7a12008
-	VREDXORVS	V1, V2, V3			// d7a1200e
-	VREDXORVS	V1, V2, V0, V3			// d7a1200c
-
-	// 31.14.2: Vector Widening Integer Reduction Instructions
-	VWREDSUMUVS	V1, V2, V3			// d78120c2
-	VWREDSUMUVS	V1, V2, V0, V3			// d78120c0
-	VWREDSUMVS	V1, V2, V3			// d78120c6
-	VWREDSUMVS	V1, V2, V0, V3			// d78120c4
-
-	// 31.14.3: Vector Single-Width Floating-Point Reduction Instructions
-	VFREDOSUMVS	V1, V2, V3			// d791200e
-	VFREDOSUMVS	V1, V2, V0, V3			// d791200c
-	VFREDUSUMVS	V1, V2, V3			// d7912006
-	VFREDUSUMVS	V1, V2, V0, V3			// d7912004
-	VFREDMAXVS	V1, V2, V3			// d791201e
-	VFREDMAXVS	V1, V2, V0, V3			// d791201c
-	VFREDMINVS	V1, V2, V3			// d7912016
-	VFREDMINVS	V1, V2, V0, V3			// d7912014
-
-	// 31.14.4: Vector Widening Floating-Point Reduction Instructions
-	VFWREDOSUMVS	V1, V2, V3			// d79120ce
-	VFWREDOSUMVS	V1, V2, V0, V3			// d79120cc
-	VFWREDUSUMVS	V1, V2, V3			// d79120c6
-	VFWREDUSUMVS	V1, V2, V0, V3			// d79120c4
-
-	// 31.15: Vector Mask Instructions
-	VMANDMM		V1, V2, V3			// d7a12066
-	VMNANDMM	V1, V2, V3			// d7a12076
-	VMANDNMM	V1, V2, V3			// d7a12062
-	VMXORMM		V1, V2, V3			// d7a1206e
-	VMORMM		V1, V2, V3			// d7a1206a
-	VMNORMM		V1, V2, V3			// d7a1207a
-	VMORNMM		V1, V2, V3			// d7a12072
-	VMXNORMM	V1, V2, V3			// d7a1207e
-	VMMVM		V2, V3				// d7212166
-	VMCLRM		V3				// d7a1316e
-	VMSETM		V3				// d7a1317e
-	VMNOTM		V2, V3				// d7212176
-	VCPOPM		V2, X10				// 57252842
-	VCPOPM		V2, V0, X10			// 57252840
-	VFIRSTM		V2, X10				// 57a52842
-	VFIRSTM		V2, V0, X10			// 57a52840
-	VMSBFM		V2, V3				// d7a12052
-	VMSBFM		V2, V0, V3			// d7a12050
-	VMSIFM		V2, V3				// d7a12152
-	VMSIFM		V2, V0, V3			// d7a12150
-	VMSOFM		V2, V3				// d7212152
-	VMSOFM		V2, V0, V3			// d7212150
-	VIOTAM		V2, V3				// d7212852
-	VIOTAM		V2, V0, V3			// d7212850
-	VIDV		V3				// d7a10852
-	VIDV		V0, V3				// d7a10850
-
-	// 31.16.1: Integer Scalar Move Instructions
-	VMVXS		V2, X10				// 57252042
-	VMVSX		X10, V2				// 57610542
-
-	// 31.16.2: Floating-Point Scalar Move Instructions
-	VFMVFS		V2, F10				// 57152042
-	VFMVSF		F10, V2				// 57510542
-
-	// 31.16.3: Vector Slide Instructions
-	VSLIDEUPVX	X10, V2, V3			// d741253a
-	VSLIDEUPVX	X10, V2, V0, V3			// d7412538
-	VSLIDEUPVI	$16, V2, V3			// d731283a
-	VSLIDEUPVI	$16, V2, V0, V3			// d7312838
-	VSLIDEDOWNVX	X10, V2, V3			// d741253e
-	VSLIDEDOWNVX	X10, V2, V0, V3			// d741253c
-	VSLIDEDOWNVI	$16, V2, V3			// d731283e
-	VSLIDEDOWNVI	$16, V2, V0, V3			// d731283c
-	VSLIDE1UPVX	X10, V2, V3			// d761253a
-	VSLIDE1UPVX	X10, V2, V0, V3			// d7612538
-	VFSLIDE1UPVF	F10, V2, V3			// d751253a
-	VFSLIDE1UPVF	F10, V2, V0, V3			// d7512538
-	VSLIDE1DOWNVX	X10, V2, V3			// d761253e
-	VSLIDE1DOWNVX	X10, V2, V0, V3			// d761253c
-	VFSLIDE1DOWNVF	F10, V2, V3			// d751253e
-	VFSLIDE1DOWNVF	F10, V2, V0, V3			// d751253c
-
-	// 31.16.4: Vector Register Gather Instructions
-	VRGATHERVV	V1, V2, V3			// d7812032
-	VRGATHERVV	V1, V2, V0, V3			// d7812030
-	VRGATHEREI16VV	V1, V2, V3			// d781203a
-	VRGATHEREI16VV	V1, V2, V0, V3			// d7812038
-	VRGATHERVX	X10, V2, V3			// d7412532
-	VRGATHERVX	X10, V2, V0, V3			// d7412530
-	VRGATHERVI	$16, V2, V3			// d7312832
-	VRGATHERVI	$16, V2, V0, V3			// d7312830
-
-	// 31.16.5: Vector Compress Instruction
-	VCOMPRESSVM	V1, V2, V3			// d7a1205e
-
-	// 31.16.6: Whole Vector Register Move
-	VMV1RV		V2, V1				// d730209e
-	VMV2RV		V12, V10			// 57b5c09e
-	VMV4RV		V8, V4				// 57b2819e
-	VMV8RV		V8, V0				// 57b0839e
-
 	//
 	// Privileged ISA
 	//
diff --git a/src/cmd/asm/internal/asm/testdata/riscv64error.s b/src/cmd/asm/internal/asm/testdata/riscv64error.s
index 4e6afa0ac2a619..6a7c9b944454f8 100644
--- a/src/cmd/asm/internal/asm/testdata/riscv64error.s
+++ b/src/cmd/asm/internal/asm/testdata/riscv64error.s
@@ -50,340 +50,208 @@ TEXT errors(SB),$0
 	//
 	// "V" Standard Extension for Vector Operations, Version 1.0
 	//
-	VSETIVLI	X10, E32, M2, TA, MA, X12	// ERROR "expected immediate value"
-	VLE8V		(X10), V1, V3			// ERROR "invalid vector mask register"
-	VSE8V		V3, V1, (X10)			// ERROR "invalid vector mask register"
-	VLSE8V		(X10), X10, V1, V3		// ERROR "invalid vector mask register"
-	VSSE8V		V3, X11, V1, (X10)		// ERROR "invalid vector mask register"
-	VLUXEI8V	(X10), V2, V1, V3		// ERROR "invalid vector mask register"
-	VSUXEI8V	V3, V2, V1, (X10)		// ERROR "invalid vector mask register"
-	VLOXEI8V	(X10), V2, V1, V3		// ERROR "invalid vector mask register"
-	VSOXEI8V	V3, V2, V1, (X10)		// ERROR "invalid vector mask register"
-	VL1RV		(X10), V0, V3			// ERROR "too many operands for instruction"
-	VS1RV		V3, V0, (X11)			// ERROR "too many operands for instruction"
-	VADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VADDVX		X10, V2, V1, V3			// ERROR "invalid vector mask register"
-	VADDVI		$15, V4, V1, V2			// ERROR "invalid vector mask register"
-	VSUBVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSUBVX		X10, V2, V1, V3			// ERROR "invalid vector mask register"
-	VRSUBVX		X10, V2, V1, V3			// ERROR "invalid vector mask register"
-	VRSUBVI		$15, V4, V1, V2			// ERROR "invalid vector mask register"
-	VNEGV		V2, V3, V4			// ERROR "invalid vector mask register"
-	VWADDUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDUWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDUWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBUWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBUWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDWV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWADDWX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBWV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWSUBWX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWCVTXXV	V2, V1, V3			// ERROR "invalid vector mask register"
-	VWCVTUXXV	V2, V1, V3			// ERROR "invalid vector mask register"
-	VZEXTVF2	V2, V3, V4			// ERROR "invalid vector mask register"
-	VSEXTVF2	V2, V3, V4			// ERROR "invalid vector mask register"
-	VZEXTVF4	V2, V3, V4			// ERROR "invalid vector mask register"
-	VSEXTVF4	V2, V3, V4			// ERROR "invalid vector mask register"
-	VZEXTVF8	V2, V3, V4			// ERROR "invalid vector mask register"
-	VSEXTVF8	V2, V3, V4			// ERROR "invalid vector mask register"
-	VADCVVM		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VADCVVM		V1, V2, V3			// ERROR "invalid vector mask register"
-	VADCVVM		V1, V2, V0, V0			// ERROR "invalid destination register V0"
-	VADCVXM		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VADCVXM		X10, V2, V3			// ERROR "invalid vector mask register"
-	VADCVXM		X10, V2, V0, V0			// ERROR "invalid destination register V0"
-	VADCVIM		$15, V2, V1, V3			// ERROR "invalid vector mask register"
-	VADCVIM		$15, V2, V3			// ERROR "invalid vector mask register"
-	VADCVIM		$15, V2, V0, V0			// ERROR "invalid destination register V0"
-	VMADCVVM	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMADCVVM	V1, V2, V3			// ERROR "invalid vector mask register"
-	VMADCVXM	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMADCVXM	X10, V2, V3			// ERROR "invalid vector mask register"
-	VMADCVIM	$15, V2, V1, V3			// ERROR "invalid vector mask register"
-	VMADCVIM	$15, V2, V3			// ERROR "invalid vector mask register"
-	VSBCVVM		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSBCVVM		V1, V2, V3			// ERROR "invalid vector mask register"
-	VSBCVVM		V1, V2, V0, V0			// ERROR "invalid destination register V0"
-	VSBCVXM		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSBCVXM		X10, V2, V3			// ERROR "invalid vector mask register"
-	VSBCVXM		X10, V2, V0, V0			// ERROR "invalid destination register V0"
-	VMSBCVVM	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSBCVVM	V1, V2, V3			// ERROR "invalid vector mask register"
-	VMSBCVXM	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSBCVXM	X10, V2, V3			// ERROR "invalid vector mask register"
-	VANDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VANDVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VANDVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VORVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VORVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VORVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VXORVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VXORVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VXORVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNOTV		V1, V2, V3			// ERROR "invalid vector mask register"
-	VSLLVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLLVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLLVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRLVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRLVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRLVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRAVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRAVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSRAVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRLWV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRLWX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRLWI		$31, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRAWV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRAWX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNSRAWI		$31, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCVTXXW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSEQVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSEQVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSEQVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSNEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSNEVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSNEVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEUVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLEVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTUVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGTVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGEUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSLTUVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGEVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSGEUVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMINUVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMINUVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMINVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMINVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMAXUVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMAXUVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMAXVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMAXVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHSUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMULHSUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VDIVUVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VDIVUVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VDIVVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VDIVVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREMUVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREMUVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREMVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREMVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULSUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMULSUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMACCVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMACCVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNMSACVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNMSACVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMADDVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNMSUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNMSUBVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCSUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCSUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWMACCUSVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMERGEVVM	V1, V2, V3			// ERROR "invalid vector mask register"
-	VMERGEVVM	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMERGEVXM	X10, V2, V3			// ERROR "invalid vector mask register"
-	VMERGEVXM	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMERGEVIM	$15, V2, V3			// ERROR "invalid vector mask register"
-	VMERGEVIM	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMVVV		V1, V2, V3			// ERROR "too many operands for instruction"
-	VMVVX		X10, V2, V3			// ERROR "too many operands for instruction"
-	VMVVI		$15, V2, V3			// ERROR "too many operands for instruction"
-	VSADDUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSADDUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSADDUVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSADDVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSADDVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSUBUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSUBUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSUBVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSUBVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VAADDUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VAADDUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VAADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VAADDVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VASUBUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VASUBUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VASUBVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VASUBVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSMULVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSMULVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRLVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRLVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRLVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRAVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRAVX		X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSSRAVI		$15, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPUWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPUWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPUWI	$16, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VNCLIPWI	$16, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFADDVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFADDVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSUBVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSUBVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFRSUBVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWADDVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWSUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWSUBVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWADDWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWADDWF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWSUBWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWSUBWF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMULVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMULVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFDIVVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFDIVVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFRDIVVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWMULVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWMULVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMACCVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFMACCVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFNMACCVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFNMACCVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFMSACVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFMSACVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFNMSACVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFNMSACVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFMADDVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFMADDVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFNMADDVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFNMADDVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFMSUBVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFMSUBVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFNMSUBVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFNMSUBVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFWMACCVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFWMACCVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFWNMACCVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFWNMACCVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFWMSACVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFWMSACVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFWNMSACVV	V2, V1, V4, V3			// ERROR "invalid vector mask register"
-	VFWNMSACVF	V2, F10, V4, V3			// ERROR "invalid vector mask register"
-	VFSQRTV		V2, V4, V3			// ERROR "invalid vector mask register"
-	VFRSQRT7V	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFREC7V		V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMINVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMINVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMAXVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMAXVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJNVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJNVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJXVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSGNJXVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNEGV		V2, V4, V3			// ERROR "invalid vector mask register"
-	VFABSV		V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFEQVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFEQVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFNEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFNEVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFLTVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFLTVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFLEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFLEVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFGTVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFGEVF		F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFGTVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VMFGEVV		V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFMERGEVFM	X10, V2, V3			// ERROR "invalid vector mask register"
-	VFMERGEVFM	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTXUFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTXFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTRTZXUFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTRTZXFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTFXUV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFCVTFXV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTXUFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTXFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTRTZXUFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTRTZXFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTFXUV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTFXV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWCVTFFV	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTXUFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTXFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTRTZXUFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTRTZXFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTFXUW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTFXW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTFFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VFNCVTRODFFW	V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDSUMVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDMAXUVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDMAXVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDMINUVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDMINVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDANDVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDORVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VREDXORVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWREDSUMUVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VWREDSUMVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFREDOSUMVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFREDUSUMVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFREDMAXVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFREDMINVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFWREDOSUMVS	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VCPOPM		V2, V4, X10			// ERROR "invalid vector mask register"
-	VFIRSTM		V2, V4, X10			// ERROR "invalid vector mask register"
-	VMSBFM		V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSIFM		V2, V4, V3			// ERROR "invalid vector mask register"
-	VMSOFM		V2, V4, V3			// ERROR "invalid vector mask register"
-	VIOTAM		V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDEUPVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDEUPVI	$16, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDEDOWNVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDEDOWNVI	$16, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDE1UPVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSLIDE1UPVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VSLIDE1DOWNVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VFSLIDE1DOWNVF	F10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VRGATHERVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VRGATHEREI16VV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
-	VRGATHERVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
-	VRGATHERVI	$16, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSETIVLI X10, E32, M2, TA, MA, X12	// ERROR "expected immediate value"
+	VLE8V	(X10), V1, V3			// ERROR "invalid vector mask register"
+	VSE8V	V3, V1, (X10)			// ERROR "invalid vector mask register"
+	VLSE8V	(X10), X10, V1, V3		// ERROR "invalid vector mask register"
+	VSSE8V	V3, X11, V1, (X10)		// ERROR "invalid vector mask register"
+	VLUXEI8V (X10), V2, V1, V3		// ERROR "invalid vector mask register"
+	VSUXEI8V V3, V2, V1, (X10)		// ERROR "invalid vector mask register"
+	VLOXEI8V (X10), V2, V1, V3		// ERROR "invalid vector mask register"
+	VSOXEI8V V3, V2, V1, (X10)		// ERROR "invalid vector mask register"
+	VL1RV	(X10), V0, V3			// ERROR "too many operands for instruction"
+	VS1RV	V3, V0, (X11)			// ERROR "too many operands for instruction"
+	VADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VADDVX	X10, V2, V1, V3			// ERROR "invalid vector mask register"
+	VADDVI	$15, V4, V1, V2			// ERROR "invalid vector mask register"
+	VSUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSUBVX	X10, V2, V1, V3			// ERROR "invalid vector mask register"
+	VRSUBVX	X10, V2, V1, V3			// ERROR "invalid vector mask register"
+	VRSUBVI	$15, V4, V1, V2			// ERROR "invalid vector mask register"
+	VNEGV	V2, V3, V4			// ERROR "invalid vector mask register"
+	VWADDUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWADDUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWSUBUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWADDVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWADDUWV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWADDUWX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWSUBUWV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBUWX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWADDWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWADDWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWSUBWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWCVTXXV V2, V1, V3			// ERROR "invalid vector mask register"
+	VWCVTUXXV V2, V1, V3			// ERROR "invalid vector mask register"
+	VZEXTVF2 V2, V3, V4			// ERROR "invalid vector mask register"
+	VSEXTVF2 V2, V3, V4			// ERROR "invalid vector mask register"
+	VZEXTVF4 V2, V3, V4			// ERROR "invalid vector mask register"
+	VSEXTVF4 V2, V3, V4			// ERROR "invalid vector mask register"
+	VZEXTVF8 V2, V3, V4			// ERROR "invalid vector mask register"
+	VSEXTVF8 V2, V3, V4			// ERROR "invalid vector mask register"
+	VADCVVM	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VADCVVM	V1, V2, V3			// ERROR "invalid vector mask register"
+	VADCVXM	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VADCVXM	X10, V2, V3			// ERROR "invalid vector mask register"
+	VADCVIM	$15, V2, V1, V3			// ERROR "invalid vector mask register"
+	VADCVIM	$15, V2, V3			// ERROR "invalid vector mask register"
+	VMADCVVM V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMADCVVM V1, V2, V3			// ERROR "invalid vector mask register"
+	VMADCVXM X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMADCVXM X10, V2, V3			// ERROR "invalid vector mask register"
+	VMADCVIM $15, V2, V1, V3		// ERROR "invalid vector mask register"
+	VMADCVIM $15, V2, V3			// ERROR "invalid vector mask register"
+	VSBCVVM	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSBCVVM	V1, V2, V3			// ERROR "invalid vector mask register"
+	VSBCVXM	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSBCVXM	X10, V2, V3			// ERROR "invalid vector mask register"
+	VMSBCVVM V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSBCVVM V1, V2, V3			// ERROR "invalid vector mask register"
+	VMSBCVXM X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSBCVXM X10, V2, V3			// ERROR "invalid vector mask register"
+	VANDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VANDVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VANDVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VORVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VORVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VORVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VXORVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VXORVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VXORVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNOTV	V1, V2, V3			// ERROR "invalid vector mask register"
+	VSLLVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSLLVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSLLVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRLVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRLVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRLVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRAVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRAVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSRAVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRLWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRLWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRLWI	$31, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRAWV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRAWX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNSRAWI	$31, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNCVTXXW V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSEQVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSEQVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSEQVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSNEVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSNEVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSNEVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLTUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLTUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSLTVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLTVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLEUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLEUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSLEUVI $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSLEVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLEVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLEVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGTUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGTUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSGTUVI $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSGTVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGTVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGTVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGEVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGEUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLTVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSLTUVI $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMSGEVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMSGEUVI $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMINUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMINUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMINVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMINVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMAXUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMAXUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMAXVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMAXVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULHVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULHVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULHUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMULHUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMULHSUVV V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMULHSUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VDIVUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VDIVUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VDIVVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VDIVVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VREMUVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VREMUVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VREMVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VREMVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWMULVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWMULVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWMULUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWMULUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMULSUVV V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMULSUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMACCVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMACCVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNMSACVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNMSACVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VMADDVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNMSUBVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNMSUBVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCUVV V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VWMACCVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCSUVV V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCSUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VWMACCUSVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMERGEVVM V1, V2, V3			// ERROR "invalid vector mask register"
+	VMERGEVVM V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMERGEVXM X10, V2, V3			// ERROR "invalid vector mask register"
+	VMERGEVXM X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMERGEVIM $15, V2, V3			// ERROR "invalid vector mask register"
+	VMERGEVIM $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VMVVV	V1, V2, V3			// ERROR "too many operands for instruction"
+	VMVVX	X10, V2, V3			// ERROR "too many operands for instruction"
+	VMVVI	$15, V2, V3			// ERROR "too many operands for instruction"
+	VSADDUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSADDUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VSADDUVI $15, V2, V4, V3		// ERROR "invalid vector mask register"
+	VSADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSADDVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSADDVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSUBUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSUBUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VSSUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSUBVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VAADDUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VAADDUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VAADDVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VAADDVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VASUBUVV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VASUBUVX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VASUBVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VASUBVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSMULVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSMULVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRLVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRLVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRLVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRAVV	V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRAVX	X10, V2, V4, V3			// ERROR "invalid vector mask register"
+	VSSRAVI	$15, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNCLIPUWV V1, V2, V4, V3		// ERROR "invalid vector mask register"
+	VNCLIPUWX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VNCLIPUWI $16, V2, V4, V3		// ERROR "invalid vector mask register"
+	VNCLIPWV V1, V2, V4, V3			// ERROR "invalid vector mask register"
+	VNCLIPWX X10, V2, V4, V3		// ERROR "invalid vector mask register"
+	VNCLIPWI $16, V2, V4, V3		// ERROR "invalid vector mask register"
 
 	RET
diff --git a/src/cmd/asm/internal/asm/testdata/riscv64validation.s b/src/cmd/asm/internal/asm/testdata/riscv64validation.s
index 55bf518e68bba5..c6f71e64fb4c59 100644
--- a/src/cmd/asm/internal/asm/testdata/riscv64validation.s
+++ b/src/cmd/asm/internal/asm/testdata/riscv64validation.s
@@ -15,417 +15,259 @@ TEXT validation(SB),$0
 	//
 	// "V" Standard Extension for Vector Operations, Version 1.0
 	//
-	VSETVLI		$32, E16, M1, TU, MU, X12	// ERROR "must be in range [0, 31] (5 bits)"
-	VSETVLI		$-1, E32, M2, TA, MA, X12	// ERROR "must be in range [0, 31] (5 bits)"
-	VSETVL		X10, X11			// ERROR "expected integer register in rs1 position"
-	VLE8V		(X10), X10			// ERROR "expected vector register in vd position"
-	VLE8V		(V1), V3			// ERROR "expected integer register in rs1 position"
-	VSE8V		X10, (X10)			// ERROR "expected vector register in vs1 position"
-	VSE8V		V3, (V1)			// ERROR "expected integer register in rd position"
-	VLSE8V		(X10), V3			// ERROR "expected integer register in rs2 position"
-	VLSE8V		(X10), X10, X11			// ERROR "expected vector register in vd position"
-	VLSE8V		(V1), X10, V3			// ERROR "expected integer register in rs1 position"
-	VLSE8V		(X10), V1, V0, V3		// ERROR "expected integer register in rs2 position"
-	VSSE8V		V3, (X10)			// ERROR "expected integer register in rs2 position"
-	VSSE8V		X10, X11, (X10)			// ERROR "expected vector register in vd position"
-	VSSE8V		V3, X11, (V1)			// ERROR "expected integer register in rs1 position"
-	VSSE8V		V3, V1, V0, (X10)		// ERROR "expected integer register in rs2 position"
-	VLUXEI8V	(X10), V2, X11			// ERROR "expected vector register in vd position"
-	VLUXEI8V	(X10), V2, X11			// ERROR "expected vector register in vd position"
-	VLUXEI8V	(V1), V2, V3			// ERROR "expected integer register in rs1 position"
-	VLUXEI8V	(X10), X11, V0, V3		// ERROR "expected vector register in vs2 position"
-	VSUXEI8V	X10, V2, (X10)			// ERROR "expected vector register in vd position"
-	VSUXEI8V	V3, V2, (V1)			// ERROR "expected integer register in rs1 position"
-	VSUXEI8V	V3, X11, V0, (X10)		// ERROR "expected vector register in vs2 position"
-	VLOXEI8V	(X10), V2, X11			// ERROR "expected vector register in vd position"
-	VLOXEI8V	(V1), V2, V3			// ERROR "expected integer register in rs1 position"
-	VLOXEI8V	(X10), X11, V0, V3		// ERROR "expected vector register in vs2 position"
-	VSOXEI8V	X10, V2, (X10)			// ERROR "expected vector register in vd position"
-	VSOXEI8V	V3, V2, (V1)			// ERROR "expected integer register in rs1 position"
-	VSOXEI8V	V3, X11, V0, (X10)		// ERROR "expected vector register in vs2 position"
-	VL1RV		(X10), X10			// ERROR "expected vector register in vd position"
-	VL1RV		(V1), V3			// ERROR "expected integer register in rs1 position"
-	VS1RV		X11, (X11)			// ERROR "expected vector register in vs1 position"
-	VS1RV		V3, (V1)			// ERROR "expected integer register in rd position"
-	VADDVV		V1, X10, V3			// ERROR "expected vector register in vs2 position"
-	VADDVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VADDVI		$16, V4, V2			// ERROR "signed immediate 16 must be in range [-16, 15] (5 bits)"
-	VADDVI		$-17, V4, V2			// ERROR "signed immediate -17 must be in range [-16, 15] (5 bits)"
-	VSUBVV		V1, X10, V3			// ERROR "expected vector register in vs2 position"
-	VSUBVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VRSUBVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VRSUBVI		$16, V4, V2			// ERROR "signed immediate 16 must be in range [-16, 15] (5 bits)"
-	VRSUBVI		$-17, V4, V2			// ERROR "signed immediate -17 must be in range [-16, 15] (5 bits)"
-	VNEGV		X10, V3				// ERROR "expected vector register in vs2 position"
-	VNEGV		V2				// ERROR "expected vector register in vd position"
-	VWADDUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWADDUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWSUBUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWSUBUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWADDVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWADDVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWSUBVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWSUBVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWADDUWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWADDUWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWSUBUWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWSUBUWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWADDWV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWADDWX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWSUBWV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWSUBWX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWCVTXXV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VWCVTUXXV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VZEXTVF2	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VZEXTVF2	X10, V3				// ERROR "expected vector register in vs2 position"
-	VSEXTVF2	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VSEXTVF2	X10, V3				// ERROR "expected vector register in vs2 position"
-	VZEXTVF4	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VZEXTVF4	X10, V3				// ERROR "expected vector register in vs2 position"
-	VSEXTVF4	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VSEXTVF4	X10, V3				// ERROR "expected vector register in vs2 position"
-	VZEXTVF8	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VZEXTVF8	X10, V3				// ERROR "expected vector register in vs2 position"
-	VSEXTVF8	V2, V0, V3, V4			// ERROR "expected no register in rs3"
-	VSEXTVF8	X10, V3				// ERROR "expected vector register in vs2 position"
-	VADCVVM		X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
-	VADCVXM		V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
-	VADCVIM		$16, V2, V0, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VADCVIM		$-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMADCVVM	X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
-	VMADCVXM	V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
-	VMADCVIM	$16, V2, V0, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMADCVIM	$-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMADCVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMADCVV		V1, V2, V0, V3			// ERROR "expected no register in rs3"
-	VMADCVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMADCVX		X10, V2, V0, V3			// ERROR "expected no register in rs3"
-	VMADCVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMADCVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMADCVI		$15, V2, V0, V3			// ERROR "expected no register in rs3"
-	VSBCVVM		X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
-	VSBCVXM		V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
-	VMSBCVVM	X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
-	VMSBCVXM	V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
-	VMSBCVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSBCVV		V1, V2, V0, V3			// ERROR "expected no register in rs3"
-	VMSBCVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSBCVX		X10, V2, V0, V3			// ERROR "expected no register in rs3"
-	VANDVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VANDVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VANDVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VANDVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VORVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VORVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VORVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VORVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VXORVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VXORVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VXORVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VXORVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VNOTV		V3				// ERROR "expected vector register in vd position"
-	VNOTV		X10, V3				// ERROR "expected vector register in vs2 position"
-	VSLLVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSLLVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSLLVI		$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VSLLVI		$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VSRLVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSRLVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSRLVI		$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VSRLVI		$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VSRAVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSRAVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSRAVI		$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VSRAVI		$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VNSRLWV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VNSRLWX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNSRLWI		$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VNSRLWI		$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VNSRAWV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VNSRAWX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNSRAWI		$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VNSRAWI		$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VNCVTXXW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VMSEQVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSEQVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSEQVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSEQVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSNEVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSNEVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSNEVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSNEVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSLTUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSLTUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSLTVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSLTVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSLEUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSLEUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSLEUVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSLEUVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSLEVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMSLEVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSLEVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSLEVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSGTUVV	X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VMSGTUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSGTUVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSGTUVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSGTVV		X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VMSGTVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMSGTVI		$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSGTVI		$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSGEVV		X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VMSGEUVV	X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VMSLTVI		$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSLTVI		$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSLTUVI	$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSLTUVI	$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSGEVI		$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSGEVI		$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMSGEUVI	$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMSGEUVI	$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMINUVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMINUVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMINVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMINVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMAXUVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMAXUVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMAXVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMAXVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMULVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMULVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMULHVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMULHVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMULHUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMULHUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMULHSUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMULHSUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VDIVUVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VDIVUVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VDIVVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VDIVVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VREMUVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREMUVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VREMVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREMVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMULVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWMULVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMULUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWMULUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMULSUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWMULSUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMACCVV		V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VMACCVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNMSACVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VNMSACVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMADDVV		V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VMADDVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNMSUBVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VNMSUBVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMACCUVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VWMACCUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMACCVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VWMACCVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMACCSUVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VWMACCSUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VWMACCUSVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VMERGEVVM	X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
-	VMERGEVXM	V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
-	VMERGEVIM	$16, V2, V0, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMERGEVIM	$-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VMVVV		X10, V3				// ERROR "expected vector register in vs1 position"
-	VMVVX		V1, V2				// ERROR "expected integer register in rs1 position"
-	VMVVI		$16, V2				// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VMVVI		$-17, V2			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VSADDUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSADDUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSADDUVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
-	VSADDUVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
-	VSSUBUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSSUBUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VAADDUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VAADDUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VAADDVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VAADDVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VASUBUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VASUBUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VASUBVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VASUBVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSMULVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSMULVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSSRLVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSSRLVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSSRLVI		$32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
-	VSSRLVI		$-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
-	VSSRAVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VSSRAVX		V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSSRAVI		$32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
-	VSSRAVI		$-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
-	VNCLIPUWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VNCLIPUWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNCLIPUWI	$32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
-	VNCLIPUWI	$-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
-	VNCLIPWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VNCLIPWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VNCLIPWI	$32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
-	VNCLIPWI	$-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
-	VFADDVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFADDVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFSUBVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFSUBVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFRSUBVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFWADDVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWADDVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFWSUBVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWSUBVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFWADDWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWADDWF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFWSUBWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWSUBWF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFMULVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFMULVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFDIVVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFDIVVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFRDIVVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFWMULVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWMULVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFMACCVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFMACCVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFNMACCVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFNMACCVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFMSACVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFMSACVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFNMSACVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFNMSACVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFMADDVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFMADDVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFNMADDVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFNMADDVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFMSUBVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFMSUBVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFNMSUBVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFNMSUBVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFWMACCVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFWMACCVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFWNMACCVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFWNMACCVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFWMSACVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFWMSACVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFWNMSACVV	V2, X10, V3			// ERROR "expected vector register in vs1 position"
-	VFWNMSACVF	V2, X10, V3			// ERROR "expected float register in rs1 position"
-	VFSQRTV		X10, V3				// ERROR "expected vector register in vs2 position"
-	VFRSQRT7V	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFREC7V		X10, V3				// ERROR "expected vector register in vs2 position"
-	VFMINVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFMINVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFMAXVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFMAXVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFSGNJVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFSGNJVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFSGNJNVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFSGNJNVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFSGNJXVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFSGNJXVF	X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VFNEGV		V2, X10				// ERROR "expected vector register in vd position"
-	VFABSV		V2, X10				// ERROR "expected vector register in vd position"
-	VMFEQVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMFEQVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFNEVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMFNEVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFLTVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMFLTVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFLEVV		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMFLEVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFGTVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFGEVF		X10, V2, V3			// ERROR "expected float register in rs1 position"
-	VMFGTVV		X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VMFGEVV		X10, V2, V3			// ERROR "expected vector register in vs2 position"
-	VFCLASSV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFMERGEVFM	X10, V2, V0, V3			// ERROR "expected float register in rs1 position"
-	VFMVVF		X10, V3				// ERROR "expected float register in rs1 position"
-	VFCVTXUFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFCVTXFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFCVTRTZXUFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFCVTRTZXFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFCVTFXUV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFCVTFXV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTXUFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTXFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTRTZXUFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTRTZXFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTFXUV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTFXV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFWCVTFFV	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTXUFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTXFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTRTZXUFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTRTZXFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTFXUW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTFXW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTFFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VFNCVTRODFFW	X10, V3				// ERROR "expected vector register in vs2 position"
-	VREDSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDMAXUVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDMAXVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDMINUVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDMINVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDANDVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDORVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VREDXORVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWREDSUMUVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VWREDSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFREDOSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFREDUSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFREDMAXVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFREDMINVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWREDOSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VFWREDUSUMVS	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMANDMM		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMNANDMM	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMANDNMM	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMXORMM		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMORMM		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMNORMM		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMORNMM		X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMXNORMM	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMMVM		V3, X10				// ERROR "expected vector register in vd position"
-	VMNOTM		V3, X10				// ERROR "expected vector register in vd position"
-	VCPOPM		V2, V1				// ERROR "expected integer register in rd position"
-	VCPOPM		X11, X10			// ERROR "expected vector register in vs2 position"
-	VFIRSTM		V2, V1				// ERROR "expected integer register in rd position"
-	VFIRSTM		X11, X10			// ERROR "expected vector register in vs2 position"
-	VMSBFM		X10, V3				// ERROR "expected vector register in vs2 position"
-	VMSIFM		X10, V3				// ERROR "expected vector register in vs2 position"
-	VMSOFM		X10, V3				// ERROR "expected vector register in vs2 position"
-	VIOTAM		X10, V3				// ERROR "expected vector register in vs2 position"
-	VIDV		X10				// ERROR "expected vector register in vd position"
-	VMVXS		X11, X10			// ERROR "expected vector register in vs2 position"
-	VMVXS		V2, V1				// ERROR "expected integer register in rd position"
-	VMVSX		X11, X10			// ERROR "expected vector register in vd position"
-	VMVSX		V2, V1				// ERROR "expected integer register in rs2 position"
-	VFMVFS		X10, F10			// ERROR "expected vector register in vs2 position"
-	VFMVFS		V2, V1				// ERROR "expected float register in rd position"
-	VFMVSF		X10, V2				// ERROR "expected float register in rs2 position"
-	VFMVSF		V2, V1				// ERROR "expected float register in rs2 position"
-	VSLIDEUPVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSLIDEUPVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VSLIDEUPVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VSLIDEDOWNVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VSLIDEDOWNVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VSLIDEDOWNVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VSLIDE1UPVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VFSLIDE1UPVF	V1, V2, V3			// ERROR "expected float register in rs1 position"
-	VSLIDE1DOWNVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VFSLIDE1DOWNVF	V1, V2, V3			// ERROR "expected float register in rs1 position"
-	VRGATHERVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VRGATHEREI16VV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VRGATHERVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
-	VRGATHERVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
-	VRGATHERVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
-	VCOMPRESSVM	X10, V2, V3			// ERROR "expected vector register in vs1 position"
-	VMV1RV		X10, V1				// ERROR "expected vector register in vs2 position"
-	VMV2RV		X10, V10			// ERROR "expected vector register in vs2 position"
-	VMV4RV		X10, V4				// ERROR "expected vector register in vs2 position"
-	VMV8RV		X10, V0				// ERROR "expected vector register in vs2 position"
+	VSETVLI	$32, E16, M1, TU, MU, X12	// ERROR "must be in range [0, 31] (5 bits)"
+	VSETVLI	$-1, E32, M2, TA, MA, X12	// ERROR "must be in range [0, 31] (5 bits)"
+	VSETVL	X10, X11			// ERROR "expected integer register in rs1 position"
+	VLE8V	(X10), X10			// ERROR "expected vector register in vd position"
+	VLE8V	(V1), V3			// ERROR "expected integer register in rs1 position"
+	VSE8V	X10, (X10)			// ERROR "expected vector register in vs1 position"
+	VSE8V	V3, (V1)			// ERROR "expected integer register in rd position"
+	VLSE8V	(X10), V3			// ERROR "expected integer register in rs2 position"
+	VLSE8V	(X10), X10, X11			// ERROR "expected vector register in vd position"
+	VLSE8V	(V1), X10, V3			// ERROR "expected integer register in rs1 position"
+	VLSE8V	(X10), V1, V0, V3		// ERROR "expected integer register in rs2 position"
+	VSSE8V	V3, (X10)			// ERROR "expected integer register in rs2 position"
+	VSSE8V	X10, X11, (X10)			// ERROR "expected vector register in vd position"
+	VSSE8V	V3, X11, (V1)			// ERROR "expected integer register in rs1 position"
+	VSSE8V	V3, V1, V0, (X10)		// ERROR "expected integer register in rs2 position"
+	VLUXEI8V (X10), V2, X11			// ERROR "expected vector register in vd position"
+	VLUXEI8V (X10), V2, X11			// ERROR "expected vector register in vd position"
+	VLUXEI8V (V1), V2, V3			// ERROR "expected integer register in rs1 position"
+	VLUXEI8V (X10), X11, V0, V3		// ERROR "expected vector register in vs2 position"
+	VSUXEI8V X10, V2, (X10)			// ERROR "expected vector register in vd position"
+	VSUXEI8V V3, V2, (V1)			// ERROR "expected integer register in rs1 position"
+	VSUXEI8V V3, X11, V0, (X10)		// ERROR "expected vector register in vs2 position"
+	VLOXEI8V (X10), V2, X11			// ERROR "expected vector register in vd position"
+	VLOXEI8V (V1), V2, V3			// ERROR "expected integer register in rs1 position"
+	VLOXEI8V (X10), X11, V0, V3		// ERROR "expected vector register in vs2 position"
+	VSOXEI8V X10, V2, (X10)			// ERROR "expected vector register in vd position"
+	VSOXEI8V V3, V2, (V1)			// ERROR "expected integer register in rs1 position"
+	VSOXEI8V V3, X11, V0, (X10)		// ERROR "expected vector register in vs2 position"
+	VL1RV	(X10), X10			// ERROR "expected vector register in vd position"
+	VL1RV	(V1), V3			// ERROR "expected integer register in rs1 position"
+	VS1RV	X11, (X11)			// ERROR "expected vector register in vs1 position"
+	VS1RV	V3, (V1)			// ERROR "expected integer register in rd position"
+	VADDVV	V1, X10, V3			// ERROR "expected vector register in vs2 position"
+	VADDVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VADDVI	$16, V4, V2			// ERROR "signed immediate 16 must be in range [-16, 15] (5 bits)"
+	VADDVI	$-17, V4, V2			// ERROR "signed immediate -17 must be in range [-16, 15] (5 bits)"
+	VSUBVV	V1, X10, V3			// ERROR "expected vector register in vs2 position"
+	VSUBVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VRSUBVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VRSUBVI	$16, V4, V2			// ERROR "signed immediate 16 must be in range [-16, 15] (5 bits)"
+	VRSUBVI	$-17, V4, V2			// ERROR "signed immediate -17 must be in range [-16, 15] (5 bits)"
+	VNEGV	X10, V3				// ERROR "expected vector register in vs2 position"
+	VNEGV	V2				// ERROR "expected vector register in vd position"
+	VWADDUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWADDUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWSUBUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWSUBUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWADDVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWADDVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWSUBVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWSUBVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWADDUWV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWADDUWX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWSUBUWV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWSUBUWX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWADDWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWADDWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWSUBWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWSUBWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWCVTXXV X10, V3			// ERROR "expected vector register in vs2 position"
+	VWCVTUXXV X10, V3			// ERROR "expected vector register in vs2 position"
+	VZEXTVF2 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VZEXTVF2 X10, V3			// ERROR "expected vector register in vs2 position"
+	VSEXTVF2 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VSEXTVF2 X10, V3			// ERROR "expected vector register in vs2 position"
+	VZEXTVF4 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VZEXTVF4 X10, V3			// ERROR "expected vector register in vs2 position"
+	VSEXTVF4 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VSEXTVF4 X10, V3			// ERROR "expected vector register in vs2 position"
+	VZEXTVF8 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VZEXTVF8 X10, V3			// ERROR "expected vector register in vs2 position"
+	VSEXTVF8 V2, V0, V3, V4			// ERROR "expected no register in rs3"
+	VSEXTVF8 X10, V3			// ERROR "expected vector register in vs2 position"
+	VADCVVM	X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
+	VADCVXM	V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
+	VADCVIM	$16, V2, V0, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VADCVIM	$-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMADCVVM X10, V2, V0, V3		// ERROR "expected vector register in vs1 position"
+	VMADCVXM V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
+	VMADCVIM $16, V2, V0, V3		// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMADCVIM $-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMADCVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMADCVV	V1, V2, V0, V3			// ERROR "expected no register in rs3"
+	VMADCVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMADCVX	X10, V2, V0, V3			// ERROR "expected no register in rs3"
+	VMADCVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMADCVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMADCVI	$15, V2, V0, V3			// ERROR "expected no register in rs3"
+	VSBCVVM	X10, V2, V0, V3			// ERROR "expected vector register in vs1 position"
+	VSBCVXM	V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
+	VMSBCVVM X10, V2, V0, V3		// ERROR "expected vector register in vs1 position"
+	VMSBCVXM V1, V2, V0, V3			// ERROR "expected integer register in rs1 position"
+	VMSBCVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSBCVV	V1, V2, V0, V3			// ERROR "expected no register in rs3"
+	VMSBCVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSBCVX	X10, V2, V0, V3			// ERROR "expected no register in rs3"
+	VANDVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VANDVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VANDVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VANDVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VORVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VORVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VORVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VORVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VXORVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VXORVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VXORVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VXORVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VNOTV	V3				// ERROR "expected vector register in vd position"
+	VNOTV	X10, V3				// ERROR "expected vector register in vs2 position"
+	VSLLVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSLLVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSLLVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
+	VSLLVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
+	VSRLVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSRLVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSRLVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
+	VSRLVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
+	VSRAVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSRAVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSRAVI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
+	VSRAVI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
+	VNSRLWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNSRLWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNSRLWI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
+	VNSRLWI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
+	VNSRAWV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNSRAWX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNSRAWI	$32, V2, V3			// ERROR "unsigned immediate 32 must be in range [0, 31]"
+	VNSRAWI	$-1, V2, V3			// ERROR "unsigned immediate -1 must be in range [0, 31]"
+	VNCVTXXW X10, V3			// ERROR "expected vector register in vs2 position"
+	VMSEQVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSEQVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSEQVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSEQVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSNEVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSNEVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSNEVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSNEVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSLTUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSLTUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSLTVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSLTVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSLEUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSLEUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSLEUVI $16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSLEUVI $-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSLEVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMSLEVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSLEVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSLEVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSGTUVV X10, V2, V3			// ERROR "expected vector register in vs2 position"
+	VMSGTUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSGTUVI $16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSGTUVI $-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSGTVV	X10, V2, V3			// ERROR "expected vector register in vs2 position"
+	VMSGTVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMSGTVI	$16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSGTVI	$-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSGEVV	X10, V2, V3			// ERROR "expected vector register in vs2 position"
+	VMSGEUVV X10, V2, V3			// ERROR "expected vector register in vs2 position"
+	VMSLTVI	$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSLTVI	$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSLTUVI $17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSLTUVI $-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSGEVI	$17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSGEVI	$-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMSGEUVI $17, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMSGEUVI $-16, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMINUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMINUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMINVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMINVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMAXUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMAXUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMAXVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMAXVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMULVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMULVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMULHVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMULHVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMULHUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMULHUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMULHSUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMULHSUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VDIVUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VDIVUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VDIVVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VDIVVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VREMUVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VREMUVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VREMVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VREMVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMULVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMULVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMULUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMULUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMULSUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMULSUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMACCVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMACCVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNMSACVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNMSACVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMADDVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VMADDVX	V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNMSUBVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNMSUBVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMACCUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMACCUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMACCVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMACCVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMACCSUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VWMACCSUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VWMACCUSVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VMERGEVVM X10, V2, V0, V3		// ERROR "expected vector register in vs1 position"
+	VMERGEVXM V1, V2, V0, V3		// ERROR "expected integer register in rs1 position"
+	VMERGEVIM $16, V2, V0, V3		// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMERGEVIM $-17, V2, V0, V3		// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VMVVV	X10, V3				// ERROR "expected vector register in vs1 position"
+	VMVVX	V1, V2				// ERROR "expected integer register in rs1 position"
+	VMVVI	$16, V2				// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VMVVI	$-17, V2			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VSADDUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSADDUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSADDUVI $16, V2, V3			// ERROR "signed immediate 16 must be in range [-16, 15]"
+	VSADDUVI $-17, V2, V3			// ERROR "signed immediate -17 must be in range [-16, 15]"
+	VSSUBUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSSUBUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VAADDUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VAADDUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VAADDVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VAADDVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VASUBUVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VASUBUVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VASUBVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VASUBVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSMULVV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSMULVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSSRLVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSSRLVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSSRLVI $32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
+	VSSRLVI $-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
+	VSSRAVV	X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VSSRAVX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VSSRAVI $32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
+	VSSRAVI $-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
+	VNCLIPUWV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNCLIPUWX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNCLIPUWI $32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
+	VNCLIPUWI $-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
+	VNCLIPWV X10, V2, V3			// ERROR "expected vector register in vs1 position"
+	VNCLIPWX V1, V2, V3			// ERROR "expected integer register in rs1 position"
+	VNCLIPWI $32, V2, V3			// ERROR "signed immediate 32 must be in range [0, 31]"
+	VNCLIPWI $-1, V2, V3			// ERROR "signed immediate -1 must be in range [0, 31]"
 
 	RET
diff --git a/src/cmd/cgo/internal/testsanitizers/asan_test.go b/src/cmd/cgo/internal/testsanitizers/asan_test.go
index c2cdf7b6d645e8..f7f53da334e72f 100644
--- a/src/cmd/cgo/internal/testsanitizers/asan_test.go
+++ b/src/cmd/cgo/internal/testsanitizers/asan_test.go
@@ -135,9 +135,6 @@ func TestASANFuzz(t *testing.T) {
 	if bytes.Contains(out, []byte("AddressSanitizer")) {
 		t.Error(`output contains "AddressSanitizer", but should not`)
 	}
-	if !bytes.Contains(out, []byte("FUZZ FAILED")) {
-		t.Error(`fuzz test did not fail with a "FUZZ FAILED" sentinel error`)
-	}
 }
 
 func mustHaveASAN(t *testing.T) *config {
diff --git a/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go b/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go
index 9f548d66eace03..85c8f7bbfbedda 100644
--- a/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go
+++ b/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go
@@ -95,8 +95,6 @@ func libFuzzerSupported(goos, goarch string) bool {
 		default:
 			return false
 		}
-	case "loong64":
-		return true
 	default:
 		return false
 	}
diff --git a/src/cmd/cgo/internal/testsanitizers/testdata/asan_fuzz_test.go b/src/cmd/cgo/internal/testsanitizers/testdata/asan_fuzz_test.go
index 1a51819d7d70ad..fb7ebd40780df8 100644
--- a/src/cmd/cgo/internal/testsanitizers/testdata/asan_fuzz_test.go
+++ b/src/cmd/cgo/internal/testsanitizers/testdata/asan_fuzz_test.go
@@ -24,7 +24,7 @@ func FuzzReverse(f *testing.F) {
 		r1 := Reverse(s)
 		r2 := Reverse(r1)
 		if s != r2 {
-			t.Errorf("FUZZ FAILED: got %q want %q", r2, s)
+			t.Errorf("got %q want %q", r2, s)
 		}
 	})
 }
diff --git a/src/cmd/compile/default.pgo b/src/cmd/compile/default.pgo
index 2c2588704f3f6e..65c28706ea54aa 100644
Binary files a/src/cmd/compile/default.pgo and b/src/cmd/compile/default.pgo differ
diff --git a/src/cmd/compile/internal/amd64/ssa.go b/src/cmd/compile/internal/amd64/ssa.go
index 3af513773d3b2e..c97cdbd5c049de 100644
--- a/src/cmd/compile/internal/amd64/ssa.go
+++ b/src/cmd/compile/internal/amd64/ssa.go
@@ -1154,31 +1154,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		p.To.Type = obj.TYPE_REG
 		p.To.Reg = v.Reg0()
 
-	case ssa.OpAMD64ADDQconstflags, ssa.OpAMD64ADDLconstflags:
-		p := s.Prog(v.Op.Asm())
-		p.From.Type = obj.TYPE_CONST
-		p.From.Offset = v.AuxInt
-		// Note: the inc/dec instructions do not modify
-		// the carry flag like add$1 / sub$1 do.
-		// We currently never use the CF/OF flags from
-		// these instructions, so that is ok.
-		switch {
-		case p.As == x86.AADDQ && p.From.Offset == 1:
-			p.As = x86.AINCQ
-			p.From.Type = obj.TYPE_NONE
-		case p.As == x86.AADDQ && p.From.Offset == -1:
-			p.As = x86.ADECQ
-			p.From.Type = obj.TYPE_NONE
-		case p.As == x86.AADDL && p.From.Offset == 1:
-			p.As = x86.AINCL
-			p.From.Type = obj.TYPE_NONE
-		case p.As == x86.AADDL && p.From.Offset == -1:
-			p.As = x86.ADECL
-			p.From.Type = obj.TYPE_NONE
-		}
-		p.To.Type = obj.TYPE_REG
-		p.To.Reg = v.Reg0()
-
 	case ssa.OpAMD64BSFQ, ssa.OpAMD64BSRQ, ssa.OpAMD64BSFL, ssa.OpAMD64BSRL, ssa.OpAMD64SQRTSD, ssa.OpAMD64SQRTSS:
 		p := s.Prog(v.Op.Asm())
 		p.From.Type = obj.TYPE_REG
diff --git a/src/cmd/compile/internal/base/debug.go b/src/cmd/compile/internal/base/debug.go
index 10393e773c366d..7bcbcb3e2c0cb6 100644
--- a/src/cmd/compile/internal/base/debug.go
+++ b/src/cmd/compile/internal/base/debug.go
@@ -29,7 +29,6 @@ type DebugFlags struct {
 	DumpPtrs              int    `help:"show Node pointers values in dump output"`
 	DwarfInl              int    `help:"print information about DWARF inlined function creation"`
 	EscapeMutationsCalls  int    `help:"print extra escape analysis diagnostics about mutations and calls" concurrent:"ok"`
-	EscapeDebug           int    `help:"print information about escape analysis and resulting optimizations" concurrent:"ok"`
 	Export                int    `help:"print export data"`
 	FIPSHash              string `help:"hash value for FIPS debugging" concurrent:"ok"`
 	Fmahash               string `help:"hash value for use in debugging platform-dependent multiply-add use" concurrent:"ok"`
diff --git a/src/cmd/compile/internal/bitvec/bv.go b/src/cmd/compile/internal/bitvec/bv.go
index d3133dcd2dc679..aab10433c8f181 100644
--- a/src/cmd/compile/internal/bitvec/bv.go
+++ b/src/cmd/compile/internal/bitvec/bv.go
@@ -196,5 +196,7 @@ func (bv BitVec) String() string {
 }
 
 func (bv BitVec) Clear() {
-	clear(bv.B)
+	for i := range bv.B {
+		bv.B[i] = 0
+	}
 }
diff --git a/src/cmd/compile/internal/escape/call.go b/src/cmd/compile/internal/escape/call.go
index 58c44eb9bbd3ce..1d7a0c90893c67 100644
--- a/src/cmd/compile/internal/escape/call.go
+++ b/src/cmd/compile/internal/escape/call.go
@@ -40,7 +40,6 @@ func (e *escape) call(ks []hole, call ir.Node) {
 		var fn *ir.Name
 		switch call.Op() {
 		case ir.OCALLFUNC:
-			// TODO(thepudds): use an ir.ReassignOracle here.
 			v := ir.StaticValue(call.Fun)
 			fn = ir.StaticCalleeName(v)
 		}
@@ -84,19 +83,15 @@ func (e *escape) call(ks []hole, call ir.Node) {
 			argument(e.tagHole(ks, fn, param), arg)
 		}
 
-		// internal/abi.EscapeNonString forces its argument to be on
-		// the heap, if it contains a non-string pointer.
-		// This is used in hash/maphash.Comparable, where we cannot
+		// hash/maphash.escapeForHash forces its argument to be on
+		// the heap, if it contains a non-string pointer. We cannot
 		// hash pointers to local variables, as the address of the
 		// local variable might change on stack growth.
 		// Strings are okay as the hash depends on only the content,
 		// not the pointer.
-		// This is also used in unique.clone, to model the data flow
-		// edge on the value with strings excluded, because strings
-		// are cloned (by content).
 		// The actual call we match is
-		//   internal/abi.EscapeNonString[go.shape.T](dict, go.shape.T)
-		if fn != nil && fn.Sym().Pkg.Path == "internal/abi" && strings.HasPrefix(fn.Sym().Name, "EscapeNonString[") {
+		//   hash/maphash.escapeForHash[go.shape.T](dict, go.shape.T)
+		if fn != nil && fn.Sym().Pkg.Path == "hash/maphash" && strings.HasPrefix(fn.Sym().Name, "escapeForHash[") {
 			ps := fntype.Params()
 			if len(ps) == 2 && ps[1].Type.IsShape() {
 				if !hasNonStringPointers(ps[1].Type) {
@@ -164,14 +159,6 @@ func (e *escape) call(ks []hole, call ir.Node) {
 		}
 		e.discard(call.RType)
 
-		// Model the new backing store that might be allocated by append.
-		// Its address flows to the result.
-		// Users of escape analysis can look at the escape information for OAPPEND
-		// and use that to decide where to allocate the backing store.
-		backingStore := e.spill(ks[0], call)
-		// As we have a boolean to prevent reuse, we can treat these allocations as outside any loops.
-		backingStore.dst.loopDepth = 0
-
 	case ir.OCOPY:
 		call := call.(*ir.BinaryExpr)
 		argument(e.mutatorHole(), call.X)
diff --git a/src/cmd/compile/internal/escape/escape.go b/src/cmd/compile/internal/escape/escape.go
index 06dee7ec41bf92..d6f0708a7f17ef 100644
--- a/src/cmd/compile/internal/escape/escape.go
+++ b/src/cmd/compile/internal/escape/escape.go
@@ -6,8 +6,6 @@ package escape
 
 import (
 	"fmt"
-	"go/constant"
-	"go/token"
 
 	"cmd/compile/internal/base"
 	"cmd/compile/internal/ir"
@@ -88,9 +86,8 @@ import (
 // A batch holds escape analysis state that's shared across an entire
 // batch of functions being analyzed at once.
 type batch struct {
-	allLocs         []*location
-	closures        []closure
-	reassignOracles map[*ir.Func]*ir.ReassignOracle
+	allLocs  []*location
+	closures []closure
 
 	heapLoc    location
 	mutatorLoc location
@@ -132,7 +129,6 @@ func Batch(fns []*ir.Func, recursive bool) {
 	b.heapLoc.attrs = attrEscapes | attrPersists | attrMutates | attrCalls
 	b.mutatorLoc.attrs = attrMutates
 	b.calleeLoc.attrs = attrCalls
-	b.reassignOracles = make(map[*ir.Func]*ir.ReassignOracle)
 
 	// Construct data-flow graph from syntax trees.
 	for _, fn := range fns {
@@ -158,11 +154,6 @@ func Batch(fns []*ir.Func, recursive bool) {
 	b.closures = nil
 
 	for _, loc := range b.allLocs {
-		// Try to replace some non-constant expressions with literals.
-		b.rewriteWithLiterals(loc.n, loc.curfn)
-
-		// Check if the node must be heap allocated for certain reasons
-		// such as OMAKESLICE for a large slice.
 		if why := HeapAllocReason(loc.n); why != "" {
 			b.flow(b.heapHole().addr(loc.n, why), loc)
 		}
@@ -315,11 +306,7 @@ func (b *batch) finish(fns []*ir.Func) {
 				}
 			} else {
 				if base.Flag.LowerM != 0 && !goDeferWrapper {
-					if n.Op() == ir.OAPPEND {
-						base.WarnfAt(n.Pos(), "append escapes to heap")
-					} else {
-						base.WarnfAt(n.Pos(), "%v escapes to heap", n)
-					}
+					base.WarnfAt(n.Pos(), "%v escapes to heap", n)
 				}
 				if logopt.Enabled() {
 					var e_curfn *ir.Func // TODO(mdempsky): Fix.
@@ -329,11 +316,7 @@ func (b *batch) finish(fns []*ir.Func) {
 			n.SetEsc(ir.EscHeap)
 		} else {
 			if base.Flag.LowerM != 0 && n.Op() != ir.ONAME && !goDeferWrapper {
-				if n.Op() == ir.OAPPEND {
-					base.WarnfAt(n.Pos(), "append does not escape")
-				} else {
-					base.WarnfAt(n.Pos(), "%v does not escape", n)
-				}
+				base.WarnfAt(n.Pos(), "%v does not escape", n)
 			}
 			n.SetEsc(ir.EscNone)
 			if !loc.hasAttr(attrPersists) {
@@ -524,101 +507,3 @@ func (b *batch) reportLeaks(pos src.XPos, name string, esc leaks, sig *types.Typ
 		base.WarnfAt(pos, "%v does not escape, mutate, or call", name)
 	}
 }
-
-// rewriteWithLiterals attempts to replace certain non-constant expressions
-// within n with a literal if possible.
-func (b *batch) rewriteWithLiterals(n ir.Node, fn *ir.Func) {
-	if n == nil || fn == nil {
-		return
-	}
-	if n.Op() != ir.OMAKESLICE && n.Op() != ir.OCONVIFACE {
-		return
-	}
-	if base.Flag.Cfg.CoverageInfo != nil {
-		// Avoid altering coverage results.
-		return
-	}
-
-	// Look up a cached ReassignOracle for the function, lazily computing one if needed.
-	ro := b.reassignOracle(fn)
-	if ro == nil {
-		base.Fatalf("no ReassignOracle for function %v with closure parent %v", fn, fn.ClosureParent)
-	}
-
-	switch n.Op() {
-	case ir.OMAKESLICE:
-		// Check if we can replace a non-constant argument to make with
-		// a literal to allow for this slice to be stack allocated if otherwise allowed.
-		n := n.(*ir.MakeExpr)
-
-		r := &n.Cap
-		if n.Cap == nil {
-			r = &n.Len
-		}
-
-		if s := ro.StaticValue(*r); s.Op() == ir.OLITERAL {
-			lit, ok := s.(*ir.BasicLit)
-			if !ok || lit.Val().Kind() != constant.Int {
-				base.Fatalf("unexpected BasicLit Kind")
-			}
-			if constant.Compare(lit.Val(), token.GEQ, constant.MakeInt64(0)) {
-				*r = lit
-			}
-		}
-	case ir.OCONVIFACE:
-		// Check if we can replace a non-constant expression in an interface conversion with
-		// a literal to avoid heap allocating the underlying interface value.
-		conv := n.(*ir.ConvExpr)
-		if conv.X.Op() != ir.OLITERAL && !conv.X.Type().IsInterface() {
-			v := ro.StaticValue(conv.X)
-			if v != nil && v.Op() == ir.OLITERAL && ir.ValidTypeForConst(conv.X.Type(), v.Val()) {
-				if base.Debug.EscapeDebug >= 3 {
-					base.WarnfAt(n.Pos(), "rewriting OCONVIFACE value from %v (%v) to %v (%v)", conv.X, conv.X.Type(), v, v.Type())
-				}
-				v := v.(*ir.BasicLit)
-				conv.X = ir.NewBasicLit(conv.X.Pos(), conv.X.Type(), v.Val())
-				typecheck.Expr(conv)
-			}
-		}
-	}
-}
-
-// reassignOracle returns an initialized *ir.ReassignOracle for fn.
-// If fn is a closure, it returns the ReassignOracle for the ultimate parent.
-//
-// A new ReassignOracle is initialized lazily if needed, and the result
-// is cached to reduce duplicative work of preparing a ReassignOracle.
-func (b *batch) reassignOracle(fn *ir.Func) *ir.ReassignOracle {
-	if ro, ok := b.reassignOracles[fn]; ok {
-		return ro // Hit.
-	}
-
-	// For closures, we want the ultimate parent's ReassignOracle,
-	// so walk up the parent chain, if any.
-	f := fn
-	for f.ClosureParent != nil && !f.ClosureParent.IsPackageInit() {
-		f = f.ClosureParent
-	}
-
-	if f != fn {
-		// We found a parent.
-		ro := b.reassignOracles[f]
-		if ro != nil {
-			// Hit, via a parent. Before returning, store this ro for the original fn as well.
-			b.reassignOracles[fn] = ro
-			return ro
-		}
-	}
-
-	// Miss. We did not find a ReassignOracle for fn or a parent, so lazily create one.
-	ro := &ir.ReassignOracle{}
-	ro.Init(f)
-
-	// Cache the answer for the original fn.
-	b.reassignOracles[fn] = ro
-	if f != fn {
-		// Cache for the parent as well.
-		b.reassignOracles[f] = ro
-	}
-	return ro
-}
diff --git a/src/cmd/compile/internal/escape/graph.go b/src/cmd/compile/internal/escape/graph.go
index 0ffb4a0bb5a4de..75e2546a7b7a06 100644
--- a/src/cmd/compile/internal/escape/graph.go
+++ b/src/cmd/compile/internal/escape/graph.go
@@ -62,14 +62,9 @@ type location struct {
 	dst        *location
 	dstEdgeIdx int
 
-	// queuedWalkAll is used by walkAll to track whether this location is
-	// in its work queue.
-	queuedWalkAll bool
-
-	// queuedWalkOne is used by walkOne to track whether this location is
-	// in its work queue. The value is the walkgen when this location was
-	// last queued for walkOne, or 0 if it's not currently queued.
-	queuedWalkOne uint32
+	// queued is used by walkAll to track whether this location is
+	// in the walk queue.
+	queued bool
 
 	// attrs is a bitset of location attributes.
 	attrs locAttr
@@ -80,8 +75,6 @@ type location struct {
 	captured   bool // has a closure captured this variable?
 	reassigned bool // has this variable been reassigned?
 	addrtaken  bool // has this variable's address been taken?
-	param      bool // is this variable a parameter (ONAME of class ir.PPARAM)?
-	paramOut   bool // is this variable an out parameter (ONAME of class ir.PPARAMOUT)?
 }
 
 type locAttr uint8
@@ -139,6 +132,35 @@ func (l *location) leakTo(sink *location, derefs int) {
 	l.paramEsc.AddHeap(derefs)
 }
 
+// leakTo records that parameter l leaks to sink.
+func (b *batch) leakTo(l, sink *location, derefs int) {
+	if (logopt.Enabled() || base.Flag.LowerM >= 2) && !l.hasAttr(attrEscapes) {
+		if base.Flag.LowerM >= 2 {
+			fmt.Printf("%s: parameter %v leaks to %s with derefs=%d:\n", base.FmtPos(l.n.Pos()), l.n, b.explainLoc(sink), derefs)
+		}
+		explanation := b.explainPath(sink, l)
+		if logopt.Enabled() {
+			var e_curfn *ir.Func // TODO(mdempsky): Fix.
+			logopt.LogOpt(l.n.Pos(), "leak", "escape", ir.FuncName(e_curfn),
+				fmt.Sprintf("parameter %v leaks to %s with derefs=%d", l.n, b.explainLoc(sink), derefs), explanation)
+		}
+	}
+
+	// If sink is a result parameter that doesn't escape (#44614)
+	// and we can fit return bits into the escape analysis tag,
+	// then record as a result leak.
+	if !sink.hasAttr(attrEscapes) && sink.isName(ir.PPARAMOUT) && sink.curfn == l.curfn {
+		if ri := sink.resultIndex - 1; ri < numEscResults {
+			// Leak to result parameter.
+			l.paramEsc.AddResult(ri, derefs)
+			return
+		}
+	}
+
+	// Otherwise, record as heap leak.
+	l.paramEsc.AddHeap(derefs)
+}
+
 func (l *location) isName(c ir.Class) bool {
 	return l.n != nil && l.n.Op() == ir.ONAME && l.n.(*ir.Name).Class == c
 }
@@ -212,7 +234,7 @@ func (b *batch) flow(k hole, src *location) {
 		if base.Flag.LowerM >= 2 || logopt.Enabled() {
 			pos := base.FmtPos(src.n.Pos())
 			if base.Flag.LowerM >= 2 {
-				fmt.Printf("%s: %v escapes to heap in %v:\n", pos, src.n, ir.FuncName(src.curfn))
+				fmt.Printf("%s: %v escapes to heap:\n", pos, src.n)
 			}
 			explanation := b.explainFlow(pos, dst, src, k.derefs, k.notes, []*logopt.LoggedOpt{})
 			if logopt.Enabled() {
@@ -259,12 +281,6 @@ func (e *escape) newLoc(n ir.Node, persists bool) *location {
 		curfn:     e.curfn,
 		loopDepth: e.loopDepth,
 	}
-	if loc.isName(ir.PPARAM) {
-		loc.param = true
-	} else if loc.isName(ir.PPARAMOUT) {
-		loc.paramOut = true
-	}
-
 	if persists {
 		loc.attrs |= attrPersists
 	}
diff --git a/src/cmd/compile/internal/escape/solve.go b/src/cmd/compile/internal/escape/solve.go
index e2ca3eabda99ad..2002f2fbe41f3e 100644
--- a/src/cmd/compile/internal/escape/solve.go
+++ b/src/cmd/compile/internal/escape/solve.go
@@ -10,7 +10,6 @@ import (
 	"cmd/compile/internal/logopt"
 	"cmd/internal/src"
 	"fmt"
-	"math/bits"
 	"strings"
 )
 
@@ -25,41 +24,28 @@ func (b *batch) walkAll() {
 	// !persists->persists and !escapes->escapes, which can each
 	// happen at most once. So we take Θ(len(e.allLocs)) walks.
 
-	// Queue of locations to walk. Has enough room for b.allLocs
-	// plus b.heapLoc, b.mutatorLoc, b.calleeLoc.
-	todo := newQueue(len(b.allLocs) + 3)
-
+	// LIFO queue, has enough room for e.allLocs and e.heapLoc.
+	todo := make([]*location, 0, len(b.allLocs)+1)
 	enqueue := func(loc *location) {
-		if !loc.queuedWalkAll {
-			loc.queuedWalkAll = true
-			if loc.hasAttr(attrEscapes) {
-				// Favor locations that escape to the heap,
-				// which in some cases allows attrEscape to
-				// propagate faster.
-				todo.pushFront(loc)
-			} else {
-				todo.pushBack(loc)
-			}
+		if !loc.queued {
+			todo = append(todo, loc)
+			loc.queued = true
 		}
 	}
 
 	for _, loc := range b.allLocs {
-		todo.pushFront(loc)
-		// TODO(thepudds): clean up setting queuedWalkAll.
-		loc.queuedWalkAll = true
+		enqueue(loc)
 	}
-	todo.pushFront(&b.mutatorLoc)
-	todo.pushFront(&b.calleeLoc)
-	todo.pushFront(&b.heapLoc)
-
-	b.mutatorLoc.queuedWalkAll = true
-	b.calleeLoc.queuedWalkAll = true
-	b.heapLoc.queuedWalkAll = true
+	enqueue(&b.mutatorLoc)
+	enqueue(&b.calleeLoc)
+	enqueue(&b.heapLoc)
 
 	var walkgen uint32
-	for todo.len() > 0 {
-		root := todo.popFront()
-		root.queuedWalkAll = false
+	for len(todo) > 0 {
+		root := todo[len(todo)-1]
+		todo = todo[:len(todo)-1]
+		root.queued = false
+
 		walkgen++
 		b.walkOne(root, walkgen, enqueue)
 	}
@@ -91,12 +77,10 @@ func (b *batch) walkOne(root *location, walkgen uint32, enqueue func(*location))
 		}
 	}
 
-	todo := newQueue(1)
-	todo.pushFront(root)
-
-	for todo.len() > 0 {
-		l := todo.popFront()
-		l.queuedWalkOne = 0 // no longer queued for walkOne
+	todo := []*location{root} // LIFO queue
+	for len(todo) > 0 {
+		l := todo[len(todo)-1]
+		todo = todo[:len(todo)-1]
 
 		derefs := l.derefs
 		var newAttrs locAttr
@@ -116,7 +100,7 @@ func (b *batch) walkOne(root *location, walkgen uint32, enqueue func(*location))
 			if b.outlives(root, l) {
 				if !l.hasAttr(attrEscapes) && (logopt.Enabled() || base.Flag.LowerM >= 2) {
 					if base.Flag.LowerM >= 2 {
-						fmt.Printf("%s: %v escapes to heap in %v:\n", base.FmtPos(l.n.Pos()), l.n, ir.FuncName(l.curfn))
+						fmt.Printf("%s: %v escapes to heap:\n", base.FmtPos(l.n.Pos()), l.n)
 					}
 					explanation := b.explainPath(root, l)
 					if logopt.Enabled() {
@@ -142,11 +126,11 @@ func (b *batch) walkOne(root *location, walkgen uint32, enqueue func(*location))
 		// corresponding result parameter, then record
 		// that value flow for tagging the function
 		// later.
-		if l.param {
+		if l.isName(ir.PPARAM) {
 			if b.outlives(root, l) {
 				if !l.hasAttr(attrEscapes) && (logopt.Enabled() || base.Flag.LowerM >= 2) {
 					if base.Flag.LowerM >= 2 {
-						fmt.Printf("%s: parameter %v leaks to %s for %v with derefs=%d:\n", base.FmtPos(l.n.Pos()), l.n, b.explainLoc(root), ir.FuncName(l.curfn), derefs)
+						fmt.Printf("%s: parameter %v leaks to %s with derefs=%d:\n", base.FmtPos(l.n.Pos()), l.n, b.explainLoc(root), derefs)
 					}
 					explanation := b.explainPath(root, l)
 					if logopt.Enabled() {
@@ -183,14 +167,7 @@ func (b *batch) walkOne(root *location, walkgen uint32, enqueue func(*location))
 				edge.src.derefs = d
 				edge.src.dst = l
 				edge.src.dstEdgeIdx = i
-				// Check if already queued in todo.
-				if edge.src.queuedWalkOne != walkgen {
-					edge.src.queuedWalkOne = walkgen // Mark queued for this walkgen.
-
-					// Place at the back to possibly give time for
-					// other possible attribute changes to src.
-					todo.pushBack(edge.src)
-				}
+				todo = append(todo, edge.src)
 			}
 		}
 	}
@@ -234,7 +211,7 @@ func (b *batch) explainFlow(pos string, dst, srcloc *location, derefs int, notes
 	}
 	print := base.Flag.LowerM >= 2
 
-	flow := fmt.Sprintf("   flow: %s ← %s%v:", b.explainLoc(dst), ops, b.explainLoc(srcloc))
+	flow := fmt.Sprintf("   flow: %s = %s%v:", b.explainLoc(dst), ops, b.explainLoc(srcloc))
 	if print {
 		fmt.Printf("%s:%s\n", pos, flow)
 	}
@@ -293,7 +270,7 @@ func (b *batch) outlives(l, other *location) bool {
 	// We don't know what callers do with returned values, so
 	// pessimistically we need to assume they flow to the heap and
 	// outlive everything too.
-	if l.paramOut {
+	if l.isName(ir.PPARAMOUT) {
 		// Exception: Closures can return locations allocated outside of
 		// them without forcing them to the heap, if we can statically
 		// identify all call sites. For example:
@@ -333,65 +310,3 @@ func (b *batch) outlives(l, other *location) bool {
 
 	return false
 }
-
-// queue implements a queue of locations for use in WalkAll and WalkOne.
-// It supports pushing to front & back, and popping from front.
-// TODO(thepudds): does cmd/compile have a deque or similar somewhere?
-type queue struct {
-	locs  []*location
-	head  int // index of front element
-	tail  int // next back element
-	elems int
-}
-
-func newQueue(capacity int) *queue {
-	capacity = max(capacity, 2)
-	capacity = 1 << bits.Len64(uint64(capacity-1)) // round up to a power of 2
-	return &queue{locs: make([]*location, capacity)}
-}
-
-// pushFront adds an element to the front of the queue.
-func (q *queue) pushFront(loc *location) {
-	if q.elems == len(q.locs) {
-		q.grow()
-	}
-	q.head = q.wrap(q.head - 1)
-	q.locs[q.head] = loc
-	q.elems++
-}
-
-// pushBack adds an element to the back of the queue.
-func (q *queue) pushBack(loc *location) {
-	if q.elems == len(q.locs) {
-		q.grow()
-	}
-	q.locs[q.tail] = loc
-	q.tail = q.wrap(q.tail + 1)
-	q.elems++
-}
-
-// popFront removes the front of the queue.
-func (q *queue) popFront() *location {
-	if q.elems == 0 {
-		return nil
-	}
-	loc := q.locs[q.head]
-	q.head = q.wrap(q.head + 1)
-	q.elems--
-	return loc
-}
-
-// grow doubles the capacity.
-func (q *queue) grow() {
-	newLocs := make([]*location, len(q.locs)*2)
-	for i := range q.elems {
-		// Copy over our elements in order.
-		newLocs[i] = q.locs[q.wrap(q.head+i)]
-	}
-	q.locs = newLocs
-	q.head = 0
-	q.tail = q.elems
-}
-
-func (q *queue) len() int       { return q.elems }
-func (q *queue) wrap(i int) int { return i & (len(q.locs) - 1) }
diff --git a/src/cmd/compile/internal/escape/utils.go b/src/cmd/compile/internal/escape/utils.go
index 2718a7f841817e..b3ebe778f4a2fb 100644
--- a/src/cmd/compile/internal/escape/utils.go
+++ b/src/cmd/compile/internal/escape/utils.go
@@ -5,9 +5,12 @@
 package escape
 
 import (
+	"cmd/compile/internal/base"
 	"cmd/compile/internal/ir"
 	"cmd/compile/internal/typecheck"
 	"cmd/compile/internal/types"
+	"go/constant"
+	"go/token"
 )
 
 func isSliceSelfAssign(dst, src ir.Node) bool {
@@ -207,9 +210,21 @@ func HeapAllocReason(n ir.Node) string {
 	if n.Op() == ir.OMAKESLICE {
 		n := n.(*ir.MakeExpr)
 
-		r := n.Cap
+		r := &n.Cap
 		if n.Cap == nil {
-			r = n.Len
+			r = &n.Len
+		}
+
+		// Try to determine static values of make() calls, to avoid allocating them on the heap.
+		// We are doing this in escape analysis, so that it happens after inlining and devirtualization.
+		if s := ir.StaticValue(*r); s.Op() == ir.OLITERAL {
+			lit, ok := s.(*ir.BasicLit)
+			if !ok || lit.Val().Kind() != constant.Int {
+				base.Fatalf("unexpected BasicLit Kind")
+			}
+			if constant.Compare(lit.Val(), token.GEQ, constant.MakeInt64(0)) {
+				*r = lit
+			}
 		}
 
 		elem := n.Type().Elem()
@@ -217,7 +232,7 @@ func HeapAllocReason(n ir.Node) string {
 			// TODO: stack allocate these? See #65685.
 			return "zero-sized element"
 		}
-		if !ir.IsSmallIntConst(r) {
+		if !ir.IsSmallIntConst(*r) {
 			// For non-constant sizes, we do a hybrid approach:
 			//
 			// if cap <= K {
@@ -234,7 +249,7 @@ func HeapAllocReason(n ir.Node) string {
 			// Implementation is in ../walk/builtin.go:walkMakeSlice.
 			return ""
 		}
-		if ir.Int64Val(r) > ir.MaxImplicitStackVarSize/elem.Size() {
+		if ir.Int64Val(*r) > ir.MaxImplicitStackVarSize/elem.Size() {
 			return "too large for stack"
 		}
 	}
diff --git a/src/cmd/compile/internal/importer/ureader.go b/src/cmd/compile/internal/importer/ureader.go
index 6012d283ac5731..2f8f174a939999 100644
--- a/src/cmd/compile/internal/importer/ureader.go
+++ b/src/cmd/compile/internal/importer/ureader.go
@@ -33,12 +33,12 @@ func ReadPackage(ctxt *types2.Context, imports map[string]*types2.Package, input
 		imports:     imports,
 		enableAlias: true,
 
-		posBases: make([]*syntax.PosBase, input.NumElems(pkgbits.SectionPosBase)),
-		pkgs:     make([]*types2.Package, input.NumElems(pkgbits.SectionPkg)),
-		typs:     make([]types2.Type, input.NumElems(pkgbits.SectionType)),
+		posBases: make([]*syntax.PosBase, input.NumElems(pkgbits.RelocPosBase)),
+		pkgs:     make([]*types2.Package, input.NumElems(pkgbits.RelocPkg)),
+		typs:     make([]types2.Type, input.NumElems(pkgbits.RelocType)),
 	}
 
-	r := pr.newReader(pkgbits.SectionMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
+	r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
 	pkg := r.pkg()
 
 	if r.Version().Has(pkgbits.HasInit) {
@@ -52,7 +52,7 @@ func ReadPackage(ctxt *types2.Context, imports map[string]*types2.Package, input
 		if r.Version().Has(pkgbits.DerivedFuncInstance) {
 			assert(!r.Bool())
 		}
-		r.p.objIdx(r.Reloc(pkgbits.SectionObj))
+		r.p.objIdx(r.Reloc(pkgbits.RelocObj))
 		assert(r.Len() == 0)
 	}
 
@@ -84,14 +84,14 @@ type readerTypeBound struct {
 	boundIdx int
 }
 
-func (pr *pkgReader) newReader(k pkgbits.SectionKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
+func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
 	return &reader{
 		Decoder: pr.NewDecoder(k, idx, marker),
 		p:       pr,
 	}
 }
 
-func (pr *pkgReader) tempReader(k pkgbits.SectionKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
+func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
 	return &reader{
 		Decoder: pr.TempDecoder(k, idx, marker),
 		p:       pr,
@@ -118,7 +118,7 @@ func (r *reader) pos() syntax.Pos {
 }
 
 func (r *reader) posBase() *syntax.PosBase {
-	return r.p.posBaseIdx(r.Reloc(pkgbits.SectionPosBase))
+	return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase))
 }
 
 func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) *syntax.PosBase {
@@ -127,7 +127,7 @@ func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) *syntax.PosBase {
 	}
 	var b *syntax.PosBase
 	{
-		r := pr.tempReader(pkgbits.SectionPosBase, idx, pkgbits.SyncPosBase)
+		r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)
 
 		filename := r.String()
 
@@ -150,7 +150,7 @@ func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) *syntax.PosBase {
 
 func (r *reader) pkg() *types2.Package {
 	r.Sync(pkgbits.SyncPkg)
-	return r.p.pkgIdx(r.Reloc(pkgbits.SectionPkg))
+	return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg))
 }
 
 func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types2.Package {
@@ -160,7 +160,7 @@ func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types2.Package {
 		return pkg
 	}
 
-	pkg := pr.newReader(pkgbits.SectionPkg, idx, pkgbits.SyncPkgDef).doPkg()
+	pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg()
 	pr.pkgs[idx] = pkg
 	return pkg
 }
@@ -206,7 +206,7 @@ func (r *reader) typInfo() typeInfo {
 	if r.Bool() {
 		return typeInfo{idx: pkgbits.Index(r.Len()), derived: true}
 	}
-	return typeInfo{idx: r.Reloc(pkgbits.SectionType), derived: false}
+	return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false}
 }
 
 func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types2.Type {
@@ -225,7 +225,7 @@ func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types2.Type {
 
 	var typ types2.Type
 	{
-		r := pr.tempReader(pkgbits.SectionType, idx, pkgbits.SyncTypeIdx)
+		r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
 		r.dict = dict
 
 		typ = r.doTyp()
@@ -376,7 +376,7 @@ func (r *reader) obj() (types2.Object, []types2.Type) {
 		assert(!r.Bool())
 	}
 
-	pkg, name := r.p.objIdx(r.Reloc(pkgbits.SectionObj))
+	pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj))
 	obj := pkg.Scope().Lookup(name)
 
 	targs := make([]types2.Type, r.Len())
@@ -392,7 +392,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types2.Package, string) {
 	var objName string
 	var tag pkgbits.CodeObj
 	{
-		rname := pr.tempReader(pkgbits.SectionName, idx, pkgbits.SyncObject1)
+		rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
 
 		objPkg, objName = rname.qualifiedIdent()
 		assert(objName != "")
@@ -409,7 +409,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types2.Package, string) {
 	objPkg.Scope().InsertLazy(objName, func() types2.Object {
 		dict := pr.objDictIdx(idx)
 
-		r := pr.newReader(pkgbits.SectionObj, idx, pkgbits.SyncObject1)
+		r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1)
 		r.dict = dict
 
 		switch tag {
@@ -470,7 +470,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types2.Package, string) {
 func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {
 	var dict readerDict
 	{
-		r := pr.tempReader(pkgbits.SectionObjDict, idx, pkgbits.SyncObject1)
+		r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
 
 		if implicits := r.Len(); implicits != 0 {
 			base.Fatalf("unexpected object with %v implicit type parameter(s)", implicits)
@@ -484,7 +484,7 @@ func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {
 		dict.derived = make([]derivedInfo, r.Len())
 		dict.derivedTypes = make([]types2.Type, len(dict.derived))
 		for i := range dict.derived {
-			dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.SectionType)}
+			dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.RelocType)}
 			if r.Version().Has(pkgbits.DerivedInfoNeeded) {
 				assert(!r.Bool())
 			}
diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go
index 459c2498fc40da..e30de3d8c87d87 100644
--- a/src/cmd/compile/internal/inline/inl.go
+++ b/src/cmd/compile/internal/inline/inl.go
@@ -454,11 +454,6 @@ opSwitch:
 						// generate code.
 						cheap = true
 					}
-					if strings.HasPrefix(fn, "EscapeNonString[") {
-						// internal/abi.EscapeNonString[T] is a compiler intrinsic
-						// implemented in the escape analysis phase.
-						cheap = true
-					}
 				case "internal/runtime/sys":
 					switch fn {
 					case "GetCallerPC", "GetCallerSP":
@@ -477,6 +472,12 @@ opSwitch:
 					case "panicrangestate":
 						cheap = true
 					}
+				case "hash/maphash":
+					if strings.HasPrefix(fn, "escapeForHash[") {
+						// hash/maphash.escapeForHash[T] is a compiler intrinsic
+						// implemented in the escape analysis phase.
+						cheap = true
+					}
 				}
 			}
 			// Special case for coverage counter updates; although
@@ -785,7 +786,7 @@ func inlineCallCheck(callerfn *ir.Func, call *ir.CallExpr) (bool, bool) {
 	if call.Op() != ir.OCALLFUNC {
 		return false, false
 	}
-	if call.GoDefer || call.NoInline {
+	if call.GoDefer {
 		return false, false
 	}
 
@@ -800,10 +801,10 @@ func inlineCallCheck(callerfn *ir.Func, call *ir.CallExpr) (bool, bool) {
 		}
 	}
 
-	// internal/abi.EscapeNonString[T] is a compiler intrinsic implemented
+	// hash/maphash.escapeForHash[T] is a compiler intrinsic implemented
 	// in the escape analysis phase.
-	if fn := ir.StaticCalleeName(call.Fun); fn != nil && fn.Sym().Pkg.Path == "internal/abi" &&
-		strings.HasPrefix(fn.Sym().Name, "EscapeNonString[") {
+	if fn := ir.StaticCalleeName(call.Fun); fn != nil && fn.Sym().Pkg.Path == "hash/maphash" &&
+		strings.HasPrefix(fn.Sym().Name, "escapeForHash[") {
 		return false, true
 	}
 
@@ -1116,18 +1117,12 @@ func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller, closur
 			// Not a standard call.
 			return
 		}
-
-		var nf = n.Fun
-		// Skips ir.OCONVNOPs, see issue #73716.
-		for nf.Op() == ir.OCONVNOP {
-			nf = nf.(*ir.ConvExpr).X
-		}
-		if nf.Op() != ir.OCLOSURE {
-			// Not a direct closure call or one with type conversion.
+		if n.Fun.Op() != ir.OCLOSURE {
+			// Not a direct closure call.
 			return
 		}
 
-		clo := nf.(*ir.ClosureExpr)
+		clo := n.Fun.(*ir.ClosureExpr)
 		if !clo.Func.IsClosure() {
 			// enqueueFunc will handle non closures anyways.
 			return
diff --git a/src/cmd/compile/internal/inline/interleaved/interleaved.go b/src/cmd/compile/internal/inline/interleaved/interleaved.go
index 954cc306fc81d3..a884c1bc7375d4 100644
--- a/src/cmd/compile/internal/inline/interleaved/interleaved.go
+++ b/src/cmd/compile/internal/inline/interleaved/interleaved.go
@@ -279,12 +279,7 @@ func (s *inlClosureState) mark(n ir.Node) ir.Node {
 
 	ok := match(n)
 
-	// can't wrap TailCall's child into ParenExpr
-	if t, ok := n.(*ir.TailCallStmt); ok {
-		ir.EditChildren(t.Call, s.mark)
-	} else {
-		ir.EditChildren(n, s.mark)
-	}
+	ir.EditChildren(n, s.mark)
 
 	if ok {
 		if p == nil {
@@ -322,6 +317,23 @@ func (s *inlClosureState) unparenthesize() {
 			n = paren.X
 		}
 		ir.EditChildren(n, unparen)
+		// special case for tail calls: if the tail call was inlined, transform
+		// the tail call to a return stmt if the inlined function was not void,
+		// otherwise replace it with the inlined expression followed by a return.
+		if tail, ok := n.(*ir.TailCallStmt); ok {
+			if inl, done := tail.Call.(*ir.InlinedCallExpr); done {
+				if len(inl.ReturnVars) != 0 {
+					ret := ir.NewReturnStmt(tail.Pos(), []ir.Node{inl})
+					if len(inl.ReturnVars) > 1 {
+						typecheck.RewriteMultiValueCall(ret, inl)
+					}
+					n = ret
+				} else {
+					ret := ir.NewReturnStmt(tail.Pos(), nil)
+					n = ir.NewBlockStmt(tail.Pos(), []ir.Node{inl, ret})
+				}
+			}
+		}
 		return n
 	}
 	ir.EditChildren(s.fn, unparen)
@@ -358,11 +370,9 @@ func (s *inlClosureState) fixpoint() bool {
 }
 
 func match(n ir.Node) bool {
-	switch n := n.(type) {
+	switch n.(type) {
 	case *ir.CallExpr:
 		return true
-	case *ir.TailCallStmt:
-		n.Call.NoInline = true // can't inline yet
 	}
 	return false
 }
diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go
index 702adfdd84ef5e..cf56515a2c1647 100644
--- a/src/cmd/compile/internal/ir/expr.go
+++ b/src/cmd/compile/internal/ir/expr.go
@@ -191,7 +191,6 @@ type CallExpr struct {
 	KeepAlive []*Name // vars to be kept alive until call returns
 	IsDDD     bool
 	GoDefer   bool // whether this call is part of a go or defer statement
-	NoInline  bool // whether this call must not be inlined
 }
 
 func NewCallExpr(pos src.XPos, op Op, fun Node, args []Node) *CallExpr {
@@ -854,10 +853,6 @@ func IsAddressable(n Node) bool {
 //
 // calling StaticValue on the "int(y)" expression returns the outer
 // "g()" expression.
-//
-// NOTE: StaticValue can return a result with a different type than
-// n's type because it can traverse through OCONVNOP operations.
-// TODO: consider reapplying OCONVNOP operations to the result. See https://go.dev/cl/676517.
 func StaticValue(n Node) Node {
 	for {
 		switch n1 := n.(type) {
diff --git a/src/cmd/compile/internal/ir/node_gen.go b/src/cmd/compile/internal/ir/node_gen.go
index 026acbf9dd61f5..e67b5ba0bc16f0 100644
--- a/src/cmd/compile/internal/ir/node_gen.go
+++ b/src/cmd/compile/internal/ir/node_gen.go
@@ -2202,13 +2202,13 @@ func (n *TailCallStmt) doChildrenWithHidden(do func(Node) bool) bool {
 func (n *TailCallStmt) editChildren(edit func(Node) Node) {
 	editNodes(n.init, edit)
 	if n.Call != nil {
-		n.Call = edit(n.Call).(*CallExpr)
+		n.Call = edit(n.Call)
 	}
 }
 func (n *TailCallStmt) editChildrenWithHidden(edit func(Node) Node) {
 	editNodes(n.init, edit)
 	if n.Call != nil {
-		n.Call = edit(n.Call).(*CallExpr)
+		n.Call = edit(n.Call)
 	}
 }
 
diff --git a/src/cmd/compile/internal/ir/stmt.go b/src/cmd/compile/internal/ir/stmt.go
index 0801ecdd9e8722..ae7fb2080b6f3e 100644
--- a/src/cmd/compile/internal/ir/stmt.go
+++ b/src/cmd/compile/internal/ir/stmt.go
@@ -479,7 +479,7 @@ func NewSwitchStmt(pos src.XPos, tag Node, cases []*CaseClause) *SwitchStmt {
 // code generation to jump directly to another function entirely.
 type TailCallStmt struct {
 	miniStmt
-	Call *CallExpr // the underlying call
+	Call Node // the underlying call
 }
 
 func NewTailCallStmt(pos src.XPos, call *CallExpr) *TailCallStmt {
diff --git a/src/cmd/compile/internal/ir/symtab.go b/src/cmd/compile/internal/ir/symtab.go
index e2da710f025878..820916316cbff8 100644
--- a/src/cmd/compile/internal/ir/symtab.go
+++ b/src/cmd/compile/internal/ir/symtab.go
@@ -59,13 +59,11 @@ type symsStruct struct {
 	Udiv             *obj.LSym
 	WriteBarrier     *obj.LSym
 	Zerobase         *obj.LSym
-	ZeroVal          *obj.LSym
 	ARM64HasATOMICS  *obj.LSym
 	ARMHasVFPv4      *obj.LSym
 	Loong64HasLAMCAS *obj.LSym
 	Loong64HasLAM_BH *obj.LSym
 	Loong64HasLSX    *obj.LSym
-	RISCV64HasZbb    *obj.LSym
 	X86HasFMA        *obj.LSym
 	X86HasPOPCNT     *obj.LSym
 	X86HasSSE41      *obj.LSym
diff --git a/src/cmd/compile/internal/liveness/plive.go b/src/cmd/compile/internal/liveness/plive.go
index 5a2a22ee8f5c82..6c97858cf6efbb 100644
--- a/src/cmd/compile/internal/liveness/plive.go
+++ b/src/cmd/compile/internal/liveness/plive.go
@@ -1414,7 +1414,9 @@ func Compute(curfn *ir.Func, f *ssa.Func, stkptrsize int64, pp *objw.Progs, retL
 	{
 		cache := f.Cache.Liveness.(*livenessFuncCache)
 		if cap(lv.be) < 2000 { // Threshold from ssa.Cache slices.
-			clear(lv.be)
+			for i := range lv.be {
+				lv.be[i] = blockEffects{}
+			}
 			cache.be = lv.be
 		}
 		if len(lv.livenessMap.Vals) < 2000 {
diff --git a/src/cmd/compile/internal/logopt/logopt_test.go b/src/cmd/compile/internal/logopt/logopt_test.go
index 1edabf9fb7ff04..c7debd9897d09b 100644
--- a/src/cmd/compile/internal/logopt/logopt_test.go
+++ b/src/cmd/compile/internal/logopt/logopt_test.go
@@ -203,16 +203,16 @@ func s15a8(x *[15]int64) [15]int64 {
 		// escape analysis explanation
 		want(t, slogged, `{"range":{"start":{"line":7,"character":13},"end":{"line":7,"character":13}},"severity":3,"code":"leak","source":"go compiler","message":"parameter z leaks to ~r0 with derefs=0",`+
 			`"relatedInformation":[`+
-			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:    flow: y ← z:"},`+
+			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:    flow: y = z:"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:      from y := z (assign-pair)"},`+
-			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:    flow: ~r0 ← y:"},`+
+			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:    flow: ~r0 = y:"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":4,"character":11},"end":{"line":4,"character":11}}},"message":"inlineLoc"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:      from y.b (dot of pointer)"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":4,"character":11},"end":{"line":4,"character":11}}},"message":"inlineLoc"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:      from \u0026y.b (address-of)"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":4,"character":9},"end":{"line":4,"character":9}}},"message":"inlineLoc"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":13},"end":{"line":9,"character":13}}},"message":"escflow:      from ~r0 = \u0026y.b (assign-pair)"},`+
-			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":3},"end":{"line":9,"character":3}}},"message":"escflow:    flow: ~r0 ← ~r0:"},`+
+			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":3},"end":{"line":9,"character":3}}},"message":"escflow:    flow: ~r0 = ~r0:"},`+
 			`{"location":{"uri":"file://tmpdir/file.go","range":{"start":{"line":9,"character":3},"end":{"line":9,"character":3}}},"message":"escflow:      from return ~r0 (return)"}]}`)
 	})
 }
diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go
index a71a5c3e43bf3f..60516d6618bbb2 100644
--- a/src/cmd/compile/internal/loong64/ssa.go
+++ b/src/cmd/compile/internal/loong64/ssa.go
@@ -165,8 +165,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		ssa.OpLOONG64OR,
 		ssa.OpLOONG64XOR,
 		ssa.OpLOONG64NOR,
-		ssa.OpLOONG64ANDN,
-		ssa.OpLOONG64ORN,
 		ssa.OpLOONG64SLL,
 		ssa.OpLOONG64SLLV,
 		ssa.OpLOONG64SRL,
@@ -278,6 +276,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		ssa.OpLOONG64ANDconst,
 		ssa.OpLOONG64ORconst,
 		ssa.OpLOONG64XORconst,
+		ssa.OpLOONG64NORconst,
 		ssa.OpLOONG64SLLconst,
 		ssa.OpLOONG64SLLVconst,
 		ssa.OpLOONG64SRLconst,
@@ -294,23 +293,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		p.Reg = v.Args[0].Reg()
 		p.To.Type = obj.TYPE_REG
 		p.To.Reg = v.Reg()
-
-	case ssa.OpLOONG64NORconst:
-		// MOVV $const, Rtmp
-		// NOR  Rtmp, Rarg0, Rout
-		p := s.Prog(loong64.AMOVV)
-		p.From.Type = obj.TYPE_CONST
-		p.From.Offset = v.AuxInt
-		p.To.Type = obj.TYPE_REG
-		p.To.Reg = loong64.REGTMP
-
-		p2 := s.Prog(v.Op.Asm())
-		p2.From.Type = obj.TYPE_REG
-		p2.From.Reg = loong64.REGTMP
-		p2.Reg = v.Args[0].Reg()
-		p2.To.Type = obj.TYPE_REG
-		p2.To.Reg = v.Reg()
-
 	case ssa.OpLOONG64MOVVconst:
 		r := v.Reg()
 		p := s.Prog(v.Op.Asm())
@@ -966,24 +948,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		p.Reg = v.Args[0].Reg()
 		p.To.Type = obj.TYPE_REG
 		p.To.Reg = v.Reg()
-
-	case ssa.OpLOONG64PRELD:
-		// PRELD (Rarg0), hint
-		p := s.Prog(v.Op.Asm())
-		p.From.Type = obj.TYPE_MEM
-		p.From.Reg = v.Args[0].Reg()
-		p.AddRestSourceConst(v.AuxInt & 0x1f)
-
-	case ssa.OpLOONG64PRELDX:
-		// PRELDX (Rarg0), $n, $hint
-		p := s.Prog(v.Op.Asm())
-		p.From.Type = obj.TYPE_MEM
-		p.From.Reg = v.Args[0].Reg()
-		p.AddRestSourceArgs([]obj.Addr{
-			{Type: obj.TYPE_CONST, Offset: int64((v.AuxInt >> 5) & 0x1fffffffff)},
-			{Type: obj.TYPE_CONST, Offset: int64((v.AuxInt >> 0) & 0x1f)},
-		})
-
 	case ssa.OpClobber, ssa.OpClobberReg:
 		// TODO: implement for clobberdead experiment. Nop is ok for now.
 	default:
diff --git a/src/cmd/compile/internal/loopvar/loopvar.go b/src/cmd/compile/internal/loopvar/loopvar.go
index 5a4590d2998d0c..030fc04c1369d8 100644
--- a/src/cmd/compile/internal/loopvar/loopvar.go
+++ b/src/cmd/compile/internal/loopvar/loopvar.go
@@ -305,7 +305,6 @@ func ForCapture(fn *ir.Func) []VarAndLoop {
 						as := ir.NewAssignStmt(x.Pos(), z, tz)
 						as.Def = true
 						as.SetTypecheck(1)
-						z.Defn = as
 						preBody.Append(as)
 						dclFixups[z] = as
 
diff --git a/src/cmd/compile/internal/mips/ssa.go b/src/cmd/compile/internal/mips/ssa.go
index 9762554829c295..4c7c8eafcda30d 100644
--- a/src/cmd/compile/internal/mips/ssa.go
+++ b/src/cmd/compile/internal/mips/ssa.go
@@ -804,9 +804,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		p := s.Prog(obj.AGETCALLERPC)
 		p.To.Type = obj.TYPE_REG
 		p.To.Reg = v.Reg()
-	case ssa.OpMIPSLoweredPubBarrier:
-		// SYNC
-		s.Prog(v.Op.Asm())
 	case ssa.OpClobber, ssa.OpClobberReg:
 		// TODO: implement for clobberdead experiment. Nop is ok for now.
 	default:
diff --git a/src/cmd/compile/internal/mips64/ssa.go b/src/cmd/compile/internal/mips64/ssa.go
index af94c16f6df592..5b5edf622a1e9b 100644
--- a/src/cmd/compile/internal/mips64/ssa.go
+++ b/src/cmd/compile/internal/mips64/ssa.go
@@ -813,9 +813,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		p := s.Prog(obj.AGETCALLERPC)
 		p.To.Type = obj.TYPE_REG
 		p.To.Reg = v.Reg()
-	case ssa.OpMIPS64LoweredPubBarrier:
-		// SYNC
-		s.Prog(v.Op.Asm())
 	case ssa.OpClobber, ssa.OpClobberReg:
 		// TODO: implement for clobberdead experiment. Nop is ok for now.
 	default:
diff --git a/src/cmd/compile/internal/noder/doc.go b/src/cmd/compile/internal/noder/doc.go
deleted file mode 100644
index a5d5533168c155..00000000000000
--- a/src/cmd/compile/internal/noder/doc.go
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-The Unified IR (UIR) format is implicitly defined by the package noder.
-
-At the highest level, a package encoded in UIR follows the grammar
-below.
-
-    File        = Header Payload fingerprint .
-    Header      = version [ flags ] sectionEnds elementEnds .
-
-    version     = uint32 .     // used for backward compatibility
-    flags       = uint32 .     // feature flags used across versions
-    sectionEnds = [10]uint32 . // defines section boundaries
-    elementEnds = []uint32 .   // defines element boundaries
-    fingerprint = [8]byte .    // sha256 fingerprint
-
-The payload is a series of sections. Each section has a kind which
-determines its index in the series.
-
-    SectionKind = Uint64 .
-    Payload     = SectionString
-                  SectionMeta
-                  SectionPosBase
-                  SectionPkg
-                  SectionName
-                  SectionType
-                  SectionObj
-                  SectionObjExt  // TODO(markfreeman) Define.
-                  SectionObjDict // TODO(markfreeman) Define.
-                  SectionBody    // TODO(markfreeman) Define.
-                  .
-
-# Sections
-A section is a series of elements of a type determined by the section's
-kind. Go constructs are mapped onto one or more elements with possibly
-different types; in that case, the elements are in different sections.
-
-Elements are accessed using an element index relative to the start of
-the section.
-
-    RelElemIdx = Uint64 .
-
-## String Section
-String values are stored as elements in the string section. Elements
-outside the string section access string values by reference.
-
-    SectionString = { String } .
-
-Note that despite being an element, a string does not begin with a
-reference table.
-
-## Meta Section
-The meta section provides fundamental information for a package. It
-contains exactly two elements — a public root and a private root.
-
-    SectionMeta = PublicRoot
-                  PrivateRoot     // TODO(markfreeman): Define.
-                  .
-
-The public root element identifies the package and provides references
-for all exported objects it contains.
-
-    PublicRoot  = RefTable
-                  [ Sync ]
-                  PkgRef
-                  [ HasInit ]
-                  ObjectRefCount // TODO(markfreeman): Define.
-                  { ObjectRef }  // TODO(markfreeman): Define.
-                  .
-    HasInit     = Bool .         // Whether the package uses any
-                                 // initialization functions.
-
-## PosBase Section
-This section provides position information. It is a series of PosBase
-elements.
-
-    SectionPosBase = { PosBase } .
-
-A base is either a file base or line base (produced by a line
-directive). Every base has a position, line, and column; these are
-constant for file bases and hence not encoded.
-
-    PosBase = RefTable
-              [ Sync ]
-              StringRef       // the (absolute) file name for the base
-              Bool            // true if a file base, else a line base
-              // The below is ommitted for file bases.
-              [ Pos
-                Uint64        // line
-                Uint64 ]      // column
-              .
-
-A source position Pos represents a file-absolute (line, column) pair
-and a PosBase indicating the position Pos is relative to. Positions
-without a PosBase have no line or column.
-
-    Pos     = [ Sync ]
-              Bool             // true if the position has a base
-              // The below is ommitted if the position has no base.
-              [ Ref[PosBase]
-                Uint64         // line
-                Uint64 ]       // column
-              .
-
-## Package Section
-The package section holds package information. It is a series of Pkg
-elements.
-
-    SectionPkg = { Pkg } .
-
-A Pkg element contains a (path, name) pair and a series of imported
-packages. The below package paths have special meaning.
-
-    +--------------+-----------------------------------+
-    | package path |             indicates             |
-    +--------------+-----------------------------------+
-    | ""           | the current package               |
-    | "builtin"    | the fake builtin package          |
-    | "unsafe"     | the compiler-known unsafe package |
-    +--------------+-----------------------------------+
-
-    Pkg        = RefTable
-                 [ Sync ]
-                 StringRef      // path
-                 // The below is ommitted for the special package paths
-                 // "builtin" and "unsafe".
-                 [ StringRef    // name
-                   Imports ]
-                 .
-    Imports    = Uint64         // the number of declared imports
-                 { PkgRef }     // references to declared imports
-                 .
-
-Note, a PkgRef is *not* equivalent to Ref[Pkg] due to an extra marker.
-
-    PkgRef     = [ Sync ]
-                 Ref[Pkg]
-                 .
-
-## Type Section
-The type section is a series of type definition elements.
-
-    SectionType = { TypeDef } .
-
-A type definition can be in one of several formats, which are identified
-by their TypeSpec code.
-
-    TypeDef     = RefTable
-                  [ Sync ]
-                  [ Sync ]
-                  Uint64            // denotes which TypeSpec to use
-                  TypeSpec
-                  .
-
-    TypeSpec    = TypeSpecBasic     // TODO(markfreeman): Define.
-                | TypeSpecNamed     // TODO(markfreeman): Define.
-                | TypeSpecPointer   // TODO(markfreeman): Define.
-                | TypeSpecSlice     // TODO(markfreeman): Define.
-                | TypeSpecArray     // TODO(markfreeman): Define.
-                | TypeSpecChan      // TODO(markfreeman): Define.
-                | TypeSpecMap       // TODO(markfreeman): Define.
-                | TypeSpecSignature // TODO(markfreeman): Define.
-                | TypeSpecStruct    // TODO(markfreeman): Define.
-                | TypeSpecInterface // TODO(markfreeman): Define.
-                | TypeSpecUnion     // TODO(markfreeman): Define.
-                | TypeSpecTypeParam // TODO(markfreeman): Define.
-                  .
-
-// TODO(markfreeman): Document the reader dictionary once we understand it more.
-To use a type elsewhere, a TypeUse is encoded.
-
-    TypeUse     = [ Sync ]
-                  Bool              // whether it is a derived type
-                  [ Uint64 ]        // if derived, an index into the reader dictionary
-                  [ Ref[TypeDef] ]  // else, a reference to the type
-                  .
-
-## Object Sections
-Information about an object (e.g. variable, function, type name, etc.)
-is split into multiple elements in different sections. Those elements
-have the same section-relative element index.
-
-### Name Section
-The name section holds a series of names.
-
-    SectionName = { Name } .
-
-Names are elements holding qualified identifiers and type information
-for objects.
-
-    Name        = RefTable
-                  [ Sync ]
-                  [ Sync ]
-                  PkgRef    // the object's package
-                  StringRef // the object's package-local name
-                  [ Sync ]
-                  Uint64    // the object's type (e.g. Var, Func, etc.)
-                  .
-
-### Definition Section
-The definition section holds definitions for objects defined by the target
-package; it does not contain definitions for imported objects.
-
-    SectionObj = { ObjectDef } .
-
-Object definitions can be in one of several formats. To determine the correct
-format, the name section must be referenced; it contains a code indicating
-the object's type.
-
-    ObjectDef = RefTable
-                [ Sync ]
-                ObjectSpec
-                .
-
-    ObjectSpec = ObjectSpecConst     // TODO(markfreeman) Define.
-               | ObjectSpecFunc      // TODO(markfreeman) Define.
-               | ObjectSpecAlias     // TODO(markfreeman) Define.
-               | ObjectSpecNamedType // TODO(markfreeman) Define.
-               | ObjectSpecVar       // TODO(markfreeman) Define.
-                 .
-
-To use an object definition elsewhere, an ObjectUse is encoded.
-
-    ObjectUse  = [ Sync ]
-                 [ Bool ]
-                 Ref[ObjectDef]
-                 Uint64              // the number of type arguments
-                 { TypeUse }         // references to the type arguments
-                 .
-
-# References
-A reference table precedes every element. Each entry in the table
-contains a (section, index) pair denoting the location of the
-referenced element.
-
-    RefTable      = [ Sync ]
-                    Uint64            // the number of table entries
-                    { RefTableEntry }
-                    .
-    RefTableEntry = [ Sync ]
-                    SectionKind
-                    RelElemIdx
-                    .
-
-Elements encode references to other elements as an index in the
-reference table — not the location of the referenced element directly.
-
-    RefTableIdx   = Uint64 .
-
-To do this, the Ref[T] primitive is used as below; note that this is
-the same shape as provided by package pkgbits, just with new
-interpretation applied.
-
-    Ref[T]        = [ Sync ]
-                    RefTableIdx       // the Uint64
-                    .
-
-# Primitives
-Primitive encoding is handled separately by the pkgbits package. Check
-there for definitions of the below productions.
-
-    * Bool
-    * Int64
-    * Uint64
-    * String
-    * Ref[T]
-    * Sync
-*/
-
-package noder
diff --git a/src/cmd/compile/internal/noder/linker.go b/src/cmd/compile/internal/noder/linker.go
index 51b03a1897e830..4f1cc7b612ecd2 100644
--- a/src/cmd/compile/internal/noder/linker.go
+++ b/src/cmd/compile/internal/noder/linker.go
@@ -47,8 +47,8 @@ type linker struct {
 // relocAll ensures that all elements specified by pr and relocs are
 // copied into the output export data file, and returns the
 // corresponding indices in the output.
-func (l *linker) relocAll(pr *pkgReader, relocs []pkgbits.RefTableEntry) []pkgbits.RefTableEntry {
-	res := make([]pkgbits.RefTableEntry, len(relocs))
+func (l *linker) relocAll(pr *pkgReader, relocs []pkgbits.RelocEnt) []pkgbits.RelocEnt {
+	res := make([]pkgbits.RelocEnt, len(relocs))
 	for i, rent := range relocs {
 		rent.Idx = l.relocIdx(pr, rent.Kind, rent.Idx)
 		res[i] = rent
@@ -58,7 +58,7 @@ func (l *linker) relocAll(pr *pkgReader, relocs []pkgbits.RefTableEntry) []pkgbi
 
 // relocIdx ensures a single element is copied into the output export
 // data file, and returns the corresponding index in the output.
-func (l *linker) relocIdx(pr *pkgReader, k pkgbits.SectionKind, idx index) index {
+func (l *linker) relocIdx(pr *pkgReader, k pkgbits.RelocKind, idx index) index {
 	assert(pr != nil)
 
 	absIdx := pr.AbsIdx(k, idx)
@@ -69,11 +69,11 @@ func (l *linker) relocIdx(pr *pkgReader, k pkgbits.SectionKind, idx index) index
 
 	var newidx index
 	switch k {
-	case pkgbits.SectionString:
+	case pkgbits.RelocString:
 		newidx = l.relocString(pr, idx)
-	case pkgbits.SectionPkg:
+	case pkgbits.RelocPkg:
 		newidx = l.relocPkg(pr, idx)
-	case pkgbits.SectionObj:
+	case pkgbits.RelocObj:
 		newidx = l.relocObj(pr, idx)
 
 	default:
@@ -84,7 +84,7 @@ func (l *linker) relocIdx(pr *pkgReader, k pkgbits.SectionKind, idx index) index
 		// if we do external relocations.
 
 		w := l.pw.NewEncoderRaw(k)
-		l.relocCommon(pr, w, k, idx)
+		l.relocCommon(pr, &w, k, idx)
 		newidx = w.Idx
 	}
 
@@ -113,8 +113,8 @@ func (l *linker) relocPkg(pr *pkgReader, idx index) index {
 		return newidx
 	}
 
-	r := pr.NewDecoder(pkgbits.SectionPkg, idx, pkgbits.SyncPkgDef)
-	w := l.pw.NewEncoder(pkgbits.SectionPkg, pkgbits.SyncPkgDef)
+	r := pr.NewDecoder(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef)
+	w := l.pw.NewEncoder(pkgbits.RelocPkg, pkgbits.SyncPkgDef)
 	l.pkgs[path] = w.Idx
 
 	// TODO(mdempsky): We end up leaving an empty string reference here
@@ -158,19 +158,19 @@ func (l *linker) relocObj(pr *pkgReader, idx index) index {
 		assert(tag2 != pkgbits.ObjStub)
 	}
 
-	w := l.pw.NewEncoderRaw(pkgbits.SectionObj)
-	wext := l.pw.NewEncoderRaw(pkgbits.SectionObjExt)
-	wname := l.pw.NewEncoderRaw(pkgbits.SectionName)
-	wdict := l.pw.NewEncoderRaw(pkgbits.SectionObjDict)
+	w := l.pw.NewEncoderRaw(pkgbits.RelocObj)
+	wext := l.pw.NewEncoderRaw(pkgbits.RelocObjExt)
+	wname := l.pw.NewEncoderRaw(pkgbits.RelocName)
+	wdict := l.pw.NewEncoderRaw(pkgbits.RelocObjDict)
 
 	l.decls[sym] = w.Idx
 	assert(wext.Idx == w.Idx)
 	assert(wname.Idx == w.Idx)
 	assert(wdict.Idx == w.Idx)
 
-	l.relocCommon(pr, w, pkgbits.SectionObj, idx)
-	l.relocCommon(pr, wname, pkgbits.SectionName, idx)
-	l.relocCommon(pr, wdict, pkgbits.SectionObjDict, idx)
+	l.relocCommon(pr, &w, pkgbits.RelocObj, idx)
+	l.relocCommon(pr, &wname, pkgbits.RelocName, idx)
+	l.relocCommon(pr, &wdict, pkgbits.RelocObjDict, idx)
 
 	// Generic types and functions won't have definitions, and imported
 	// objects may not either.
@@ -181,15 +181,15 @@ func (l *linker) relocObj(pr *pkgReader, idx index) index {
 		wext.Sync(pkgbits.SyncObject1)
 		switch tag {
 		case pkgbits.ObjFunc:
-			l.relocFuncExt(wext, obj)
+			l.relocFuncExt(&wext, obj)
 		case pkgbits.ObjType:
-			l.relocTypeExt(wext, obj)
+			l.relocTypeExt(&wext, obj)
 		case pkgbits.ObjVar:
-			l.relocVarExt(wext, obj)
+			l.relocVarExt(&wext, obj)
 		}
 		wext.Flush()
 	} else {
-		l.relocCommon(pr, wext, pkgbits.SectionObjExt, idx)
+		l.relocCommon(pr, &wext, pkgbits.RelocObjExt, idx)
 	}
 
 	// Check if we need to export the inline bodies for functions and
@@ -247,12 +247,12 @@ func (l *linker) exportBody(obj *ir.Name, local bool) {
 
 	pri, ok := bodyReaderFor(fn)
 	assert(ok)
-	l.bodies[sym] = l.relocIdx(pri.pr, pkgbits.SectionBody, pri.idx)
+	l.bodies[sym] = l.relocIdx(pri.pr, pkgbits.RelocBody, pri.idx)
 }
 
 // relocCommon copies the specified element from pr into w,
 // recursively relocating any referenced elements as well.
-func (l *linker) relocCommon(pr *pkgReader, w *pkgbits.Encoder, k pkgbits.SectionKind, idx index) {
+func (l *linker) relocCommon(pr *pkgReader, w *pkgbits.Encoder, k pkgbits.RelocKind, idx index) {
 	r := pr.NewDecoderRaw(k, idx)
 	w.Relocs = l.relocAll(pr, r.Relocs)
 	io.Copy(&w.Data, &r.Data)
diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go
index 79a90783336030..77daf9eda59085 100644
--- a/src/cmd/compile/internal/noder/noder.go
+++ b/src/cmd/compile/internal/noder/noder.go
@@ -458,7 +458,7 @@ func Renameinit() *types.Sym {
 func checkEmbed(decl *syntax.VarDecl, haveEmbed, withinFunc bool) error {
 	switch {
 	case !haveEmbed:
-		return errors.New("go:embed requires import \"embed\" (or import _ \"embed\", if package is not used)")
+		return errors.New("go:embed only allowed in Go files that import \"embed\"")
 	case len(decl.NameList) > 1:
 		return errors.New("go:embed cannot apply to multiple vars")
 	case decl.Values != nil:
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go
index 38b0bc1d8a4153..0f08bce10f01d4 100644
--- a/src/cmd/compile/internal/noder/reader.go
+++ b/src/cmd/compile/internal/noder/reader.go
@@ -49,18 +49,15 @@ type pkgReader struct {
 	// but bitwise inverted so we can detect if we're missing the entry
 	// or not.
 	newindex []index
-
-	// indicates whether the data is reading during reshaping.
-	reshaping bool
 }
 
 func newPkgReader(pr pkgbits.PkgDecoder) *pkgReader {
 	return &pkgReader{
 		PkgDecoder: pr,
 
-		posBases: make([]*src.PosBase, pr.NumElems(pkgbits.SectionPosBase)),
-		pkgs:     make([]*types.Pkg, pr.NumElems(pkgbits.SectionPkg)),
-		typs:     make([]*types.Type, pr.NumElems(pkgbits.SectionType)),
+		posBases: make([]*src.PosBase, pr.NumElems(pkgbits.RelocPosBase)),
+		pkgs:     make([]*types.Pkg, pr.NumElems(pkgbits.RelocPkg)),
+		typs:     make([]*types.Type, pr.NumElems(pkgbits.RelocType)),
 
 		newindex: make([]index, pr.TotalElems()),
 	}
@@ -77,7 +74,7 @@ type pkgReaderIndex struct {
 	synthetic func(pos src.XPos, r *reader)
 }
 
-func (pri pkgReaderIndex) asReader(k pkgbits.SectionKind, marker pkgbits.SyncMarker) *reader {
+func (pri pkgReaderIndex) asReader(k pkgbits.RelocKind, marker pkgbits.SyncMarker) *reader {
 	if pri.synthetic != nil {
 		return &reader{synthetic: pri.synthetic}
 	}
@@ -88,7 +85,7 @@ func (pri pkgReaderIndex) asReader(k pkgbits.SectionKind, marker pkgbits.SyncMar
 	return r
 }
 
-func (pr *pkgReader) newReader(k pkgbits.SectionKind, idx index, marker pkgbits.SyncMarker) *reader {
+func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx index, marker pkgbits.SyncMarker) *reader {
 	return &reader{
 		Decoder: pr.NewDecoder(k, idx, marker),
 		p:       pr,
@@ -119,10 +116,6 @@ type reader struct {
 	// find parameters/results.
 	funarghack bool
 
-	// reshaping is used during reading exprReshape code, preventing
-	// the reader from shapifying the re-shaped type.
-	reshaping bool
-
 	// methodSym is the name of method's name, if reading a method.
 	// It's nil if reading a normal function or closure body.
 	methodSym *types.Sym
@@ -262,7 +255,7 @@ func (r *reader) pos0() src.Pos {
 
 // posBase reads a position base from the bitstream.
 func (r *reader) posBase() *src.PosBase {
-	return r.inlPosBase(r.p.posBaseIdx(r.Reloc(pkgbits.SectionPosBase)))
+	return r.inlPosBase(r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase)))
 }
 
 // posBaseIdx returns the specified position base, reading it first if
@@ -272,7 +265,7 @@ func (pr *pkgReader) posBaseIdx(idx index) *src.PosBase {
 		return b
 	}
 
-	r := pr.newReader(pkgbits.SectionPosBase, idx, pkgbits.SyncPosBase)
+	r := pr.newReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)
 	var b *src.PosBase
 
 	absFilename := r.String()
@@ -343,7 +336,7 @@ func (r *reader) inlPos(xpos src.XPos) src.XPos {
 // pkg reads a package reference from the bitstream.
 func (r *reader) pkg() *types.Pkg {
 	r.Sync(pkgbits.SyncPkg)
-	return r.p.pkgIdx(r.Reloc(pkgbits.SectionPkg))
+	return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg))
 }
 
 // pkgIdx returns the specified package from the export data, reading
@@ -353,7 +346,7 @@ func (pr *pkgReader) pkgIdx(idx index) *types.Pkg {
 		return pkg
 	}
 
-	pkg := pr.newReader(pkgbits.SectionPkg, idx, pkgbits.SyncPkgDef).doPkg()
+	pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg()
 	pr.pkgs[idx] = pkg
 	return pkg
 }
@@ -400,7 +393,7 @@ func (r *reader) typInfo() typeInfo {
 	if r.Bool() {
 		return typeInfo{idx: index(r.Len()), derived: true}
 	}
-	return typeInfo{idx: r.Reloc(pkgbits.SectionType), derived: false}
+	return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false}
 }
 
 // typListIdx returns a list of the specified types, resolving derived
@@ -430,7 +423,7 @@ func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict, wrapped bool) *type
 		return typ
 	}
 
-	r := pr.newReader(pkgbits.SectionType, idx, pkgbits.SyncTypeIdx)
+	r := pr.newReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
 	r.dict = dict
 
 	typ := r.doTyp()
@@ -650,7 +643,7 @@ func (r *reader) objInfo() objInfo {
 	if r.Version().Has(pkgbits.DerivedFuncInstance) {
 		assert(!r.Bool())
 	}
-	idx := r.Reloc(pkgbits.SectionObj)
+	idx := r.Reloc(pkgbits.RelocObj)
 
 	explicits := make([]typeInfo, r.Len())
 	for i := range explicits {
@@ -692,7 +685,7 @@ func (pr *pkgReader) objIdx(idx index, implicits, explicits []*types.Type, shape
 // Other sources of internal failure (such as duplicate definitions) still fail
 // the build.
 func (pr *pkgReader) objIdxMayFail(idx index, implicits, explicits []*types.Type, shaped bool) (ir.Node, error) {
-	rname := pr.newReader(pkgbits.SectionName, idx, pkgbits.SyncObject1)
+	rname := pr.newReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
 	_, sym := rname.qualifiedIdent()
 	tag := pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
 
@@ -721,8 +714,8 @@ func (pr *pkgReader) objIdxMayFail(idx index, implicits, explicits []*types.Type
 		return sym.Def.(*ir.Name), nil
 	}
 
-	r := pr.newReader(pkgbits.SectionObj, idx, pkgbits.SyncObject1)
-	rext := pr.newReader(pkgbits.SectionObjExt, idx, pkgbits.SyncObject1)
+	r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1)
+	rext := pr.newReader(pkgbits.RelocObjExt, idx, pkgbits.SyncObject1)
 
 	r.dict = dict
 	rext.dict = dict
@@ -769,7 +762,7 @@ func (pr *pkgReader) objIdxMayFail(idx index, implicits, explicits []*types.Type
 		if hack {
 			if sym.Def != nil {
 				name = sym.Def.(*ir.Name)
-				assert(types.IdenticalStrict(name.Type(), typ))
+				assert(name.Type() == typ)
 				return name, nil
 			}
 			sym.Def = name
@@ -966,7 +959,7 @@ func shapify(targ *types.Type, basic bool) *types.Type {
 
 // objDictIdx reads and returns the specified object dictionary.
 func (pr *pkgReader) objDictIdx(sym *types.Sym, idx index, implicits, explicits []*types.Type, shaped bool) (*readerDict, error) {
-	r := pr.newReader(pkgbits.SectionObjDict, idx, pkgbits.SyncObject1)
+	r := pr.newReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
 
 	dict := readerDict{
 		shaped: shaped,
@@ -991,7 +984,7 @@ func (pr *pkgReader) objDictIdx(sym *types.Sym, idx index, implicits, explicits
 	dict.derived = make([]derivedInfo, r.Len())
 	dict.derivedTypes = make([]*types.Type, len(dict.derived))
 	for i := range dict.derived {
-		dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.SectionType)}
+		dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.RelocType)}
 		if r.Version().Has(pkgbits.DerivedInfoNeeded) {
 			assert(!r.Bool())
 		}
@@ -1014,25 +1007,7 @@ func (pr *pkgReader) objDictIdx(sym *types.Sym, idx index, implicits, explicits
 	// arguments.
 	for i, targ := range dict.targs {
 		basic := r.Bool()
-		isPointerShape := basic && targ.IsPtr() && !targ.Elem().NotInHeap()
-		// We should not do shapify during the reshaping process, see #71184.
-		// However, this only matters for shapify a pointer type, which will
-		// lose the original underlying type.
-		//
-		// Example with a pointer type:
-		//
-		// - First, shapifying *[]T -> *uint8
-		// - During the reshaping process, *uint8 is shapified to *go.shape.uint8
-		// - This ends up with a different type with the original *[]T
-		//
-		// For a non-pointer type:
-		//
-		// - int -> go.shape.int
-		// - go.shape.int -> go.shape.int
-		//
-		// We always end up with the identical type.
-		canShapify := !pr.reshaping || !isPointerShape
-		if dict.shaped && canShapify {
+		if dict.shaped {
 			dict.targs[i] = shapify(targ, basic)
 		}
 	}
@@ -1303,7 +1278,7 @@ func (r *reader) addBody(fn *ir.Func, method *types.Sym) {
 	// generic functions; see comment in funcExt.
 	assert(fn.Nname.Defn != nil)
 
-	idx := r.Reloc(pkgbits.SectionBody)
+	idx := r.Reloc(pkgbits.RelocBody)
 
 	pri := pkgReaderIndex{r.p, idx, r.dict, method, nil}
 	bodyReader[fn] = pri
@@ -1317,7 +1292,7 @@ func (r *reader) addBody(fn *ir.Func, method *types.Sym) {
 }
 
 func (pri pkgReaderIndex) funcBody(fn *ir.Func) {
-	r := pri.asReader(pkgbits.SectionBody, pkgbits.SyncFuncBody)
+	r := pri.asReader(pkgbits.RelocBody, pkgbits.SyncFuncBody)
 	r.funcBody(fn)
 }
 
@@ -2470,10 +2445,7 @@ func (r *reader) expr() (res ir.Node) {
 
 	case exprReshape:
 		typ := r.typ()
-		old := r.reshaping
-		r.reshaping = true
 		x := r.expr()
-		r.reshaping = old
 
 		if types.IdenticalStrict(x.Type(), typ) {
 			return x
@@ -2596,10 +2568,7 @@ func (r *reader) funcInst(pos src.XPos) (wrapperFn, baseFn, dictPtr ir.Node) {
 		info := r.dict.subdicts[idx]
 		explicits := r.p.typListIdx(info.explicits, r.dict)
 
-		old := r.p.reshaping
-		r.p.reshaping = r.reshaping
 		baseFn = r.p.objIdx(info.idx, implicits, explicits, true).(*ir.Name)
-		r.p.reshaping = old
 
 		// TODO(mdempsky): Is there a more robust way to get the
 		// dictionary pointer type here?
@@ -2622,7 +2591,7 @@ func (r *reader) funcInst(pos src.XPos) (wrapperFn, baseFn, dictPtr ir.Node) {
 }
 
 func (pr *pkgReader) objDictName(idx index, implicits, explicits []*types.Type) *ir.Name {
-	rname := pr.newReader(pkgbits.SectionName, idx, pkgbits.SyncObject1)
+	rname := pr.newReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
 	_, sym := rname.qualifiedIdent()
 	tag := pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
 
@@ -3468,7 +3437,7 @@ func unifiedInlineCall(callerfn *ir.Func, call *ir.CallExpr, fn *ir.Func, inlInd
 		expandInline(fn, pri)
 	}
 
-	r := pri.asReader(pkgbits.SectionBody, pkgbits.SyncFuncBody)
+	r := pri.asReader(pkgbits.RelocBody, pkgbits.SyncFuncBody)
 
 	tmpfn := ir.NewFunc(fn.Pos(), fn.Nname.Pos(), callerfn.Sym(), fn.Type())
 
@@ -3657,7 +3626,7 @@ func expandInline(fn *ir.Func, pri pkgReaderIndex) {
 	tmpfn.ClosureVars = fn.ClosureVars
 
 	{
-		r := pri.asReader(pkgbits.SectionBody, pkgbits.SyncFuncBody)
+		r := pri.asReader(pkgbits.RelocBody, pkgbits.SyncFuncBody)
 
 		// Don't change parameter's Sym/Nname fields.
 		r.funarghack = true
@@ -4014,12 +3983,11 @@ func addTailCall(pos src.XPos, fn *ir.Func, recv ir.Node, method *types.Field) {
 
 	if recv.Type() != nil && recv.Type().IsPtr() && method.Type.Recv().Type.IsPtr() &&
 		method.Embedded != 0 && !types.IsInterfaceMethod(method.Type) &&
-		!unifiedHaveInlineBody(ir.MethodExprName(dot).Func) &&
 		!(base.Ctxt.Arch.Name == "ppc64le" && base.Ctxt.Flag_dynlink) {
 		if base.Debug.TailCall != 0 {
 			base.WarnfAt(fn.Nname.Type().Recv().Type.Elem().Pos(), "tail call emitted for the method %v wrapper", method.Nname)
 		}
-		// Prefer OTAILCALL to reduce code size (except the case when the called method can be inlined).
+		// Prefer OTAILCALL to reduce code size (the called method can be inlined).
 		fn.Body.Append(ir.NewTailCallStmt(pos, call))
 		return
 	}
diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go
index 85982d7c189e14..59e8c1013fd168 100644
--- a/src/cmd/compile/internal/noder/unified.go
+++ b/src/cmd/compile/internal/noder/unified.go
@@ -199,7 +199,7 @@ func unified(m posMap, noders []*noder) {
 	localPkgReader = newPkgReader(pkgbits.NewPkgDecoder(types.LocalPkg.Path, data))
 	readPackage(localPkgReader, types.LocalPkg, true)
 
-	r := localPkgReader.newReader(pkgbits.SectionMeta, pkgbits.PrivateRootIdx, pkgbits.SyncPrivate)
+	r := localPkgReader.newReader(pkgbits.RelocMeta, pkgbits.PrivateRootIdx, pkgbits.SyncPrivate)
 	r.pkgInit(types.LocalPkg, target)
 
 	readBodies(target, false)
@@ -322,8 +322,8 @@ func writePkgStub(m posMap, noders []*noder) string {
 
 	pw.collectDecls(noders)
 
-	publicRootWriter := pw.newWriter(pkgbits.SectionMeta, pkgbits.SyncPublic)
-	privateRootWriter := pw.newWriter(pkgbits.SectionMeta, pkgbits.SyncPrivate)
+	publicRootWriter := pw.newWriter(pkgbits.RelocMeta, pkgbits.SyncPublic)
+	privateRootWriter := pw.newWriter(pkgbits.RelocMeta, pkgbits.SyncPrivate)
 
 	assert(publicRootWriter.Idx == pkgbits.PublicRootIdx)
 	assert(privateRootWriter.Idx == pkgbits.PrivateRootIdx)
@@ -406,7 +406,7 @@ func freePackage(pkg *types2.Package) {
 // import.
 func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
 	{
-		r := pr.newReader(pkgbits.SectionMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
+		r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
 
 		pkg := r.pkg()
 		// This error can happen if "go tool compile" is called with wrong "-p" flag, see issue #54542.
@@ -424,7 +424,7 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
 			if r.Version().Has(pkgbits.DerivedFuncInstance) {
 				assert(!r.Bool())
 			}
-			idx := r.Reloc(pkgbits.SectionObj)
+			idx := r.Reloc(pkgbits.RelocObj)
 			assert(r.Len() == 0)
 
 			path, name, code := r.p.PeekObj(idx)
@@ -437,7 +437,7 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
 	}
 
 	if !localStub {
-		r := pr.newReader(pkgbits.SectionMeta, pkgbits.PrivateRootIdx, pkgbits.SyncPrivate)
+		r := pr.newReader(pkgbits.RelocMeta, pkgbits.PrivateRootIdx, pkgbits.SyncPrivate)
 
 		if r.Bool() {
 			sym := importpkg.Lookup(".inittask")
@@ -449,7 +449,7 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
 		for i, n := 0, r.Len(); i < n; i++ {
 			path := r.String()
 			name := r.String()
-			idx := r.Reloc(pkgbits.SectionBody)
+			idx := r.Reloc(pkgbits.RelocBody)
 
 			sym := types.NewPkg(path, "").Lookup(name)
 			if _, ok := importBodyReader[sym]; !ok {
@@ -477,8 +477,8 @@ func writeUnifiedExport(out io.Writer) {
 		bodies: make(map[*types.Sym]index),
 	}
 
-	publicRootWriter := l.pw.NewEncoder(pkgbits.SectionMeta, pkgbits.SyncPublic)
-	privateRootWriter := l.pw.NewEncoder(pkgbits.SectionMeta, pkgbits.SyncPrivate)
+	publicRootWriter := l.pw.NewEncoder(pkgbits.RelocMeta, pkgbits.SyncPublic)
+	privateRootWriter := l.pw.NewEncoder(pkgbits.RelocMeta, pkgbits.SyncPrivate)
 	assert(publicRootWriter.Idx == pkgbits.PublicRootIdx)
 	assert(privateRootWriter.Idx == pkgbits.PrivateRootIdx)
 
@@ -486,10 +486,10 @@ func writeUnifiedExport(out io.Writer) {
 
 	{
 		pr := localPkgReader
-		r := pr.NewDecoder(pkgbits.SectionMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
+		r := pr.NewDecoder(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
 
 		r.Sync(pkgbits.SyncPkg)
-		selfPkgIdx = l.relocIdx(pr, pkgbits.SectionPkg, r.Reloc(pkgbits.SectionPkg))
+		selfPkgIdx = l.relocIdx(pr, pkgbits.RelocPkg, r.Reloc(pkgbits.RelocPkg))
 
 		if r.Version().Has(pkgbits.HasInit) {
 			r.Bool()
@@ -500,7 +500,7 @@ func writeUnifiedExport(out io.Writer) {
 			if r.Version().Has(pkgbits.DerivedFuncInstance) {
 				assert(!r.Bool())
 			}
-			idx := r.Reloc(pkgbits.SectionObj)
+			idx := r.Reloc(pkgbits.RelocObj)
 			assert(r.Len() == 0)
 
 			xpath, xname, xtag := pr.PeekObj(idx)
@@ -508,7 +508,7 @@ func writeUnifiedExport(out io.Writer) {
 			assert(xtag != pkgbits.ObjStub)
 
 			if types.IsExported(xname) {
-				l.relocIdx(pr, pkgbits.SectionObj, idx)
+				l.relocIdx(pr, pkgbits.RelocObj, idx)
 			}
 		}
 
@@ -525,7 +525,7 @@ func writeUnifiedExport(out io.Writer) {
 		w := publicRootWriter
 
 		w.Sync(pkgbits.SyncPkg)
-		w.Reloc(pkgbits.SectionPkg, selfPkgIdx)
+		w.Reloc(pkgbits.RelocPkg, selfPkgIdx)
 
 		if w.Version().Has(pkgbits.HasInit) {
 			w.Bool(false)
@@ -537,7 +537,7 @@ func writeUnifiedExport(out io.Writer) {
 			if w.Version().Has(pkgbits.DerivedFuncInstance) {
 				w.Bool(false)
 			}
-			w.Reloc(pkgbits.SectionObj, idx)
+			w.Reloc(pkgbits.RelocObj, idx)
 			w.Len(0)
 		}
 
@@ -564,7 +564,7 @@ func writeUnifiedExport(out io.Writer) {
 		for _, body := range bodies {
 			w.String(body.sym.Pkg.Path)
 			w.String(body.sym.Name)
-			w.Reloc(pkgbits.SectionBody, body.idx)
+			w.Reloc(pkgbits.RelocBody, body.idx)
 		}
 
 		w.Sync(pkgbits.SyncEOF)
diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go
index dd79c3ef4c87cb..f4b02f279dd5f2 100644
--- a/src/cmd/compile/internal/noder/writer.go
+++ b/src/cmd/compile/internal/noder/writer.go
@@ -174,7 +174,7 @@ func (pw *pkgWriter) typeOf(expr syntax.Expr) types2.Type {
 type writer struct {
 	p *pkgWriter
 
-	*pkgbits.Encoder
+	pkgbits.Encoder
 
 	// sig holds the signature for the current function body, if any.
 	sig *types2.Signature
@@ -367,7 +367,7 @@ func (dict *writerDict) itabIdx(typInfo, ifaceInfo typeInfo) int {
 	return idx
 }
 
-func (pw *pkgWriter) newWriter(k pkgbits.SectionKind, marker pkgbits.SyncMarker) *writer {
+func (pw *pkgWriter) newWriter(k pkgbits.RelocKind, marker pkgbits.SyncMarker) *writer {
 	return &writer{
 		Encoder: pw.NewEncoder(k, marker),
 		p:       pw,
@@ -395,7 +395,7 @@ func (w *writer) pos(p poser) {
 // posBase writes a reference to the given PosBase into the element
 // bitstream.
 func (w *writer) posBase(b *syntax.PosBase) {
-	w.Reloc(pkgbits.SectionPosBase, w.p.posBaseIdx(b))
+	w.Reloc(pkgbits.RelocPosBase, w.p.posBaseIdx(b))
 }
 
 // posBaseIdx returns the index for the given PosBase.
@@ -404,7 +404,7 @@ func (pw *pkgWriter) posBaseIdx(b *syntax.PosBase) index {
 		return idx
 	}
 
-	w := pw.newWriter(pkgbits.SectionPosBase, pkgbits.SyncPosBase)
+	w := pw.newWriter(pkgbits.RelocPosBase, pkgbits.SyncPosBase)
 	w.p.posBasesIdx[b] = w.Idx
 
 	w.String(trimFilename(b))
@@ -427,7 +427,7 @@ func (w *writer) pkg(pkg *types2.Package) {
 
 func (w *writer) pkgRef(idx index) {
 	w.Sync(pkgbits.SyncPkg)
-	w.Reloc(pkgbits.SectionPkg, idx)
+	w.Reloc(pkgbits.RelocPkg, idx)
 }
 
 // pkgIdx returns the index for the given package, adding it to the
@@ -437,7 +437,7 @@ func (pw *pkgWriter) pkgIdx(pkg *types2.Package) index {
 		return idx
 	}
 
-	w := pw.newWriter(pkgbits.SectionPkg, pkgbits.SyncPkgDef)
+	w := pw.newWriter(pkgbits.RelocPkg, pkgbits.SyncPkgDef)
 	pw.pkgsIdx[pkg] = w.Idx
 
 	// The universe and package unsafe need to be handled specially by
@@ -489,7 +489,7 @@ func (w *writer) typInfo(info typeInfo) {
 		w.Len(int(info.idx))
 		w.derived = true
 	} else {
-		w.Reloc(pkgbits.SectionType, info.idx)
+		w.Reloc(pkgbits.RelocType, info.idx)
 	}
 }
 
@@ -520,7 +520,7 @@ func (pw *pkgWriter) typIdx(typ types2.Type, dict *writerDict) typeInfo {
 		}
 	}
 
-	w := pw.newWriter(pkgbits.SectionType, pkgbits.SyncTypeIdx)
+	w := pw.newWriter(pkgbits.RelocType, pkgbits.SyncTypeIdx)
 	w.dict = dict
 
 	switch typ := typ.(type) {
@@ -737,7 +737,7 @@ func (w *writer) objInfo(info objInfo) {
 	if w.Version().Has(pkgbits.DerivedFuncInstance) {
 		w.Bool(false)
 	}
-	w.Reloc(pkgbits.SectionObj, info.idx)
+	w.Reloc(pkgbits.RelocObj, info.idx)
 
 	w.Len(len(info.explicits))
 	for _, info := range info.explicits {
@@ -799,10 +799,10 @@ func (pw *pkgWriter) objIdx(obj types2.Object) index {
 	// TODO(mdempsky): Re-evaluate whether RelocName still makes sense
 	// to keep separate from RelocObj.
 
-	w := pw.newWriter(pkgbits.SectionObj, pkgbits.SyncObject1)
-	wext := pw.newWriter(pkgbits.SectionObjExt, pkgbits.SyncObject1)
-	wname := pw.newWriter(pkgbits.SectionName, pkgbits.SyncObject1)
-	wdict := pw.newWriter(pkgbits.SectionObjDict, pkgbits.SyncObject1)
+	w := pw.newWriter(pkgbits.RelocObj, pkgbits.SyncObject1)
+	wext := pw.newWriter(pkgbits.RelocObjExt, pkgbits.SyncObject1)
+	wname := pw.newWriter(pkgbits.RelocName, pkgbits.SyncObject1)
+	wdict := pw.newWriter(pkgbits.RelocObjDict, pkgbits.SyncObject1)
 
 	pw.objsIdx[obj] = w.Idx // break cycles
 	assert(wext.Idx == w.Idx)
@@ -917,7 +917,7 @@ func (w *writer) objDict(obj types2.Object, dict *writerDict) {
 	nderived := len(dict.derived)
 	w.Len(nderived)
 	for _, typ := range dict.derived {
-		w.Reloc(pkgbits.SectionType, typ.idx)
+		w.Reloc(pkgbits.RelocType, typ.idx)
 		if w.Version().Has(pkgbits.DerivedInfoNeeded) {
 			w.Bool(false)
 		}
@@ -1132,7 +1132,7 @@ func (w *writer) funcExt(obj *types2.Func) {
 	}
 
 	w.Bool(false) // stub extension
-	w.Reloc(pkgbits.SectionBody, body)
+	w.Reloc(pkgbits.RelocBody, body)
 	w.Sync(pkgbits.SyncEOF)
 }
 
@@ -1170,7 +1170,7 @@ func (w *writer) pragmaFlag(p ir.PragmaFlag) {
 // bodyIdx returns the index for the given function body (specified by
 // block), adding it to the export data
 func (pw *pkgWriter) bodyIdx(sig *types2.Signature, block *syntax.BlockStmt, dict *writerDict) (idx index, closureVars []posVar) {
-	w := pw.newWriter(pkgbits.SectionBody, pkgbits.SyncFuncBody)
+	w := pw.newWriter(pkgbits.RelocBody, pkgbits.SyncFuncBody)
 	w.sig = sig
 	w.dict = dict
 
@@ -2401,7 +2401,7 @@ func (w *writer) funcLit(expr *syntax.FuncLit) {
 		w.useLocal(cv.pos, cv.var_)
 	}
 
-	w.Reloc(pkgbits.SectionBody, body)
+	w.Reloc(pkgbits.RelocBody, body)
 }
 
 type posVar struct {
diff --git a/src/cmd/compile/internal/objw/prog.go b/src/cmd/compile/internal/objw/prog.go
index 753fd8615ca9c5..84fb9967235ea0 100644
--- a/src/cmd/compile/internal/objw/prog.go
+++ b/src/cmd/compile/internal/objw/prog.go
@@ -116,7 +116,10 @@ func (pp *Progs) Flush() {
 func (pp *Progs) Free() {
 	if base.Ctxt.CanReuseProgs() {
 		// Clear progs to enable GC and avoid abuse.
-		clear(pp.Cache[:pp.CacheIndex])
+		s := pp.Cache[:pp.CacheIndex]
+		for i := range s {
+			s[i] = obj.Prog{}
+		}
 	}
 	// Clear pp to avoid abuse.
 	*pp = Progs{}
diff --git a/src/cmd/compile/internal/pkginit/initAsanGlobals.go b/src/cmd/compile/internal/pkginit/initAsanGlobals.go
index 96c052204a2c11..42db0eaf1bbd2a 100644
--- a/src/cmd/compile/internal/pkginit/initAsanGlobals.go
+++ b/src/cmd/compile/internal/pkginit/initAsanGlobals.go
@@ -227,12 +227,6 @@ func canInstrumentGlobal(g ir.Node) bool {
 		return false
 	}
 
-	// Do not instrument counter globals in internal/fuzz. These globals are replaced by the linker.
-	// See go.dev/issue/72766 for more details.
-	if n.Sym().Pkg.Path == "internal/fuzz" && (n.Sym().Name == "_counters" || n.Sym().Name == "_ecounters") {
-		return false
-	}
-
 	// Do not instrument globals that are linknamed, because their home package will do the work.
 	if n.Sym().Linkname != "" {
 		return false
diff --git a/src/cmd/compile/internal/reflectdata/map_swiss.go b/src/cmd/compile/internal/reflectdata/map_swiss.go
index 54266a604a7ec2..074c36a453339a 100644
--- a/src/cmd/compile/internal/reflectdata/map_swiss.go
+++ b/src/cmd/compile/internal/reflectdata/map_swiss.go
@@ -159,7 +159,6 @@ func SwissMapType() *types.Type {
 	//     globalShift uint8
 	//
 	//     writing uint8
-	//     tombstonePossible bool
 	//     // N.B Padding
 	//
 	//     clearSeq uint64
@@ -173,7 +172,6 @@ func SwissMapType() *types.Type {
 		makefield("globalDepth", types.Types[types.TUINT8]),
 		makefield("globalShift", types.Types[types.TUINT8]),
 		makefield("writing", types.Types[types.TUINT8]),
-		makefield("tombstonePossible", types.Types[types.TBOOL]),
 		makefield("clearSeq", types.Types[types.TUINT64]),
 	}
 
diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go
index fb60569670ea66..4202ff3358f51d 100644
--- a/src/cmd/compile/internal/reflectdata/reflect.go
+++ b/src/cmd/compile/internal/reflectdata/reflect.go
@@ -1284,7 +1284,9 @@ func dgcptrmask(t *types.Type, write bool) *obj.LSym {
 // word offsets in t that hold pointers.
 // ptrmask is assumed to fit at least types.PtrDataSize(t)/PtrSize bits.
 func fillptrmask(t *types.Type, ptrmask []byte) {
-	clear(ptrmask)
+	for i := range ptrmask {
+		ptrmask[i] = 0
+	}
 	if !t.HasPointers() {
 		return
 	}
diff --git a/src/cmd/compile/internal/riscv64/ssa.go b/src/cmd/compile/internal/riscv64/ssa.go
index 21edcabc58b3a8..952a2050a08e08 100644
--- a/src/cmd/compile/internal/riscv64/ssa.go
+++ b/src/cmd/compile/internal/riscv64/ssa.go
@@ -419,8 +419,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
 		ssa.OpRISCV64FMVSX, ssa.OpRISCV64FMVDX,
 		ssa.OpRISCV64FCVTSW, ssa.OpRISCV64FCVTSL, ssa.OpRISCV64FCVTWS, ssa.OpRISCV64FCVTLS,
 		ssa.OpRISCV64FCVTDW, ssa.OpRISCV64FCVTDL, ssa.OpRISCV64FCVTWD, ssa.OpRISCV64FCVTLD, ssa.OpRISCV64FCVTDS, ssa.OpRISCV64FCVTSD,
-		ssa.OpRISCV64NOT, ssa.OpRISCV64NEG, ssa.OpRISCV64NEGW, ssa.OpRISCV64CLZ, ssa.OpRISCV64CLZW, ssa.OpRISCV64CTZ, ssa.OpRISCV64CTZW,
-		ssa.OpRISCV64REV8, ssa.OpRISCV64CPOP, ssa.OpRISCV64CPOPW:
+		ssa.OpRISCV64NOT, ssa.OpRISCV64NEG, ssa.OpRISCV64NEGW, ssa.OpRISCV64CLZ, ssa.OpRISCV64CLZW, ssa.OpRISCV64CTZ, ssa.OpRISCV64CTZW:
 		p := s.Prog(v.Op.Asm())
 		p.From.Type = obj.TYPE_REG
 		p.From.Reg = v.Args[0].Reg()
diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64.rules b/src/cmd/compile/internal/ssa/_gen/AMD64.rules
index d55dfe70acc155..dd3b9a68d744c7 100644
--- a/src/cmd/compile/internal/ssa/_gen/AMD64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/AMD64.rules
@@ -882,10 +882,44 @@
 // (ANDQconst [0xFFFFFFFF] x) => (MOVLQZX x)
 
 // strength reduction
+// Assumes that the following costs from https://gmplib.org/~tege/x86-timing.pdf:
+//    1 - addq, shlq, leaq, negq, subq
+//    3 - imulq
+// This limits the rewrites to two instructions.
+// Note that negq always operates in-place,
+// which can require a register-register move
+// to preserve the original value,
+// so it must be used with care.
+(MUL(Q|L)const [-9] x) => (NEG(Q|L) (LEA(Q|L)8  x x))
+(MUL(Q|L)const [-5] x) => (NEG(Q|L) (LEA(Q|L)4  x x))
+(MUL(Q|L)const [-3] x) => (NEG(Q|L) (LEA(Q|L)2  x x))
+(MUL(Q|L)const [-1] x) => (NEG(Q|L) x)
 (MUL(Q|L)const [ 0] _) => (MOV(Q|L)const [0])
 (MUL(Q|L)const [ 1] x) => x
-(MULQconst [c] x) && canMulStrengthReduce(config, int64(c)) => {mulStrengthReduce(v, x, int64(c))}
-(MULLconst [c] x) && v.Type.Size() <= 4 && canMulStrengthReduce32(config, c) => {mulStrengthReduce32(v, x, c)}
+(MUL(Q|L)const [ 3] x) => (LEA(Q|L)2 x x)
+(MUL(Q|L)const [ 5] x) => (LEA(Q|L)4 x x)
+(MUL(Q|L)const [ 7] x) => (LEA(Q|L)2 x (LEA(Q|L)2  x x))
+(MUL(Q|L)const [ 9] x) => (LEA(Q|L)8 x x)
+(MUL(Q|L)const [11] x) => (LEA(Q|L)2 x (LEA(Q|L)4  x x))
+(MUL(Q|L)const [13] x) => (LEA(Q|L)4 x (LEA(Q|L)2  x x))
+(MUL(Q|L)const [19] x) => (LEA(Q|L)2 x (LEA(Q|L)8  x x))
+(MUL(Q|L)const [21] x) => (LEA(Q|L)4 x (LEA(Q|L)4  x x))
+(MUL(Q|L)const [25] x) => (LEA(Q|L)8 x (LEA(Q|L)2  x x))
+(MUL(Q|L)const [27] x) => (LEA(Q|L)8 (LEA(Q|L)2  x x) (LEA(Q|L)2  x x))
+(MUL(Q|L)const [37] x) => (LEA(Q|L)4 x (LEA(Q|L)8  x x))
+(MUL(Q|L)const [41] x) => (LEA(Q|L)8 x (LEA(Q|L)4  x x))
+(MUL(Q|L)const [45] x) => (LEA(Q|L)8 (LEA(Q|L)4  x x) (LEA(Q|L)4  x x))
+(MUL(Q|L)const [73] x) => (LEA(Q|L)8 x (LEA(Q|L)8  x x))
+(MUL(Q|L)const [81] x) => (LEA(Q|L)8 (LEA(Q|L)8  x x) (LEA(Q|L)8  x x))
+
+(MUL(Q|L)const [c] x) && isPowerOfTwo(int64(c)+1) && c >=  15 => (SUB(Q|L)  (SHL(Q|L)const  [int8(log64(int64(c)+1))] x) x)
+(MUL(Q|L)const [c] x) && isPowerOfTwo(c-1) && c >=  17 => (LEA(Q|L)1 (SHL(Q|L)const  [int8(log32(c-1))] x) x)
+(MUL(Q|L)const [c] x) && isPowerOfTwo(c-2) && c >=  34 => (LEA(Q|L)2 (SHL(Q|L)const  [int8(log32(c-2))] x) x)
+(MUL(Q|L)const [c] x) && isPowerOfTwo(c-4) && c >=  68 => (LEA(Q|L)4 (SHL(Q|L)const  [int8(log32(c-4))] x) x)
+(MUL(Q|L)const [c] x) && isPowerOfTwo(c-8) && c >= 136 => (LEA(Q|L)8 (SHL(Q|L)const  [int8(log32(c-8))] x) x)
+(MUL(Q|L)const [c] x) && c%3 == 0 && isPowerOfTwo(c/3) => (SHL(Q|L)const [int8(log32(c/3))] (LEA(Q|L)2  x x))
+(MUL(Q|L)const [c] x) && c%5 == 0 && isPowerOfTwo(c/5) => (SHL(Q|L)const [int8(log32(c/5))] (LEA(Q|L)4  x x))
+(MUL(Q|L)const [c] x) && c%9 == 0 && isPowerOfTwo(c/9) => (SHL(Q|L)const [int8(log32(c/9))] (LEA(Q|L)8  x x))
 
 // Prefer addition when shifting left by one
 (SHL(Q|L)const [1] x) => (ADD(Q|L) x x)
@@ -921,12 +955,12 @@
 (LEA(Q|L)8 [c] {s} x (ADD(Q|L)const [d] y)) && is32Bit(int64(c)+8*int64(d)) && y.Op != OpSB => (LEA(Q|L)8 [c+8*d] {s} x y)
 
 // fold shifts into LEAQx/LEALx
-(LEA(Q|L)1 [c] {s} x z:(ADD(Q|L) y y)) && x != z => (LEA(Q|L)2 [c] {s} x y)
+(LEA(Q|L)1 [c] {s} x (ADD(Q|L) y y)) => (LEA(Q|L)2 [c] {s} x y)
 (LEA(Q|L)1 [c] {s} x (SHL(Q|L)const [2] y)) => (LEA(Q|L)4 [c] {s} x y)
 (LEA(Q|L)1 [c] {s} x (SHL(Q|L)const [3] y)) => (LEA(Q|L)8 [c] {s} x y)
-(LEA(Q|L)2 [c] {s} x z:(ADD(Q|L) y y)) && x != z => (LEA(Q|L)4 [c] {s} x y)
+(LEA(Q|L)2 [c] {s} x (ADD(Q|L) y y)) => (LEA(Q|L)4 [c] {s} x y)
 (LEA(Q|L)2 [c] {s} x (SHL(Q|L)const [2] y)) => (LEA(Q|L)8 [c] {s} x y)
-(LEA(Q|L)4 [c] {s} x z:(ADD(Q|L) y y)) && x != z => (LEA(Q|L)8 [c] {s} x y)
+(LEA(Q|L)4 [c] {s} x (ADD(Q|L) y y)) => (LEA(Q|L)8 [c] {s} x y)
 
 // (x + x) << 1 -> x << 2
 (LEA(Q|L)2 [0] {s} (ADD(Q|L) x x) x) && s == nil => (SHL(Q|L)const [2] x)
@@ -1670,13 +1704,3 @@
 
 // Convert atomic logical operations to easier ones if we don't use the result.
 (Select1 a:(LoweredAtomic(And64|And32|Or64|Or32) ptr val mem)) && a.Uses == 1 && clobber(a) => ((ANDQ|ANDL|ORQ|ORL)lock ptr val mem)
-
-// If we are checking the results of an add, use the flags directly from the add.
-// Note that this only works for EQ/NE. ADD sets the CF/OF flags differently
-// than TEST sets them.
-// Note also that a.Args[0] here refers to the post-flagify'd value.
-((EQ|NE) t:(TESTQ a:(ADDQconst [c] x) a)) && t.Uses == 1 && flagify(a) => ((EQ|NE) (Select1  a.Args[0]))
-((EQ|NE) t:(TESTL a:(ADDLconst [c] x) a)) && t.Uses == 1 && flagify(a) => ((EQ|NE) (Select1  a.Args[0]))
-
-// If we don't use the flags any more, just use the standard op.
-(Select0 a:(ADD(Q|L)constflags [c] x)) && a.Uses == 1 => (ADD(Q|L)const [c] x)
diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go b/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go
index 0f17843565276a..1cce32eba32523 100644
--- a/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go
@@ -303,11 +303,6 @@ func init() {
 
 		// computes -arg0, flags set for 0-arg0.
 		{name: "NEGLflags", argLength: 1, reg: gp11flags, typ: "(UInt32,Flags)", asm: "NEGL", resultInArg0: true},
-		// compute arg0+auxint. flags set for arg0+auxint.
-		// NOTE: we pretend the CF/OF flags are undefined for these instructions,
-		// so we can use INC/DEC instead of ADDQconst if auxint is +/-1. (INC/DEC don't modify CF.)
-		{name: "ADDQconstflags", argLength: 1, reg: gp11flags, aux: "Int32", asm: "ADDQ", resultInArg0: true},
-		{name: "ADDLconstflags", argLength: 1, reg: gp11flags, aux: "Int32", asm: "ADDL", resultInArg0: true},
 
 		// The following 4 add opcodes return the low 64 bits of the sum in the first result and
 		// the carry (the 65th bit) in the carry flag.
@@ -897,8 +892,8 @@ func init() {
 				inputs:   []regMask{buildReg("DI")},
 				clobbers: buildReg("DI"),
 			},
-			//faultOnNilArg0: true, // Note: removed for 73748. TODO: reenable at some point
-			unsafePoint: true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
+			faultOnNilArg0: true,
+			unsafePoint:    true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
 		},
 
 		// arg0 = address of memory to zero
@@ -935,10 +930,10 @@ func init() {
 				inputs:   []regMask{buildReg("DI"), buildReg("SI")},
 				clobbers: buildReg("DI SI X0"), // uses X0 as a temporary
 			},
-			clobberFlags: true,
-			//faultOnNilArg0: true, // Note: removed for 73748. TODO: reenable at some point
-			//faultOnNilArg1: true,
-			unsafePoint: true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
+			clobberFlags:   true,
+			faultOnNilArg0: true,
+			faultOnNilArg1: true,
+			unsafePoint:    true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
 		},
 
 		// arg0 = destination pointer
diff --git a/src/cmd/compile/internal/ssa/_gen/ARM64.rules b/src/cmd/compile/internal/ssa/_gen/ARM64.rules
index 01fe3a74f7d551..70400467111472 100644
--- a/src/cmd/compile/internal/ssa/_gen/ARM64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/ARM64.rules
@@ -472,39 +472,26 @@
 		(MOVDstore dst (MOVDload src mem) mem))
 (Move [16] dst src mem) =>
 	(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)
-
-(Move [s] dst src mem) && s > 16 && s <= 24 =>
-	(MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem)
-		(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))
-(Move [s] dst src mem) && s > 24 && s <= 32 =>
-	(STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem))
+(Move [32] dst src mem) =>
+	(STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem))
 		(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))
-(Move [s] dst src mem) && s > 32 && s <= 40 =>
-	(MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem)
+(Move [48] dst src mem) =>
+	(STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem))
 		(STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem))
 			(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)))
-(Move [s] dst src mem) && s > 40 && s <= 48 =>
-	(STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem))
-		(STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem))
-			(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)))
-(Move [s] dst src mem) && s > 48 && s <= 56 =>
-	(MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem)
-		(STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem))
-			(STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem))
-				(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))))
-(Move [s] dst src mem) && s > 56 && s <= 64 =>
-	(STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem))
+(Move [64] dst src mem) =>
+	(STP [48] dst (Select0  (LDP [48] src mem)) (Select1  (LDP [48] src mem))
 		(STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem))
 			(STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem))
 				(STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))))
 
 // strip off fractional word move
-(Move [s] dst src mem) && s%16 != 0 && s%16 <= 8 && s > 64 =>
+(Move [s] dst src mem) && s%16 != 0 && s%16 <= 8 && s > 16 =>
 	(Move [8]
 		(OffPtr  dst [s-8])
 		(OffPtr  src [s-8])
 		(Move [s-s%16] dst src mem))
-(Move [s] dst src mem) && s%16 != 0 && s%16 > 8 && s > 64 =>
+(Move [s] dst src mem) && s%16 != 0 && s%16 > 8 && s > 16 =>
 	(Move [16]
 		(OffPtr  dst [s-16])
 		(OffPtr  src [s-16])
@@ -1064,14 +1051,27 @@
 (SBCSflags x y (Select1  (NEGSflags (MOVDconst [0])))) => (SUBSflags x y)
 
 // mul by constant
+(MUL x (MOVDconst [-1])) => (NEG x)
 (MUL _ (MOVDconst [0])) => (MOVDconst [0])
 (MUL x (MOVDconst [1])) => x
-
+(MUL x (MOVDconst [c])) && isPowerOfTwo(c) => (SLLconst [log64(c)] x)
+(MUL x (MOVDconst [c])) && isPowerOfTwo(c-1) && c >= 3 => (ADDshiftLL x x [log64(c-1)])
+(MUL x (MOVDconst [c])) && isPowerOfTwo(c+1) && c >= 7 => (ADDshiftLL (NEG  x) x [log64(c+1)])
+(MUL x (MOVDconst [c])) && c%3 == 0 && isPowerOfTwo(c/3) => (SLLconst [log64(c/3)] (ADDshiftLL  x x [1]))
+(MUL x (MOVDconst [c])) && c%5 == 0 && isPowerOfTwo(c/5) => (SLLconst [log64(c/5)] (ADDshiftLL  x x [2]))
+(MUL x (MOVDconst [c])) && c%7 == 0 && isPowerOfTwo(c/7) => (SLLconst [log64(c/7)] (ADDshiftLL  (NEG  x) x [3]))
+(MUL x (MOVDconst [c])) && c%9 == 0 && isPowerOfTwo(c/9) => (SLLconst [log64(c/9)] (ADDshiftLL  x x [3]))
+
+(MULW x (MOVDconst [c])) && int32(c)==-1 => (MOVWUreg (NEG  x))
 (MULW _ (MOVDconst [c])) && int32(c)==0 => (MOVDconst [0])
 (MULW x (MOVDconst [c])) && int32(c)==1 => (MOVWUreg x)
-
-(MUL  x (MOVDconst [c])) && canMulStrengthReduce(config, c) => {mulStrengthReduce(v, x, c)}
-(MULW x (MOVDconst [c])) && v.Type.Size() <= 4 && canMulStrengthReduce32(config, int32(c)) => {mulStrengthReduce32(v, x, int32(c))}
+(MULW x (MOVDconst [c])) && isPowerOfTwo(c) => (MOVWUreg (SLLconst  [log64(c)] x))
+(MULW x (MOVDconst [c])) && isPowerOfTwo(c-1) && int32(c) >= 3 => (MOVWUreg (ADDshiftLL  x x [log64(c-1)]))
+(MULW x (MOVDconst [c])) && isPowerOfTwo(c+1) && int32(c) >= 7 => (MOVWUreg (ADDshiftLL  (NEG  x) x [log64(c+1)]))
+(MULW x (MOVDconst [c])) && c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) => (MOVWUreg (SLLconst  [log64(c/3)] (ADDshiftLL  x x [1])))
+(MULW x (MOVDconst [c])) && c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) => (MOVWUreg (SLLconst  [log64(c/5)] (ADDshiftLL  x x [2])))
+(MULW x (MOVDconst [c])) && c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) => (MOVWUreg (SLLconst  [log64(c/7)] (ADDshiftLL  (NEG  x) x [3])))
+(MULW x (MOVDconst [c])) && c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) => (MOVWUreg (SLLconst  [log64(c/9)] (ADDshiftLL  x x [3])))
 
 // mneg by constant
 (MNEG x (MOVDconst [-1])) => x
@@ -1198,7 +1198,6 @@
 
 // generic simplifications
 (ADD x (NEG y)) => (SUB x y)
-(SUB x (NEG y)) => (ADD x y)
 (SUB x x) => (MOVDconst [0])
 (AND x x) => x
 (OR  x x) => x
@@ -1210,7 +1209,6 @@
 (XOR x (MVN y)) => (EON x y)
 (OR  x (MVN y)) => (ORN x y)
 (MVN (XOR x y)) => (EON x y)
-(NEG (SUB x y)) => (SUB y x)
 (NEG (NEG x)) => x
 
 (CSEL [cc] (MOVDconst [-1]) (MOVDconst [0]) flag) => (CSETM [cc] flag)
diff --git a/src/cmd/compile/internal/ssa/_gen/ARM64Ops.go b/src/cmd/compile/internal/ssa/_gen/ARM64Ops.go
index ebb7ed52997c43..8ebbd7e95ef788 100644
--- a/src/cmd/compile/internal/ssa/_gen/ARM64Ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/ARM64Ops.go
@@ -554,8 +554,8 @@ func init() {
 				inputs:   []regMask{buildReg("R20")},
 				clobbers: buildReg("R16 R17 R20 R30"),
 			},
-			//faultOnNilArg0: true, // Note: removed for 73748. TODO: reenable at some point
-			unsafePoint: true, // FP maintenance around DUFFZERO can be clobbered by interrupts
+			faultOnNilArg0: true,
+			unsafePoint:    true, // FP maintenance around DUFFZERO can be clobbered by interrupts
 		},
 
 		// large zeroing
@@ -595,9 +595,9 @@ func init() {
 				inputs:   []regMask{buildReg("R21"), buildReg("R20")},
 				clobbers: buildReg("R16 R17 R20 R21 R26 R30"),
 			},
-			//faultOnNilArg0: true, // Note: removed for 73748. TODO: reenable at some point
-			//faultOnNilArg1: true,
-			unsafePoint: true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
+			faultOnNilArg0: true,
+			faultOnNilArg1: true,
+			unsafePoint:    true, // FP maintenance around DUFFCOPY can be clobbered by interrupts
 		},
 
 		// large move
diff --git a/src/cmd/compile/internal/ssa/_gen/ARM64latelower.rules b/src/cmd/compile/internal/ssa/_gen/ARM64latelower.rules
index 8c43b960b9d964..613a23f6e4dd7a 100644
--- a/src/cmd/compile/internal/ssa/_gen/ARM64latelower.rules
+++ b/src/cmd/compile/internal/ssa/_gen/ARM64latelower.rules
@@ -96,8 +96,3 @@
 
 // use zero register
 (MOVDconst [0]) => (ZERO)
-
-// Prefer addition when shifting left by one.
-// They have the same latency, but ADD can often be done
-// by more functional units in the processor.
-(SLLconst [1] x) => (ADD x x)
diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules
index cab63a503f3e9c..7fc40577ba8d67 100644
--- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules
@@ -776,24 +776,11 @@
 
 // generic simplifications
 (ADDV x (NEGV y)) => (SUBV x y)
-(SUBV x (NEGV y)) => (ADDV x y)
 (SUBV x x) => (MOVVconst [0])
 (SUBV (MOVVconst [0]) x) => (NEGV x)
 (AND x x) => x
 (OR  x x) => x
 (XOR x x) => (MOVVconst [0])
-(ORN x (MOVVconst [-1])) => x
-(AND x (NORconst [0] y)) => (ANDN x y)
-(OR x (NORconst [0] y)) => (ORN x y)
-
-// Fold negation into subtraction.
-(NEGV (SUBV x y)) => (SUBV y x)
-(NEGV  s:(ADDVconst [c] (SUBV x y))) && s.Uses == 1 && is12Bit(-c) => (ADDVconst [-c] (SUBV  y x))
-
-// Double negation.
-(NEGV (NEGV x)) => x
-// Fold NEGV into ADDVconst. Take care to keep c in 12 bit range.
-(NEGV  s:(ADDVconst [c] (NEGV x))) && s.Uses == 1 && is12Bit(-c) => (ADDVconst [-c] x)
 
 // remove redundant *const ops
 (ADDVconst [0]  x) => x
@@ -843,22 +830,6 @@
 
 (MOVBUreg (ANDconst [c] x)) => (ANDconst [c&0xff] x)
 
-// Prefetch instructions (hint specified using aux field)
-// For PRELD{,X} A value of hint indicates:
-//    hint=0 is defined as load prefetch to L1-cache
-//    hint=2 is defined as load prefetch to L3-cache
-// The PrefetchCacheStreamed implementation prefetches 512 bytes of data
-// into L3. The aux field are defined as follows:
-//    bit[4:0]:
-//       $hint parameter of PRELDX instruction
-//    bit[41:5]:
-//       $n parameter of PRELDX instruction, bit[0] of $n is the address
-//       sequence, bits[11:1] is the block size, bits[20:12] is the block
-//       num, bits[36:21] is the stride, for more details about $n, refer
-//       to src/cmd/internal/obj/loong64/doc.go
-(PrefetchCache addr mem)         => (PRELD  addr mem [0])
-(PrefetchCacheStreamed addr mem) => (PRELDX addr mem [(((512 << 1) + (1 << 12)) << 5) + 2])
-
 // constant comparisons
 (SGTconst [c] (MOVVconst [d])) && c>d => (MOVVconst [1])
 (SGTconst [c] (MOVVconst [d])) && c<=d => (MOVVconst [0])
diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go
index 5ef304b4f93ac1..c68a24ca97d03a 100644
--- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go
@@ -148,7 +148,6 @@ func init() {
 		gpstore2  = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}}
 		gpxchg    = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}}
 		gpcas     = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}, outputs: []regMask{gp}}
-		preldreg  = regInfo{inputs: []regMask{gpspg}}
 		fp01      = regInfo{inputs: nil, outputs: []regMask{fp}}
 		fp11      = regInfo{inputs: []regMask{fp}, outputs: []regMask{fp}}
 		fp21      = regInfo{inputs: []regMask{fp, fp}, outputs: []regMask{fp}}
@@ -221,8 +220,6 @@ func init() {
 		{name: "XORconst", argLength: 1, reg: gp11, asm: "XOR", aux: "Int64", typ: "UInt64"}, // arg0 ^ auxInt
 		{name: "NOR", argLength: 2, reg: gp21, asm: "NOR", commutative: true},                // ^(arg0 | arg1)
 		{name: "NORconst", argLength: 1, reg: gp11, asm: "NOR", aux: "Int64"},                // ^(arg0 | auxInt)
-		{name: "ANDN", argLength: 2, reg: gp21, asm: "ANDN"},                                 // arg0 & ^arg1
-		{name: "ORN", argLength: 2, reg: gp21, asm: "ORN"},                                   // arg0 | ^arg1
 
 		{name: "FMADDF", argLength: 3, reg: fp31, asm: "FMADDF", commutative: true, typ: "Float32"},   // (arg0 * arg1) + arg2
 		{name: "FMADDD", argLength: 3, reg: fp31, asm: "FMADDD", commutative: true, typ: "Float64"},   // (arg0 * arg1) + arg2
@@ -569,14 +566,6 @@ func init() {
 		{name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r3, r4}}, typ: "Mem", call: true}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go).
 		{name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem", call: true}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go).
 		{name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem", call: true}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go).
-
-		// Prefetch instruction
-		// Do prefetch arg0 address with option aux. arg0=addr, arg1=memory, aux=option.
-		// Note:
-		//   The aux of PRELDX is actually composed of two values: $hint and $n. bit[4:0]
-		//   is $hint and bit[41:5] is $n.
-		{name: "PRELD", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELD", hasSideEffects: true},
-		{name: "PRELDX", argLength: 2, aux: "Int64", reg: preldreg, asm: "PRELDX", hasSideEffects: true},
 	}
 
 	blocks := []blockData{
diff --git a/src/cmd/compile/internal/ssa/_gen/MIPS.rules b/src/cmd/compile/internal/ssa/_gen/MIPS.rules
index a9bac5fabe1b72..4471763462f3a9 100644
--- a/src/cmd/compile/internal/ssa/_gen/MIPS.rules
+++ b/src/cmd/compile/internal/ssa/_gen/MIPS.rules
@@ -420,9 +420,6 @@
 // Write barrier.
 (WB ...) => (LoweredWB ...)
 
-// Publication barrier as intrinsic
-(PubBarrier ...) => (LoweredPubBarrier ...)
-
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 0 => (LoweredPanicBoundsA [kind] x y mem)
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 1 => (LoweredPanicBoundsB [kind] x y mem)
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 2 => (LoweredPanicBoundsC [kind] x y mem)
@@ -617,14 +614,11 @@
 
 // generic simplifications
 (ADD x (NEG y)) => (SUB x y)
-(SUB x (NEG y)) => (ADD x y)
 (SUB x x) => (MOVWconst [0])
 (SUB (MOVWconst [0]) x) => (NEG x)
 (AND x x) => x
 (OR  x x) => x
 (XOR x x) => (MOVWconst [0])
-(NEG (SUB x y)) => (SUB y x)
-(NEG (NEG x)) => x
 
 // miscellaneous patterns generated by dec64
 (AND (SGTUconst [1] x) (SGTUconst [1] y)) =>  (SGTUconst [1] (OR  x y))
diff --git a/src/cmd/compile/internal/ssa/_gen/MIPS64.rules b/src/cmd/compile/internal/ssa/_gen/MIPS64.rules
index 8e484f4a3d3182..5b55c3bef75e9c 100644
--- a/src/cmd/compile/internal/ssa/_gen/MIPS64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/MIPS64.rules
@@ -476,9 +476,6 @@
 // Write barrier.
 (WB ...) => (LoweredWB ...)
 
-// Publication barrier as intrinsic
-(PubBarrier ...) => (LoweredPubBarrier ...)
-
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 0 => (LoweredPanicBoundsA [kind] x y mem)
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 1 => (LoweredPanicBoundsB [kind] x y mem)
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 2 => (LoweredPanicBoundsC [kind] x y mem)
@@ -722,14 +719,11 @@
 
 // generic simplifications
 (ADDV x (NEGV y)) => (SUBV x y)
-(SUBV x (NEGV y)) => (ADDV x y)
 (SUBV x x) => (MOVVconst [0])
 (SUBV (MOVVconst [0]) x) => (NEGV x)
 (AND x x) => x
 (OR  x x) => x
 (XOR x x) => (MOVVconst [0])
-(NEGV (SUBV x y)) => (SUBV y x)
-(NEGV (NEGV x)) => x
 
 // remove redundant *const ops
 (ADDVconst [0]  x) => x
diff --git a/src/cmd/compile/internal/ssa/_gen/MIPS64Ops.go b/src/cmd/compile/internal/ssa/_gen/MIPS64Ops.go
index 6c04a1aea26d80..3d1abb16b60e79 100644
--- a/src/cmd/compile/internal/ssa/_gen/MIPS64Ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/MIPS64Ops.go
@@ -466,9 +466,6 @@ func init() {
 		// Returns a pointer to a write barrier buffer in R25.
 		{name: "LoweredWB", argLength: 1, reg: regInfo{clobbers: (callerSave &^ gpg) | buildReg("R31"), outputs: []regMask{buildReg("R25")}}, clobberFlags: true, aux: "Int64"},
 
-		// Do data barrier. arg0=memorys
-		{name: "LoweredPubBarrier", argLength: 1, asm: "SYNC", hasSideEffects: true},
-
 		// There are three of these functions so that they can have three different register inputs.
 		// When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the
 		// default registers to match so we don't need to copy registers around unnecessarily.
diff --git a/src/cmd/compile/internal/ssa/_gen/MIPSOps.go b/src/cmd/compile/internal/ssa/_gen/MIPSOps.go
index 62c35ed49f2a85..48e06a4189ed89 100644
--- a/src/cmd/compile/internal/ssa/_gen/MIPSOps.go
+++ b/src/cmd/compile/internal/ssa/_gen/MIPSOps.go
@@ -408,9 +408,6 @@ func init() {
 		// Returns a pointer to a write barrier buffer in R25.
 		{name: "LoweredWB", argLength: 1, reg: regInfo{clobbers: (callerSave &^ gpg) | buildReg("R31"), outputs: []regMask{buildReg("R25")}}, clobberFlags: true, aux: "Int64"},
 
-		// Do data barrier. arg0=memorys
-		{name: "LoweredPubBarrier", argLength: 1, asm: "SYNC", hasSideEffects: true},
-
 		// There are three of these functions so that they can have three different register inputs.
 		// When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the
 		// default registers to match so we don't need to copy registers around unnecessarily.
diff --git a/src/cmd/compile/internal/ssa/_gen/README b/src/cmd/compile/internal/ssa/_gen/README
index a8242f93527097..74b81c2814330c 100644
--- a/src/cmd/compile/internal/ssa/_gen/README
+++ b/src/cmd/compile/internal/ssa/_gen/README
@@ -9,8 +9,3 @@ more information.
 
 To regenerate everything, run "go generate" on the ssa package
 in the parent directory.
-
-The parent directory contains a test in generate_test.go that will fail
-if the generated files are not up-to-date, and to allow that test to
-run in no-network environments, golang.org/x/tools/go/ast/astutil is
-vendored.
diff --git a/src/cmd/compile/internal/ssa/_gen/RISCV64.rules b/src/cmd/compile/internal/ssa/_gen/RISCV64.rules
index dc1cc97fb3cd05..a5d4fb72ec687f 100644
--- a/src/cmd/compile/internal/ssa/_gen/RISCV64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/RISCV64.rules
@@ -231,17 +231,6 @@
 (BitLen16 x) => (BitLen64 (ZeroExt16to64 x))
 (BitLen8  x) => (BitLen64 (ZeroExt8to64 x))
 
-// Byte swap (note that these will only be emitted for rva22u64 and above).
-(Bswap64 ...) => (REV8 ...)
-(Bswap32  x) => (SRLI [32] (REV8  x))
-(Bswap16  x) => (SRLI [48] (REV8  x))
-
-// Population count (note that these will be emitted with guards for rva20u64).
-(PopCount64 ...) => (CPOP  ...)
-(PopCount32 ...) => (CPOPW ...)
-(PopCount16 x) => (CPOP (ZeroExt16to64 x))
-(PopCount8  x) => (CPOP (ZeroExt8to64  x))
-
 (Less64  ...) => (SLT  ...)
 (Less32  x y) => (SLT  (SignExt32to64 x) (SignExt32to64 y))
 (Less16  x y) => (SLT  (SignExt16to64 x) (SignExt16to64 y))
@@ -743,15 +732,6 @@
 (ROL  x (NEG y)) => (ROR  x y)
 (ROLW x (NEG y)) => (RORW x y)
 
-// generic simplifications
-(ADD x (NEG y)) => (SUB x y)
-(SUB x (NEG y)) => (ADD x y)
-(SUB x x) => (MOVDconst [0])
-(AND x x) => x
-(OR  x x) => x
-(ORN x x) => (MOVDconst [-1])
-(XOR x x) => (MOVDconst [0])
-
 // Convert const subtraction into ADDI with negative immediate, where possible.
 (SUB x (MOVDconst [val])) && is32Bit(-val) => (ADDI [-val] x)
 (SUB  (MOVDconst [val]) y) && is32Bit(-val) => (NEG (ADDI  [-val] y))
diff --git a/src/cmd/compile/internal/ssa/_gen/RISCV64Ops.go b/src/cmd/compile/internal/ssa/_gen/RISCV64Ops.go
index 8cb042a604bee6..cc2302ff374fa5 100644
--- a/src/cmd/compile/internal/ssa/_gen/RISCV64Ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/RISCV64Ops.go
@@ -231,15 +231,12 @@ func init() {
 		{name: "ANDI", argLength: 1, reg: gp11, asm: "ANDI", aux: "Int64"},      // arg0 & auxint
 		{name: "CLZ", argLength: 1, reg: gp11, asm: "CLZ"},                      // count leading zeros
 		{name: "CLZW", argLength: 1, reg: gp11, asm: "CLZW"},                    // count leading zeros of least significant word
-		{name: "CPOP", argLength: 1, reg: gp11, asm: "CPOP"},                    // count set bits
-		{name: "CPOPW", argLength: 1, reg: gp11, asm: "CPOPW"},                  // count set bits in least significant word
 		{name: "CTZ", argLength: 1, reg: gp11, asm: "CTZ"},                      // count trailing zeros
 		{name: "CTZW", argLength: 1, reg: gp11, asm: "CTZW"},                    // count trailing zeros of least significant word
 		{name: "NOT", argLength: 1, reg: gp11, asm: "NOT"},                      // ^arg0
 		{name: "OR", argLength: 2, reg: gp21, asm: "OR", commutative: true},     // arg0 | arg1
 		{name: "ORN", argLength: 2, reg: gp21, asm: "ORN"},                      // ^arg0 | arg1
 		{name: "ORI", argLength: 1, reg: gp11, asm: "ORI", aux: "Int64"},        // arg0 | auxint
-		{name: "REV8", argLength: 1, reg: gp11, asm: "REV8"},                    // reverse bytes
 		{name: "ROL", argLength: 2, reg: gp21, asm: "ROL"},                      // rotate left arg0 by (arg1 & 63)
 		{name: "ROLW", argLength: 2, reg: gp21, asm: "ROLW"},                    // rotate left least significant word of arg0 by (arg1 & 31), sign extended
 		{name: "ROR", argLength: 2, reg: gp21, asm: "ROR"},                      // rotate right arg0 by (arg1 & 63)
diff --git a/src/cmd/compile/internal/ssa/_gen/S390X.rules b/src/cmd/compile/internal/ssa/_gen/S390X.rules
index 231ad0615dd96e..78de5bb5a22296 100644
--- a/src/cmd/compile/internal/ssa/_gen/S390X.rules
+++ b/src/cmd/compile/internal/ssa/_gen/S390X.rules
@@ -1188,8 +1188,6 @@
 // TODO: more of this
 (ADD x (NEG y)) => (SUB x y)
 (ADDW x (NEGW y)) => (SUBW x y)
-(SUB x (NEG y)) => (ADD x y)
-(SUBW x (NEGW y)) => (ADDW x y)
 (SUB x x) => (MOVDconst [0])
 (SUBW x x) => (MOVDconst [0])
 (AND x x) => x
@@ -1198,7 +1196,6 @@
 (ORW x x) => x
 (XOR x x) => (MOVDconst [0])
 (XORW x x) => (MOVDconst [0])
-(NEG (NEG x)) => x
 (NEG (ADDconst [c] (NEG x))) && c != -(1<<31) => (ADDconst [-c] x)
 (MOVBZreg (ANDWconst [m] x)) => (MOVWZreg (ANDWconst  [int32( uint8(m))] x))
 (MOVHZreg (ANDWconst [m] x)) => (MOVWZreg (ANDWconst  [int32(uint16(m))] x))
diff --git a/src/cmd/compile/internal/ssa/_gen/allocators.go b/src/cmd/compile/internal/ssa/_gen/allocators.go
index 38acc5133abe86..56e6d69a312e1d 100644
--- a/src/cmd/compile/internal/ssa/_gen/allocators.go
+++ b/src/cmd/compile/internal/ssa/_gen/allocators.go
@@ -41,7 +41,7 @@ func genAllocators() {
 			capacity: "cap(%s)",
 			mak:      "make([]*Value, %s)",
 			resize:   "%s[:%s]",
-			clear:    "clear(%s)",
+			clear:    "for i := range %[1]s {\n%[1]s[i] = nil\n}",
 			minLog:   5,
 			maxLog:   32,
 		},
@@ -51,7 +51,7 @@ func genAllocators() {
 			capacity: "cap(%s)",
 			mak:      "make([]limit, %s)",
 			resize:   "%s[:%s]",
-			clear:    "clear(%s)",
+			clear:    "for i := range %[1]s {\n%[1]s[i] = limit{}\n}",
 			minLog:   3,
 			maxLog:   30,
 		},
@@ -155,7 +155,7 @@ func genAllocators() {
 		panic(err)
 	}
 
-	if err := os.WriteFile(outFile("allocators.go"), b, 0666); err != nil {
+	if err := os.WriteFile("../allocators.go", b, 0666); err != nil {
 		log.Fatalf("can't write output: %v\n", err)
 	}
 }
diff --git a/src/cmd/compile/internal/ssa/_gen/generic.rules b/src/cmd/compile/internal/ssa/_gen/generic.rules
index b178a1add6de29..eb04d03e496f5e 100644
--- a/src/cmd/compile/internal/ssa/_gen/generic.rules
+++ b/src/cmd/compile/internal/ssa/_gen/generic.rules
@@ -139,10 +139,6 @@
 (Mul64  (Const64 [c])  (Const64 [d]))  => (Const64 [c*d])
 (Mul32F (Const32F [c]) (Const32F [d])) && c*d == c*d => (Const32F [c*d])
 (Mul64F (Const64F [c]) (Const64F [d])) && c*d == c*d => (Const64F [c*d])
-(Mul32uhilo (Const32 [c]) (Const32 [d])) => (MakeTuple (Const32  [bitsMulU32(c, d).hi]) (Const32  [bitsMulU32(c,d).lo]))
-(Mul64uhilo (Const64 [c]) (Const64 [d])) => (MakeTuple (Const64  [bitsMulU64(c, d).hi]) (Const64  [bitsMulU64(c,d).lo]))
-(Mul32uover (Const32 [c]) (Const32 [d])) => (MakeTuple (Const32  [bitsMulU32(c, d).lo]) (ConstBool  [bitsMulU32(c,d).hi != 0]))
-(Mul64uover (Const64 [c]) (Const64 [d])) => (MakeTuple (Const64  [bitsMulU64(c, d).lo]) (ConstBool  [bitsMulU64(c,d).hi != 0]))
 
 (And8   (Const8 [c])   (Const8 [d]))   => (Const8  [c&d])
 (And16  (Const16 [c])  (Const16 [d]))  => (Const16 [c&d])
@@ -2832,14 +2828,3 @@
   && clobber(sbts)
   && clobber(key)
 => (StaticLECall {f} [argsize] typ_ map_ (StringMake  ptr len) mem)
-
-// Similarly to map lookups, also handle unique.Make for strings, which unique.Make will clone.
-(StaticLECall {f} [argsize] dict_ key:(SelectN [0] sbts:(StaticLECall {g} _ ptr len mem)) m:(SelectN [1] sbts))
-  && isSameCall(f, "unique.Make[go.shape.string]")
-  && isSameCall(g, "runtime.slicebytetostring")
-  && key.Uses == 1
-  && sbts.Uses == 2
-  && resetCopy(m, mem)
-  && clobber(sbts)
-  && clobber(key)
-=> (StaticLECall {f} [argsize] dict_ (StringMake  ptr len) mem)
diff --git a/src/cmd/compile/internal/ssa/_gen/main.go b/src/cmd/compile/internal/ssa/_gen/main.go
index f20603245ba321..3f65831b6e02b5 100644
--- a/src/cmd/compile/internal/ssa/_gen/main.go
+++ b/src/cmd/compile/internal/ssa/_gen/main.go
@@ -113,7 +113,6 @@ var archs []arch
 var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`")
 var memprofile = flag.String("memprofile", "", "write memory profile to `file`")
 var tracefile = flag.String("trace", "", "write trace to `file`")
-var outDir = flag.String("outdir", "..", "directory in which to write generated files")
 
 func main() {
 	flag.Parse()
@@ -145,13 +144,6 @@ func main() {
 		defer trace.Stop()
 	}
 
-	if *outDir != ".." {
-		err := os.MkdirAll(*outDir, 0755)
-		if err != nil {
-			log.Fatalf("failed to create output directory: %v", err)
-		}
-	}
-
 	slices.SortFunc(archs, func(a, b arch) int {
 		return strings.Compare(a.name, b.name)
 	})
@@ -201,10 +193,6 @@ func main() {
 	}
 }
 
-func outFile(file string) string {
-	return *outDir + "/" + file
-}
-
 func genOp() {
 	w := new(bytes.Buffer)
 	fmt.Fprintf(w, "// Code generated from _gen/*Ops.go using 'go generate'; DO NOT EDIT.\n")
@@ -512,7 +500,7 @@ func genOp() {
 		panic(err)
 	}
 
-	if err := os.WriteFile(outFile("opGen.go"), b, 0666); err != nil {
+	if err := os.WriteFile("../opGen.go", b, 0666); err != nil {
 		log.Fatalf("can't write output: %v\n", err)
 	}
 
diff --git a/src/cmd/compile/internal/ssa/_gen/rulegen.go b/src/cmd/compile/internal/ssa/_gen/rulegen.go
index 3854d58b7f9e56..5f5967a142253e 100644
--- a/src/cmd/compile/internal/ssa/_gen/rulegen.go
+++ b/src/cmd/compile/internal/ssa/_gen/rulegen.go
@@ -50,7 +50,6 @@ import (
 // special rules: trailing ellipsis "..." (in the outermost sexpr?) must match on both sides of a rule.
 //                trailing three underscore "___" in the outermost match sexpr indicate the presence of
 //                   extra ignored args that need not appear in the replacement
-//                if the right-hand side is in {}, then it is code used to generate the result.
 
 // extra conditions is just a chunk of Go that evaluates to a boolean. It may use
 // variables declared in the matching tsexpr. The variable "v" is predefined to be
@@ -322,7 +321,7 @@ func genRulesSuffix(arch arch, suff string) {
 	file = astutil.Apply(file, pre, post).(*ast.File)
 
 	// Write the well-formatted source to file
-	f, err := os.Create(outFile("rewrite" + arch.name + suff + ".go"))
+	f, err := os.Create("../rewrite" + arch.name + suff + ".go")
 	if err != nil {
 		log.Fatalf("can't write output: %v", err)
 	}
@@ -1183,11 +1182,6 @@ func genResult(rr *RuleRewrite, arch arch, result, pos string) {
 		rr.add(stmtf("b = %s", s[0]))
 		result = s[1]
 	}
-	if result[0] == '{' {
-		// Arbitrary code used to make the result
-		rr.add(stmtf("v.copyOf(%s)", result[1:len(result)-1]))
-		return
-	}
 	cse := make(map[string]string)
 	genResult0(rr, arch, result, true, move, pos, cse)
 }
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/LICENSE b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/LICENSE
deleted file mode 100644
index 2a7cf70da6e498..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright 2009 The Go Authors.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google LLC nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/PATENTS b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/PATENTS
deleted file mode 100644
index 733099041f84fa..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/PATENTS
+++ /dev/null
@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go.  This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation.  If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
deleted file mode 100644
index 6e34df46130b75..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
+++ /dev/null
@@ -1,654 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-// This file defines utilities for working with source positions.
-
-import (
-	"fmt"
-	"go/ast"
-	"go/token"
-	"sort"
-)
-
-// PathEnclosingInterval returns the node that encloses the source
-// interval [start, end), and all its ancestors up to the AST root.
-//
-// The definition of "enclosing" used by this function considers
-// additional whitespace abutting a node to be enclosed by it.
-// In this example:
-//
-//	z := x + y // add them
-//	     <-A->
-//	    <----B----->
-//
-// the ast.BinaryExpr(+) node is considered to enclose interval B
-// even though its [Pos()..End()) is actually only interval A.
-// This behaviour makes user interfaces more tolerant of imperfect
-// input.
-//
-// This function treats tokens as nodes, though they are not included
-// in the result. e.g. PathEnclosingInterval("+") returns the
-// enclosing ast.BinaryExpr("x + y").
-//
-// If start==end, the 1-char interval following start is used instead.
-//
-// The 'exact' result is true if the interval contains only path[0]
-// and perhaps some adjacent whitespace.  It is false if the interval
-// overlaps multiple children of path[0], or if it contains only
-// interior whitespace of path[0].
-// In this example:
-//
-//	z := x + y // add them
-//	  <--C-->     <---E-->
-//	    ^
-//	    D
-//
-// intervals C, D and E are inexact.  C is contained by the
-// z-assignment statement, because it spans three of its children (:=,
-// x, +).  So too is the 1-char interval D, because it contains only
-// interior whitespace of the assignment.  E is considered interior
-// whitespace of the BlockStmt containing the assignment.
-//
-// The resulting path is never empty; it always contains at least the
-// 'root' *ast.File.  Ideally PathEnclosingInterval would reject
-// intervals that lie wholly or partially outside the range of the
-// file, but unfortunately ast.File records only the token.Pos of
-// the 'package' keyword, but not of the start of the file itself.
-func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) {
-	// fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging
-
-	// Precondition: node.[Pos..End) and adjoining whitespace contain [start, end).
-	var visit func(node ast.Node) bool
-	visit = func(node ast.Node) bool {
-		path = append(path, node)
-
-		nodePos := node.Pos()
-		nodeEnd := node.End()
-
-		// fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging
-
-		// Intersect [start, end) with interval of node.
-		if start < nodePos {
-			start = nodePos
-		}
-		if end > nodeEnd {
-			end = nodeEnd
-		}
-
-		// Find sole child that contains [start, end).
-		children := childrenOf(node)
-		l := len(children)
-		for i, child := range children {
-			// [childPos, childEnd) is unaugmented interval of child.
-			childPos := child.Pos()
-			childEnd := child.End()
-
-			// [augPos, augEnd) is whitespace-augmented interval of child.
-			augPos := childPos
-			augEnd := childEnd
-			if i > 0 {
-				augPos = children[i-1].End() // start of preceding whitespace
-			}
-			if i < l-1 {
-				nextChildPos := children[i+1].Pos()
-				// Does [start, end) lie between child and next child?
-				if start >= augEnd && end <= nextChildPos {
-					return false // inexact match
-				}
-				augEnd = nextChildPos // end of following whitespace
-			}
-
-			// fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n",
-			// 	i, augPos, augEnd, start, end) // debugging
-
-			// Does augmented child strictly contain [start, end)?
-			if augPos <= start && end <= augEnd {
-				if is[tokenNode](child) {
-					return true
-				}
-
-				// childrenOf elides the FuncType node beneath FuncDecl.
-				// Add it back here for TypeParams, Params, Results,
-				// all FieldLists). But we don't add it back for the "func" token
-				// even though it is is the tree at FuncDecl.Type.Func.
-				if decl, ok := node.(*ast.FuncDecl); ok {
-					if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv {
-						path = append(path, decl.Type)
-					}
-				}
-
-				return visit(child)
-			}
-
-			// Does [start, end) overlap multiple children?
-			// i.e. left-augmented child contains start
-			// but LR-augmented child does not contain end.
-			if start < childEnd && end > augEnd {
-				break
-			}
-		}
-
-		// No single child contained [start, end),
-		// so node is the result.  Is it exact?
-
-		// (It's tempting to put this condition before the
-		// child loop, but it gives the wrong result in the
-		// case where a node (e.g. ExprStmt) and its sole
-		// child have equal intervals.)
-		if start == nodePos && end == nodeEnd {
-			return true // exact match
-		}
-
-		return false // inexact: overlaps multiple children
-	}
-
-	// Ensure [start,end) is nondecreasing.
-	if start > end {
-		start, end = end, start
-	}
-
-	if start < root.End() && end > root.Pos() {
-		if start == end {
-			end = start + 1 // empty interval => interval of size 1
-		}
-		exact = visit(root)
-
-		// Reverse the path:
-		for i, l := 0, len(path); i < l/2; i++ {
-			path[i], path[l-1-i] = path[l-1-i], path[i]
-		}
-	} else {
-		// Selection lies within whitespace preceding the
-		// first (or following the last) declaration in the file.
-		// The result nonetheless always includes the ast.File.
-		path = append(path, root)
-	}
-
-	return
-}
-
-// tokenNode is a dummy implementation of ast.Node for a single token.
-// They are used transiently by PathEnclosingInterval but never escape
-// this package.
-type tokenNode struct {
-	pos token.Pos
-	end token.Pos
-}
-
-func (n tokenNode) Pos() token.Pos {
-	return n.pos
-}
-
-func (n tokenNode) End() token.Pos {
-	return n.end
-}
-
-func tok(pos token.Pos, len int) ast.Node {
-	return tokenNode{pos, pos + token.Pos(len)}
-}
-
-// childrenOf returns the direct non-nil children of ast.Node n.
-// It may include fake ast.Node implementations for bare tokens.
-// it is not safe to call (e.g.) ast.Walk on such nodes.
-func childrenOf(n ast.Node) []ast.Node {
-	var children []ast.Node
-
-	// First add nodes for all true subtrees.
-	ast.Inspect(n, func(node ast.Node) bool {
-		if node == n { // push n
-			return true // recur
-		}
-		if node != nil { // push child
-			children = append(children, node)
-		}
-		return false // no recursion
-	})
-
-	// Then add fake Nodes for bare tokens.
-	switch n := n.(type) {
-	case *ast.ArrayType:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Elt.End(), len("]")))
-
-	case *ast.AssignStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.BasicLit:
-		children = append(children,
-			tok(n.ValuePos, len(n.Value)))
-
-	case *ast.BinaryExpr:
-		children = append(children, tok(n.OpPos, len(n.Op.String())))
-
-	case *ast.BlockStmt:
-		children = append(children,
-			tok(n.Lbrace, len("{")),
-			tok(n.Rbrace, len("}")))
-
-	case *ast.BranchStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.CallExpr:
-		children = append(children,
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-		if n.Ellipsis != 0 {
-			children = append(children, tok(n.Ellipsis, len("...")))
-		}
-
-	case *ast.CaseClause:
-		if n.List == nil {
-			children = append(children,
-				tok(n.Case, len("default")))
-		} else {
-			children = append(children,
-				tok(n.Case, len("case")))
-		}
-		children = append(children, tok(n.Colon, len(":")))
-
-	case *ast.ChanType:
-		switch n.Dir {
-		case ast.RECV:
-			children = append(children, tok(n.Begin, len("<-chan")))
-		case ast.SEND:
-			children = append(children, tok(n.Begin, len("chan<-")))
-		case ast.RECV | ast.SEND:
-			children = append(children, tok(n.Begin, len("chan")))
-		}
-
-	case *ast.CommClause:
-		if n.Comm == nil {
-			children = append(children,
-				tok(n.Case, len("default")))
-		} else {
-			children = append(children,
-				tok(n.Case, len("case")))
-		}
-		children = append(children, tok(n.Colon, len(":")))
-
-	case *ast.Comment:
-		// nop
-
-	case *ast.CommentGroup:
-		// nop
-
-	case *ast.CompositeLit:
-		children = append(children,
-			tok(n.Lbrace, len("{")),
-			tok(n.Rbrace, len("{")))
-
-	case *ast.DeclStmt:
-		// nop
-
-	case *ast.DeferStmt:
-		children = append(children,
-			tok(n.Defer, len("defer")))
-
-	case *ast.Ellipsis:
-		children = append(children,
-			tok(n.Ellipsis, len("...")))
-
-	case *ast.EmptyStmt:
-		// nop
-
-	case *ast.ExprStmt:
-		// nop
-
-	case *ast.Field:
-		// TODO(adonovan): Field.{Doc,Comment,Tag}?
-
-	case *ast.FieldList:
-		children = append(children,
-			tok(n.Opening, len("(")), // or len("[")
-			tok(n.Closing, len(")"))) // or len("]")
-
-	case *ast.File:
-		// TODO test: Doc
-		children = append(children,
-			tok(n.Package, len("package")))
-
-	case *ast.ForStmt:
-		children = append(children,
-			tok(n.For, len("for")))
-
-	case *ast.FuncDecl:
-		// TODO(adonovan): FuncDecl.Comment?
-
-		// Uniquely, FuncDecl breaks the invariant that
-		// preorder traversal yields tokens in lexical order:
-		// in fact, FuncDecl.Recv precedes FuncDecl.Type.Func.
-		//
-		// As a workaround, we inline the case for FuncType
-		// here and order things correctly.
-		// We also need to insert the elided FuncType just
-		// before the 'visit' recursion.
-		//
-		children = nil // discard ast.Walk(FuncDecl) info subtrees
-		children = append(children, tok(n.Type.Func, len("func")))
-		if n.Recv != nil {
-			children = append(children, n.Recv)
-		}
-		children = append(children, n.Name)
-		if tparams := n.Type.TypeParams; tparams != nil {
-			children = append(children, tparams)
-		}
-		if n.Type.Params != nil {
-			children = append(children, n.Type.Params)
-		}
-		if n.Type.Results != nil {
-			children = append(children, n.Type.Results)
-		}
-		if n.Body != nil {
-			children = append(children, n.Body)
-		}
-
-	case *ast.FuncLit:
-		// nop
-
-	case *ast.FuncType:
-		if n.Func != 0 {
-			children = append(children,
-				tok(n.Func, len("func")))
-		}
-
-	case *ast.GenDecl:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-		if n.Lparen != 0 {
-			children = append(children,
-				tok(n.Lparen, len("(")),
-				tok(n.Rparen, len(")")))
-		}
-
-	case *ast.GoStmt:
-		children = append(children,
-			tok(n.Go, len("go")))
-
-	case *ast.Ident:
-		children = append(children,
-			tok(n.NamePos, len(n.Name)))
-
-	case *ast.IfStmt:
-		children = append(children,
-			tok(n.If, len("if")))
-
-	case *ast.ImportSpec:
-		// TODO(adonovan): ImportSpec.{Doc,EndPos}?
-
-	case *ast.IncDecStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.IndexExpr:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Rbrack, len("]")))
-
-	case *ast.IndexListExpr:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Rbrack, len("]")))
-
-	case *ast.InterfaceType:
-		children = append(children,
-			tok(n.Interface, len("interface")))
-
-	case *ast.KeyValueExpr:
-		children = append(children,
-			tok(n.Colon, len(":")))
-
-	case *ast.LabeledStmt:
-		children = append(children,
-			tok(n.Colon, len(":")))
-
-	case *ast.MapType:
-		children = append(children,
-			tok(n.Map, len("map")))
-
-	case *ast.ParenExpr:
-		children = append(children,
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-
-	case *ast.RangeStmt:
-		children = append(children,
-			tok(n.For, len("for")),
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.ReturnStmt:
-		children = append(children,
-			tok(n.Return, len("return")))
-
-	case *ast.SelectStmt:
-		children = append(children,
-			tok(n.Select, len("select")))
-
-	case *ast.SelectorExpr:
-		// nop
-
-	case *ast.SendStmt:
-		children = append(children,
-			tok(n.Arrow, len("<-")))
-
-	case *ast.SliceExpr:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Rbrack, len("]")))
-
-	case *ast.StarExpr:
-		children = append(children, tok(n.Star, len("*")))
-
-	case *ast.StructType:
-		children = append(children, tok(n.Struct, len("struct")))
-
-	case *ast.SwitchStmt:
-		children = append(children, tok(n.Switch, len("switch")))
-
-	case *ast.TypeAssertExpr:
-		children = append(children,
-			tok(n.Lparen-1, len(".")),
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-
-	case *ast.TypeSpec:
-		// TODO(adonovan): TypeSpec.{Doc,Comment}?
-
-	case *ast.TypeSwitchStmt:
-		children = append(children, tok(n.Switch, len("switch")))
-
-	case *ast.UnaryExpr:
-		children = append(children, tok(n.OpPos, len(n.Op.String())))
-
-	case *ast.ValueSpec:
-		// TODO(adonovan): ValueSpec.{Doc,Comment}?
-
-	case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt:
-		// nop
-	}
-
-	// TODO(adonovan): opt: merge the logic of ast.Inspect() into
-	// the switch above so we can make interleaved callbacks for
-	// both Nodes and Tokens in the right order and avoid the need
-	// to sort.
-	sort.Sort(byPos(children))
-
-	return children
-}
-
-type byPos []ast.Node
-
-func (sl byPos) Len() int {
-	return len(sl)
-}
-func (sl byPos) Less(i, j int) bool {
-	return sl[i].Pos() < sl[j].Pos()
-}
-func (sl byPos) Swap(i, j int) {
-	sl[i], sl[j] = sl[j], sl[i]
-}
-
-// NodeDescription returns a description of the concrete type of n suitable
-// for a user interface.
-//
-// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident,
-// StarExpr) we could be much more specific given the path to the AST
-// root.  Perhaps we should do that.
-func NodeDescription(n ast.Node) string {
-	switch n := n.(type) {
-	case *ast.ArrayType:
-		return "array type"
-	case *ast.AssignStmt:
-		return "assignment"
-	case *ast.BadDecl:
-		return "bad declaration"
-	case *ast.BadExpr:
-		return "bad expression"
-	case *ast.BadStmt:
-		return "bad statement"
-	case *ast.BasicLit:
-		return "basic literal"
-	case *ast.BinaryExpr:
-		return fmt.Sprintf("binary %s operation", n.Op)
-	case *ast.BlockStmt:
-		return "block"
-	case *ast.BranchStmt:
-		switch n.Tok {
-		case token.BREAK:
-			return "break statement"
-		case token.CONTINUE:
-			return "continue statement"
-		case token.GOTO:
-			return "goto statement"
-		case token.FALLTHROUGH:
-			return "fall-through statement"
-		}
-	case *ast.CallExpr:
-		if len(n.Args) == 1 && !n.Ellipsis.IsValid() {
-			return "function call (or conversion)"
-		}
-		return "function call"
-	case *ast.CaseClause:
-		return "case clause"
-	case *ast.ChanType:
-		return "channel type"
-	case *ast.CommClause:
-		return "communication clause"
-	case *ast.Comment:
-		return "comment"
-	case *ast.CommentGroup:
-		return "comment group"
-	case *ast.CompositeLit:
-		return "composite literal"
-	case *ast.DeclStmt:
-		return NodeDescription(n.Decl) + " statement"
-	case *ast.DeferStmt:
-		return "defer statement"
-	case *ast.Ellipsis:
-		return "ellipsis"
-	case *ast.EmptyStmt:
-		return "empty statement"
-	case *ast.ExprStmt:
-		return "expression statement"
-	case *ast.Field:
-		// Can be any of these:
-		// struct {x, y int}  -- struct field(s)
-		// struct {T}         -- anon struct field
-		// interface {I}      -- interface embedding
-		// interface {f()}    -- interface method
-		// func (A) func(B) C -- receiver, param(s), result(s)
-		return "field/method/parameter"
-	case *ast.FieldList:
-		return "field/method/parameter list"
-	case *ast.File:
-		return "source file"
-	case *ast.ForStmt:
-		return "for loop"
-	case *ast.FuncDecl:
-		return "function declaration"
-	case *ast.FuncLit:
-		return "function literal"
-	case *ast.FuncType:
-		return "function type"
-	case *ast.GenDecl:
-		switch n.Tok {
-		case token.IMPORT:
-			return "import declaration"
-		case token.CONST:
-			return "constant declaration"
-		case token.TYPE:
-			return "type declaration"
-		case token.VAR:
-			return "variable declaration"
-		}
-	case *ast.GoStmt:
-		return "go statement"
-	case *ast.Ident:
-		return "identifier"
-	case *ast.IfStmt:
-		return "if statement"
-	case *ast.ImportSpec:
-		return "import specification"
-	case *ast.IncDecStmt:
-		if n.Tok == token.INC {
-			return "increment statement"
-		}
-		return "decrement statement"
-	case *ast.IndexExpr:
-		return "index expression"
-	case *ast.IndexListExpr:
-		return "index list expression"
-	case *ast.InterfaceType:
-		return "interface type"
-	case *ast.KeyValueExpr:
-		return "key/value association"
-	case *ast.LabeledStmt:
-		return "statement label"
-	case *ast.MapType:
-		return "map type"
-	case *ast.Package:
-		return "package"
-	case *ast.ParenExpr:
-		return "parenthesized " + NodeDescription(n.X)
-	case *ast.RangeStmt:
-		return "range loop"
-	case *ast.ReturnStmt:
-		return "return statement"
-	case *ast.SelectStmt:
-		return "select statement"
-	case *ast.SelectorExpr:
-		return "selector"
-	case *ast.SendStmt:
-		return "channel send"
-	case *ast.SliceExpr:
-		return "slice expression"
-	case *ast.StarExpr:
-		return "*-operation" // load/store expr or pointer type
-	case *ast.StructType:
-		return "struct type"
-	case *ast.SwitchStmt:
-		return "switch statement"
-	case *ast.TypeAssertExpr:
-		return "type assertion"
-	case *ast.TypeSpec:
-		return "type specification"
-	case *ast.TypeSwitchStmt:
-		return "type switch"
-	case *ast.UnaryExpr:
-		return fmt.Sprintf("unary %s operation", n.Op)
-	case *ast.ValueSpec:
-		return "value specification"
-
-	}
-	panic(fmt.Sprintf("unexpected node type: %T", n))
-}
-
-func is[T any](x any) bool {
-	_, ok := x.(T)
-	return ok
-}
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/imports.go
deleted file mode 100644
index a6b5ed0a8933eb..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/imports.go
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package astutil contains common utilities for working with the Go AST.
-package astutil // import "golang.org/x/tools/go/ast/astutil"
-
-import (
-	"fmt"
-	"go/ast"
-	"go/token"
-	"strconv"
-	"strings"
-)
-
-// AddImport adds the import path to the file f, if absent.
-func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) {
-	return AddNamedImport(fset, f, "", path)
-}
-
-// AddNamedImport adds the import with the given name and path to the file f, if absent.
-// If name is not empty, it is used to rename the import.
-//
-// For example, calling
-//
-//	AddNamedImport(fset, f, "pathpkg", "path")
-//
-// adds
-//
-//	import pathpkg "path"
-func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) {
-	if imports(f, name, path) {
-		return false
-	}
-
-	newImport := &ast.ImportSpec{
-		Path: &ast.BasicLit{
-			Kind:  token.STRING,
-			Value: strconv.Quote(path),
-		},
-	}
-	if name != "" {
-		newImport.Name = &ast.Ident{Name: name}
-	}
-
-	// Find an import decl to add to.
-	// The goal is to find an existing import
-	// whose import path has the longest shared
-	// prefix with path.
-	var (
-		bestMatch  = -1         // length of longest shared prefix
-		lastImport = -1         // index in f.Decls of the file's final import decl
-		impDecl    *ast.GenDecl // import decl containing the best match
-		impIndex   = -1         // spec index in impDecl containing the best match
-
-		isThirdPartyPath = isThirdParty(path)
-	)
-	for i, decl := range f.Decls {
-		gen, ok := decl.(*ast.GenDecl)
-		if ok && gen.Tok == token.IMPORT {
-			lastImport = i
-			// Do not add to import "C", to avoid disrupting the
-			// association with its doc comment, breaking cgo.
-			if declImports(gen, "C") {
-				continue
-			}
-
-			// Match an empty import decl if that's all that is available.
-			if len(gen.Specs) == 0 && bestMatch == -1 {
-				impDecl = gen
-			}
-
-			// Compute longest shared prefix with imports in this group and find best
-			// matched import spec.
-			// 1. Always prefer import spec with longest shared prefix.
-			// 2. While match length is 0,
-			// - for stdlib package: prefer first import spec.
-			// - for third party package: prefer first third party import spec.
-			// We cannot use last import spec as best match for third party package
-			// because grouped imports are usually placed last by goimports -local
-			// flag.
-			// See issue #19190.
-			seenAnyThirdParty := false
-			for j, spec := range gen.Specs {
-				impspec := spec.(*ast.ImportSpec)
-				p := importPath(impspec)
-				n := matchLen(p, path)
-				if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) {
-					bestMatch = n
-					impDecl = gen
-					impIndex = j
-				}
-				seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p)
-			}
-		}
-	}
-
-	// If no import decl found, add one after the last import.
-	if impDecl == nil {
-		impDecl = &ast.GenDecl{
-			Tok: token.IMPORT,
-		}
-		if lastImport >= 0 {
-			impDecl.TokPos = f.Decls[lastImport].End()
-		} else {
-			// There are no existing imports.
-			// Our new import, preceded by a blank line,  goes after the package declaration
-			// and after the comment, if any, that starts on the same line as the
-			// package declaration.
-			impDecl.TokPos = f.Package
-
-			file := fset.File(f.Package)
-			pkgLine := file.Line(f.Package)
-			for _, c := range f.Comments {
-				if file.Line(c.Pos()) > pkgLine {
-					break
-				}
-				// +2 for a blank line
-				impDecl.TokPos = c.End() + 2
-			}
-		}
-		f.Decls = append(f.Decls, nil)
-		copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:])
-		f.Decls[lastImport+1] = impDecl
-	}
-
-	// Insert new import at insertAt.
-	insertAt := 0
-	if impIndex >= 0 {
-		// insert after the found import
-		insertAt = impIndex + 1
-	}
-	impDecl.Specs = append(impDecl.Specs, nil)
-	copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:])
-	impDecl.Specs[insertAt] = newImport
-	pos := impDecl.Pos()
-	if insertAt > 0 {
-		// If there is a comment after an existing import, preserve the comment
-		// position by adding the new import after the comment.
-		if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil {
-			pos = spec.Comment.End()
-		} else {
-			// Assign same position as the previous import,
-			// so that the sorter sees it as being in the same block.
-			pos = impDecl.Specs[insertAt-1].Pos()
-		}
-	}
-	if newImport.Name != nil {
-		newImport.Name.NamePos = pos
-	}
-	newImport.Path.ValuePos = pos
-	newImport.EndPos = pos
-
-	// Clean up parens. impDecl contains at least one spec.
-	if len(impDecl.Specs) == 1 {
-		// Remove unneeded parens.
-		impDecl.Lparen = token.NoPos
-	} else if !impDecl.Lparen.IsValid() {
-		// impDecl needs parens added.
-		impDecl.Lparen = impDecl.Specs[0].Pos()
-	}
-
-	f.Imports = append(f.Imports, newImport)
-
-	if len(f.Decls) <= 1 {
-		return true
-	}
-
-	// Merge all the import declarations into the first one.
-	var first *ast.GenDecl
-	for i := 0; i < len(f.Decls); i++ {
-		decl := f.Decls[i]
-		gen, ok := decl.(*ast.GenDecl)
-		if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") {
-			continue
-		}
-		if first == nil {
-			first = gen
-			continue // Don't touch the first one.
-		}
-		// We now know there is more than one package in this import
-		// declaration. Ensure that it ends up parenthesized.
-		first.Lparen = first.Pos()
-		// Move the imports of the other import declaration to the first one.
-		for _, spec := range gen.Specs {
-			spec.(*ast.ImportSpec).Path.ValuePos = first.Pos()
-			first.Specs = append(first.Specs, spec)
-		}
-		f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
-		i--
-	}
-
-	return true
-}
-
-func isThirdParty(importPath string) bool {
-	// Third party package import path usually contains "." (".com", ".org", ...)
-	// This logic is taken from golang.org/x/tools/imports package.
-	return strings.Contains(importPath, ".")
-}
-
-// DeleteImport deletes the import path from the file f, if present.
-// If there are duplicate import declarations, all matching ones are deleted.
-func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) {
-	return DeleteNamedImport(fset, f, "", path)
-}
-
-// DeleteNamedImport deletes the import with the given name and path from the file f, if present.
-// If there are duplicate import declarations, all matching ones are deleted.
-func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) {
-	var delspecs []*ast.ImportSpec
-	var delcomments []*ast.CommentGroup
-
-	// Find the import nodes that import path, if any.
-	for i := 0; i < len(f.Decls); i++ {
-		decl := f.Decls[i]
-		gen, ok := decl.(*ast.GenDecl)
-		if !ok || gen.Tok != token.IMPORT {
-			continue
-		}
-		for j := 0; j < len(gen.Specs); j++ {
-			spec := gen.Specs[j]
-			impspec := spec.(*ast.ImportSpec)
-			if importName(impspec) != name || importPath(impspec) != path {
-				continue
-			}
-
-			// We found an import spec that imports path.
-			// Delete it.
-			delspecs = append(delspecs, impspec)
-			deleted = true
-			copy(gen.Specs[j:], gen.Specs[j+1:])
-			gen.Specs = gen.Specs[:len(gen.Specs)-1]
-
-			// If this was the last import spec in this decl,
-			// delete the decl, too.
-			if len(gen.Specs) == 0 {
-				copy(f.Decls[i:], f.Decls[i+1:])
-				f.Decls = f.Decls[:len(f.Decls)-1]
-				i--
-				break
-			} else if len(gen.Specs) == 1 {
-				if impspec.Doc != nil {
-					delcomments = append(delcomments, impspec.Doc)
-				}
-				if impspec.Comment != nil {
-					delcomments = append(delcomments, impspec.Comment)
-				}
-				for _, cg := range f.Comments {
-					// Found comment on the same line as the import spec.
-					if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line {
-						delcomments = append(delcomments, cg)
-						break
-					}
-				}
-
-				spec := gen.Specs[0].(*ast.ImportSpec)
-
-				// Move the documentation right after the import decl.
-				if spec.Doc != nil {
-					for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line {
-						fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
-					}
-				}
-				for _, cg := range f.Comments {
-					if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line {
-						for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line {
-							fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
-						}
-						break
-					}
-				}
-			}
-			if j > 0 {
-				lastImpspec := gen.Specs[j-1].(*ast.ImportSpec)
-				lastLine := fset.PositionFor(lastImpspec.Path.ValuePos, false).Line
-				line := fset.PositionFor(impspec.Path.ValuePos, false).Line
-
-				// We deleted an entry but now there may be
-				// a blank line-sized hole where the import was.
-				if line-lastLine > 1 || !gen.Rparen.IsValid() {
-					// There was a blank line immediately preceding the deleted import,
-					// so there's no need to close the hole. The right parenthesis is
-					// invalid after AddImport to an import statement without parenthesis.
-					// Do nothing.
-				} else if line != fset.File(gen.Rparen).LineCount() {
-					// There was no blank line. Close the hole.
-					fset.File(gen.Rparen).MergeLine(line)
-				}
-			}
-			j--
-		}
-	}
-
-	// Delete imports from f.Imports.
-	for i := 0; i < len(f.Imports); i++ {
-		imp := f.Imports[i]
-		for j, del := range delspecs {
-			if imp == del {
-				copy(f.Imports[i:], f.Imports[i+1:])
-				f.Imports = f.Imports[:len(f.Imports)-1]
-				copy(delspecs[j:], delspecs[j+1:])
-				delspecs = delspecs[:len(delspecs)-1]
-				i--
-				break
-			}
-		}
-	}
-
-	// Delete comments from f.Comments.
-	for i := 0; i < len(f.Comments); i++ {
-		cg := f.Comments[i]
-		for j, del := range delcomments {
-			if cg == del {
-				copy(f.Comments[i:], f.Comments[i+1:])
-				f.Comments = f.Comments[:len(f.Comments)-1]
-				copy(delcomments[j:], delcomments[j+1:])
-				delcomments = delcomments[:len(delcomments)-1]
-				i--
-				break
-			}
-		}
-	}
-
-	if len(delspecs) > 0 {
-		panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs))
-	}
-
-	return
-}
-
-// RewriteImport rewrites any import of path oldPath to path newPath.
-func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) {
-	for _, imp := range f.Imports {
-		if importPath(imp) == oldPath {
-			rewrote = true
-			// record old End, because the default is to compute
-			// it using the length of imp.Path.Value.
-			imp.EndPos = imp.End()
-			imp.Path.Value = strconv.Quote(newPath)
-		}
-	}
-	return
-}
-
-// UsesImport reports whether a given import is used.
-// The provided File must have been parsed with syntactic object resolution
-// (not using go/parser.SkipObjectResolution).
-func UsesImport(f *ast.File, path string) (used bool) {
-	if f.Scope == nil {
-		panic("file f was not parsed with syntactic object resolution")
-	}
-	spec := importSpec(f, path)
-	if spec == nil {
-		return
-	}
-
-	name := spec.Name.String()
-	switch name {
-	case "":
-		// If the package name is not explicitly specified,
-		// make an educated guess. This is not guaranteed to be correct.
-		lastSlash := strings.LastIndex(path, "/")
-		if lastSlash == -1 {
-			name = path
-		} else {
-			name = path[lastSlash+1:]
-		}
-	case "_", ".":
-		// Not sure if this import is used - err on the side of caution.
-		return true
-	}
-
-	ast.Walk(visitFn(func(n ast.Node) {
-		sel, ok := n.(*ast.SelectorExpr)
-		if ok && isTopName(sel.X, name) {
-			used = true
-		}
-	}), f)
-
-	return
-}
-
-type visitFn func(node ast.Node)
-
-func (fn visitFn) Visit(node ast.Node) ast.Visitor {
-	fn(node)
-	return fn
-}
-
-// imports reports whether f has an import with the specified name and path.
-func imports(f *ast.File, name, path string) bool {
-	for _, s := range f.Imports {
-		if importName(s) == name && importPath(s) == path {
-			return true
-		}
-	}
-	return false
-}
-
-// importSpec returns the import spec if f imports path,
-// or nil otherwise.
-func importSpec(f *ast.File, path string) *ast.ImportSpec {
-	for _, s := range f.Imports {
-		if importPath(s) == path {
-			return s
-		}
-	}
-	return nil
-}
-
-// importName returns the name of s,
-// or "" if the import is not named.
-func importName(s *ast.ImportSpec) string {
-	if s.Name == nil {
-		return ""
-	}
-	return s.Name.Name
-}
-
-// importPath returns the unquoted import path of s,
-// or "" if the path is not properly quoted.
-func importPath(s *ast.ImportSpec) string {
-	t, err := strconv.Unquote(s.Path.Value)
-	if err != nil {
-		return ""
-	}
-	return t
-}
-
-// declImports reports whether gen contains an import of path.
-func declImports(gen *ast.GenDecl, path string) bool {
-	if gen.Tok != token.IMPORT {
-		return false
-	}
-	for _, spec := range gen.Specs {
-		impspec := spec.(*ast.ImportSpec)
-		if importPath(impspec) == path {
-			return true
-		}
-	}
-	return false
-}
-
-// matchLen returns the length of the longest path segment prefix shared by x and y.
-func matchLen(x, y string) int {
-	n := 0
-	for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ {
-		if x[i] == '/' {
-			n++
-		}
-	}
-	return n
-}
-
-// isTopName returns true if n is a top-level unresolved identifier with the given name.
-func isTopName(n ast.Expr, name string) bool {
-	id, ok := n.(*ast.Ident)
-	return ok && id.Name == name && id.Obj == nil
-}
-
-// Imports returns the file imports grouped by paragraph.
-func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec {
-	var groups [][]*ast.ImportSpec
-
-	for _, decl := range f.Decls {
-		genDecl, ok := decl.(*ast.GenDecl)
-		if !ok || genDecl.Tok != token.IMPORT {
-			break
-		}
-
-		group := []*ast.ImportSpec{}
-
-		var lastLine int
-		for _, spec := range genDecl.Specs {
-			importSpec := spec.(*ast.ImportSpec)
-			pos := importSpec.Path.ValuePos
-			line := fset.Position(pos).Line
-			if lastLine > 0 && pos > 0 && line-lastLine > 1 {
-				groups = append(groups, group)
-				group = []*ast.ImportSpec{}
-			}
-			group = append(group, importSpec)
-			lastLine = line
-		}
-		groups = append(groups, group)
-	}
-
-	return groups
-}
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
deleted file mode 100644
index 58934f76633d50..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
+++ /dev/null
@@ -1,486 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import (
-	"fmt"
-	"go/ast"
-	"reflect"
-	"sort"
-)
-
-// An ApplyFunc is invoked by Apply for each node n, even if n is nil,
-// before and/or after the node's children, using a Cursor describing
-// the current node and providing operations on it.
-//
-// The return value of ApplyFunc controls the syntax tree traversal.
-// See Apply for details.
-type ApplyFunc func(*Cursor) bool
-
-// Apply traverses a syntax tree recursively, starting with root,
-// and calling pre and post for each node as described below.
-// Apply returns the syntax tree, possibly modified.
-//
-// If pre is not nil, it is called for each node before the node's
-// children are traversed (pre-order). If pre returns false, no
-// children are traversed, and post is not called for that node.
-//
-// If post is not nil, and a prior call of pre didn't return false,
-// post is called for each node after its children are traversed
-// (post-order). If post returns false, traversal is terminated and
-// Apply returns immediately.
-//
-// Only fields that refer to AST nodes are considered children;
-// i.e., token.Pos, Scopes, Objects, and fields of basic types
-// (strings, etc.) are ignored.
-//
-// Children are traversed in the order in which they appear in the
-// respective node's struct definition. A package's files are
-// traversed in the filenames' alphabetical order.
-func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) {
-	parent := &struct{ ast.Node }{root}
-	defer func() {
-		if r := recover(); r != nil && r != abort {
-			panic(r)
-		}
-		result = parent.Node
-	}()
-	a := &application{pre: pre, post: post}
-	a.apply(parent, "Node", nil, root)
-	return
-}
-
-var abort = new(int) // singleton, to signal termination of Apply
-
-// A Cursor describes a node encountered during Apply.
-// Information about the node and its parent is available
-// from the Node, Parent, Name, and Index methods.
-//
-// If p is a variable of type and value of the current parent node
-// c.Parent(), and f is the field identifier with name c.Name(),
-// the following invariants hold:
-//
-//	p.f            == c.Node()  if c.Index() <  0
-//	p.f[c.Index()] == c.Node()  if c.Index() >= 0
-//
-// The methods Replace, Delete, InsertBefore, and InsertAfter
-// can be used to change the AST without disrupting Apply.
-type Cursor struct {
-	parent ast.Node
-	name   string
-	iter   *iterator // valid if non-nil
-	node   ast.Node
-}
-
-// Node returns the current Node.
-func (c *Cursor) Node() ast.Node { return c.node }
-
-// Parent returns the parent of the current Node.
-func (c *Cursor) Parent() ast.Node { return c.parent }
-
-// Name returns the name of the parent Node field that contains the current Node.
-// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns
-// the filename for the current Node.
-func (c *Cursor) Name() string { return c.name }
-
-// Index reports the index >= 0 of the current Node in the slice of Nodes that
-// contains it, or a value < 0 if the current Node is not part of a slice.
-// The index of the current node changes if InsertBefore is called while
-// processing the current node.
-func (c *Cursor) Index() int {
-	if c.iter != nil {
-		return c.iter.index
-	}
-	return -1
-}
-
-// field returns the current node's parent field value.
-func (c *Cursor) field() reflect.Value {
-	return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name)
-}
-
-// Replace replaces the current Node with n.
-// The replacement node is not walked by Apply.
-func (c *Cursor) Replace(n ast.Node) {
-	if _, ok := c.node.(*ast.File); ok {
-		file, ok := n.(*ast.File)
-		if !ok {
-			panic("attempt to replace *ast.File with non-*ast.File")
-		}
-		c.parent.(*ast.Package).Files[c.name] = file
-		return
-	}
-
-	v := c.field()
-	if i := c.Index(); i >= 0 {
-		v = v.Index(i)
-	}
-	v.Set(reflect.ValueOf(n))
-}
-
-// Delete deletes the current Node from its containing slice.
-// If the current Node is not part of a slice, Delete panics.
-// As a special case, if the current node is a package file,
-// Delete removes it from the package's Files map.
-func (c *Cursor) Delete() {
-	if _, ok := c.node.(*ast.File); ok {
-		delete(c.parent.(*ast.Package).Files, c.name)
-		return
-	}
-
-	i := c.Index()
-	if i < 0 {
-		panic("Delete node not contained in slice")
-	}
-	v := c.field()
-	l := v.Len()
-	reflect.Copy(v.Slice(i, l), v.Slice(i+1, l))
-	v.Index(l - 1).Set(reflect.Zero(v.Type().Elem()))
-	v.SetLen(l - 1)
-	c.iter.step--
-}
-
-// InsertAfter inserts n after the current Node in its containing slice.
-// If the current Node is not part of a slice, InsertAfter panics.
-// Apply does not walk n.
-func (c *Cursor) InsertAfter(n ast.Node) {
-	i := c.Index()
-	if i < 0 {
-		panic("InsertAfter node not contained in slice")
-	}
-	v := c.field()
-	v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
-	l := v.Len()
-	reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l))
-	v.Index(i + 1).Set(reflect.ValueOf(n))
-	c.iter.step++
-}
-
-// InsertBefore inserts n before the current Node in its containing slice.
-// If the current Node is not part of a slice, InsertBefore panics.
-// Apply will not walk n.
-func (c *Cursor) InsertBefore(n ast.Node) {
-	i := c.Index()
-	if i < 0 {
-		panic("InsertBefore node not contained in slice")
-	}
-	v := c.field()
-	v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
-	l := v.Len()
-	reflect.Copy(v.Slice(i+1, l), v.Slice(i, l))
-	v.Index(i).Set(reflect.ValueOf(n))
-	c.iter.index++
-}
-
-// application carries all the shared data so we can pass it around cheaply.
-type application struct {
-	pre, post ApplyFunc
-	cursor    Cursor
-	iter      iterator
-}
-
-func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) {
-	// convert typed nil into untyped nil
-	if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() {
-		n = nil
-	}
-
-	// avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead
-	saved := a.cursor
-	a.cursor.parent = parent
-	a.cursor.name = name
-	a.cursor.iter = iter
-	a.cursor.node = n
-
-	if a.pre != nil && !a.pre(&a.cursor) {
-		a.cursor = saved
-		return
-	}
-
-	// walk children
-	// (the order of the cases matches the order of the corresponding node types in go/ast)
-	switch n := n.(type) {
-	case nil:
-		// nothing to do
-
-	// Comments and fields
-	case *ast.Comment:
-		// nothing to do
-
-	case *ast.CommentGroup:
-		if n != nil {
-			a.applyList(n, "List")
-		}
-
-	case *ast.Field:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Names")
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Tag", nil, n.Tag)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.FieldList:
-		a.applyList(n, "List")
-
-	// Expressions
-	case *ast.BadExpr, *ast.Ident, *ast.BasicLit:
-		// nothing to do
-
-	case *ast.Ellipsis:
-		a.apply(n, "Elt", nil, n.Elt)
-
-	case *ast.FuncLit:
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.CompositeLit:
-		a.apply(n, "Type", nil, n.Type)
-		a.applyList(n, "Elts")
-
-	case *ast.ParenExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.SelectorExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Sel", nil, n.Sel)
-
-	case *ast.IndexExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Index", nil, n.Index)
-
-	case *ast.IndexListExpr:
-		a.apply(n, "X", nil, n.X)
-		a.applyList(n, "Indices")
-
-	case *ast.SliceExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Low", nil, n.Low)
-		a.apply(n, "High", nil, n.High)
-		a.apply(n, "Max", nil, n.Max)
-
-	case *ast.TypeAssertExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Type", nil, n.Type)
-
-	case *ast.CallExpr:
-		a.apply(n, "Fun", nil, n.Fun)
-		a.applyList(n, "Args")
-
-	case *ast.StarExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.UnaryExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.BinaryExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Y", nil, n.Y)
-
-	case *ast.KeyValueExpr:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-
-	// Types
-	case *ast.ArrayType:
-		a.apply(n, "Len", nil, n.Len)
-		a.apply(n, "Elt", nil, n.Elt)
-
-	case *ast.StructType:
-		a.apply(n, "Fields", nil, n.Fields)
-
-	case *ast.FuncType:
-		if tparams := n.TypeParams; tparams != nil {
-			a.apply(n, "TypeParams", nil, tparams)
-		}
-		a.apply(n, "Params", nil, n.Params)
-		a.apply(n, "Results", nil, n.Results)
-
-	case *ast.InterfaceType:
-		a.apply(n, "Methods", nil, n.Methods)
-
-	case *ast.MapType:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-
-	case *ast.ChanType:
-		a.apply(n, "Value", nil, n.Value)
-
-	// Statements
-	case *ast.BadStmt:
-		// nothing to do
-
-	case *ast.DeclStmt:
-		a.apply(n, "Decl", nil, n.Decl)
-
-	case *ast.EmptyStmt:
-		// nothing to do
-
-	case *ast.LabeledStmt:
-		a.apply(n, "Label", nil, n.Label)
-		a.apply(n, "Stmt", nil, n.Stmt)
-
-	case *ast.ExprStmt:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.SendStmt:
-		a.apply(n, "Chan", nil, n.Chan)
-		a.apply(n, "Value", nil, n.Value)
-
-	case *ast.IncDecStmt:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.AssignStmt:
-		a.applyList(n, "Lhs")
-		a.applyList(n, "Rhs")
-
-	case *ast.GoStmt:
-		a.apply(n, "Call", nil, n.Call)
-
-	case *ast.DeferStmt:
-		a.apply(n, "Call", nil, n.Call)
-
-	case *ast.ReturnStmt:
-		a.applyList(n, "Results")
-
-	case *ast.BranchStmt:
-		a.apply(n, "Label", nil, n.Label)
-
-	case *ast.BlockStmt:
-		a.applyList(n, "List")
-
-	case *ast.IfStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Cond", nil, n.Cond)
-		a.apply(n, "Body", nil, n.Body)
-		a.apply(n, "Else", nil, n.Else)
-
-	case *ast.CaseClause:
-		a.applyList(n, "List")
-		a.applyList(n, "Body")
-
-	case *ast.SwitchStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Tag", nil, n.Tag)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.TypeSwitchStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Assign", nil, n.Assign)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.CommClause:
-		a.apply(n, "Comm", nil, n.Comm)
-		a.applyList(n, "Body")
-
-	case *ast.SelectStmt:
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.ForStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Cond", nil, n.Cond)
-		a.apply(n, "Post", nil, n.Post)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.RangeStmt:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Body", nil, n.Body)
-
-	// Declarations
-	case *ast.ImportSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		a.apply(n, "Path", nil, n.Path)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.ValueSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Names")
-		a.apply(n, "Type", nil, n.Type)
-		a.applyList(n, "Values")
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.TypeSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		if tparams := n.TypeParams; tparams != nil {
-			a.apply(n, "TypeParams", nil, tparams)
-		}
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.BadDecl:
-		// nothing to do
-
-	case *ast.GenDecl:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Specs")
-
-	case *ast.FuncDecl:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Recv", nil, n.Recv)
-		a.apply(n, "Name", nil, n.Name)
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Body", nil, n.Body)
-
-	// Files and packages
-	case *ast.File:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		a.applyList(n, "Decls")
-		// Don't walk n.Comments; they have either been walked already if
-		// they are Doc comments, or they can be easily walked explicitly.
-
-	case *ast.Package:
-		// collect and sort names for reproducible behavior
-		var names []string
-		for name := range n.Files {
-			names = append(names, name)
-		}
-		sort.Strings(names)
-		for _, name := range names {
-			a.apply(n, name, nil, n.Files[name])
-		}
-
-	default:
-		panic(fmt.Sprintf("Apply: unexpected node type %T", n))
-	}
-
-	if a.post != nil && !a.post(&a.cursor) {
-		panic(abort)
-	}
-
-	a.cursor = saved
-}
-
-// An iterator controls iteration over a slice of nodes.
-type iterator struct {
-	index, step int
-}
-
-func (a *application) applyList(parent ast.Node, name string) {
-	// avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead
-	saved := a.iter
-	a.iter.index = 0
-	for {
-		// must reload parent.name each time, since cursor modifications might change it
-		v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name)
-		if a.iter.index >= v.Len() {
-			break
-		}
-
-		// element x may be nil in a bad AST - be cautious
-		var x ast.Node
-		if e := v.Index(a.iter.index); e.IsValid() {
-			x = e.Interface().(ast.Node)
-		}
-
-		a.iter.step = 1
-		a.apply(parent, name, &a.iter, x)
-		a.iter.index += a.iter.step
-	}
-	a.iter = saved
-}
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/util.go b/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/util.go
deleted file mode 100644
index ca71e3e1055387..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/golang.org/x/tools/go/ast/astutil/util.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import "go/ast"
-
-// Unparen returns e with any enclosing parentheses stripped.
-// Deprecated: use [ast.Unparen].
-func Unparen(e ast.Expr) ast.Expr { return ast.Unparen(e) }
diff --git a/src/cmd/compile/internal/ssa/_gen/vendor/modules.txt b/src/cmd/compile/internal/ssa/_gen/vendor/modules.txt
deleted file mode 100644
index 2efa97223356a2..00000000000000
--- a/src/cmd/compile/internal/ssa/_gen/vendor/modules.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# golang.org/x/tools v0.27.0
-## explicit; go 1.22.0
-golang.org/x/tools/go/ast/astutil
diff --git a/src/cmd/compile/internal/ssa/allocators.go b/src/cmd/compile/internal/ssa/allocators.go
index 10b1c582801db2..222ae73f2b80e0 100644
--- a/src/cmd/compile/internal/ssa/allocators.go
+++ b/src/cmd/compile/internal/ssa/allocators.go
@@ -31,7 +31,9 @@ func (c *Cache) allocValueSlice(n int) []*Value {
 	return s
 }
 func (c *Cache) freeValueSlice(s []*Value) {
-	clear(s)
+	for i := range s {
+		s[i] = nil
+	}
 	b := bits.Len(uint(cap(s)) - 1)
 	var sp *[]*Value
 	if len(c.hdrValueSlice) == 0 {
@@ -67,7 +69,9 @@ func (c *Cache) allocLimitSlice(n int) []limit {
 	return s
 }
 func (c *Cache) freeLimitSlice(s []limit) {
-	clear(s)
+	for i := range s {
+		s[i] = limit{}
+	}
 	b := bits.Len(uint(cap(s)) - 1)
 	var sp *[]limit
 	if len(c.hdrLimitSlice) == 0 {
diff --git a/src/cmd/compile/internal/ssa/block.go b/src/cmd/compile/internal/ssa/block.go
index 1240bfd6556a11..0c9aea8f96844d 100644
--- a/src/cmd/compile/internal/ssa/block.go
+++ b/src/cmd/compile/internal/ssa/block.go
@@ -264,7 +264,10 @@ func (b *Block) resetWithControl2(kind BlockKind, v, w *Value) {
 // The values in b.Values after i must already have had their args reset,
 // to maintain correct value uses counts.
 func (b *Block) truncateValues(i int) {
-	clear(b.Values[i:])
+	tail := b.Values[i:]
+	for j := range tail {
+		tail[j] = nil
+	}
 	b.Values = b.Values[:i]
 }
 
diff --git a/src/cmd/compile/internal/ssa/cache.go b/src/cmd/compile/internal/ssa/cache.go
index 0c16efcd57d6ac..fd19cb3c0980a0 100644
--- a/src/cmd/compile/internal/ssa/cache.go
+++ b/src/cmd/compile/internal/ssa/cache.go
@@ -39,13 +39,24 @@ type Cache struct {
 
 func (c *Cache) Reset() {
 	nv := sort.Search(len(c.values), func(i int) bool { return c.values[i].ID == 0 })
-	clear(c.values[:nv])
+	xv := c.values[:nv]
+	for i := range xv {
+		xv[i] = Value{}
+	}
 	nb := sort.Search(len(c.blocks), func(i int) bool { return c.blocks[i].ID == 0 })
-	clear(c.blocks[:nb])
+	xb := c.blocks[:nb]
+	for i := range xb {
+		xb[i] = Block{}
+	}
 	nl := sort.Search(len(c.locs), func(i int) bool { return c.locs[i] == nil })
-	clear(c.locs[:nl])
+	xl := c.locs[:nl]
+	for i := range xl {
+		xl[i] = nil
+	}
 
 	// regalloc sets the length of c.regallocValues to whatever it may use,
 	// so clear according to length.
-	clear(c.regallocValues)
+	for i := range c.regallocValues {
+		c.regallocValues[i] = valState{}
+	}
 }
diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go
index d4cd32a0d7b5b6..a3131efa41c73d 100644
--- a/src/cmd/compile/internal/ssa/config.go
+++ b/src/cmd/compile/internal/ssa/config.go
@@ -50,14 +50,6 @@ type Config struct {
 	haveBswap64    bool      // architecture implements Bswap64
 	haveBswap32    bool      // architecture implements Bswap32
 	haveBswap16    bool      // architecture implements Bswap16
-
-	// mulRecipes[x] = function to build v * x from v.
-	mulRecipes map[int64]mulRecipe
-}
-
-type mulRecipe struct {
-	cost  int
-	build func(*Value, *Value) *Value // build(m, v) returns v * x built at m.
 }
 
 type (
@@ -372,8 +364,6 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
 		opcodeTable[Op386LoweredWB].reg.clobbers |= 1 << 3 // BX
 	}
 
-	c.buildRecipes(arch)
-
 	return c
 }
 
@@ -392,253 +382,3 @@ func (c *Config) haveByteSwap(size int64) bool {
 		return false
 	}
 }
-
-func (c *Config) buildRecipes(arch string) {
-	// Information for strength-reducing multiplies.
-	type linearCombo struct {
-		// we can compute a*x+b*y in one instruction
-		a, b int64
-		// cost, in arbitrary units (tenths of cycles, usually)
-		cost int
-		// builds SSA value for a*x+b*y. Use the position
-		// information from m.
-		build func(m, x, y *Value) *Value
-	}
-
-	// List all the linear combination instructions we have.
-	var linearCombos []linearCombo
-	r := func(a, b int64, cost int, build func(m, x, y *Value) *Value) {
-		linearCombos = append(linearCombos, linearCombo{a: a, b: b, cost: cost, build: build})
-	}
-	var mulCost int
-	switch arch {
-	case "amd64":
-		// Assumes that the following costs from https://gmplib.org/~tege/x86-timing.pdf:
-		//    1 - addq, shlq, leaq, negq, subq
-		//    3 - imulq
-		// These costs limit the rewrites to two instructions.
-		// Operations which have to happen in place (and thus
-		// may require a reg-reg move) score slightly higher.
-		mulCost = 30
-		// add
-		r(1, 1, 10,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue2(m.Pos, OpAMD64ADDQ, m.Type, x, y)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64ADDL
-				}
-				return v
-			})
-		// neg
-		r(-1, 0, 11,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue1(m.Pos, OpAMD64NEGQ, m.Type, x)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64NEGL
-				}
-				return v
-			})
-		// sub
-		r(1, -1, 11,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue2(m.Pos, OpAMD64SUBQ, m.Type, x, y)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64SUBL
-				}
-				return v
-			})
-		// lea
-		r(1, 2, 10,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue2(m.Pos, OpAMD64LEAQ2, m.Type, x, y)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64LEAL2
-				}
-				return v
-			})
-		r(1, 4, 10,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue2(m.Pos, OpAMD64LEAQ4, m.Type, x, y)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64LEAL4
-				}
-				return v
-			})
-		r(1, 8, 10,
-			func(m, x, y *Value) *Value {
-				v := m.Block.NewValue2(m.Pos, OpAMD64LEAQ8, m.Type, x, y)
-				if m.Type.Size() == 4 {
-					v.Op = OpAMD64LEAL8
-				}
-				return v
-			})
-		// regular shifts
-		for i := 2; i < 64; i++ {
-			r(1< 4 {
-				c++
-			}
-			r(1, 1< 4 {
-				c++
-			}
-			r(-1< 4 {
-				c++
-			}
-			r(1, -1< 1; n /= 2 {
+				if combineStores(v, n) {
+					continue
+				}
+			}
 		}
 	}
 }
 
-// combineStores tries to combine the stores ending in root.
-func combineStores(root *Value) {
+// Try to combine the n stores ending in root.
+// Returns true if successful.
+func combineStores(root *Value, n int64) bool {
 	// Helper functions.
-	maxRegSize := root.Block.Func.Config.RegSize
 	type StoreRecord struct {
 		store  *Value
 		offset int64
-		size   int64
 	}
 	getShiftBase := func(a []StoreRecord) *Value {
 		x := a[0].store.Args[1]
@@ -471,122 +474,86 @@ func combineStores(root *Value) {
 		return val.AuxInt
 	}
 
+	// Element size of the individual stores.
+	size := root.Aux.(*types.Type).Size()
+	if size*n > root.Block.Func.Config.RegSize {
+		return false
+	}
+
 	// Gather n stores to look at. Check easy conditions we require.
-	allMergeable := make([]StoreRecord, 0, 8)
+	a := make([]StoreRecord, 0, 8)
 	rbase, roff := splitPtr(root.Args[0])
 	if root.Block.Func.Config.arch == "S390X" {
 		// s390x can't handle unaligned accesses to global variables.
 		if rbase.ptr.Op == OpAddr {
-			return
+			return false
 		}
 	}
-	allMergeable = append(allMergeable, StoreRecord{root, roff, root.Aux.(*types.Type).Size()})
-	allMergeableSize := root.Aux.(*types.Type).Size()
-	// TODO: this loop strictly requires stores to chain together in memory.
-	// maybe we can break this constraint and match more patterns.
-	for i, x := 1, root.Args[2]; i < 8; i, x = i+1, x.Args[2] {
+	a = append(a, StoreRecord{root, roff})
+	for i, x := int64(1), root.Args[2]; i < n; i, x = i+1, x.Args[2] {
 		if x.Op != OpStore {
-			break
+			return false
 		}
 		if x.Block != root.Block {
-			break
+			return false
 		}
 		if x.Uses != 1 { // Note: root can have more than one use.
-			break
-		}
-		xSize := x.Aux.(*types.Type).Size()
-		if xSize == 0 {
-			break
+			return false
 		}
-		if xSize > maxRegSize-allMergeableSize {
-			break
+		if x.Aux.(*types.Type).Size() != size {
+			// TODO: the constant source and consecutive load source cases
+			// do not need all the stores to be the same size.
+			return false
 		}
 		base, off := splitPtr(x.Args[0])
 		if base != rbase {
-			break
-		}
-		allMergeable = append(allMergeable, StoreRecord{x, off, xSize})
-		allMergeableSize += xSize
-	}
-	if len(allMergeable) <= 1 {
-		return
-	}
-	// Fit the combined total size to be one of the register size.
-	mergeableSet := map[int64][]StoreRecord{}
-	for i, size := 0, int64(0); i < len(allMergeable); i++ {
-		size += allMergeable[i].size
-		for _, bucketSize := range []int64{8, 4, 2} {
-			if size == bucketSize {
-				mergeableSet[size] = slices.Clone(allMergeable[:i+1])
-				break
-			}
+			return false
 		}
+		a = append(a, StoreRecord{x, off})
 	}
-	var a []StoreRecord
-	var aTotalSize int64
-	var mem *Value
-	var pos src.XPos
-	// Pick the largest mergeable set.
-	for _, s := range []int64{8, 4, 2} {
-		candidate := mergeableSet[s]
-		// TODO: a refactoring might be more efficient:
-		// Find a bunch of stores that are all adjacent and then decide how big a chunk of
-		// those sequential stores to combine.
-		if len(candidate) >= 2 {
-			// Before we sort, grab the memory arg the result should have.
-			mem = candidate[len(candidate)-1].store.Args[2]
-			// Also grab position of first store (last in array = first in memory order).
-			pos = candidate[len(candidate)-1].store.Pos
-			// Sort stores in increasing address order.
-			slices.SortFunc(candidate, func(sr1, sr2 StoreRecord) int {
-				return cmp.Compare(sr1.offset, sr2.offset)
-			})
-			// Check that everything is written to sequential locations.
-			sequential := true
-			for i := 1; i < len(candidate); i++ {
-				if candidate[i].offset != candidate[i-1].offset+candidate[i-1].size {
-					sequential = false
-					break
-				}
-			}
-			if sequential {
-				a = candidate
-				aTotalSize = s
-				break
-			}
+	// Before we sort, grab the memory arg the result should have.
+	mem := a[n-1].store.Args[2]
+	// Also grab position of first store (last in array = first in memory order).
+	pos := a[n-1].store.Pos
+
+	// Sort stores in increasing address order.
+	slices.SortFunc(a, func(sr1, sr2 StoreRecord) int {
+		return cmp.Compare(sr1.offset, sr2.offset)
+	})
+
+	// Check that everything is written to sequential locations.
+	for i := int64(0); i < n; i++ {
+		if a[i].offset != a[0].offset+i*size {
+			return false
 		}
 	}
-	if len(a) <= 1 {
-		return
-	}
+
 	// Memory location we're going to write at (the lowest one).
 	ptr := a[0].store.Args[0]
 
 	// Check for constant stores
 	isConst := true
-	for i := range a {
+	for i := int64(0); i < n; i++ {
 		switch a[i].store.Args[1].Op {
 		case OpConst32, OpConst16, OpConst8, OpConstBool:
 		default:
 			isConst = false
-		}
-		if !isConst {
 			break
 		}
 	}
 	if isConst {
 		// Modify root to do all the stores.
 		var c int64
-		for i := range a {
-			mask := int64(1)<<(8*a[i].size) - 1
-			s := 8 * (a[i].offset - a[0].offset)
+		mask := int64(1)<<(8*size) - 1
+		for i := int64(0); i < n; i++ {
+			s := 8 * size * int64(i)
 			if root.Block.Func.Config.BigEndian {
-				s = (aTotalSize-a[i].size)*8 - s
+				s = 8*size*(n-1) - s
 			}
 			c |= (a[i].store.Args[1].AuxInt & mask) << s
 		}
 		var cv *Value
-		switch aTotalSize {
+		switch size * n {
 		case 2:
 			cv = root.Block.Func.ConstInt16(types.Types[types.TUINT16], int16(c))
 		case 4:
@@ -596,7 +563,7 @@ func combineStores(root *Value) {
 		}
 
 		// Move all the stores to the root.
-		for i := range a {
+		for i := int64(0); i < n; i++ {
 			v := a[i].store
 			if v == root {
 				v.Aux = cv.Type // widen store type
@@ -609,14 +576,14 @@ func combineStores(root *Value) {
 				v.Type = types.Types[types.TBOOL] // erase memory type
 			}
 		}
-		return
+		return true
 	}
 
 	// Check for consecutive loads as the source of the stores.
 	var loadMem *Value
 	var loadBase BaseAddress
 	var loadIdx int64
-	for i := range a {
+	for i := int64(0); i < n; i++ {
 		load := a[i].store.Args[1]
 		if load.Op != OpLoad {
 			loadMem = nil
@@ -655,7 +622,7 @@ func combineStores(root *Value) {
 	if loadMem != nil {
 		// Modify the first load to do a larger load instead.
 		load := a[0].store.Args[1]
-		switch aTotalSize {
+		switch size * n {
 		case 2:
 			load.Type = types.Types[types.TUINT16]
 		case 4:
@@ -665,7 +632,7 @@ func combineStores(root *Value) {
 		}
 
 		// Modify root to do the store.
-		for i := range a {
+		for i := int64(0); i < n; i++ {
 			v := a[i].store
 			if v == root {
 				v.Aux = load.Type // widen store type
@@ -678,47 +645,45 @@ func combineStores(root *Value) {
 				v.Type = types.Types[types.TBOOL] // erase memory type
 			}
 		}
-		return
+		return true
 	}
 
 	// Check that all the shift/trunc are of the same base value.
 	shiftBase := getShiftBase(a)
 	if shiftBase == nil {
-		return
+		return false
 	}
-	for i := range a {
+	for i := int64(0); i < n; i++ {
 		if !isShiftBase(a[i].store, shiftBase) {
-			return
+			return false
 		}
 	}
 
 	// Check for writes in little-endian or big-endian order.
 	isLittleEndian := true
 	shift0 := shift(a[0].store, shiftBase)
-	for i := 1; i < len(a); i++ {
-		if shift(a[i].store, shiftBase) != shift0+(a[i].offset-a[0].offset)*8 {
+	for i := int64(1); i < n; i++ {
+		if shift(a[i].store, shiftBase) != shift0+i*size*8 {
 			isLittleEndian = false
 			break
 		}
 	}
 	isBigEndian := true
-	shiftedSize := int64(0)
-	for i := 1; i < len(a); i++ {
-		shiftedSize += a[i].size
-		if shift(a[i].store, shiftBase) != shift0-shiftedSize*8 {
+	for i := int64(1); i < n; i++ {
+		if shift(a[i].store, shiftBase) != shift0-i*size*8 {
 			isBigEndian = false
 			break
 		}
 	}
 	if !isLittleEndian && !isBigEndian {
-		return
+		return false
 	}
 
 	// Check to see if we need byte swap before storing.
 	needSwap := isLittleEndian && root.Block.Func.Config.BigEndian ||
 		isBigEndian && !root.Block.Func.Config.BigEndian
-	if needSwap && (int64(len(a)) != aTotalSize || !root.Block.Func.Config.haveByteSwap(aTotalSize)) {
-		return
+	if needSwap && (size != 1 || !root.Block.Func.Config.haveByteSwap(n)) {
+		return false
 	}
 
 	// This is the commit point.
@@ -728,19 +693,18 @@ func combineStores(root *Value) {
 	if isLittleEndian && shift0 != 0 {
 		sv = rightShift(root.Block, root.Pos, sv, shift0)
 	}
-	shiftedSize = int64(aTotalSize - a[0].size)
-	if isBigEndian && shift0-shiftedSize*8 != 0 {
-		sv = rightShift(root.Block, root.Pos, sv, shift0-shiftedSize*8)
+	if isBigEndian && shift0-(n-1)*size*8 != 0 {
+		sv = rightShift(root.Block, root.Pos, sv, shift0-(n-1)*size*8)
 	}
-	if sv.Type.Size() > aTotalSize {
-		sv = truncate(root.Block, root.Pos, sv, sv.Type.Size(), aTotalSize)
+	if sv.Type.Size() > size*n {
+		sv = truncate(root.Block, root.Pos, sv, sv.Type.Size(), size*n)
 	}
 	if needSwap {
 		sv = byteSwap(root.Block, root.Pos, sv)
 	}
 
 	// Move all the stores to the root.
-	for i := range a {
+	for i := int64(0); i < n; i++ {
 		v := a[i].store
 		if v == root {
 			v.Aux = sv.Type // widen store type
@@ -753,6 +717,7 @@ func combineStores(root *Value) {
 			v.Type = types.Types[types.TBOOL] // erase memory type
 		}
 	}
+	return true
 }
 
 func sizeType(size int64) *types.Type {
diff --git a/src/cmd/compile/internal/ssa/nilcheck.go b/src/cmd/compile/internal/ssa/nilcheck.go
index 9d43ec19919825..c69cd8c32ed394 100644
--- a/src/cmd/compile/internal/ssa/nilcheck.go
+++ b/src/cmd/compile/internal/ssa/nilcheck.go
@@ -217,12 +217,12 @@ func nilcheckelim2(f *Func) {
 					f.Warnl(v.Pos, "removed nil check")
 				}
 				// For bug 33724, policy is that we might choose to bump an existing position
-				// off the faulting load in favor of the one from the nil check.
+				// off the faulting load/store in favor of the one from the nil check.
 
 				// Iteration order means that first nilcheck in the chain wins, others
 				// are bumped into the ordinary statement preservation algorithm.
 				u := b.Values[unnecessary.get(v.Args[0].ID)]
-				if !u.Type.IsMemory() && !u.Pos.SameFileAndLine(v.Pos) {
+				if !u.Pos.SameFileAndLine(v.Pos) {
 					if u.Pos.IsStmt() == src.PosIsStmt {
 						pendingLines.add(u.Pos)
 					}
diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go
index 5d13f81841482d..de6ccf25f2f26e 100644
--- a/src/cmd/compile/internal/ssa/opGen.go
+++ b/src/cmd/compile/internal/ssa/opGen.go
@@ -659,8 +659,6 @@ const (
 	OpAMD64DIVLU
 	OpAMD64DIVWU
 	OpAMD64NEGLflags
-	OpAMD64ADDQconstflags
-	OpAMD64ADDLconstflags
 	OpAMD64ADDQcarry
 	OpAMD64ADCQ
 	OpAMD64ADDQconstcarry
@@ -1810,8 +1808,6 @@ const (
 	OpLOONG64XORconst
 	OpLOONG64NOR
 	OpLOONG64NORconst
-	OpLOONG64ANDN
-	OpLOONG64ORN
 	OpLOONG64FMADDF
 	OpLOONG64FMADDD
 	OpLOONG64FMSUBF
@@ -1964,8 +1960,6 @@ const (
 	OpLOONG64LoweredPanicBoundsA
 	OpLOONG64LoweredPanicBoundsB
 	OpLOONG64LoweredPanicBoundsC
-	OpLOONG64PRELD
-	OpLOONG64PRELDX
 
 	OpMIPSADD
 	OpMIPSADDconst
@@ -2076,7 +2070,6 @@ const (
 	OpMIPSLoweredGetCallerSP
 	OpMIPSLoweredGetCallerPC
 	OpMIPSLoweredWB
-	OpMIPSLoweredPubBarrier
 	OpMIPSLoweredPanicBoundsA
 	OpMIPSLoweredPanicBoundsB
 	OpMIPSLoweredPanicBoundsC
@@ -2208,7 +2201,6 @@ const (
 	OpMIPS64LoweredGetCallerSP
 	OpMIPS64LoweredGetCallerPC
 	OpMIPS64LoweredWB
-	OpMIPS64LoweredPubBarrier
 	OpMIPS64LoweredPanicBoundsA
 	OpMIPS64LoweredPanicBoundsB
 	OpMIPS64LoweredPanicBoundsC
@@ -2522,15 +2514,12 @@ const (
 	OpRISCV64ANDI
 	OpRISCV64CLZ
 	OpRISCV64CLZW
-	OpRISCV64CPOP
-	OpRISCV64CPOPW
 	OpRISCV64CTZ
 	OpRISCV64CTZW
 	OpRISCV64NOT
 	OpRISCV64OR
 	OpRISCV64ORN
 	OpRISCV64ORI
-	OpRISCV64REV8
 	OpRISCV64ROL
 	OpRISCV64ROLW
 	OpRISCV64ROR
@@ -7955,38 +7944,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:         "ADDQconstflags",
-		auxType:      auxInt32,
-		argLen:       1,
-		resultInArg0: true,
-		asm:          x86.AADDQ,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 49135}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15
-			},
-			outputs: []outputInfo{
-				{1, 0},
-				{0, 49135}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15
-			},
-		},
-	},
-	{
-		name:         "ADDLconstflags",
-		auxType:      auxInt32,
-		argLen:       1,
-		resultInArg0: true,
-		asm:          x86.AADDL,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 49135}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15
-			},
-			outputs: []outputInfo{
-				{1, 0},
-				{0, 49135}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15
-			},
-		},
-	},
 	{
 		name:         "ADDQcarry",
 		argLen:       2,
@@ -13874,10 +13831,11 @@ var opcodeTable = [...]opInfo{
 		},
 	},
 	{
-		name:        "DUFFZERO",
-		auxType:     auxInt64,
-		argLen:      2,
-		unsafePoint: true,
+		name:           "DUFFZERO",
+		auxType:        auxInt64,
+		argLen:         2,
+		faultOnNilArg0: true,
+		unsafePoint:    true,
 		reg: regInfo{
 			inputs: []inputInfo{
 				{0, 128}, // DI
@@ -13947,11 +13905,13 @@ var opcodeTable = [...]opInfo{
 		},
 	},
 	{
-		name:         "DUFFCOPY",
-		auxType:      auxInt64,
-		argLen:       3,
-		clobberFlags: true,
-		unsafePoint:  true,
+		name:           "DUFFCOPY",
+		auxType:        auxInt64,
+		argLen:         3,
+		clobberFlags:   true,
+		faultOnNilArg0: true,
+		faultOnNilArg1: true,
+		unsafePoint:    true,
 		reg: regInfo{
 			inputs: []inputInfo{
 				{0, 128}, // DI
@@ -23036,10 +22996,11 @@ var opcodeTable = [...]opInfo{
 		},
 	},
 	{
-		name:        "DUFFZERO",
-		auxType:     auxInt64,
-		argLen:      2,
-		unsafePoint: true,
+		name:           "DUFFZERO",
+		auxType:        auxInt64,
+		argLen:         2,
+		faultOnNilArg0: true,
+		unsafePoint:    true,
 		reg: regInfo{
 			inputs: []inputInfo{
 				{0, 524288}, // R20
@@ -23061,10 +23022,12 @@ var opcodeTable = [...]opInfo{
 		},
 	},
 	{
-		name:        "DUFFCOPY",
-		auxType:     auxInt64,
-		argLen:      3,
-		unsafePoint: true,
+		name:           "DUFFCOPY",
+		auxType:        auxInt64,
+		argLen:         3,
+		faultOnNilArg0: true,
+		faultOnNilArg1: true,
+		unsafePoint:    true,
 		reg: regInfo{
 			inputs: []inputInfo{
 				{0, 1048576}, // R21
@@ -24377,34 +24340,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:   "ANDN",
-		argLen: 2,
-		asm:    loong64.AANDN,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-				{1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-			},
-			outputs: []outputInfo{
-				{0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31
-			},
-		},
-	},
-	{
-		name:   "ORN",
-		argLen: 2,
-		asm:    loong64.AORN,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-				{1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-			},
-			outputs: []outputInfo{
-				{0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31
-			},
-		},
-	},
 	{
 		name:        "FMADDF",
 		argLen:      3,
@@ -26480,30 +26415,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:           "PRELD",
-		auxType:        auxInt64,
-		argLen:         2,
-		hasSideEffects: true,
-		asm:            loong64.APRELD,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1073741820}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-			},
-		},
-	},
-	{
-		name:           "PRELDX",
-		auxType:        auxInt64,
-		argLen:         2,
-		hasSideEffects: true,
-		asm:            loong64.APRELDX,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1073741820}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31
-			},
-		},
-	},
 
 	{
 		name:        "ADD",
@@ -27985,13 +27896,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:           "LoweredPubBarrier",
-		argLen:         1,
-		hasSideEffects: true,
-		asm:            mips.ASYNC,
-		reg:            regInfo{},
-	},
 	{
 		name:    "LoweredPanicBoundsA",
 		auxType: auxInt64,
@@ -29758,13 +29662,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:           "LoweredPubBarrier",
-		argLen:         1,
-		hasSideEffects: true,
-		asm:            mips.ASYNC,
-		reg:            regInfo{},
-	},
 	{
 		name:    "LoweredPanicBoundsA",
 		auxType: auxInt64,
@@ -33989,32 +33886,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:   "CPOP",
-		argLen: 1,
-		asm:    riscv.ACPOP,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-			outputs: []outputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-		},
-	},
-	{
-		name:   "CPOPW",
-		argLen: 1,
-		asm:    riscv.ACPOPW,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-			outputs: []outputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-		},
-	},
 	{
 		name:   "CTZ",
 		argLen: 1,
@@ -34097,19 +33968,6 @@ var opcodeTable = [...]opInfo{
 			},
 		},
 	},
-	{
-		name:   "REV8",
-		argLen: 1,
-		asm:    riscv.AREV8,
-		reg: regInfo{
-			inputs: []inputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-			outputs: []outputInfo{
-				{0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
-			},
-		},
-	},
 	{
 		name:   "ROL",
 		argLen: 2,
diff --git a/src/cmd/compile/internal/ssa/phiopt.go b/src/cmd/compile/internal/ssa/phiopt.go
index 034ee4c661046b..037845eacf2db6 100644
--- a/src/cmd/compile/internal/ssa/phiopt.go
+++ b/src/cmd/compile/internal/ssa/phiopt.go
@@ -119,33 +119,6 @@ func phiopt(f *Func) {
 					continue
 				}
 			}
-			// Replaces
-			//   if a { x = value } else { x = a } with x = a && value.
-			// Requires that value dominates x.
-			if v.Args[1-reverse] == b0.Controls[0] {
-				if tmp := v.Args[reverse]; sdom.IsAncestorEq(tmp.Block, b) {
-					v.reset(OpAndB)
-					v.SetArgs2(b0.Controls[0], tmp)
-					if f.pass.debug > 0 {
-						f.Warnl(b.Pos, "converted OpPhi to %v", v.Op)
-					}
-					continue
-				}
-			}
-
-			// Replaces
-			//   if a { x = a } else { x = value } with x = a || value.
-			// Requires that value dominates x.
-			if v.Args[reverse] == b0.Controls[0] {
-				if tmp := v.Args[1-reverse]; sdom.IsAncestorEq(tmp.Block, b) {
-					v.reset(OpOrB)
-					v.SetArgs2(b0.Controls[0], tmp)
-					if f.pass.debug > 0 {
-						f.Warnl(b.Pos, "converted OpPhi to %v", v.Op)
-					}
-					continue
-				}
-			}
 		}
 	}
 	// strengthen phi optimization.
diff --git a/src/cmd/compile/internal/ssa/poset.go b/src/cmd/compile/internal/ssa/poset.go
index f4f75fbe09d8c7..b7859166f48a98 100644
--- a/src/cmd/compile/internal/ssa/poset.go
+++ b/src/cmd/compile/internal/ssa/poset.go
@@ -23,7 +23,9 @@ func newBitset(n int) bitset {
 }
 
 func (bs bitset) Reset() {
-	clear(bs)
+	for i := range bs {
+		bs[i] = 0
+	}
 }
 
 func (bs bitset) Set(idx uint32) {
diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go
index 5617edb21f15ed..94f23a84aa0dbd 100644
--- a/src/cmd/compile/internal/ssa/prove.go
+++ b/src/cmd/compile/internal/ssa/prove.go
@@ -1757,9 +1757,7 @@ func (ft *factsTable) flowLimit(v *Value) bool {
 	case OpSub64, OpSub32, OpSub16, OpSub8:
 		a := ft.limits[v.Args[0].ID]
 		b := ft.limits[v.Args[1].ID]
-		sub := ft.newLimit(v, a.sub(b, uint(v.Type.Size())*8))
-		mod := ft.detectSignedMod(v)
-		return sub || mod
+		return ft.newLimit(v, a.sub(b, uint(v.Type.Size())*8))
 	case OpNeg64, OpNeg32, OpNeg16, OpNeg8:
 		a := ft.limits[v.Args[0].ID]
 		bitsize := uint(v.Type.Size()) * 8
@@ -1915,122 +1913,6 @@ func (ft *factsTable) flowLimit(v *Value) bool {
 	return false
 }
 
-// See if we can get any facts because v is the result of signed mod by a constant.
-// The mod operation has already been rewritten, so we have to try and reconstruct it.
-//   x % d
-// is rewritten as
-//   x - (x / d) * d
-// furthermore, the divide itself gets rewritten. If d is a power of 2 (d == 1<> k) << k
-//               = (x + adj) & (-1<>(w-1))>>>(w-k)) & (-1<> = signed shift, >>> = unsigned shift).
-	// See ./_gen/generic.rules, search for "Signed divide by power of 2".
-
-	var w int64
-	var addOp, andOp, constOp, sshiftOp, ushiftOp Op
-	switch v.Op {
-	case OpSub64:
-		w = 64
-		addOp = OpAdd64
-		andOp = OpAnd64
-		constOp = OpConst64
-		sshiftOp = OpRsh64x64
-		ushiftOp = OpRsh64Ux64
-	case OpSub32:
-		w = 32
-		addOp = OpAdd32
-		andOp = OpAnd32
-		constOp = OpConst32
-		sshiftOp = OpRsh32x64
-		ushiftOp = OpRsh32Ux64
-	case OpSub16:
-		w = 16
-		addOp = OpAdd16
-		andOp = OpAnd16
-		constOp = OpConst16
-		sshiftOp = OpRsh16x64
-		ushiftOp = OpRsh16Ux64
-	case OpSub8:
-		w = 8
-		addOp = OpAdd8
-		andOp = OpAnd8
-		constOp = OpConst8
-		sshiftOp = OpRsh8x64
-		ushiftOp = OpRsh8Ux64
-	default:
-		return false
-	}
-
-	x := v.Args[0]
-	and := v.Args[1]
-	if and.Op != andOp {
-		return false
-	}
-	var add, mask *Value
-	if and.Args[0].Op == addOp && and.Args[1].Op == constOp {
-		add = and.Args[0]
-		mask = and.Args[1]
-	} else if and.Args[1].Op == addOp && and.Args[0].Op == constOp {
-		add = and.Args[1]
-		mask = and.Args[0]
-	} else {
-		return false
-	}
-	var ushift *Value
-	if add.Args[0] == x {
-		ushift = add.Args[1]
-	} else if add.Args[1] == x {
-		ushift = add.Args[0]
-	} else {
-		return false
-	}
-	if ushift.Op != ushiftOp {
-		return false
-	}
-	if ushift.Args[1].Op != OpConst64 {
-		return false
-	}
-	k := w - ushift.Args[1].AuxInt // Now we know k!
-	d := int64(1) << k             // divisor
-	sshift := ushift.Args[0]
-	if sshift.Op != sshiftOp {
-		return false
-	}
-	if sshift.Args[0] != x {
-		return false
-	}
-	if sshift.Args[1].Op != OpConst64 || sshift.Args[1].AuxInt != w-1 {
-		return false
-	}
-	if mask.AuxInt != -d {
-		return false
-	}
-
-	// All looks ok. x % d is at most +/- d-1.
-	return ft.signedMinMax(v, -d+1, d-1)
-}
-
 // getBranch returns the range restrictions added by p
 // when reaching b. p is the immediate dominator of b.
 func getBranch(sdom SparseTree, p *Block, b *Block) branch {
diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go
index f1e210fe9b8b08..f52dad8a5d2fce 100644
--- a/src/cmd/compile/internal/ssa/regalloc.go
+++ b/src/cmd/compile/internal/ssa/regalloc.go
@@ -1301,7 +1301,9 @@ func (s *regAllocState) regalloc(f *Func) {
 			dinfo = make([]dentry, l)
 		} else {
 			dinfo = dinfo[:l]
-			clear(dinfo)
+			for i := range dinfo {
+				dinfo[i] = dentry{}
+			}
 		}
 
 		// Load static desired register info at the end of the block.
@@ -1899,10 +1901,6 @@ func (s *regAllocState) regalloc(f *Func) {
 			if s.f.Config.hasGReg && s.regs[s.GReg].v != nil {
 				s.freeReg(s.GReg) // Spill value in G register before any merge.
 			}
-			if s.blockOrder[b.ID] > s.blockOrder[b.Succs[0].b.ID] {
-				// No point if we've already regalloc'd the destination.
-				goto badloop
-			}
 			// For this to be worthwhile, the loop must have no calls in it.
 			top := b.Succs[0].b
 			loop := s.loopnest.b2l[top.ID]
diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go
index eb2c3b31b8c998..ed79d5154631ae 100644
--- a/src/cmd/compile/internal/ssa/rewrite.go
+++ b/src/cmd/compile/internal/ssa/rewrite.go
@@ -286,18 +286,7 @@ func canMergeLoadClobber(target, load, x *Value) bool {
 	// approximate x dying with:
 	//  1) target is x's only use.
 	//  2) target is not in a deeper loop than x.
-	switch {
-	case x.Uses == 2 && x.Op == OpPhi && len(x.Args) == 2 && (x.Args[0] == target || x.Args[1] == target) && target.Uses == 1:
-		// This is a simple detector to determine that x is probably
-		// not live after target. (It does not need to be perfect,
-		// regalloc will issue a reg-reg move to save it if we are wrong.)
-		// We have:
-		//   x = Phi(?, target)
-		//   target = Op(load, x)
-		// Because target has only one use as a Phi argument, we can schedule it
-		// very late. Hopefully, later than the other use of x. (The other use died
-		// between x and target, or exists on another branch entirely).
-	case x.Uses > 1:
+	if x.Uses != 1 {
 		return false
 	}
 	loopnest := x.Block.Func.loopnest()
@@ -535,11 +524,6 @@ func isU8Bit(n int64) bool {
 	return n == int64(uint8(n))
 }
 
-// is12Bit reports whether n can be represented as a signed 12 bit integer.
-func is12Bit(n int64) bool {
-	return -(1<<11) <= n && n < (1<<11)
-}
-
 // isU12Bit reports whether n can be represented as an unsigned 12 bit integer.
 func isU12Bit(n int64) bool {
 	return 0 <= n && n < (1<<12)
@@ -576,30 +560,6 @@ func b2i32(b bool) int32 {
 	return 0
 }
 
-func canMulStrengthReduce(config *Config, x int64) bool {
-	_, ok := config.mulRecipes[x]
-	return ok
-}
-func canMulStrengthReduce32(config *Config, x int32) bool {
-	_, ok := config.mulRecipes[int64(x)]
-	return ok
-}
-
-// mulStrengthReduce returns v*x evaluated at the location
-// (block and source position) of m.
-// canMulStrengthReduce must have returned true.
-func mulStrengthReduce(m *Value, v *Value, x int64) *Value {
-	return v.Block.Func.Config.mulRecipes[x].build(m, v)
-}
-
-// mulStrengthReduce32 returns v*x evaluated at the location
-// (block and source position) of m.
-// canMulStrengthReduce32 must have returned true.
-// The upper 32 bits of m might be set to junk.
-func mulStrengthReduce32(m *Value, v *Value, x int32) *Value {
-	return v.Block.Func.Config.mulRecipes[int64(x)].build(m, v)
-}
-
 // shiftIsBounded reports whether (left/right) shift Value v is known to be bounded.
 // A shift is bounded if it is shifting by less than the width of the shifted value.
 func shiftIsBounded(v *Value) bool {
@@ -1501,9 +1461,7 @@ func isInlinableMemmove(dst, src *Value, sz int64, c *Config) bool {
 	switch c.arch {
 	case "amd64":
 		return sz <= 16 || (sz < 1024 && disjoint(dst, sz, src, sz))
-	case "arm64":
-		return sz <= 64 || (sz <= 1024 && disjoint(dst, sz, src, sz))
-	case "386":
+	case "386", "arm64":
 		return sz <= 8
 	case "s390x", "ppc64", "ppc64le":
 		return sz <= 8 || disjoint(dst, sz, src, sz)
@@ -1583,11 +1541,6 @@ func GetPPC64Shiftme(auxint int64) int64 {
 // operation.  Masks can also extend from the msb and wrap to
 // the lsb too.  That is, the valid masks are 32 bit strings
 // of the form: 0..01..10..0 or 1..10..01..1 or 1...1
-//
-// Note: This ignores the upper 32 bits of the input. When a
-// zero extended result is desired (e.g a 64 bit result), the
-// user must verify the upper 32 bits are 0 and the mask is
-// contiguous (that is, non-wrapping).
 func isPPC64WordRotateMask(v64 int64) bool {
 	// Isolate rightmost 1 (if none 0) and add.
 	v := uint32(v64)
@@ -1598,16 +1551,6 @@ func isPPC64WordRotateMask(v64 int64) bool {
 	return (v&vp == 0 || vn&vpn == 0) && v != 0
 }
 
-// Test if this mask is a valid, contiguous bitmask which can be
-// represented by a RLWNM mask and also clears the upper 32 bits
-// of the register.
-func isPPC64WordRotateMaskNonWrapping(v64 int64) bool {
-	// Isolate rightmost 1 (if none 0) and add.
-	v := uint32(v64)
-	vp := (v & -v) + v
-	return (v&vp == 0) && v != 0 && uint64(uint32(v64)) == uint64(v64)
-}
-
 // Compress mask and shift into single value of the form
 // me | mb<<8 | rotate<<16 | nbits<<24 where me and mb can
 // be used to regenerate the input mask.
@@ -1717,7 +1660,7 @@ func mergePPC64AndSrdi(m, s int64) int64 {
 	if rv&uint64(mask) != 0 {
 		return 0
 	}
-	if !isPPC64WordRotateMaskNonWrapping(mask) {
+	if !isPPC64WordRotateMask(mask) {
 		return 0
 	}
 	return encodePPC64RotateMask((32-s)&31, mask, 32)
@@ -1732,7 +1675,7 @@ func mergePPC64AndSldi(m, s int64) int64 {
 	if rv&uint64(mask) != 0 {
 		return 0
 	}
-	if !isPPC64WordRotateMaskNonWrapping(mask) {
+	if !isPPC64WordRotateMask(mask) {
 		return 0
 	}
 	return encodePPC64RotateMask(s&31, mask, 32)
@@ -2641,33 +2584,3 @@ func bitsAdd64(x, y, carry int64) (r struct{ sum, carry int64 }) {
 	r.sum, r.carry = int64(s), int64(c)
 	return
 }
-
-func bitsMulU64(x, y int64) (r struct{ hi, lo int64 }) {
-	hi, lo := bits.Mul64(uint64(x), uint64(y))
-	r.hi, r.lo = int64(hi), int64(lo)
-	return
-}
-func bitsMulU32(x, y int32) (r struct{ hi, lo int32 }) {
-	hi, lo := bits.Mul32(uint32(x), uint32(y))
-	r.hi, r.lo = int32(hi), int32(lo)
-	return
-}
-
-// flagify rewrites v which is (X ...) to (Select0 (Xflags ...)).
-func flagify(v *Value) bool {
-	var flagVersion Op
-	switch v.Op {
-	case OpAMD64ADDQconst:
-		flagVersion = OpAMD64ADDQconstflags
-	case OpAMD64ADDLconst:
-		flagVersion = OpAMD64ADDLconstflags
-	default:
-		base.Fatalf("can't flagify op %s", v.Op)
-	}
-	inner := v.copyInto(v.Block)
-	inner.Op = flagVersion
-	inner.Type = types.NewTuple(v.Type, types.TypeFlags)
-	v.reset(OpSelect0)
-	v.AddArg(inner)
-	return true
-}
diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go
index 3d7af5f365a116..be9ed7f6e16f41 100644
--- a/src/cmd/compile/internal/ssa/rewriteAMD64.go
+++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go
@@ -8556,20 +8556,18 @@ func rewriteValueAMD64_OpAMD64LEAL1(v *Value) bool {
 		}
 		break
 	}
-	// match: (LEAL1 [c] {s} x z:(ADDL y y))
-	// cond: x != z
+	// match: (LEAL1 [c] {s} x (ADDL y y))
 	// result: (LEAL2 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
 			x := v_0
-			z := v_1
-			if z.Op != OpAMD64ADDL {
+			if v_1.Op != OpAMD64ADDL {
 				continue
 			}
-			y := z.Args[1]
-			if y != z.Args[0] || !(x != z) {
+			y := v_1.Args[1]
+			if y != v_1.Args[0] {
 				continue
 			}
 			v.reset(OpAMD64LEAL2)
@@ -8665,19 +8663,17 @@ func rewriteValueAMD64_OpAMD64LEAL2(v *Value) bool {
 		v.AddArg2(x, y)
 		return true
 	}
-	// match: (LEAL2 [c] {s} x z:(ADDL y y))
-	// cond: x != z
+	// match: (LEAL2 [c] {s} x (ADDL y y))
 	// result: (LEAL4 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		x := v_0
-		z := v_1
-		if z.Op != OpAMD64ADDL {
+		if v_1.Op != OpAMD64ADDL {
 			break
 		}
-		y := z.Args[1]
-		if y != z.Args[0] || !(x != z) {
+		y := v_1.Args[1]
+		if y != v_1.Args[0] {
 			break
 		}
 		v.reset(OpAMD64LEAL4)
@@ -8769,19 +8765,17 @@ func rewriteValueAMD64_OpAMD64LEAL4(v *Value) bool {
 		v.AddArg2(x, y)
 		return true
 	}
-	// match: (LEAL4 [c] {s} x z:(ADDL y y))
-	// cond: x != z
+	// match: (LEAL4 [c] {s} x (ADDL y y))
 	// result: (LEAL8 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		x := v_0
-		z := v_1
-		if z.Op != OpAMD64ADDL {
+		if v_1.Op != OpAMD64ADDL {
 			break
 		}
-		y := z.Args[1]
-		if y != z.Args[0] || !(x != z) {
+		y := v_1.Args[1]
+		if y != v_1.Args[0] {
 			break
 		}
 		v.reset(OpAMD64LEAL8)
@@ -9025,20 +9019,18 @@ func rewriteValueAMD64_OpAMD64LEAQ1(v *Value) bool {
 		}
 		break
 	}
-	// match: (LEAQ1 [c] {s} x z:(ADDQ y y))
-	// cond: x != z
+	// match: (LEAQ1 [c] {s} x (ADDQ y y))
 	// result: (LEAQ2 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
 			x := v_0
-			z := v_1
-			if z.Op != OpAMD64ADDQ {
+			if v_1.Op != OpAMD64ADDQ {
 				continue
 			}
-			y := z.Args[1]
-			if y != z.Args[0] || !(x != z) {
+			y := v_1.Args[1]
+			if y != v_1.Args[0] {
 				continue
 			}
 			v.reset(OpAMD64LEAQ2)
@@ -9233,19 +9225,17 @@ func rewriteValueAMD64_OpAMD64LEAQ2(v *Value) bool {
 		v.AddArg2(x, y)
 		return true
 	}
-	// match: (LEAQ2 [c] {s} x z:(ADDQ y y))
-	// cond: x != z
+	// match: (LEAQ2 [c] {s} x (ADDQ y y))
 	// result: (LEAQ4 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		x := v_0
-		z := v_1
-		if z.Op != OpAMD64ADDQ {
+		if v_1.Op != OpAMD64ADDQ {
 			break
 		}
-		y := z.Args[1]
-		if y != z.Args[0] || !(x != z) {
+		y := v_1.Args[1]
+		if y != v_1.Args[0] {
 			break
 		}
 		v.reset(OpAMD64LEAQ4)
@@ -9421,19 +9411,17 @@ func rewriteValueAMD64_OpAMD64LEAQ4(v *Value) bool {
 		v.AddArg2(x, y)
 		return true
 	}
-	// match: (LEAQ4 [c] {s} x z:(ADDQ y y))
-	// cond: x != z
+	// match: (LEAQ4 [c] {s} x (ADDQ y y))
 	// result: (LEAQ8 [c] {s} x y)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		s := auxToSym(v.Aux)
 		x := v_0
-		z := v_1
-		if z.Op != OpAMD64ADDQ {
+		if v_1.Op != OpAMD64ADDQ {
 			break
 		}
-		y := z.Args[1]
-		if y != z.Args[0] || !(x != z) {
+		y := v_1.Args[1]
+		if y != v_1.Args[0] {
 			break
 		}
 		v.reset(OpAMD64LEAQ8)
@@ -13454,198 +13442,906 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst(v *Value) bool {
 		if !(ValAndOff(sc).canAdd32(off)) {
 			break
 		}
-		v.reset(OpAMD64MOVWstoreconst)
-		v.AuxInt = valAndOffToAuxInt(ValAndOff(sc).addOffset32(off))
-		v.Aux = symToAux(s)
-		v.AddArg2(ptr, mem)
+		v.reset(OpAMD64MOVWstoreconst)
+		v.AuxInt = valAndOffToAuxInt(ValAndOff(sc).addOffset32(off))
+		v.Aux = symToAux(s)
+		v.AddArg2(ptr, mem)
+		return true
+	}
+	// match: (MOVWstoreconst [sc] {sym1} (LEAQ [off] {sym2} ptr) mem)
+	// cond: canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd32(off)
+	// result: (MOVWstoreconst [ValAndOff(sc).addOffset32(off)] {mergeSym(sym1, sym2)} ptr mem)
+	for {
+		sc := auxIntToValAndOff(v.AuxInt)
+		sym1 := auxToSym(v.Aux)
+		if v_0.Op != OpAMD64LEAQ {
+			break
+		}
+		off := auxIntToInt32(v_0.AuxInt)
+		sym2 := auxToSym(v_0.Aux)
+		ptr := v_0.Args[0]
+		mem := v_1
+		if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd32(off)) {
+			break
+		}
+		v.reset(OpAMD64MOVWstoreconst)
+		v.AuxInt = valAndOffToAuxInt(ValAndOff(sc).addOffset32(off))
+		v.Aux = symToAux(mergeSym(sym1, sym2))
+		v.AddArg2(ptr, mem)
+		return true
+	}
+	return false
+}
+func rewriteValueAMD64_OpAMD64MULL(v *Value) bool {
+	v_1 := v.Args[1]
+	v_0 := v.Args[0]
+	// match: (MULL x (MOVLconst [c]))
+	// result: (MULLconst [c] x)
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpAMD64MOVLconst {
+				continue
+			}
+			c := auxIntToInt32(v_1.AuxInt)
+			v.reset(OpAMD64MULLconst)
+			v.AuxInt = int32ToAuxInt(c)
+			v.AddArg(x)
+			return true
+		}
+		break
+	}
+	return false
+}
+func rewriteValueAMD64_OpAMD64MULLconst(v *Value) bool {
+	v_0 := v.Args[0]
+	b := v.Block
+	// match: (MULLconst [c] (MULLconst [d] x))
+	// result: (MULLconst [c * d] x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		if v_0.Op != OpAMD64MULLconst {
+			break
+		}
+		d := auxIntToInt32(v_0.AuxInt)
+		x := v_0.Args[0]
+		v.reset(OpAMD64MULLconst)
+		v.AuxInt = int32ToAuxInt(c * d)
+		v.AddArg(x)
+		return true
+	}
+	// match: (MULLconst [-9] x)
+	// result: (NEGL (LEAL8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -9 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGL)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [-5] x)
+	// result: (NEGL (LEAL4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -5 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGL)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [-3] x)
+	// result: (NEGL (LEAL2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -3 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGL)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [-1] x)
+	// result: (NEGL x)
+	for {
+		if auxIntToInt32(v.AuxInt) != -1 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGL)
+		v.AddArg(x)
+		return true
+	}
+	// match: (MULLconst [ 0] _)
+	// result: (MOVLconst [0])
+	for {
+		if auxIntToInt32(v.AuxInt) != 0 {
+			break
+		}
+		v.reset(OpAMD64MOVLconst)
+		v.AuxInt = int32ToAuxInt(0)
+		return true
+	}
+	// match: (MULLconst [ 1] x)
+	// result: x
+	for {
+		if auxIntToInt32(v.AuxInt) != 1 {
+			break
+		}
+		x := v_0
+		v.copyOf(x)
+		return true
+	}
+	// match: (MULLconst [ 3] x)
+	// result: (LEAL2 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 3 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL2)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULLconst [ 5] x)
+	// result: (LEAL4 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 5 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL4)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULLconst [ 7] x)
+	// result: (LEAL2 x (LEAL2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 7 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [ 9] x)
+	// result: (LEAL8 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 9 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULLconst [11] x)
+	// result: (LEAL2 x (LEAL4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 11 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [13] x)
+	// result: (LEAL4 x (LEAL2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 13 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [19] x)
+	// result: (LEAL2 x (LEAL8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 19 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [21] x)
+	// result: (LEAL4 x (LEAL4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 21 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [25] x)
+	// result: (LEAL8 x (LEAL2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 25 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [27] x)
+	// result: (LEAL8 (LEAL2  x x) (LEAL2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 27 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
+		return true
+	}
+	// match: (MULLconst [37] x)
+	// result: (LEAL4 x (LEAL8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 37 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [41] x)
+	// result: (LEAL8 x (LEAL4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 41 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [45] x)
+	// result: (LEAL8 (LEAL4  x x) (LEAL4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 45 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
+		return true
+	}
+	// match: (MULLconst [73] x)
+	// result: (LEAL8 x (LEAL8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 73 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULLconst [81] x)
+	// result: (LEAL8 (LEAL8  x x) (LEAL8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 81 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: isPowerOfTwo(int64(c)+1) && c >= 15
+	// result: (SUBL (SHLLconst  [int8(log64(int64(c)+1))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(int64(c)+1) && c >= 15) {
+			break
+		}
+		v.reset(OpAMD64SUBL)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLLconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log64(int64(c) + 1)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: isPowerOfTwo(c-1) && c >= 17
+	// result: (LEAL1 (SHLLconst  [int8(log32(c-1))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-1) && c >= 17) {
+			break
+		}
+		v.reset(OpAMD64LEAL1)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLLconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 1)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: isPowerOfTwo(c-2) && c >= 34
+	// result: (LEAL2 (SHLLconst  [int8(log32(c-2))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-2) && c >= 34) {
+			break
+		}
+		v.reset(OpAMD64LEAL2)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLLconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 2)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: isPowerOfTwo(c-4) && c >= 68
+	// result: (LEAL4 (SHLLconst  [int8(log32(c-4))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-4) && c >= 68) {
+			break
+		}
+		v.reset(OpAMD64LEAL4)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLLconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 4)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: isPowerOfTwo(c-8) && c >= 136
+	// result: (LEAL8 (SHLLconst  [int8(log32(c-8))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-8) && c >= 136) {
+			break
+		}
+		v.reset(OpAMD64LEAL8)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLLconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 8)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: c%3 == 0 && isPowerOfTwo(c/3)
+	// result: (SHLLconst [int8(log32(c/3))] (LEAL2  x x))
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(c%3 == 0 && isPowerOfTwo(c/3)) {
+			break
+		}
+		v.reset(OpAMD64SHLLconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 3)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: c%5 == 0 && isPowerOfTwo(c/5)
+	// result: (SHLLconst [int8(log32(c/5))] (LEAL4  x x))
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(c%5 == 0 && isPowerOfTwo(c/5)) {
+			break
+		}
+		v.reset(OpAMD64SHLLconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 5)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [c] x)
+	// cond: c%9 == 0 && isPowerOfTwo(c/9)
+	// result: (SHLLconst [int8(log32(c/9))] (LEAL8  x x))
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(c%9 == 0 && isPowerOfTwo(c/9)) {
+			break
+		}
+		v.reset(OpAMD64SHLLconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 9)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAL8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULLconst [c] (MOVLconst [d]))
+	// result: (MOVLconst [c*d])
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		if v_0.Op != OpAMD64MOVLconst {
+			break
+		}
+		d := auxIntToInt32(v_0.AuxInt)
+		v.reset(OpAMD64MOVLconst)
+		v.AuxInt = int32ToAuxInt(c * d)
+		return true
+	}
+	return false
+}
+func rewriteValueAMD64_OpAMD64MULQ(v *Value) bool {
+	v_1 := v.Args[1]
+	v_0 := v.Args[0]
+	// match: (MULQ x (MOVQconst [c]))
+	// cond: is32Bit(c)
+	// result: (MULQconst [int32(c)] x)
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpAMD64MOVQconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(is32Bit(c)) {
+				continue
+			}
+			v.reset(OpAMD64MULQconst)
+			v.AuxInt = int32ToAuxInt(int32(c))
+			v.AddArg(x)
+			return true
+		}
+		break
+	}
+	return false
+}
+func rewriteValueAMD64_OpAMD64MULQconst(v *Value) bool {
+	v_0 := v.Args[0]
+	b := v.Block
+	// match: (MULQconst [c] (MULQconst [d] x))
+	// cond: is32Bit(int64(c)*int64(d))
+	// result: (MULQconst [c * d] x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		if v_0.Op != OpAMD64MULQconst {
+			break
+		}
+		d := auxIntToInt32(v_0.AuxInt)
+		x := v_0.Args[0]
+		if !(is32Bit(int64(c) * int64(d))) {
+			break
+		}
+		v.reset(OpAMD64MULQconst)
+		v.AuxInt = int32ToAuxInt(c * d)
+		v.AddArg(x)
+		return true
+	}
+	// match: (MULQconst [-9] x)
+	// result: (NEGQ (LEAQ8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -9 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGQ)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULQconst [-5] x)
+	// result: (NEGQ (LEAQ4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -5 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGQ)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULQconst [-3] x)
+	// result: (NEGQ (LEAQ2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != -3 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGQ)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
+		return true
+	}
+	// match: (MULQconst [-1] x)
+	// result: (NEGQ x)
+	for {
+		if auxIntToInt32(v.AuxInt) != -1 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64NEGQ)
+		v.AddArg(x)
+		return true
+	}
+	// match: (MULQconst [ 0] _)
+	// result: (MOVQconst [0])
+	for {
+		if auxIntToInt32(v.AuxInt) != 0 {
+			break
+		}
+		v.reset(OpAMD64MOVQconst)
+		v.AuxInt = int64ToAuxInt(0)
+		return true
+	}
+	// match: (MULQconst [ 1] x)
+	// result: x
+	for {
+		if auxIntToInt32(v.AuxInt) != 1 {
+			break
+		}
+		x := v_0
+		v.copyOf(x)
+		return true
+	}
+	// match: (MULQconst [ 3] x)
+	// result: (LEAQ2 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 3 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ2)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULQconst [ 5] x)
+	// result: (LEAQ4 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 5 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ4)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULQconst [ 7] x)
+	// result: (LEAQ2 x (LEAQ2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 7 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULQconst [ 9] x)
+	// result: (LEAQ8 x x)
+	for {
+		if auxIntToInt32(v.AuxInt) != 9 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v.AddArg2(x, x)
+		return true
+	}
+	// match: (MULQconst [11] x)
+	// result: (LEAQ2 x (LEAQ4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 11 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULQconst [13] x)
+	// result: (LEAQ4 x (LEAQ2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 13 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULQconst [19] x)
+	// result: (LEAQ2 x (LEAQ8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 19 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ2)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULQconst [21] x)
+	// result: (LEAQ4 x (LEAQ4  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 21 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
 		return true
 	}
-	// match: (MOVWstoreconst [sc] {sym1} (LEAQ [off] {sym2} ptr) mem)
-	// cond: canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd32(off)
-	// result: (MOVWstoreconst [ValAndOff(sc).addOffset32(off)] {mergeSym(sym1, sym2)} ptr mem)
+	// match: (MULQconst [25] x)
+	// result: (LEAQ8 x (LEAQ2  x x))
 	for {
-		sc := auxIntToValAndOff(v.AuxInt)
-		sym1 := auxToSym(v.Aux)
-		if v_0.Op != OpAMD64LEAQ {
+		if auxIntToInt32(v.AuxInt) != 25 {
 			break
 		}
-		off := auxIntToInt32(v_0.AuxInt)
-		sym2 := auxToSym(v_0.Aux)
-		ptr := v_0.Args[0]
-		mem := v_1
-		if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd32(off)) {
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
+	}
+	// match: (MULQconst [27] x)
+	// result: (LEAQ8 (LEAQ2  x x) (LEAQ2  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 27 {
 			break
 		}
-		v.reset(OpAMD64MOVWstoreconst)
-		v.AuxInt = valAndOffToAuxInt(ValAndOff(sc).addOffset32(off))
-		v.Aux = symToAux(mergeSym(sym1, sym2))
-		v.AddArg2(ptr, mem)
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
 		return true
 	}
-	return false
-}
-func rewriteValueAMD64_OpAMD64MULL(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (MULL x (MOVLconst [c]))
-	// result: (MULLconst [c] x)
+	// match: (MULQconst [37] x)
+	// result: (LEAQ4 x (LEAQ8  x x))
 	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			x := v_0
-			if v_1.Op != OpAMD64MOVLconst {
-				continue
-			}
-			c := auxIntToInt32(v_1.AuxInt)
-			v.reset(OpAMD64MULLconst)
-			v.AuxInt = int32ToAuxInt(c)
-			v.AddArg(x)
-			return true
+		if auxIntToInt32(v.AuxInt) != 37 {
+			break
 		}
-		break
+		x := v_0
+		v.reset(OpAMD64LEAQ4)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
+		return true
 	}
-	return false
-}
-func rewriteValueAMD64_OpAMD64MULLconst(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	config := b.Func.Config
-	// match: (MULLconst [c] (MULLconst [d] x))
-	// result: (MULLconst [c * d] x)
+	// match: (MULQconst [41] x)
+	// result: (LEAQ8 x (LEAQ4  x x))
 	for {
-		c := auxIntToInt32(v.AuxInt)
-		if v_0.Op != OpAMD64MULLconst {
+		if auxIntToInt32(v.AuxInt) != 41 {
 			break
 		}
-		d := auxIntToInt32(v_0.AuxInt)
-		x := v_0.Args[0]
-		v.reset(OpAMD64MULLconst)
-		v.AuxInt = int32ToAuxInt(c * d)
-		v.AddArg(x)
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
 		return true
 	}
-	// match: (MULLconst [ 0] _)
-	// result: (MOVLconst [0])
+	// match: (MULQconst [45] x)
+	// result: (LEAQ8 (LEAQ4  x x) (LEAQ4  x x))
 	for {
-		if auxIntToInt32(v.AuxInt) != 0 {
+		if auxIntToInt32(v.AuxInt) != 45 {
 			break
 		}
-		v.reset(OpAMD64MOVLconst)
-		v.AuxInt = int32ToAuxInt(0)
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
 		return true
 	}
-	// match: (MULLconst [ 1] x)
-	// result: x
+	// match: (MULQconst [73] x)
+	// result: (LEAQ8 x (LEAQ8  x x))
 	for {
-		if auxIntToInt32(v.AuxInt) != 1 {
+		if auxIntToInt32(v.AuxInt) != 73 {
 			break
 		}
 		x := v_0
-		v.copyOf(x)
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(x, v0)
 		return true
 	}
-	// match: (MULLconst [c] x)
-	// cond: v.Type.Size() <= 4 && canMulStrengthReduce32(config, c)
-	// result: {mulStrengthReduce32(v, x, c)}
+	// match: (MULQconst [81] x)
+	// result: (LEAQ8 (LEAQ8  x x) (LEAQ8  x x))
+	for {
+		if auxIntToInt32(v.AuxInt) != 81 {
+			break
+		}
+		x := v_0
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg2(v0, v0)
+		return true
+	}
+	// match: (MULQconst [c] x)
+	// cond: isPowerOfTwo(int64(c)+1) && c >= 15
+	// result: (SUBQ (SHLQconst  [int8(log64(int64(c)+1))] x) x)
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		x := v_0
-		if !(v.Type.Size() <= 4 && canMulStrengthReduce32(config, c)) {
+		if !(isPowerOfTwo(int64(c)+1) && c >= 15) {
 			break
 		}
-		v.copyOf(mulStrengthReduce32(v, x, c))
+		v.reset(OpAMD64SUBQ)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLQconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log64(int64(c) + 1)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
 		return true
 	}
-	// match: (MULLconst [c] (MOVLconst [d]))
-	// result: (MOVLconst [c*d])
+	// match: (MULQconst [c] x)
+	// cond: isPowerOfTwo(c-1) && c >= 17
+	// result: (LEAQ1 (SHLQconst  [int8(log32(c-1))] x) x)
 	for {
 		c := auxIntToInt32(v.AuxInt)
-		if v_0.Op != OpAMD64MOVLconst {
+		x := v_0
+		if !(isPowerOfTwo(c-1) && c >= 17) {
 			break
 		}
-		d := auxIntToInt32(v_0.AuxInt)
-		v.reset(OpAMD64MOVLconst)
-		v.AuxInt = int32ToAuxInt(c * d)
+		v.reset(OpAMD64LEAQ1)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLQconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 1)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
 		return true
 	}
-	return false
-}
-func rewriteValueAMD64_OpAMD64MULQ(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (MULQ x (MOVQconst [c]))
-	// cond: is32Bit(c)
-	// result: (MULQconst [int32(c)] x)
+	// match: (MULQconst [c] x)
+	// cond: isPowerOfTwo(c-2) && c >= 34
+	// result: (LEAQ2 (SHLQconst  [int8(log32(c-2))] x) x)
 	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			x := v_0
-			if v_1.Op != OpAMD64MOVQconst {
-				continue
-			}
-			c := auxIntToInt64(v_1.AuxInt)
-			if !(is32Bit(c)) {
-				continue
-			}
-			v.reset(OpAMD64MULQconst)
-			v.AuxInt = int32ToAuxInt(int32(c))
-			v.AddArg(x)
-			return true
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-2) && c >= 34) {
+			break
 		}
-		break
+		v.reset(OpAMD64LEAQ2)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLQconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 2)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
 	}
-	return false
-}
-func rewriteValueAMD64_OpAMD64MULQconst(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	config := b.Func.Config
-	// match: (MULQconst [c] (MULQconst [d] x))
-	// cond: is32Bit(int64(c)*int64(d))
-	// result: (MULQconst [c * d] x)
+	// match: (MULQconst [c] x)
+	// cond: isPowerOfTwo(c-4) && c >= 68
+	// result: (LEAQ4 (SHLQconst  [int8(log32(c-4))] x) x)
 	for {
 		c := auxIntToInt32(v.AuxInt)
-		if v_0.Op != OpAMD64MULQconst {
+		x := v_0
+		if !(isPowerOfTwo(c-4) && c >= 68) {
 			break
 		}
-		d := auxIntToInt32(v_0.AuxInt)
-		x := v_0.Args[0]
-		if !(is32Bit(int64(c) * int64(d))) {
+		v.reset(OpAMD64LEAQ4)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLQconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 4)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
+		return true
+	}
+	// match: (MULQconst [c] x)
+	// cond: isPowerOfTwo(c-8) && c >= 136
+	// result: (LEAQ8 (SHLQconst  [int8(log32(c-8))] x) x)
+	for {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(isPowerOfTwo(c-8) && c >= 136) {
 			break
 		}
-		v.reset(OpAMD64MULQconst)
-		v.AuxInt = int32ToAuxInt(c * d)
-		v.AddArg(x)
+		v.reset(OpAMD64LEAQ8)
+		v0 := b.NewValue0(v.Pos, OpAMD64SHLQconst, v.Type)
+		v0.AuxInt = int8ToAuxInt(int8(log32(c - 8)))
+		v0.AddArg(x)
+		v.AddArg2(v0, x)
 		return true
 	}
-	// match: (MULQconst [ 0] _)
-	// result: (MOVQconst [0])
+	// match: (MULQconst [c] x)
+	// cond: c%3 == 0 && isPowerOfTwo(c/3)
+	// result: (SHLQconst [int8(log32(c/3))] (LEAQ2  x x))
 	for {
-		if auxIntToInt32(v.AuxInt) != 0 {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(c%3 == 0 && isPowerOfTwo(c/3)) {
 			break
 		}
-		v.reset(OpAMD64MOVQconst)
-		v.AuxInt = int64ToAuxInt(0)
+		v.reset(OpAMD64SHLQconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 3)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
 		return true
 	}
-	// match: (MULQconst [ 1] x)
-	// result: x
+	// match: (MULQconst [c] x)
+	// cond: c%5 == 0 && isPowerOfTwo(c/5)
+	// result: (SHLQconst [int8(log32(c/5))] (LEAQ4  x x))
 	for {
-		if auxIntToInt32(v.AuxInt) != 1 {
+		c := auxIntToInt32(v.AuxInt)
+		x := v_0
+		if !(c%5 == 0 && isPowerOfTwo(c/5)) {
 			break
 		}
-		x := v_0
-		v.copyOf(x)
+		v.reset(OpAMD64SHLQconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 5)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
 		return true
 	}
 	// match: (MULQconst [c] x)
-	// cond: canMulStrengthReduce(config, int64(c))
-	// result: {mulStrengthReduce(v, x, int64(c))}
+	// cond: c%9 == 0 && isPowerOfTwo(c/9)
+	// result: (SHLQconst [int8(log32(c/9))] (LEAQ8  x x))
 	for {
 		c := auxIntToInt32(v.AuxInt)
 		x := v_0
-		if !(canMulStrengthReduce(config, int64(c))) {
+		if !(c%9 == 0 && isPowerOfTwo(c/9)) {
 			break
 		}
-		v.copyOf(mulStrengthReduce(v, x, int64(c)))
+		v.reset(OpAMD64SHLQconst)
+		v.AuxInt = int8ToAuxInt(int8(log32(c / 9)))
+		v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+		v0.AddArg2(x, x)
+		v.AddArg(v0)
 		return true
 	}
 	// match: (MULQconst [c] (MOVQconst [d]))
@@ -29295,42 +29991,6 @@ func rewriteValueAMD64_OpSelect0(v *Value) bool {
 		v.AddArg2(val, v0)
 		return true
 	}
-	// match: (Select0 a:(ADDQconstflags [c] x))
-	// cond: a.Uses == 1
-	// result: (ADDQconst [c] x)
-	for {
-		a := v_0
-		if a.Op != OpAMD64ADDQconstflags {
-			break
-		}
-		c := auxIntToInt32(a.AuxInt)
-		x := a.Args[0]
-		if !(a.Uses == 1) {
-			break
-		}
-		v.reset(OpAMD64ADDQconst)
-		v.AuxInt = int32ToAuxInt(c)
-		v.AddArg(x)
-		return true
-	}
-	// match: (Select0 a:(ADDLconstflags [c] x))
-	// cond: a.Uses == 1
-	// result: (ADDLconst [c] x)
-	for {
-		a := v_0
-		if a.Op != OpAMD64ADDLconstflags {
-			break
-		}
-		c := auxIntToInt32(a.AuxInt)
-		x := a.Args[0]
-		if !(a.Uses == 1) {
-			break
-		}
-		v.reset(OpAMD64ADDLconst)
-		v.AuxInt = int32ToAuxInt(c)
-		v.AddArg(x)
-		return true
-	}
 	return false
 }
 func rewriteValueAMD64_OpSelect1(v *Value) bool {
@@ -30486,52 +31146,6 @@ func rewriteBlockAMD64(b *Block) bool {
 			}
 			break
 		}
-		// match: (EQ t:(TESTQ a:(ADDQconst [c] x) a))
-		// cond: t.Uses == 1 && flagify(a)
-		// result: (EQ (Select1  a.Args[0]))
-		for b.Controls[0].Op == OpAMD64TESTQ {
-			t := b.Controls[0]
-			_ = t.Args[1]
-			t_0 := t.Args[0]
-			t_1 := t.Args[1]
-			for _i0 := 0; _i0 <= 1; _i0, t_0, t_1 = _i0+1, t_1, t_0 {
-				a := t_0
-				if a.Op != OpAMD64ADDQconst {
-					continue
-				}
-				if a != t_1 || !(t.Uses == 1 && flagify(a)) {
-					continue
-				}
-				v0 := b.NewValue0(t.Pos, OpSelect1, types.TypeFlags)
-				v0.AddArg(a.Args[0])
-				b.resetWithControl(BlockAMD64EQ, v0)
-				return true
-			}
-			break
-		}
-		// match: (EQ t:(TESTL a:(ADDLconst [c] x) a))
-		// cond: t.Uses == 1 && flagify(a)
-		// result: (EQ (Select1  a.Args[0]))
-		for b.Controls[0].Op == OpAMD64TESTL {
-			t := b.Controls[0]
-			_ = t.Args[1]
-			t_0 := t.Args[0]
-			t_1 := t.Args[1]
-			for _i0 := 0; _i0 <= 1; _i0, t_0, t_1 = _i0+1, t_1, t_0 {
-				a := t_0
-				if a.Op != OpAMD64ADDLconst {
-					continue
-				}
-				if a != t_1 || !(t.Uses == 1 && flagify(a)) {
-					continue
-				}
-				v0 := b.NewValue0(t.Pos, OpSelect1, types.TypeFlags)
-				v0.AddArg(a.Args[0])
-				b.resetWithControl(BlockAMD64EQ, v0)
-				return true
-			}
-			break
-		}
 	case BlockAMD64GE:
 		// match: (GE c:(CMPQconst [128] z) yes no)
 		// cond: c.Uses == 1
@@ -31531,52 +32145,6 @@ func rewriteBlockAMD64(b *Block) bool {
 			}
 			break
 		}
-		// match: (NE t:(TESTQ a:(ADDQconst [c] x) a))
-		// cond: t.Uses == 1 && flagify(a)
-		// result: (NE (Select1  a.Args[0]))
-		for b.Controls[0].Op == OpAMD64TESTQ {
-			t := b.Controls[0]
-			_ = t.Args[1]
-			t_0 := t.Args[0]
-			t_1 := t.Args[1]
-			for _i0 := 0; _i0 <= 1; _i0, t_0, t_1 = _i0+1, t_1, t_0 {
-				a := t_0
-				if a.Op != OpAMD64ADDQconst {
-					continue
-				}
-				if a != t_1 || !(t.Uses == 1 && flagify(a)) {
-					continue
-				}
-				v0 := b.NewValue0(t.Pos, OpSelect1, types.TypeFlags)
-				v0.AddArg(a.Args[0])
-				b.resetWithControl(BlockAMD64NE, v0)
-				return true
-			}
-			break
-		}
-		// match: (NE t:(TESTL a:(ADDLconst [c] x) a))
-		// cond: t.Uses == 1 && flagify(a)
-		// result: (NE (Select1  a.Args[0]))
-		for b.Controls[0].Op == OpAMD64TESTL {
-			t := b.Controls[0]
-			_ = t.Args[1]
-			t_0 := t.Args[0]
-			t_1 := t.Args[1]
-			for _i0 := 0; _i0 <= 1; _i0, t_0, t_1 = _i0+1, t_1, t_0 {
-				a := t_0
-				if a.Op != OpAMD64ADDLconst {
-					continue
-				}
-				if a != t_1 || !(t.Uses == 1 && flagify(a)) {
-					continue
-				}
-				v0 := b.NewValue0(t.Pos, OpSelect1, types.TypeFlags)
-				v0.AddArg(a.Args[0])
-				b.resetWithControl(BlockAMD64NE, v0)
-				return true
-			}
-			break
-		}
 	case BlockAMD64UGE:
 		// match: (UGE (TESTQ x x) yes no)
 		// result: (First yes no)
diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go
index 792967c001ba84..7f2feabbf77b13 100644
--- a/src/cmd/compile/internal/ssa/rewriteARM64.go
+++ b/src/cmd/compile/internal/ssa/rewriteARM64.go
@@ -12331,7 +12331,6 @@ func rewriteValueARM64_OpARM64MUL(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
 	b := v.Block
-	config := b.Func.Config
 	// match: (MUL (NEG x) y)
 	// result: (MNEG x y)
 	for {
@@ -12347,6 +12346,20 @@ func rewriteValueARM64_OpARM64MUL(v *Value) bool {
 		}
 		break
 	}
+	// match: (MUL x (MOVDconst [-1]))
+	// result: (NEG x)
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst || auxIntToInt64(v_1.AuxInt) != -1 {
+				continue
+			}
+			v.reset(OpARM64NEG)
+			v.AddArg(x)
+			return true
+		}
+		break
+	}
 	// match: (MUL _ (MOVDconst [0]))
 	// result: (MOVDconst [0])
 	for {
@@ -12374,8 +12387,116 @@ func rewriteValueARM64_OpARM64MUL(v *Value) bool {
 		break
 	}
 	// match: (MUL x (MOVDconst [c]))
-	// cond: canMulStrengthReduce(config, c)
-	// result: {mulStrengthReduce(v, x, c)}
+	// cond: isPowerOfTwo(c)
+	// result: (SLLconst [log64(c)] x)
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(isPowerOfTwo(c)) {
+				continue
+			}
+			v.reset(OpARM64SLLconst)
+			v.AuxInt = int64ToAuxInt(log64(c))
+			v.AddArg(x)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: isPowerOfTwo(c-1) && c >= 3
+	// result: (ADDshiftLL x x [log64(c-1)])
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(isPowerOfTwo(c-1) && c >= 3) {
+				continue
+			}
+			v.reset(OpARM64ADDshiftLL)
+			v.AuxInt = int64ToAuxInt(log64(c - 1))
+			v.AddArg2(x, x)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: isPowerOfTwo(c+1) && c >= 7
+	// result: (ADDshiftLL (NEG  x) x [log64(c+1)])
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(isPowerOfTwo(c+1) && c >= 7) {
+				continue
+			}
+			v.reset(OpARM64ADDshiftLL)
+			v.AuxInt = int64ToAuxInt(log64(c + 1))
+			v0 := b.NewValue0(v.Pos, OpARM64NEG, x.Type)
+			v0.AddArg(x)
+			v.AddArg2(v0, x)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: c%3 == 0 && isPowerOfTwo(c/3)
+	// result: (SLLconst [log64(c/3)] (ADDshiftLL  x x [1]))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%3 == 0 && isPowerOfTwo(c/3)) {
+				continue
+			}
+			v.reset(OpARM64SLLconst)
+			v.AuxInt = int64ToAuxInt(log64(c / 3))
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(1)
+			v0.AddArg2(x, x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: c%5 == 0 && isPowerOfTwo(c/5)
+	// result: (SLLconst [log64(c/5)] (ADDshiftLL  x x [2]))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%5 == 0 && isPowerOfTwo(c/5)) {
+				continue
+			}
+			v.reset(OpARM64SLLconst)
+			v.AuxInt = int64ToAuxInt(log64(c / 5))
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(2)
+			v0.AddArg2(x, x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: c%7 == 0 && isPowerOfTwo(c/7)
+	// result: (SLLconst [log64(c/7)] (ADDshiftLL  (NEG  x) x [3]))
 	for {
 		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
 			x := v_0
@@ -12383,10 +12504,40 @@ func rewriteValueARM64_OpARM64MUL(v *Value) bool {
 				continue
 			}
 			c := auxIntToInt64(v_1.AuxInt)
-			if !(canMulStrengthReduce(config, c)) {
+			if !(c%7 == 0 && isPowerOfTwo(c/7)) {
 				continue
 			}
-			v.copyOf(mulStrengthReduce(v, x, c))
+			v.reset(OpARM64SLLconst)
+			v.AuxInt = int64ToAuxInt(log64(c / 7))
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(3)
+			v1 := b.NewValue0(v.Pos, OpARM64NEG, x.Type)
+			v1.AddArg(x)
+			v0.AddArg2(v1, x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MUL x (MOVDconst [c]))
+	// cond: c%9 == 0 && isPowerOfTwo(c/9)
+	// result: (SLLconst [log64(c/9)] (ADDshiftLL  x x [3]))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%9 == 0 && isPowerOfTwo(c/9)) {
+				continue
+			}
+			v.reset(OpARM64SLLconst)
+			v.AuxInt = int64ToAuxInt(log64(c / 9))
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(3)
+			v0.AddArg2(x, x)
+			v.AddArg(v0)
 			return true
 		}
 		break
@@ -12415,7 +12566,6 @@ func rewriteValueARM64_OpARM64MULW(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
 	b := v.Block
-	config := b.Func.Config
 	// match: (MULW (NEG x) y)
 	// result: (MNEGW x y)
 	for {
@@ -12431,6 +12581,27 @@ func rewriteValueARM64_OpARM64MULW(v *Value) bool {
 		}
 		break
 	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: int32(c)==-1
+	// result: (MOVWUreg (NEG  x))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(int32(c) == -1) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64NEG, x.Type)
+			v0.AddArg(x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
 	// match: (MULW _ (MOVDconst [c]))
 	// cond: int32(c)==0
 	// result: (MOVDconst [0])
@@ -12469,8 +12640,30 @@ func rewriteValueARM64_OpARM64MULW(v *Value) bool {
 		break
 	}
 	// match: (MULW x (MOVDconst [c]))
-	// cond: v.Type.Size() <= 4 && canMulStrengthReduce32(config, int32(c))
-	// result: {mulStrengthReduce32(v, x, int32(c))}
+	// cond: isPowerOfTwo(c)
+	// result: (MOVWUreg (SLLconst  [log64(c)] x))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(isPowerOfTwo(c)) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c))
+			v0.AddArg(x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: isPowerOfTwo(c-1) && int32(c) >= 3
+	// result: (MOVWUreg (ADDshiftLL  x x [log64(c-1)]))
 	for {
 		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
 			x := v_0
@@ -12478,10 +12671,140 @@ func rewriteValueARM64_OpARM64MULW(v *Value) bool {
 				continue
 			}
 			c := auxIntToInt64(v_1.AuxInt)
-			if !(v.Type.Size() <= 4 && canMulStrengthReduce32(config, int32(c))) {
+			if !(isPowerOfTwo(c-1) && int32(c) >= 3) {
 				continue
 			}
-			v.copyOf(mulStrengthReduce32(v, x, int32(c)))
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c - 1))
+			v0.AddArg2(x, x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: isPowerOfTwo(c+1) && int32(c) >= 7
+	// result: (MOVWUreg (ADDshiftLL  (NEG  x) x [log64(c+1)]))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(isPowerOfTwo(c+1) && int32(c) >= 7) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c + 1))
+			v1 := b.NewValue0(v.Pos, OpARM64NEG, x.Type)
+			v1.AddArg(x)
+			v0.AddArg2(v1, x)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)
+	// result: (MOVWUreg (SLLconst  [log64(c/3)] (ADDshiftLL  x x [1])))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c / 3))
+			v1 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v1.AuxInt = int64ToAuxInt(1)
+			v1.AddArg2(x, x)
+			v0.AddArg(v1)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)
+	// result: (MOVWUreg (SLLconst  [log64(c/5)] (ADDshiftLL  x x [2])))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c / 5))
+			v1 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v1.AuxInt = int64ToAuxInt(2)
+			v1.AddArg2(x, x)
+			v0.AddArg(v1)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)
+	// result: (MOVWUreg (SLLconst  [log64(c/7)] (ADDshiftLL  (NEG  x) x [3])))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c / 7))
+			v1 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v1.AuxInt = int64ToAuxInt(3)
+			v2 := b.NewValue0(v.Pos, OpARM64NEG, x.Type)
+			v2.AddArg(x)
+			v1.AddArg2(v2, x)
+			v0.AddArg(v1)
+			v.AddArg(v0)
+			return true
+		}
+		break
+	}
+	// match: (MULW x (MOVDconst [c]))
+	// cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)
+	// result: (MOVWUreg (SLLconst  [log64(c/9)] (ADDshiftLL  x x [3])))
+	for {
+		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
+			x := v_0
+			if v_1.Op != OpARM64MOVDconst {
+				continue
+			}
+			c := auxIntToInt64(v_1.AuxInt)
+			if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) {
+				continue
+			}
+			v.reset(OpARM64MOVWUreg)
+			v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type)
+			v0.AuxInt = int64ToAuxInt(log64(c / 9))
+			v1 := b.NewValue0(v.Pos, OpARM64ADDshiftLL, x.Type)
+			v1.AuxInt = int64ToAuxInt(3)
+			v1.AddArg2(x, x)
+			v0.AddArg(v1)
+			v.AddArg(v0)
 			return true
 		}
 		break
@@ -12699,18 +13022,6 @@ func rewriteValueARM64_OpARM64NEG(v *Value) bool {
 		v.AddArg2(x, y)
 		return true
 	}
-	// match: (NEG (SUB x y))
-	// result: (SUB y x)
-	for {
-		if v_0.Op != OpARM64SUB {
-			break
-		}
-		y := v_0.Args[1]
-		x := v_0.Args[0]
-		v.reset(OpARM64SUB)
-		v.AddArg2(y, x)
-		return true
-	}
 	// match: (NEG (NEG x))
 	// result: x
 	for {
@@ -15216,18 +15527,6 @@ func rewriteValueARM64_OpARM64SUB(v *Value) bool {
 		v.AddArg(v0)
 		return true
 	}
-	// match: (SUB x (NEG y))
-	// result: (ADD x y)
-	for {
-		x := v_0
-		if v_1.Op != OpARM64NEG {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpARM64ADD)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUB x x)
 	// result: (MOVDconst [0])
 	for {
@@ -19306,49 +19605,20 @@ func rewriteValueARM64_OpMove(v *Value) bool {
 		v.AddArg4(dst, v0, v2, mem)
 		return true
 	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 16 && s <= 24
-	// result: (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))
+	// match: (Move [32] dst src mem)
+	// result: (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))
 	for {
-		s := auxIntToInt64(v.AuxInt)
-		dst := v_0
-		src := v_1
-		mem := v_2
-		if !(s > 16 && s <= 24) {
+		if auxIntToInt64(v.AuxInt) != 32 {
 			break
 		}
-		v.reset(OpARM64MOVDstore)
-		v.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0 := b.NewValue0(v.Pos, OpARM64MOVDload, typ.UInt64)
-		v0.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0.AddArg2(src, mem)
-		v1 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v2 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v3 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v3.AddArg2(src, mem)
-		v2.AddArg(v3)
-		v4 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v4.AddArg(v3)
-		v1.AddArg4(dst, v2, v4, mem)
-		v.AddArg3(dst, v0, v1)
-		return true
-	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 24 && s <= 32
-	// result: (STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))
-	for {
-		s := auxIntToInt64(v.AuxInt)
 		dst := v_0
 		src := v_1
 		mem := v_2
-		if !(s > 24 && s <= 32) {
-			break
-		}
 		v.reset(OpARM64STP)
-		v.AuxInt = int32ToAuxInt(int32(s - 16))
+		v.AuxInt = int32ToAuxInt(16)
 		v0 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
 		v1 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v1.AuxInt = int32ToAuxInt(int32(s - 16))
+		v1.AuxInt = int32ToAuxInt(16)
 		v1.AddArg2(src, mem)
 		v0.AddArg(v1)
 		v2 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
@@ -19364,59 +19634,20 @@ func rewriteValueARM64_OpMove(v *Value) bool {
 		v.AddArg4(dst, v0, v2, v3)
 		return true
 	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 32 && s <= 40
-	// result: (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)))
+	// match: (Move [48] dst src mem)
+	// result: (STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem)) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)))
 	for {
-		s := auxIntToInt64(v.AuxInt)
-		dst := v_0
-		src := v_1
-		mem := v_2
-		if !(s > 32 && s <= 40) {
+		if auxIntToInt64(v.AuxInt) != 48 {
 			break
 		}
-		v.reset(OpARM64MOVDstore)
-		v.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0 := b.NewValue0(v.Pos, OpARM64MOVDload, typ.UInt64)
-		v0.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0.AddArg2(src, mem)
-		v1 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v1.AuxInt = int32ToAuxInt(16)
-		v2 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v3 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v3.AuxInt = int32ToAuxInt(16)
-		v3.AddArg2(src, mem)
-		v2.AddArg(v3)
-		v4 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v4.AddArg(v3)
-		v5 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v6 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v7 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v7.AddArg2(src, mem)
-		v6.AddArg(v7)
-		v8 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v8.AddArg(v7)
-		v5.AddArg4(dst, v6, v8, mem)
-		v1.AddArg4(dst, v2, v4, v5)
-		v.AddArg3(dst, v0, v1)
-		return true
-	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 40 && s <= 48
-	// result: (STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem)) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem)))
-	for {
-		s := auxIntToInt64(v.AuxInt)
 		dst := v_0
 		src := v_1
 		mem := v_2
-		if !(s > 40 && s <= 48) {
-			break
-		}
 		v.reset(OpARM64STP)
-		v.AuxInt = int32ToAuxInt(int32(s - 16))
+		v.AuxInt = int32ToAuxInt(32)
 		v0 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
 		v1 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v1.AuxInt = int32ToAuxInt(int32(s - 16))
+		v1.AuxInt = int32ToAuxInt(32)
 		v1.AddArg2(src, mem)
 		v0.AddArg(v1)
 		v2 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
@@ -19442,69 +19673,20 @@ func rewriteValueARM64_OpMove(v *Value) bool {
 		v.AddArg4(dst, v0, v2, v3)
 		return true
 	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 48 && s <= 56
-	// result: (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) (STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem)) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))))
+	// match: (Move [64] dst src mem)
+	// result: (STP [48] dst (Select0  (LDP [48] src mem)) (Select1  (LDP [48] src mem)) (STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem)) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))))
 	for {
-		s := auxIntToInt64(v.AuxInt)
-		dst := v_0
-		src := v_1
-		mem := v_2
-		if !(s > 48 && s <= 56) {
+		if auxIntToInt64(v.AuxInt) != 64 {
 			break
 		}
-		v.reset(OpARM64MOVDstore)
-		v.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0 := b.NewValue0(v.Pos, OpARM64MOVDload, typ.UInt64)
-		v0.AuxInt = int32ToAuxInt(int32(s - 8))
-		v0.AddArg2(src, mem)
-		v1 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v1.AuxInt = int32ToAuxInt(32)
-		v2 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v3 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v3.AuxInt = int32ToAuxInt(32)
-		v3.AddArg2(src, mem)
-		v2.AddArg(v3)
-		v4 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v4.AddArg(v3)
-		v5 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v5.AuxInt = int32ToAuxInt(16)
-		v6 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v7 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v7.AuxInt = int32ToAuxInt(16)
-		v7.AddArg2(src, mem)
-		v6.AddArg(v7)
-		v8 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v8.AddArg(v7)
-		v9 := b.NewValue0(v.Pos, OpARM64STP, types.TypeMem)
-		v10 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
-		v11 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v11.AddArg2(src, mem)
-		v10.AddArg(v11)
-		v12 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
-		v12.AddArg(v11)
-		v9.AddArg4(dst, v10, v12, mem)
-		v5.AddArg4(dst, v6, v8, v9)
-		v1.AddArg4(dst, v2, v4, v5)
-		v.AddArg3(dst, v0, v1)
-		return true
-	}
-	// match: (Move [s] dst src mem)
-	// cond: s > 56 && s <= 64
-	// result: (STP [int32(s-16)] dst (Select0  (LDP [int32(s-16)] src mem)) (Select1  (LDP [int32(s-16)] src mem)) (STP [32] dst (Select0  (LDP [32] src mem)) (Select1  (LDP [32] src mem)) (STP [16] dst (Select0  (LDP [16] src mem)) (Select1  (LDP [16] src mem)) (STP dst (Select0  (LDP src mem)) (Select1  (LDP src mem)) mem))))
-	for {
-		s := auxIntToInt64(v.AuxInt)
 		dst := v_0
 		src := v_1
 		mem := v_2
-		if !(s > 56 && s <= 64) {
-			break
-		}
 		v.reset(OpARM64STP)
-		v.AuxInt = int32ToAuxInt(int32(s - 16))
+		v.AuxInt = int32ToAuxInt(48)
 		v0 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64)
 		v1 := b.NewValue0(v.Pos, OpARM64LDP, types.NewTuple(typ.UInt64, typ.UInt64))
-		v1.AuxInt = int32ToAuxInt(int32(s - 16))
+		v1.AuxInt = int32ToAuxInt(48)
 		v1.AddArg2(src, mem)
 		v0.AddArg(v1)
 		v2 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64)
@@ -19541,14 +19723,14 @@ func rewriteValueARM64_OpMove(v *Value) bool {
 		return true
 	}
 	// match: (Move [s] dst src mem)
-	// cond: s%16 != 0 && s%16 <= 8 && s > 64
+	// cond: s%16 != 0 && s%16 <= 8 && s > 16
 	// result: (Move [8] (OffPtr  dst [s-8]) (OffPtr  src [s-8]) (Move [s-s%16] dst src mem))
 	for {
 		s := auxIntToInt64(v.AuxInt)
 		dst := v_0
 		src := v_1
 		mem := v_2
-		if !(s%16 != 0 && s%16 <= 8 && s > 64) {
+		if !(s%16 != 0 && s%16 <= 8 && s > 16) {
 			break
 		}
 		v.reset(OpMove)
@@ -19566,14 +19748,14 @@ func rewriteValueARM64_OpMove(v *Value) bool {
 		return true
 	}
 	// match: (Move [s] dst src mem)
-	// cond: s%16 != 0 && s%16 > 8 && s > 64
+	// cond: s%16 != 0 && s%16 > 8 && s > 16
 	// result: (Move [16] (OffPtr  dst [s-16]) (OffPtr  src [s-16]) (Move [s-s%16] dst src mem))
 	for {
 		s := auxIntToInt64(v.AuxInt)
 		dst := v_0
 		src := v_1
 		mem := v_2
-		if !(s%16 != 0 && s%16 > 8 && s > 64) {
+		if !(s%16 != 0 && s%16 > 8 && s > 16) {
 			break
 		}
 		v.reset(OpMove)
diff --git a/src/cmd/compile/internal/ssa/rewriteARM64latelower.go b/src/cmd/compile/internal/ssa/rewriteARM64latelower.go
index 0fa5e26e93d0f9..3defeba4c5801a 100644
--- a/src/cmd/compile/internal/ssa/rewriteARM64latelower.go
+++ b/src/cmd/compile/internal/ssa/rewriteARM64latelower.go
@@ -38,8 +38,6 @@ func rewriteValueARM64latelower(v *Value) bool {
 		return rewriteValueARM64latelower_OpARM64MOVWreg(v)
 	case OpARM64ORconst:
 		return rewriteValueARM64latelower_OpARM64ORconst(v)
-	case OpARM64SLLconst:
-		return rewriteValueARM64latelower_OpARM64SLLconst(v)
 	case OpARM64SUBconst:
 		return rewriteValueARM64latelower_OpARM64SUBconst(v)
 	case OpARM64TSTWconst:
@@ -998,21 +996,6 @@ func rewriteValueARM64latelower_OpARM64ORconst(v *Value) bool {
 	}
 	return false
 }
-func rewriteValueARM64latelower_OpARM64SLLconst(v *Value) bool {
-	v_0 := v.Args[0]
-	// match: (SLLconst [1] x)
-	// result: (ADD x x)
-	for {
-		if auxIntToInt64(v.AuxInt) != 1 {
-			break
-		}
-		x := v_0
-		v.reset(OpARM64ADD)
-		v.AddArg2(x, x)
-		return true
-	}
-	return false
-}
 func rewriteValueARM64latelower_OpARM64SUBconst(v *Value) bool {
 	v_0 := v.Args[0]
 	b := v.Block
diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go
index 7c46ed77272ad0..ea6aee82505958 100644
--- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go
+++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go
@@ -436,8 +436,6 @@ func rewriteValueLOONG64(v *Value) bool {
 		return rewriteValueLOONG64_OpLOONG64NORconst(v)
 	case OpLOONG64OR:
 		return rewriteValueLOONG64_OpLOONG64OR(v)
-	case OpLOONG64ORN:
-		return rewriteValueLOONG64_OpLOONG64ORN(v)
 	case OpLOONG64ORconst:
 		return rewriteValueLOONG64_OpLOONG64ORconst(v)
 	case OpLOONG64REMV:
@@ -676,10 +674,6 @@ func rewriteValueLOONG64(v *Value) bool {
 		return rewriteValueLOONG64_OpPopCount32(v)
 	case OpPopCount64:
 		return rewriteValueLOONG64_OpPopCount64(v)
-	case OpPrefetchCache:
-		return rewriteValueLOONG64_OpPrefetchCache(v)
-	case OpPrefetchCacheStreamed:
-		return rewriteValueLOONG64_OpPrefetchCacheStreamed(v)
 	case OpPubBarrier:
 		v.Op = OpLOONG64LoweredPubBarrier
 		return true
@@ -1928,21 +1922,6 @@ func rewriteValueLOONG64_OpLOONG64AND(v *Value) bool {
 		v.copyOf(x)
 		return true
 	}
-	// match: (AND x (NORconst [0] y))
-	// result: (ANDN x y)
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			x := v_0
-			if v_1.Op != OpLOONG64NORconst || auxIntToInt64(v_1.AuxInt) != 0 {
-				continue
-			}
-			y := v_1.Args[0]
-			v.reset(OpLOONG64ANDN)
-			v.AddArg2(x, y)
-			return true
-		}
-		break
-	}
 	return false
 }
 func rewriteValueLOONG64_OpLOONG64ANDconst(v *Value) bool {
@@ -5442,77 +5421,6 @@ func rewriteValueLOONG64_OpLOONG64MULV(v *Value) bool {
 }
 func rewriteValueLOONG64_OpLOONG64NEGV(v *Value) bool {
 	v_0 := v.Args[0]
-	b := v.Block
-	// match: (NEGV (SUBV x y))
-	// result: (SUBV y x)
-	for {
-		if v_0.Op != OpLOONG64SUBV {
-			break
-		}
-		y := v_0.Args[1]
-		x := v_0.Args[0]
-		v.reset(OpLOONG64SUBV)
-		v.AddArg2(y, x)
-		return true
-	}
-	// match: (NEGV  s:(ADDVconst [c] (SUBV x y)))
-	// cond: s.Uses == 1 && is12Bit(-c)
-	// result: (ADDVconst [-c] (SUBV  y x))
-	for {
-		t := v.Type
-		s := v_0
-		if s.Op != OpLOONG64ADDVconst {
-			break
-		}
-		c := auxIntToInt64(s.AuxInt)
-		s_0 := s.Args[0]
-		if s_0.Op != OpLOONG64SUBV {
-			break
-		}
-		y := s_0.Args[1]
-		x := s_0.Args[0]
-		if !(s.Uses == 1 && is12Bit(-c)) {
-			break
-		}
-		v.reset(OpLOONG64ADDVconst)
-		v.AuxInt = int64ToAuxInt(-c)
-		v0 := b.NewValue0(v.Pos, OpLOONG64SUBV, t)
-		v0.AddArg2(y, x)
-		v.AddArg(v0)
-		return true
-	}
-	// match: (NEGV (NEGV x))
-	// result: x
-	for {
-		if v_0.Op != OpLOONG64NEGV {
-			break
-		}
-		x := v_0.Args[0]
-		v.copyOf(x)
-		return true
-	}
-	// match: (NEGV  s:(ADDVconst [c] (NEGV x)))
-	// cond: s.Uses == 1 && is12Bit(-c)
-	// result: (ADDVconst [-c] x)
-	for {
-		s := v_0
-		if s.Op != OpLOONG64ADDVconst {
-			break
-		}
-		c := auxIntToInt64(s.AuxInt)
-		s_0 := s.Args[0]
-		if s_0.Op != OpLOONG64NEGV {
-			break
-		}
-		x := s_0.Args[0]
-		if !(s.Uses == 1 && is12Bit(-c)) {
-			break
-		}
-		v.reset(OpLOONG64ADDVconst)
-		v.AuxInt = int64ToAuxInt(-c)
-		v.AddArg(x)
-		return true
-	}
 	// match: (NEGV (MOVVconst [c]))
 	// result: (MOVVconst [-c])
 	for {
@@ -5600,36 +5508,6 @@ func rewriteValueLOONG64_OpLOONG64OR(v *Value) bool {
 		v.copyOf(x)
 		return true
 	}
-	// match: (OR x (NORconst [0] y))
-	// result: (ORN x y)
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			x := v_0
-			if v_1.Op != OpLOONG64NORconst || auxIntToInt64(v_1.AuxInt) != 0 {
-				continue
-			}
-			y := v_1.Args[0]
-			v.reset(OpLOONG64ORN)
-			v.AddArg2(x, y)
-			return true
-		}
-		break
-	}
-	return false
-}
-func rewriteValueLOONG64_OpLOONG64ORN(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (ORN x (MOVVconst [-1]))
-	// result: x
-	for {
-		x := v_0
-		if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != -1 {
-			break
-		}
-		v.copyOf(x)
-		return true
-	}
 	return false
 }
 func rewriteValueLOONG64_OpLOONG64ORconst(v *Value) bool {
@@ -6883,18 +6761,6 @@ func rewriteValueLOONG64_OpLOONG64SUBV(v *Value) bool {
 		v.AddArg(x)
 		return true
 	}
-	// match: (SUBV x (NEGV y))
-	// result: (ADDV x y)
-	for {
-		x := v_0
-		if v_1.Op != OpLOONG64NEGV {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpLOONG64ADDV)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUBV x x)
 	// result: (MOVVconst [0])
 	for {
@@ -9129,34 +8995,6 @@ func rewriteValueLOONG64_OpPopCount64(v *Value) bool {
 		return true
 	}
 }
-func rewriteValueLOONG64_OpPrefetchCache(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (PrefetchCache addr mem)
-	// result: (PRELD addr mem [0])
-	for {
-		addr := v_0
-		mem := v_1
-		v.reset(OpLOONG64PRELD)
-		v.AuxInt = int64ToAuxInt(0)
-		v.AddArg2(addr, mem)
-		return true
-	}
-}
-func rewriteValueLOONG64_OpPrefetchCacheStreamed(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (PrefetchCacheStreamed addr mem)
-	// result: (PRELDX addr mem [(((512 << 1) + (1 << 12)) << 5) + 2])
-	for {
-		addr := v_0
-		mem := v_1
-		v.reset(OpLOONG64PRELDX)
-		v.AuxInt = int64ToAuxInt((((512 << 1) + (1 << 12)) << 5) + 2)
-		v.AddArg2(addr, mem)
-		return true
-	}
-}
 func rewriteValueLOONG64_OpRotateLeft16(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
diff --git a/src/cmd/compile/internal/ssa/rewriteMIPS.go b/src/cmd/compile/internal/ssa/rewriteMIPS.go
index 4c5edb8694d284..1bc2cb6e6da993 100644
--- a/src/cmd/compile/internal/ssa/rewriteMIPS.go
+++ b/src/cmd/compile/internal/ssa/rewriteMIPS.go
@@ -450,9 +450,6 @@ func rewriteValueMIPS(v *Value) bool {
 		return rewriteValueMIPS_OpPanicBounds(v)
 	case OpPanicExtend:
 		return rewriteValueMIPS_OpPanicExtend(v)
-	case OpPubBarrier:
-		v.Op = OpMIPSLoweredPubBarrier
-		return true
 	case OpRotateLeft16:
 		return rewriteValueMIPS_OpRotateLeft16(v)
 	case OpRotateLeft32:
@@ -4099,28 +4096,6 @@ func rewriteValueMIPS_OpMIPSMUL(v *Value) bool {
 }
 func rewriteValueMIPS_OpMIPSNEG(v *Value) bool {
 	v_0 := v.Args[0]
-	// match: (NEG (SUB x y))
-	// result: (SUB y x)
-	for {
-		if v_0.Op != OpMIPSSUB {
-			break
-		}
-		y := v_0.Args[1]
-		x := v_0.Args[0]
-		v.reset(OpMIPSSUB)
-		v.AddArg2(y, x)
-		return true
-	}
-	// match: (NEG (NEG x))
-	// result: x
-	for {
-		if v_0.Op != OpMIPSNEG {
-			break
-		}
-		x := v_0.Args[0]
-		v.copyOf(x)
-		return true
-	}
 	// match: (NEG (MOVWconst [c]))
 	// result: (MOVWconst [-c])
 	for {
@@ -4773,18 +4748,6 @@ func rewriteValueMIPS_OpMIPSSUB(v *Value) bool {
 		v.AddArg(x)
 		return true
 	}
-	// match: (SUB x (NEG y))
-	// result: (ADD x y)
-	for {
-		x := v_0
-		if v_1.Op != OpMIPSNEG {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpMIPSADD)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUB x x)
 	// result: (MOVWconst [0])
 	for {
diff --git a/src/cmd/compile/internal/ssa/rewriteMIPS64.go b/src/cmd/compile/internal/ssa/rewriteMIPS64.go
index c30815cefb5b99..10281e7e70905a 100644
--- a/src/cmd/compile/internal/ssa/rewriteMIPS64.go
+++ b/src/cmd/compile/internal/ssa/rewriteMIPS64.go
@@ -502,9 +502,6 @@ func rewriteValueMIPS64(v *Value) bool {
 		return true
 	case OpPanicBounds:
 		return rewriteValueMIPS64_OpPanicBounds(v)
-	case OpPubBarrier:
-		v.Op = OpMIPS64LoweredPubBarrier
-		return true
 	case OpRotateLeft16:
 		return rewriteValueMIPS64_OpRotateLeft16(v)
 	case OpRotateLeft32:
@@ -4676,28 +4673,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWstorezero(v *Value) bool {
 }
 func rewriteValueMIPS64_OpMIPS64NEGV(v *Value) bool {
 	v_0 := v.Args[0]
-	// match: (NEGV (SUBV x y))
-	// result: (SUBV y x)
-	for {
-		if v_0.Op != OpMIPS64SUBV {
-			break
-		}
-		y := v_0.Args[1]
-		x := v_0.Args[0]
-		v.reset(OpMIPS64SUBV)
-		v.AddArg2(y, x)
-		return true
-	}
-	// match: (NEGV (NEGV x))
-	// result: x
-	for {
-		if v_0.Op != OpMIPS64NEGV {
-			break
-		}
-		x := v_0.Args[0]
-		v.copyOf(x)
-		return true
-	}
 	// match: (NEGV (MOVVconst [c]))
 	// result: (MOVVconst [-c])
 	for {
@@ -5344,18 +5319,6 @@ func rewriteValueMIPS64_OpMIPS64SUBV(v *Value) bool {
 		v.AddArg(x)
 		return true
 	}
-	// match: (SUBV x (NEGV y))
-	// result: (ADDV x y)
-	for {
-		x := v_0
-		if v_1.Op != OpMIPS64NEGV {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpMIPS64ADDV)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUBV x x)
 	// result: (MOVVconst [0])
 	for {
diff --git a/src/cmd/compile/internal/ssa/rewriteRISCV64.go b/src/cmd/compile/internal/ssa/rewriteRISCV64.go
index 95c6489a511be8..182ca2d3fd674f 100644
--- a/src/cmd/compile/internal/ssa/rewriteRISCV64.go
+++ b/src/cmd/compile/internal/ssa/rewriteRISCV64.go
@@ -110,13 +110,6 @@ func rewriteValueRISCV64(v *Value) bool {
 		return rewriteValueRISCV64_OpBitLen64(v)
 	case OpBitLen8:
 		return rewriteValueRISCV64_OpBitLen8(v)
-	case OpBswap16:
-		return rewriteValueRISCV64_OpBswap16(v)
-	case OpBswap32:
-		return rewriteValueRISCV64_OpBswap32(v)
-	case OpBswap64:
-		v.Op = OpRISCV64REV8
-		return true
 	case OpClosureCall:
 		v.Op = OpRISCV64CALLclosure
 		return true
@@ -487,16 +480,6 @@ func rewriteValueRISCV64(v *Value) bool {
 		return true
 	case OpPanicBounds:
 		return rewriteValueRISCV64_OpPanicBounds(v)
-	case OpPopCount16:
-		return rewriteValueRISCV64_OpPopCount16(v)
-	case OpPopCount32:
-		v.Op = OpRISCV64CPOPW
-		return true
-	case OpPopCount64:
-		v.Op = OpRISCV64CPOP
-		return true
-	case OpPopCount8:
-		return rewriteValueRISCV64_OpPopCount8(v)
 	case OpPubBarrier:
 		v.Op = OpRISCV64LoweredPubBarrier
 		return true
@@ -586,8 +569,6 @@ func rewriteValueRISCV64(v *Value) bool {
 		return rewriteValueRISCV64_OpRISCV64OR(v)
 	case OpRISCV64ORI:
 		return rewriteValueRISCV64_OpRISCV64ORI(v)
-	case OpRISCV64ORN:
-		return rewriteValueRISCV64_OpRISCV64ORN(v)
 	case OpRISCV64ROL:
 		return rewriteValueRISCV64_OpRISCV64ROL(v)
 	case OpRISCV64ROLW:
@@ -1021,38 +1002,6 @@ func rewriteValueRISCV64_OpBitLen8(v *Value) bool {
 		return true
 	}
 }
-func rewriteValueRISCV64_OpBswap16(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	// match: (Bswap16  x)
-	// result: (SRLI [48] (REV8  x))
-	for {
-		t := v.Type
-		x := v_0
-		v.reset(OpRISCV64SRLI)
-		v.AuxInt = int64ToAuxInt(48)
-		v0 := b.NewValue0(v.Pos, OpRISCV64REV8, t)
-		v0.AddArg(x)
-		v.AddArg(v0)
-		return true
-	}
-}
-func rewriteValueRISCV64_OpBswap32(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	// match: (Bswap32  x)
-	// result: (SRLI [32] (REV8  x))
-	for {
-		t := v.Type
-		x := v_0
-		v.reset(OpRISCV64SRLI)
-		v.AuxInt = int64ToAuxInt(32)
-		v0 := b.NewValue0(v.Pos, OpRISCV64REV8, t)
-		v0.AddArg(x)
-		v.AddArg(v0)
-		return true
-	}
-}
 func rewriteValueRISCV64_OpConst16(v *Value) bool {
 	// match: (Const16 [val])
 	// result: (MOVDconst [int64(val)])
@@ -3470,36 +3419,6 @@ func rewriteValueRISCV64_OpPanicBounds(v *Value) bool {
 	}
 	return false
 }
-func rewriteValueRISCV64_OpPopCount16(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (PopCount16 x)
-	// result: (CPOP (ZeroExt16to64 x))
-	for {
-		x := v_0
-		v.reset(OpRISCV64CPOP)
-		v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
-		v0.AddArg(x)
-		v.AddArg(v0)
-		return true
-	}
-}
-func rewriteValueRISCV64_OpPopCount8(v *Value) bool {
-	v_0 := v.Args[0]
-	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (PopCount8 x)
-	// result: (CPOP (ZeroExt8to64 x))
-	for {
-		x := v_0
-		v.reset(OpRISCV64CPOP)
-		v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
-		v0.AddArg(x)
-		v.AddArg(v0)
-		return true
-	}
-}
 func rewriteValueRISCV64_OpRISCV64ADD(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
@@ -3524,21 +3443,6 @@ func rewriteValueRISCV64_OpRISCV64ADD(v *Value) bool {
 		}
 		break
 	}
-	// match: (ADD x (NEG y))
-	// result: (SUB x y)
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			x := v_0
-			if v_1.Op != OpRISCV64NEG {
-				continue
-			}
-			y := v_1.Args[0]
-			v.reset(OpRISCV64SUB)
-			v.AddArg2(x, y)
-			return true
-		}
-		break
-	}
 	// match: (ADD (SLLI [1] x) y)
 	// cond: buildcfg.GORISCV64 >= 22
 	// result: (SH1ADD x y)
@@ -3689,16 +3593,6 @@ func rewriteValueRISCV64_OpRISCV64AND(v *Value) bool {
 		}
 		break
 	}
-	// match: (AND x x)
-	// result: x
-	for {
-		x := v_0
-		if x != v_1 {
-			break
-		}
-		v.copyOf(x)
-		return true
-	}
 	return false
 }
 func rewriteValueRISCV64_OpRISCV64ANDI(v *Value) bool {
@@ -6423,16 +6317,6 @@ func rewriteValueRISCV64_OpRISCV64OR(v *Value) bool {
 		}
 		break
 	}
-	// match: (OR x x)
-	// result: x
-	for {
-		x := v_0
-		if x != v_1 {
-			break
-		}
-		v.copyOf(x)
-		return true
-	}
 	return false
 }
 func rewriteValueRISCV64_OpRISCV64ORI(v *Value) bool {
@@ -6485,22 +6369,6 @@ func rewriteValueRISCV64_OpRISCV64ORI(v *Value) bool {
 	}
 	return false
 }
-func rewriteValueRISCV64_OpRISCV64ORN(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	// match: (ORN x x)
-	// result: (MOVDconst [-1])
-	for {
-		x := v_0
-		if x != v_1 {
-			break
-		}
-		v.reset(OpRISCV64MOVDconst)
-		v.AuxInt = int64ToAuxInt(-1)
-		return true
-	}
-	return false
-}
 func rewriteValueRISCV64_OpRISCV64ROL(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
@@ -7146,29 +7014,6 @@ func rewriteValueRISCV64_OpRISCV64SUB(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
 	b := v.Block
-	// match: (SUB x (NEG y))
-	// result: (ADD x y)
-	for {
-		x := v_0
-		if v_1.Op != OpRISCV64NEG {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpRISCV64ADD)
-		v.AddArg2(x, y)
-		return true
-	}
-	// match: (SUB x x)
-	// result: (MOVDconst [0])
-	for {
-		x := v_0
-		if x != v_1 {
-			break
-		}
-		v.reset(OpRISCV64MOVDconst)
-		v.AuxInt = int64ToAuxInt(0)
-		return true
-	}
 	// match: (SUB x (MOVDconst [val]))
 	// cond: is32Bit(-val)
 	// result: (ADDI [-val] x)
@@ -7280,17 +7125,6 @@ func rewriteValueRISCV64_OpRISCV64XOR(v *Value) bool {
 		}
 		break
 	}
-	// match: (XOR x x)
-	// result: (MOVDconst [0])
-	for {
-		x := v_0
-		if x != v_1 {
-			break
-		}
-		v.reset(OpRISCV64MOVDconst)
-		v.AuxInt = int64ToAuxInt(0)
-		return true
-	}
 	return false
 }
 func rewriteValueRISCV64_OpRotateLeft16(v *Value) bool {
diff --git a/src/cmd/compile/internal/ssa/rewriteS390X.go b/src/cmd/compile/internal/ssa/rewriteS390X.go
index 2e7492501a803a..7e652a19bceec9 100644
--- a/src/cmd/compile/internal/ssa/rewriteS390X.go
+++ b/src/cmd/compile/internal/ssa/rewriteS390X.go
@@ -11292,16 +11292,6 @@ func rewriteValueS390X_OpS390XNEG(v *Value) bool {
 		v.AuxInt = int64ToAuxInt(-c)
 		return true
 	}
-	// match: (NEG (NEG x))
-	// result: x
-	for {
-		if v_0.Op != OpS390XNEG {
-			break
-		}
-		x := v_0.Args[0]
-		v.copyOf(x)
-		return true
-	}
 	// match: (NEG (ADDconst [c] (NEG x)))
 	// cond: c != -(1<<31)
 	// result: (ADDconst [-c] x)
@@ -13336,18 +13326,6 @@ func rewriteValueS390X_OpS390XSUB(v *Value) bool {
 		v.AddArg(v0)
 		return true
 	}
-	// match: (SUB x (NEG y))
-	// result: (ADD x y)
-	for {
-		x := v_0
-		if v_1.Op != OpS390XNEG {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpS390XADD)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUB x x)
 	// result: (MOVDconst [0])
 	for {
@@ -13489,18 +13467,6 @@ func rewriteValueS390X_OpS390XSUBW(v *Value) bool {
 		v.AddArg(v0)
 		return true
 	}
-	// match: (SUBW x (NEGW y))
-	// result: (ADDW x y)
-	for {
-		x := v_0
-		if v_1.Op != OpS390XNEGW {
-			break
-		}
-		y := v_1.Args[0]
-		v.reset(OpS390XADDW)
-		v.AddArg2(x, y)
-		return true
-	}
 	// match: (SUBW x x)
 	// result: (MOVDconst [0])
 	for {
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index bfbd3c8522ed24..4fdb22b868ef64 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -246,16 +246,12 @@ func rewriteValuegeneric(v *Value) bool {
 		return rewriteValuegeneric_OpMul32(v)
 	case OpMul32F:
 		return rewriteValuegeneric_OpMul32F(v)
-	case OpMul32uhilo:
-		return rewriteValuegeneric_OpMul32uhilo(v)
 	case OpMul32uover:
 		return rewriteValuegeneric_OpMul32uover(v)
 	case OpMul64:
 		return rewriteValuegeneric_OpMul64(v)
 	case OpMul64F:
 		return rewriteValuegeneric_OpMul64F(v)
-	case OpMul64uhilo:
-		return rewriteValuegeneric_OpMul64uhilo(v)
 	case OpMul64uover:
 		return rewriteValuegeneric_OpMul64uover(v)
 	case OpMul8:
@@ -18770,62 +18766,10 @@ func rewriteValuegeneric_OpMul32F(v *Value) bool {
 	}
 	return false
 }
-func rewriteValuegeneric_OpMul32uhilo(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (Mul32uhilo (Const32 [c]) (Const32 [d]))
-	// result: (MakeTuple (Const32  [bitsMulU32(c, d).hi]) (Const32  [bitsMulU32(c,d).lo]))
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			if v_0.Op != OpConst32 {
-				continue
-			}
-			c := auxIntToInt32(v_0.AuxInt)
-			if v_1.Op != OpConst32 {
-				continue
-			}
-			d := auxIntToInt32(v_1.AuxInt)
-			v.reset(OpMakeTuple)
-			v0 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
-			v0.AuxInt = int32ToAuxInt(bitsMulU32(c, d).hi)
-			v1 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
-			v1.AuxInt = int32ToAuxInt(bitsMulU32(c, d).lo)
-			v.AddArg2(v0, v1)
-			return true
-		}
-		break
-	}
-	return false
-}
 func rewriteValuegeneric_OpMul32uover(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
 	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (Mul32uover (Const32 [c]) (Const32 [d]))
-	// result: (MakeTuple (Const32  [bitsMulU32(c, d).lo]) (ConstBool  [bitsMulU32(c,d).hi != 0]))
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			if v_0.Op != OpConst32 {
-				continue
-			}
-			c := auxIntToInt32(v_0.AuxInt)
-			if v_1.Op != OpConst32 {
-				continue
-			}
-			d := auxIntToInt32(v_1.AuxInt)
-			v.reset(OpMakeTuple)
-			v0 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
-			v0.AuxInt = int32ToAuxInt(bitsMulU32(c, d).lo)
-			v1 := b.NewValue0(v.Pos, OpConstBool, typ.Bool)
-			v1.AuxInt = boolToAuxInt(bitsMulU32(c, d).hi != 0)
-			v.AddArg2(v0, v1)
-			return true
-		}
-		break
-	}
 	// match: (Mul32uover  (Const32 [1]) x)
 	// result: (MakeTuple x (ConstBool  [false]))
 	for {
@@ -19138,62 +19082,10 @@ func rewriteValuegeneric_OpMul64F(v *Value) bool {
 	}
 	return false
 }
-func rewriteValuegeneric_OpMul64uhilo(v *Value) bool {
-	v_1 := v.Args[1]
-	v_0 := v.Args[0]
-	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (Mul64uhilo (Const64 [c]) (Const64 [d]))
-	// result: (MakeTuple (Const64  [bitsMulU64(c, d).hi]) (Const64  [bitsMulU64(c,d).lo]))
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			if v_0.Op != OpConst64 {
-				continue
-			}
-			c := auxIntToInt64(v_0.AuxInt)
-			if v_1.Op != OpConst64 {
-				continue
-			}
-			d := auxIntToInt64(v_1.AuxInt)
-			v.reset(OpMakeTuple)
-			v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
-			v0.AuxInt = int64ToAuxInt(bitsMulU64(c, d).hi)
-			v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
-			v1.AuxInt = int64ToAuxInt(bitsMulU64(c, d).lo)
-			v.AddArg2(v0, v1)
-			return true
-		}
-		break
-	}
-	return false
-}
 func rewriteValuegeneric_OpMul64uover(v *Value) bool {
 	v_1 := v.Args[1]
 	v_0 := v.Args[0]
 	b := v.Block
-	typ := &b.Func.Config.Types
-	// match: (Mul64uover (Const64 [c]) (Const64 [d]))
-	// result: (MakeTuple (Const64  [bitsMulU64(c, d).lo]) (ConstBool  [bitsMulU64(c,d).hi != 0]))
-	for {
-		for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
-			if v_0.Op != OpConst64 {
-				continue
-			}
-			c := auxIntToInt64(v_0.AuxInt)
-			if v_1.Op != OpConst64 {
-				continue
-			}
-			d := auxIntToInt64(v_1.AuxInt)
-			v.reset(OpMakeTuple)
-			v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
-			v0.AuxInt = int64ToAuxInt(bitsMulU64(c, d).lo)
-			v1 := b.NewValue0(v.Pos, OpConstBool, typ.Bool)
-			v1.AuxInt = boolToAuxInt(bitsMulU64(c, d).hi != 0)
-			v.AddArg2(v0, v1)
-			return true
-		}
-		break
-	}
 	// match: (Mul64uover  (Const64 [1]) x)
 	// result: (MakeTuple x (ConstBool  [false]))
 	for {
@@ -30743,41 +30635,6 @@ func rewriteValuegeneric_OpStaticLECall(v *Value) bool {
 		v.AddArg4(typ_, map_, v0, mem)
 		return true
 	}
-	// match: (StaticLECall {f} [argsize] dict_ key:(SelectN [0] sbts:(StaticLECall {g} _ ptr len mem)) m:(SelectN [1] sbts))
-	// cond: isSameCall(f, "unique.Make[go.shape.string]") && isSameCall(g, "runtime.slicebytetostring") && key.Uses == 1 && sbts.Uses == 2 && resetCopy(m, mem) && clobber(sbts) && clobber(key)
-	// result: (StaticLECall {f} [argsize] dict_ (StringMake  ptr len) mem)
-	for {
-		if len(v.Args) != 3 {
-			break
-		}
-		argsize := auxIntToInt32(v.AuxInt)
-		f := auxToCall(v.Aux)
-		_ = v.Args[2]
-		dict_ := v.Args[0]
-		key := v.Args[1]
-		if key.Op != OpSelectN || auxIntToInt64(key.AuxInt) != 0 {
-			break
-		}
-		sbts := key.Args[0]
-		if sbts.Op != OpStaticLECall || len(sbts.Args) != 4 {
-			break
-		}
-		g := auxToCall(sbts.Aux)
-		mem := sbts.Args[3]
-		ptr := sbts.Args[1]
-		len := sbts.Args[2]
-		m := v.Args[2]
-		if m.Op != OpSelectN || auxIntToInt64(m.AuxInt) != 1 || sbts != m.Args[0] || !(isSameCall(f, "unique.Make[go.shape.string]") && isSameCall(g, "runtime.slicebytetostring") && key.Uses == 1 && sbts.Uses == 2 && resetCopy(m, mem) && clobber(sbts) && clobber(key)) {
-			break
-		}
-		v.reset(OpStaticLECall)
-		v.AuxInt = int32ToAuxInt(argsize)
-		v.Aux = callToAux(f)
-		v0 := b.NewValue0(v.Pos, OpStringMake, typ.String)
-		v0.AddArg2(ptr, len)
-		v.AddArg3(dict_, v0, mem)
-		return true
-	}
 	return false
 }
 func rewriteValuegeneric_OpStore(v *Value) bool {
diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go
index 325118a1827b04..bce0108dcbbb1c 100644
--- a/src/cmd/compile/internal/ssa/schedule.go
+++ b/src/cmd/compile/internal/ssa/schedule.go
@@ -22,7 +22,6 @@ const (
 	ScoreMemory
 	ScoreReadFlags
 	ScoreDefault
-	ScoreInductionInc // an increment of an induction variable
 	ScoreFlags
 	ScoreControl // towards bottom of block
 )
@@ -186,29 +185,14 @@ func schedule(f *Func) {
 				// Note that this case is after the case above, so values
 				// which both read and generate flags are given ScoreReadFlags.
 				score[v.ID] = ScoreFlags
-			case (len(v.Args) == 1 &&
-				v.Args[0].Op == OpPhi &&
-				v.Args[0].Uses > 1 &&
-				len(b.Succs) == 1 &&
-				b.Succs[0].b == v.Args[0].Block &&
-				v.Args[0].Args[b.Succs[0].i] == v):
-				// This is a value computing v++ (or similar) in a loop.
-				// Try to schedule it later, so we issue all uses of v before the v++.
-				// If we don't, then we need an additional move.
-				// loop:
-				//     p = (PHI v ...)
-				//     ... ok other uses of p ...
-				//     v = (ADDQconst [1] p)
-				//     ... troublesome other uses of p ...
-				//     goto loop
-				// We want to allocate p and v to the same register so when we get to
-				// the end of the block we don't have to move v back to p's register.
-				// But we can only do that if v comes after all the other uses of p.
-				// Any "troublesome" use means we have to reg-reg move either p or v
-				// somewhere in the loop.
-				score[v.ID] = ScoreInductionInc
 			default:
 				score[v.ID] = ScoreDefault
+				// If we're reading flags, schedule earlier to keep flag lifetime short.
+				for _, a := range v.Args {
+					if a.isFlagOp() {
+						score[v.ID] = ScoreReadFlags
+					}
+				}
 			}
 		}
 		for _, c := range b.ControlValues() {
diff --git a/src/cmd/compile/internal/ssa/stackalloc.go b/src/cmd/compile/internal/ssa/stackalloc.go
index 11ffe5b55ea65f..8290e1730efbe9 100644
--- a/src/cmd/compile/internal/ssa/stackalloc.go
+++ b/src/cmd/compile/internal/ssa/stackalloc.go
@@ -46,9 +46,15 @@ func newStackAllocState(f *Func) *stackAllocState {
 }
 
 func putStackAllocState(s *stackAllocState) {
-	clear(s.values)
-	clear(s.interfere)
-	clear(s.names)
+	for i := range s.values {
+		s.values[i] = stackValState{}
+	}
+	for i := range s.interfere {
+		s.interfere[i] = nil
+	}
+	for i := range s.names {
+		s.names[i] = LocalSlot{}
+	}
 	s.f.Cache.stackAllocState = s
 	s.f = nil
 	s.live = nil
diff --git a/src/cmd/compile/internal/ssa/tighten.go b/src/cmd/compile/internal/ssa/tighten.go
index eb5007b26e29e4..f3056d42aa8171 100644
--- a/src/cmd/compile/internal/ssa/tighten.go
+++ b/src/cmd/compile/internal/ssa/tighten.go
@@ -27,8 +27,6 @@ func tighten(f *Func) {
 	defer f.Cache.freeValueSlice(startMem)
 	endMem := f.Cache.allocValueSlice(f.NumBlocks())
 	defer f.Cache.freeValueSlice(endMem)
-	distinctArgs := f.newSparseSet(f.NumValues())
-	defer f.retSparseSet(distinctArgs)
 	memState(f, startMem, endMem)
 
 	for _, b := range f.Blocks {
@@ -49,18 +47,16 @@ func tighten(f *Func) {
 				// Nil checks need to stay in their block. See issue 72860.
 				continue
 			}
-			// Count distinct arguments which will need a register.
-			distinctArgs.clear()
-
+			// Count arguments which will need a register.
+			narg := 0
 			for _, a := range v.Args {
 				// SP and SB are special registers and have no effect on
 				// the allocation of general-purpose registers.
 				if a.needRegister() && a.Op != OpSB && a.Op != OpSP {
-					distinctArgs.add(a.ID)
+					narg++
 				}
 			}
-
-			if distinctArgs.size() >= 2 && !v.Type.IsFlags() {
+			if narg >= 2 && !v.Type.IsFlags() {
 				// Don't move values with more than one input, as that may
 				// increase register pressure.
 				// We make an exception for flags, as we want flag generators
@@ -89,7 +85,9 @@ func tighten(f *Func) {
 		changed = false
 
 		// Reset target
-		clear(target)
+		for i := range target {
+			target[i] = nil
+		}
 
 		// Compute target locations (for moveable values only).
 		// target location = the least common ancestor of all uses in the dominator tree.
diff --git a/src/cmd/compile/internal/ssa/trim.go b/src/cmd/compile/internal/ssa/trim.go
index a607a57a76e88a..13798c6c397eb8 100644
--- a/src/cmd/compile/internal/ssa/trim.go
+++ b/src/cmd/compile/internal/ssa/trim.go
@@ -109,7 +109,10 @@ func trim(f *Func) {
 	}
 	if n < len(f.Blocks) {
 		f.invalidateCFG()
-		clear(f.Blocks[n:])
+		tail := f.Blocks[n:]
+		for i := range tail {
+			tail[i] = nil
+		}
 		f.Blocks = f.Blocks[:n]
 	}
 }
diff --git a/src/cmd/compile/internal/ssagen/intrinsics.go b/src/cmd/compile/internal/ssagen/intrinsics.go
index 6b58e7e5914538..eaced0b2775e3a 100644
--- a/src/cmd/compile/internal/ssagen/intrinsics.go
+++ b/src/cmd/compile/internal/ssagen/intrinsics.go
@@ -163,7 +163,7 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 			s.vars[memVar] = s.newValue1(ssa.OpPubBarrier, types.TypeMem, s.mem())
 			return nil
 		},
-		sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64)
+		sys.ARM64, sys.Loong64, sys.PPC64, sys.RISCV64)
 
 	/******** internal/runtime/sys ********/
 	add("internal/runtime/sys", "GetCallerPC",
@@ -184,44 +184,22 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 		},
 		all...)
 
+	brev_arch := []sys.ArchFamily{sys.AMD64, sys.I386, sys.ARM64, sys.ARM, sys.Loong64, sys.S390X}
+	if cfg.goppc64 >= 10 {
+		// Use only on Power10 as the new byte reverse instructions that Power10 provide
+		// make it worthwhile as an intrinsic
+		brev_arch = append(brev_arch, sys.PPC64)
+	}
 	addF("internal/runtime/sys", "Bswap32",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpBswap32, types.Types[types.TUINT32], args[0])
 		},
-		sys.AMD64, sys.I386, sys.ARM64, sys.ARM, sys.Loong64, sys.S390X)
+		brev_arch...)
 	addF("internal/runtime/sys", "Bswap64",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpBswap64, types.Types[types.TUINT64], args[0])
 		},
-		sys.AMD64, sys.I386, sys.ARM64, sys.ARM, sys.Loong64, sys.S390X)
-
-	if cfg.goppc64 >= 10 {
-		// Use only on Power10 as the new byte reverse instructions that Power10 provide
-		// make it worthwhile as an intrinsic
-		addF("internal/runtime/sys", "Bswap32",
-			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-				return s.newValue1(ssa.OpBswap32, types.Types[types.TUINT32], args[0])
-			},
-			sys.PPC64)
-		addF("internal/runtime/sys", "Bswap64",
-			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-				return s.newValue1(ssa.OpBswap64, types.Types[types.TUINT64], args[0])
-			},
-			sys.PPC64)
-	}
-
-	if cfg.goriscv64 >= 22 {
-		addF("internal/runtime/sys", "Bswap32",
-			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-				return s.newValue1(ssa.OpBswap32, types.Types[types.TUINT32], args[0])
-			},
-			sys.RISCV64)
-		addF("internal/runtime/sys", "Bswap64",
-			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-				return s.newValue1(ssa.OpBswap64, types.Types[types.TUINT64], args[0])
-			},
-			sys.RISCV64)
-	}
+		brev_arch...)
 
 	/****** Prefetch ******/
 	makePrefetchFunc := func(op ssa.Op) func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
@@ -234,9 +212,9 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 	// Make Prefetch intrinsics for supported platforms
 	// On the unsupported platforms stub function will be eliminated
 	addF("internal/runtime/sys", "Prefetch", makePrefetchFunc(ssa.OpPrefetchCache),
-		sys.AMD64, sys.ARM64, sys.Loong64, sys.PPC64)
+		sys.AMD64, sys.ARM64, sys.PPC64)
 	addF("internal/runtime/sys", "PrefetchStreamed", makePrefetchFunc(ssa.OpPrefetchCacheStreamed),
-		sys.AMD64, sys.ARM64, sys.Loong64, sys.PPC64)
+		sys.AMD64, sys.ARM64, sys.PPC64)
 
 	/******** internal/runtime/atomic ********/
 	type atomicOpEmitter func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind, needReturn bool)
@@ -946,30 +924,23 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 			sys.RISCV64)
 	}
 
-	// ReverseBytes inlines correctly, no need to intrinsify it.
 	alias("math/bits", "ReverseBytes64", "internal/runtime/sys", "Bswap64", all...)
 	alias("math/bits", "ReverseBytes32", "internal/runtime/sys", "Bswap32", all...)
-	// Nothing special is needed for targets where ReverseBytes16 lowers to a rotate
 	addF("math/bits", "ReverseBytes16",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpBswap16, types.Types[types.TUINT16], args[0])
 		},
 		sys.Loong64)
+	// ReverseBytes inlines correctly, no need to intrinsify it.
+	// Nothing special is needed for targets where ReverseBytes16 lowers to a rotate
+	// On Power10, 16-bit rotate is not available so use BRH instruction
 	if cfg.goppc64 >= 10 {
-		// On Power10, 16-bit rotate is not available so use BRH instruction
 		addF("math/bits", "ReverseBytes16",
 			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 				return s.newValue1(ssa.OpBswap16, types.Types[types.TUINT], args[0])
 			},
 			sys.PPC64)
 	}
-	if cfg.goriscv64 >= 22 {
-		addF("math/bits", "ReverseBytes16",
-			func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-				return s.newValue1(ssa.OpBswap16, types.Types[types.TUINT16], args[0])
-			},
-			sys.RISCV64)
-	}
 
 	addF("math/bits", "Len64",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
@@ -1129,49 +1100,12 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 		}
 	}
 
-	makeOnesCountRISCV64 := func(op ssa.Op) func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-		return func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
-			if cfg.goriscv64 >= 22 {
-				return s.newValue1(op, types.Types[types.TINT], args[0])
-			}
-
-			addr := s.entryNewValue1A(ssa.OpAddr, types.Types[types.TBOOL].PtrTo(), ir.Syms.RISCV64HasZbb, s.sb)
-			v := s.load(types.Types[types.TBOOL], addr)
-			b := s.endBlock()
-			b.Kind = ssa.BlockIf
-			b.SetControl(v)
-			bTrue := s.f.NewBlock(ssa.BlockPlain)
-			bFalse := s.f.NewBlock(ssa.BlockPlain)
-			bEnd := s.f.NewBlock(ssa.BlockPlain)
-			b.AddEdgeTo(bTrue)
-			b.AddEdgeTo(bFalse)
-			b.Likely = ssa.BranchLikely // Majority of RISC-V support Zbb.
-
-			// We have the intrinsic - use it directly.
-			s.startBlock(bTrue)
-			s.vars[n] = s.newValue1(op, types.Types[types.TINT], args[0])
-			s.endBlock().AddEdgeTo(bEnd)
-
-			// Call the pure Go version.
-			s.startBlock(bFalse)
-			s.vars[n] = s.callResult(n, callNormal) // types.Types[TINT]
-			s.endBlock().AddEdgeTo(bEnd)
-
-			// Merge results.
-			s.startBlock(bEnd)
-			return s.variable(n, types.Types[types.TINT])
-		}
-	}
-
 	addF("math/bits", "OnesCount64",
 		makeOnesCountAMD64(ssa.OpPopCount64),
 		sys.AMD64)
 	addF("math/bits", "OnesCount64",
 		makeOnesCountLoong64(ssa.OpPopCount64),
 		sys.Loong64)
-	addF("math/bits", "OnesCount64",
-		makeOnesCountRISCV64(ssa.OpPopCount64),
-		sys.RISCV64)
 	addF("math/bits", "OnesCount64",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpPopCount64, types.Types[types.TINT], args[0])
@@ -1183,9 +1117,6 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 	addF("math/bits", "OnesCount32",
 		makeOnesCountLoong64(ssa.OpPopCount32),
 		sys.Loong64)
-	addF("math/bits", "OnesCount32",
-		makeOnesCountRISCV64(ssa.OpPopCount32),
-		sys.RISCV64)
 	addF("math/bits", "OnesCount32",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpPopCount32, types.Types[types.TINT], args[0])
@@ -1197,9 +1128,6 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 	addF("math/bits", "OnesCount16",
 		makeOnesCountLoong64(ssa.OpPopCount16),
 		sys.Loong64)
-	addF("math/bits", "OnesCount16",
-		makeOnesCountRISCV64(ssa.OpPopCount16),
-		sys.RISCV64)
 	addF("math/bits", "OnesCount16",
 		func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
 			return s.newValue1(ssa.OpPopCount16, types.Types[types.TINT], args[0])
@@ -1210,13 +1138,6 @@ func initIntrinsics(cfg *intrinsicBuildConfig) {
 			return s.newValue1(ssa.OpPopCount8, types.Types[types.TINT], args[0])
 		},
 		sys.S390X, sys.PPC64, sys.Wasm)
-
-	if cfg.goriscv64 >= 22 {
-		addF("math/bits", "OnesCount8",
-			makeOnesCountRISCV64(ssa.OpPopCount8),
-			sys.RISCV64)
-	}
-
 	alias("math/bits", "OnesCount", "math/bits", "OnesCount64", p8...)
 
 	addF("math/bits", "Mul64",
diff --git a/src/cmd/compile/internal/ssagen/intrinsics_test.go b/src/cmd/compile/internal/ssagen/intrinsics_test.go
index 0623c5f2098c4e..230a7bdf67d28e 100644
--- a/src/cmd/compile/internal/ssagen/intrinsics_test.go
+++ b/src/cmd/compile/internal/ssagen/intrinsics_test.go
@@ -418,8 +418,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"loong64", "internal/runtime/sys", "Len64"}:                       struct{}{},
 	{"loong64", "internal/runtime/sys", "Len8"}:                        struct{}{},
 	{"loong64", "internal/runtime/sys", "OnesCount64"}:                 struct{}{},
-	{"loong64", "internal/runtime/sys", "Prefetch"}:                    struct{}{},
-	{"loong64", "internal/runtime/sys", "PrefetchStreamed"}:            struct{}{},
 	{"loong64", "internal/runtime/sys", "TrailingZeros32"}:             struct{}{},
 	{"loong64", "internal/runtime/sys", "TrailingZeros64"}:             struct{}{},
 	{"loong64", "internal/runtime/sys", "TrailingZeros8"}:              struct{}{},
@@ -554,7 +552,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"mips", "math/bits", "TrailingZeros64"}:                           struct{}{},
 	{"mips", "math/bits", "TrailingZeros8"}:                            struct{}{},
 	{"mips", "runtime", "KeepAlive"}:                                   struct{}{},
-	{"mips", "runtime", "publicationBarrier"}:                          struct{}{},
 	{"mips", "runtime", "slicebytetostringtmp"}:                        struct{}{},
 	{"mips", "sync", "runtime_LoadAcquintptr"}:                         struct{}{},
 	{"mips", "sync", "runtime_StoreReluintptr"}:                        struct{}{},
@@ -632,7 +629,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"mips64", "math/bits", "Sub"}:                                     struct{}{},
 	{"mips64", "math/bits", "Sub64"}:                                   struct{}{},
 	{"mips64", "runtime", "KeepAlive"}:                                 struct{}{},
-	{"mips64", "runtime", "publicationBarrier"}:                        struct{}{},
 	{"mips64", "runtime", "slicebytetostringtmp"}:                      struct{}{},
 	{"mips64", "sync", "runtime_LoadAcquintptr"}:                       struct{}{},
 	{"mips64", "sync", "runtime_StoreReluintptr"}:                      struct{}{},
@@ -720,7 +716,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"mips64le", "math/bits", "Sub"}:                                   struct{}{},
 	{"mips64le", "math/bits", "Sub64"}:                                 struct{}{},
 	{"mips64le", "runtime", "KeepAlive"}:                               struct{}{},
-	{"mips64le", "runtime", "publicationBarrier"}:                      struct{}{},
 	{"mips64le", "runtime", "slicebytetostringtmp"}:                    struct{}{},
 	{"mips64le", "sync", "runtime_LoadAcquintptr"}:                     struct{}{},
 	{"mips64le", "sync", "runtime_StoreReluintptr"}:                    struct{}{},
@@ -800,7 +795,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"mipsle", "math/bits", "TrailingZeros64"}:                         struct{}{},
 	{"mipsle", "math/bits", "TrailingZeros8"}:                          struct{}{},
 	{"mipsle", "runtime", "KeepAlive"}:                                 struct{}{},
-	{"mipsle", "runtime", "publicationBarrier"}:                        struct{}{},
 	{"mipsle", "runtime", "slicebytetostringtmp"}:                      struct{}{},
 	{"mipsle", "sync", "runtime_LoadAcquintptr"}:                       struct{}{},
 	{"mipsle", "sync", "runtime_StoreReluintptr"}:                      struct{}{},
@@ -1113,14 +1107,11 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"riscv64", "internal/runtime/math", "Add64"}:                      struct{}{},
 	{"riscv64", "internal/runtime/math", "Mul64"}:                      struct{}{},
 	{"riscv64", "internal/runtime/math", "MulUintptr"}:                 struct{}{},
-	{"riscv64", "internal/runtime/sys", "Bswap32"}:                     struct{}{},
-	{"riscv64", "internal/runtime/sys", "Bswap64"}:                     struct{}{},
 	{"riscv64", "internal/runtime/sys", "GetCallerPC"}:                 struct{}{},
 	{"riscv64", "internal/runtime/sys", "GetCallerSP"}:                 struct{}{},
 	{"riscv64", "internal/runtime/sys", "GetClosurePtr"}:               struct{}{},
 	{"riscv64", "internal/runtime/sys", "Len64"}:                       struct{}{},
 	{"riscv64", "internal/runtime/sys", "Len8"}:                        struct{}{},
-	{"riscv64", "internal/runtime/sys", "OnesCount64"}:                 struct{}{},
 	{"riscv64", "internal/runtime/sys", "TrailingZeros32"}:             struct{}{},
 	{"riscv64", "internal/runtime/sys", "TrailingZeros64"}:             struct{}{},
 	{"riscv64", "internal/runtime/sys", "TrailingZeros8"}:              struct{}{},
@@ -1138,14 +1129,6 @@ var wantIntrinsics = map[testIntrinsicKey]struct{}{
 	{"riscv64", "math/bits", "Len8"}:                                   struct{}{},
 	{"riscv64", "math/bits", "Mul"}:                                    struct{}{},
 	{"riscv64", "math/bits", "Mul64"}:                                  struct{}{},
-	{"riscv64", "math/bits", "OnesCount"}:                              struct{}{},
-	{"riscv64", "math/bits", "OnesCount16"}:                            struct{}{},
-	{"riscv64", "math/bits", "OnesCount32"}:                            struct{}{},
-	{"riscv64", "math/bits", "OnesCount64"}:                            struct{}{},
-	{"riscv64", "math/bits", "OnesCount8"}:                             struct{}{},
-	{"riscv64", "math/bits", "ReverseBytes16"}:                         struct{}{},
-	{"riscv64", "math/bits", "ReverseBytes32"}:                         struct{}{},
-	{"riscv64", "math/bits", "ReverseBytes64"}:                         struct{}{},
 	{"riscv64", "math/bits", "RotateLeft"}:                             struct{}{},
 	{"riscv64", "math/bits", "RotateLeft16"}:                           struct{}{},
 	{"riscv64", "math/bits", "RotateLeft32"}:                           struct{}{},
diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go
index e241e9b9bc0f4f..b0e0262d450e20 100644
--- a/src/cmd/compile/internal/ssagen/ssa.go
+++ b/src/cmd/compile/internal/ssagen/ssa.go
@@ -160,13 +160,11 @@ func InitConfig() {
 	ir.Syms.Loong64HasLAMCAS = typecheck.LookupRuntimeVar("loong64HasLAMCAS") // bool
 	ir.Syms.Loong64HasLAM_BH = typecheck.LookupRuntimeVar("loong64HasLAM_BH") // bool
 	ir.Syms.Loong64HasLSX = typecheck.LookupRuntimeVar("loong64HasLSX")       // bool
-	ir.Syms.RISCV64HasZbb = typecheck.LookupRuntimeVar("riscv64HasZbb")       // bool
 	ir.Syms.Staticuint64s = typecheck.LookupRuntimeVar("staticuint64s")
 	ir.Syms.Typedmemmove = typecheck.LookupRuntimeFunc("typedmemmove")
 	ir.Syms.Udiv = typecheck.LookupRuntimeVar("udiv")                 // asm func with special ABI
 	ir.Syms.WriteBarrier = typecheck.LookupRuntimeVar("writeBarrier") // struct { bool; ... }
 	ir.Syms.Zerobase = typecheck.LookupRuntimeVar("zerobase")
-	ir.Syms.ZeroVal = typecheck.LookupRuntimeVar("zeroVal")
 
 	if Arch.LinkArch.Family == sys.Wasm {
 		BoundsCheckFunc[ssa.BoundsIndex] = typecheck.LookupRuntimeFunc("goPanicIndex")
@@ -1055,9 +1053,6 @@ type state struct {
 	// They are all (OffPtr (Select0 (runtime call))) and have the correct types,
 	// but the offsets are not set yet, and the type of the runtime call is also not final.
 	pendingHeapAllocations []*ssa.Value
-
-	// First argument of append calls that could be stack allocated.
-	appendTargets map[ir.Node]bool
 }
 
 type funcLine struct {
@@ -1921,7 +1916,7 @@ func (s *state) stmt(n ir.Node) {
 
 	case ir.OTAILCALL:
 		n := n.(*ir.TailCallStmt)
-		s.callResult(n.Call, callTail)
+		s.callResult(n.Call.(*ir.CallExpr), callTail)
 		call := s.mem()
 		b := s.endBlock()
 		b.Kind = ssa.BlockRetJmp // could use BlockExit. BlockRetJmp is mostly for clarity.
@@ -3474,28 +3469,19 @@ func (s *state) exprCheckPtr(n ir.Node, checkPtrOK bool) *ssa.Value {
 
 	case ir.OLEN, ir.OCAP:
 		n := n.(*ir.UnaryExpr)
-		// Note: all constant cases are handled by the frontend. If len or cap
-		// makes it here, we want the side effects of the argument. See issue 72844.
-		a := s.expr(n.X)
-		t := n.X.Type()
 		switch {
-		case t.IsSlice():
+		case n.X.Type().IsSlice():
 			op := ssa.OpSliceLen
 			if n.Op() == ir.OCAP {
 				op = ssa.OpSliceCap
 			}
-			return s.newValue1(op, types.Types[types.TINT], a)
-		case t.IsString(): // string; not reachable for OCAP
-			return s.newValue1(ssa.OpStringLen, types.Types[types.TINT], a)
-		case t.IsMap(), t.IsChan():
-			return s.referenceTypeBuiltin(n, a)
-		case t.IsArray():
-			return s.constInt(types.Types[types.TINT], t.NumElem())
-		case t.IsPtr() && t.Elem().IsArray():
-			return s.constInt(types.Types[types.TINT], t.Elem().NumElem())
-		default:
-			s.Fatalf("bad type in len/cap: %v", t)
-			return nil
+			return s.newValue1(op, types.Types[types.TINT], s.expr(n.X))
+		case n.X.Type().IsString(): // string; not reachable for OCAP
+			return s.newValue1(ssa.OpStringLen, types.Types[types.TINT], s.expr(n.X))
+		case n.X.Type().IsMap(), n.X.Type().IsChan():
+			return s.referenceTypeBuiltin(n, s.expr(n.X))
+		default: // array
+			return s.constInt(types.Types[types.TINT], n.X.Type().NumElem())
 		}
 
 	case ir.OSPTR:
@@ -3739,7 +3725,6 @@ func (s *state) append(n *ir.CallExpr, inplace bool) *ssa.Value {
 
 	// Add number of new elements to length.
 	nargs := s.constInt(types.Types[types.TINT], int64(len(n.Args)-1))
-	oldLen := l
 	l = s.newValue2(s.ssaOp(ir.OADD, types.Types[types.TINT]), types.Types[types.TINT], l, nargs)
 
 	// Decide if we need to grow
@@ -3759,123 +3744,6 @@ func (s *state) append(n *ir.CallExpr, inplace bool) *ssa.Value {
 	b.AddEdgeTo(grow)
 	b.AddEdgeTo(assign)
 
-	// If the result of the append does not escape, we can use
-	// a stack-allocated backing store if len is small enough.
-	// A stack-allocated backing store could be used at every
-	// append that qualifies, but we limit it in some cases to
-	// avoid wasted code and stack space.
-	// TODO: handle ... append case.
-	maxStackSize := int64(base.Debug.VariableMakeThreshold)
-	if !inplace && n.Esc() == ir.EscNone && et.Size() > 0 && et.Size() <= maxStackSize && base.Flag.N == 0 && base.VariableMakeHash.MatchPos(n.Pos(), nil) && !s.appendTargets[sn] {
-		// if l <= K {
-		//   if !used {
-		//     if oldLen == 0 {
-		//       var store [K]T
-		//       s = store[:l:K]
-		//       used = true
-		//     }
-		//   }
-		// }
-		// ... if we didn't use the stack backing store, call growslice ...
-		//
-		// oldLen==0 is not strictly necessary, but requiring it means
-		// we don't have to worry about copying existing elements.
-		// Allowing oldLen>0 would add complication. Worth it? I would guess not.
-		//
-		// TODO: instead of the used boolean, we could insist that this only applies
-		// to monotonic slices, those which once they have >0 entries never go back
-		// to 0 entries. Then oldLen==0 is enough.
-		//
-		// We also do this for append(x, ...) once for every x.
-		// It is ok to do it more often, but it is probably helpful only for
-		// the first instance. TODO: this could use more tuning. Using ir.Node
-		// as the key works for *ir.Name instances but probably nothing else.
-		if s.appendTargets == nil {
-			s.appendTargets = map[ir.Node]bool{}
-		}
-		s.appendTargets[sn] = true
-
-		K := maxStackSize / et.Size() // rounds down
-		KT := types.NewArray(et, K)
-		KT.SetNoalg(true)
-		types.CalcArraySize(KT)
-		// Align more than naturally for the type KT. See issue 73199.
-		align := types.NewArray(types.Types[types.TUINTPTR], 0)
-		types.CalcArraySize(align)
-		storeTyp := types.NewStruct([]*types.Field{
-			{Sym: types.BlankSym, Type: align},
-			{Sym: types.BlankSym, Type: KT},
-		})
-		storeTyp.SetNoalg(true)
-		types.CalcStructSize(storeTyp)
-
-		usedTestBlock := s.f.NewBlock(ssa.BlockPlain)
-		oldLenTestBlock := s.f.NewBlock(ssa.BlockPlain)
-		bodyBlock := s.f.NewBlock(ssa.BlockPlain)
-		growSlice := s.f.NewBlock(ssa.BlockPlain)
-
-		// Make "used" boolean.
-		tBool := types.Types[types.TBOOL]
-		used := typecheck.TempAt(n.Pos(), s.curfn, tBool)
-		s.defvars[s.f.Entry.ID][used] = s.constBool(false) // initialize this variable at fn entry
-
-		// Make backing store variable.
-		tInt := types.Types[types.TINT]
-		backingStore := typecheck.TempAt(n.Pos(), s.curfn, storeTyp)
-		backingStore.SetAddrtaken(true)
-
-		// if l <= K
-		s.startBlock(grow)
-		kTest := s.newValue2(s.ssaOp(ir.OLE, tInt), tBool, l, s.constInt(tInt, K))
-		b := s.endBlock()
-		b.Kind = ssa.BlockIf
-		b.SetControl(kTest)
-		b.AddEdgeTo(usedTestBlock)
-		b.AddEdgeTo(growSlice)
-		b.Likely = ssa.BranchLikely
-
-		// if !used
-		s.startBlock(usedTestBlock)
-		usedTest := s.newValue1(ssa.OpNot, tBool, s.expr(used))
-		b = s.endBlock()
-		b.Kind = ssa.BlockIf
-		b.SetControl(usedTest)
-		b.AddEdgeTo(oldLenTestBlock)
-		b.AddEdgeTo(growSlice)
-		b.Likely = ssa.BranchLikely
-
-		// if oldLen == 0
-		s.startBlock(oldLenTestBlock)
-		oldLenTest := s.newValue2(s.ssaOp(ir.OEQ, tInt), tBool, oldLen, s.constInt(tInt, 0))
-		b = s.endBlock()
-		b.Kind = ssa.BlockIf
-		b.SetControl(oldLenTest)
-		b.AddEdgeTo(bodyBlock)
-		b.AddEdgeTo(growSlice)
-		b.Likely = ssa.BranchLikely
-
-		// var store struct { _ [0]uintptr; arr [K]T }
-		s.startBlock(bodyBlock)
-		if et.HasPointers() {
-			s.vars[memVar] = s.newValue1A(ssa.OpVarDef, types.TypeMem, backingStore, s.mem())
-		}
-		addr := s.addr(backingStore)
-		s.zero(storeTyp, addr)
-
-		// s = store.arr[:l:K]
-		s.vars[ptrVar] = addr
-		s.vars[lenVar] = l // nargs would also be ok because of the oldLen==0 test.
-		s.vars[capVar] = s.constInt(tInt, K)
-
-		// used = true
-		s.assign(used, s.constBool(true), false, 0)
-		b = s.endBlock()
-		b.AddEdgeTo(assign)
-
-		// New block to use for growslice call.
-		grow = growSlice
-	}
-
 	// Call growslice
 	s.startBlock(grow)
 	taddr := s.expr(n.Fun)
@@ -3938,7 +3806,7 @@ func (s *state) append(n *ir.CallExpr, inplace bool) *ssa.Value {
 	}
 
 	// Write args into slice.
-	oldLen = s.newValue2(s.ssaOp(ir.OSUB, types.Types[types.TINT]), types.Types[types.TINT], l, nargs)
+	oldLen := s.newValue2(s.ssaOp(ir.OSUB, types.Types[types.TINT]), types.Types[types.TINT], l, nargs)
 	p2 := s.newValue2(ssa.OpPtrIndex, pt, p, oldLen)
 	for i, arg := range args {
 		addr := s.newValue2(ssa.OpPtrIndex, pt, p2, s.constInt(types.Types[types.TINT], int64(i)))
@@ -6644,7 +6512,9 @@ func genssa(f *ssa.Func, pp *objw.Progs) {
 			f.Cache.ValueToProgAfter = make([]*obj.Prog, f.NumValues())
 		}
 		valueToProgAfter = f.Cache.ValueToProgAfter[:f.NumValues()]
-		clear(valueToProgAfter)
+		for i := range valueToProgAfter {
+			valueToProgAfter[i] = nil
+		}
 	}
 
 	// If the very first instruction is not tagged as a statement,
diff --git a/src/cmd/compile/internal/test/inl_test.go b/src/cmd/compile/internal/test/inl_test.go
index 091933e1e75ed2..1dbd68cd67e064 100644
--- a/src/cmd/compile/internal/test/inl_test.go
+++ b/src/cmd/compile/internal/test/inl_test.go
@@ -67,18 +67,16 @@ func TestIntendedInlining(t *testing.T) {
 			// GC-related ones
 			"cgoInRange",
 			"gclinkptr.ptr",
-			"gcUsesSpanInlineMarkBits",
 			"guintptr.ptr",
 			"heapBitsSlice",
 			"markBits.isMarked",
 			"muintptr.ptr",
 			"puintptr.ptr",
-			"spanHeapBitsRange",
 			"spanOf",
 			"spanOfUnchecked",
 			"typePointers.nextFast",
-			"(*gcWork).putObjFast",
-			"(*gcWork).tryGetObjFast",
+			"(*gcWork).putFast",
+			"(*gcWork).tryGetFast",
 			"(*guintptr).set",
 			"(*markBits).advance",
 			"(*mspan).allocBitsForIndex",
@@ -177,6 +175,9 @@ func TestIntendedInlining(t *testing.T) {
 		},
 		"math/big": {
 			"bigEndianWord",
+			// The following functions require the math_big_pure_go build tag.
+			"addVW",
+			"subVW",
 		},
 		"math/rand": {
 			"(*rngSource).Int63",
@@ -284,25 +285,6 @@ func TestIntendedInlining(t *testing.T) {
 		}
 	}
 
-	if runtime.GOARCH != "wasm" {
-		// mutex implementation for multi-threaded GOARCHes
-		want["runtime"] = append(want["runtime"],
-			// in the fast paths of lock2 and unlock2
-			"key8",
-			"(*mLockProfile).store",
-		)
-		if bits.UintSize == 64 {
-			// these use 64-bit arithmetic, which is hard to inline on 32-bit platforms
-			want["runtime"] = append(want["runtime"],
-				// in the fast paths of lock2 and unlock2
-				"mutexSampleContention",
-
-				// in a slow path of lock2, but within the critical section
-				"(*mLockProfile).end",
-			)
-		}
-	}
-
 	// Functions that must actually be inlined; they must have actual callers.
 	must := map[string]bool{
 		"compress/flate.byLiteral.Len":  true,
diff --git a/src/cmd/compile/internal/test/mulconst_test.go b/src/cmd/compile/internal/test/mulconst_test.go
index c4aed84432de50..314cab32de4da7 100644
--- a/src/cmd/compile/internal/test/mulconst_test.go
+++ b/src/cmd/compile/internal/test/mulconst_test.go
@@ -4,96 +4,7 @@
 
 package test
 
-import (
-	"bytes"
-	"fmt"
-	"internal/testenv"
-	"os"
-	"path/filepath"
-	"strings"
-	"testing"
-)
-
-func TestConstantMultiplies(t *testing.T) {
-	testenv.MustHaveGoRun(t)
-
-	signs := []string{"", "u"}
-	widths := []int{8, 16, 32, 64}
-
-	// Make test code.
-	var code bytes.Buffer
-	fmt.Fprintf(&code, "package main\n")
-	for _, b := range widths {
-		for _, s := range signs {
-			fmt.Fprintf(&code, "type test_%s%d struct {\n", s, b)
-			fmt.Fprintf(&code, "    m %sint%d\n", s, b)
-			fmt.Fprintf(&code, "    f func(%sint%d)%sint%d\n", s, b, s, b)
-			fmt.Fprintf(&code, "}\n")
-			fmt.Fprintf(&code, "var test_%s%ds []test_%s%d\n", s, b, s, b)
-		}
-	}
-	for _, b := range widths {
-		for _, s := range signs {
-			lo := -256
-			hi := 256
-			if b == 8 {
-				lo = -128
-				hi = 127
-			}
-			if s == "u" {
-				lo = 0
-			}
-			for i := lo; i <= hi; i++ {
-				name := fmt.Sprintf("f_%s%d_%d", s, b, i)
-				name = strings.ReplaceAll(name, "-", "n")
-				fmt.Fprintf(&code, "func %s(x %sint%d) %sint%d {\n", name, s, b, s, b)
-				fmt.Fprintf(&code, "    return x*%d\n", i)
-				fmt.Fprintf(&code, "}\n")
-				fmt.Fprintf(&code, "func init() {\n")
-				fmt.Fprintf(&code, "    test_%s%ds = append(test_%s%ds, test_%s%d{%d, %s})\n", s, b, s, b, s, b, i, name)
-				fmt.Fprintf(&code, "}\n")
-			}
-		}
-	}
-	fmt.Fprintf(&code, "func main() {\n")
-	for _, b := range widths {
-		for _, s := range signs {
-			lo := -256
-			hi := 256
-			if s == "u" {
-				lo = 0
-			}
-			fmt.Fprintf(&code, "    for _, tst := range test_%s%ds {\n", s, b)
-			fmt.Fprintf(&code, "        for x := %d; x <= %d; x++ {\n", lo, hi)
-			fmt.Fprintf(&code, "            y := %sint%d(x)\n", s, b)
-			fmt.Fprintf(&code, "            if tst.f(y) != y*tst.m {\n")
-			fmt.Fprintf(&code, "                panic(tst.m)\n")
-			fmt.Fprintf(&code, "            }\n")
-			fmt.Fprintf(&code, "        }\n")
-			fmt.Fprintf(&code, "    }\n")
-		}
-	}
-	fmt.Fprintf(&code, "}\n")
-
-	fmt.Printf("CODE:\n%s\n", string(code.Bytes()))
-
-	// Make test file
-	tmpdir := t.TempDir()
-	src := filepath.Join(tmpdir, "x.go")
-	err := os.WriteFile(src, code.Bytes(), 0644)
-	if err != nil {
-		t.Fatalf("write file failed: %v", err)
-	}
-
-	cmd := testenv.Command(t, testenv.GoToolPath(t), "run", src)
-	out, err := cmd.CombinedOutput()
-	if err != nil {
-		t.Fatalf("go run failed: %v\n%s", err, out)
-	}
-	if len(out) > 0 {
-		t.Fatalf("got output when expecting none: %s\n", string(out))
-	}
-}
+import "testing"
 
 // Benchmark multiplication of an integer by various constants.
 //
diff --git a/src/cmd/compile/internal/typecheck/_builtin/runtime.go b/src/cmd/compile/internal/typecheck/_builtin/runtime.go
index a1397b32b35241..8a92c490612f2b 100644
--- a/src/cmd/compile/internal/typecheck/_builtin/runtime.go
+++ b/src/cmd/compile/internal/typecheck/_builtin/runtime.go
@@ -294,6 +294,5 @@ var arm64HasATOMICS bool
 var loong64HasLAMCAS bool
 var loong64HasLAM_BH bool
 var loong64HasLSX bool
-var riscv64HasZbb bool
 
 func asanregisterglobals(unsafe.Pointer, uintptr)
diff --git a/src/cmd/compile/internal/typecheck/builtin.go b/src/cmd/compile/internal/typecheck/builtin.go
index f3ab6766ec8b2b..4c12ce6220daa2 100644
--- a/src/cmd/compile/internal/typecheck/builtin.go
+++ b/src/cmd/compile/internal/typecheck/builtin.go
@@ -242,7 +242,6 @@ var runtimeDecls = [...]struct {
 	{"loong64HasLAMCAS", varTag, 6},
 	{"loong64HasLAM_BH", varTag, 6},
 	{"loong64HasLSX", varTag, 6},
-	{"riscv64HasZbb", varTag, 6},
 	{"asanregisterglobals", funcTag, 130},
 }
 
diff --git a/src/cmd/compile/internal/typecheck/stmt.go b/src/cmd/compile/internal/typecheck/stmt.go
index 8d792485d863c4..bb3a29dd13c0b4 100644
--- a/src/cmd/compile/internal/typecheck/stmt.go
+++ b/src/cmd/compile/internal/typecheck/stmt.go
@@ -137,7 +137,7 @@ assignOK:
 	if cr > len(rhs) {
 		stmt := stmt.(*ir.AssignListStmt)
 		stmt.SetOp(ir.OAS2FUNC)
-		r := rhs[0].(*ir.CallExpr)
+		r := rhs[0]
 		rtyp := r.Type()
 
 		mismatched := false
diff --git a/src/cmd/compile/internal/types/size.go b/src/cmd/compile/internal/types/size.go
index 72ec4052a808e4..48729884df141e 100644
--- a/src/cmd/compile/internal/types/size.go
+++ b/src/cmd/compile/internal/types/size.go
@@ -388,8 +388,52 @@ func CalcSize(t *Type) {
 		if t.Elem() == nil {
 			break
 		}
-		CalcArraySize(t)
-		w = t.width
+
+		CalcSize(t.Elem())
+		t.SetNotInHeap(t.Elem().NotInHeap())
+		if t.Elem().width != 0 {
+			cap := (uint64(MaxWidth) - 1) / uint64(t.Elem().width)
+			if uint64(t.NumElem()) > cap {
+				base.Errorf("type %L larger than address space", t)
+			}
+		}
+		w = t.NumElem() * t.Elem().width
+		t.align = t.Elem().align
+
+		// ABIInternal only allows "trivial" arrays (i.e., length 0 or 1)
+		// to be passed by register.
+		switch t.NumElem() {
+		case 0:
+			t.intRegs = 0
+			t.floatRegs = 0
+		case 1:
+			t.intRegs = t.Elem().intRegs
+			t.floatRegs = t.Elem().floatRegs
+		default:
+			t.intRegs = math.MaxUint8
+			t.floatRegs = math.MaxUint8
+		}
+		switch a := t.Elem().alg; a {
+		case AMEM, ANOEQ, ANOALG:
+			t.setAlg(a)
+		default:
+			switch t.NumElem() {
+			case 0:
+				// We checked above that the element type is comparable.
+				t.setAlg(AMEM)
+			case 1:
+				// Single-element array is same as its lone element.
+				t.setAlg(a)
+			default:
+				t.setAlg(ASPECIAL)
+			}
+		}
+		if t.NumElem() > 0 {
+			x := PtrDataSize(t.Elem())
+			if x > 0 {
+				t.ptrBytes = t.Elem().width*(t.NumElem()-1) + x
+			}
+		}
 
 	case TSLICE:
 		if t.Elem() == nil {
@@ -542,63 +586,6 @@ func CalcStructSize(t *Type) {
 	}
 }
 
-// CalcArraySize calculates the size of t,
-// filling in t.width, t.align, t.alg, and t.ptrBytes,
-// even if size calculation is otherwise disabled.
-func CalcArraySize(t *Type) {
-	elem := t.Elem()
-	n := t.NumElem()
-	CalcSize(elem)
-	t.SetNotInHeap(elem.NotInHeap())
-	if elem.width != 0 {
-		cap := (uint64(MaxWidth) - 1) / uint64(elem.width)
-		if uint64(n) > cap {
-			base.Errorf("type %L larger than address space", t)
-		}
-	}
-
-	t.width = elem.width * n
-	t.align = elem.align
-	// ABIInternal only allows "trivial" arrays (i.e., length 0 or 1)
-	// to be passed by register.
-	switch n {
-	case 0:
-		t.intRegs = 0
-		t.floatRegs = 0
-	case 1:
-		t.intRegs = elem.intRegs
-		t.floatRegs = elem.floatRegs
-	default:
-		t.intRegs = math.MaxUint8
-		t.floatRegs = math.MaxUint8
-	}
-	t.alg = AMEM // default
-	if t.Noalg() {
-		t.setAlg(ANOALG)
-	}
-	switch a := elem.alg; a {
-	case AMEM, ANOEQ, ANOALG:
-		t.setAlg(a)
-	default:
-		switch n {
-		case 0:
-			// We checked above that the element type is comparable.
-			t.setAlg(AMEM)
-		case 1:
-			// Single-element array is same as its lone element.
-			t.setAlg(a)
-		default:
-			t.setAlg(ASPECIAL)
-		}
-	}
-	if n > 0 {
-		x := PtrDataSize(elem)
-		if x > 0 {
-			t.ptrBytes = elem.width*(n-1) + x
-		}
-	}
-}
-
 func (t *Type) widthCalculated() bool {
 	return t.align > 0
 }
diff --git a/src/cmd/compile/internal/types2/check.go b/src/cmd/compile/internal/types2/check.go
index 31a1aa2abe9290..43ad4ee67f95c0 100644
--- a/src/cmd/compile/internal/types2/check.go
+++ b/src/cmd/compile/internal/types2/check.go
@@ -11,7 +11,6 @@ import (
 	"fmt"
 	"go/constant"
 	. "internal/types/errors"
-	"os"
 	"sync/atomic"
 )
 
@@ -21,9 +20,6 @@ var nopos syntax.Pos
 // debugging/development support
 const debug = false // leave on during development
 
-// position tracing for panics during type checking
-const tracePos = false // TODO(markfreeman): check performance implications
-
 // _aliasAny changes the behavior of [Scope.Lookup] for "any" in the
 // [Universe] scope.
 //
@@ -182,8 +178,7 @@ type Checker struct {
 	environment
 
 	// debugging
-	posStack []syntax.Pos // stack of source positions seen; used for panic tracing
-	indent   int          // indentation for tracing
+	indent int // indentation for tracing
 }
 
 // addDeclDep adds the dependency edge (check.decl -> to) if check.decl exists
@@ -401,16 +396,6 @@ func versionMax(a, b goVersion) goVersion {
 	return b
 }
 
-// pushPos pushes pos onto the pos stack.
-func (check *Checker) pushPos(pos syntax.Pos) {
-	check.posStack = append(check.posStack, pos)
-}
-
-// popPos pops from the pos stack.
-func (check *Checker) popPos() {
-	check.posStack = check.posStack[:len(check.posStack)-1]
-}
-
 // A bailout panic is used for early termination.
 type bailout struct{}
 
@@ -420,24 +405,6 @@ func (check *Checker) handleBailout(err *error) {
 		// normal return or early exit
 		*err = check.firstErr
 	default:
-		if len(check.posStack) > 0 {
-			doPrint := func(ps []syntax.Pos) {
-				for i := len(ps) - 1; i >= 0; i-- {
-					fmt.Fprintf(os.Stderr, "\t%v\n", ps[i])
-				}
-			}
-
-			fmt.Fprintln(os.Stderr, "The following panic happened checking types near:")
-			if len(check.posStack) <= 10 {
-				doPrint(check.posStack)
-			} else {
-				// if it's long, truncate the middle; it's least likely to help
-				doPrint(check.posStack[len(check.posStack)-5:])
-				fmt.Fprintln(os.Stderr, "\t...")
-				doPrint(check.posStack[:5])
-			}
-		}
-
 		// re-panic
 		panic(p)
 	}
diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go
index bedcc4c0150aa6..823d940d9bca0d 100644
--- a/src/cmd/compile/internal/types2/decl.go
+++ b/src/cmd/compile/internal/types2/decl.go
@@ -48,17 +48,6 @@ func pathString(path []Object) string {
 // objDecl type-checks the declaration of obj in its respective (file) environment.
 // For the meaning of def, see Checker.definedType, in typexpr.go.
 func (check *Checker) objDecl(obj Object, def *TypeName) {
-	if tracePos {
-		check.pushPos(obj.Pos())
-		defer func() {
-			// If we're panicking, keep stack of source positions.
-			if p := recover(); p != nil {
-				panic(p)
-			}
-			check.popPos()
-		}()
-	}
-
 	if check.conf.Trace && obj.Type() == nil {
 		if check.indent == 0 {
 			fmt.Println() // empty line between top-level objects for readability
diff --git a/src/cmd/compile/internal/types2/range.go b/src/cmd/compile/internal/types2/range.go
index dc0d81d05b7bec..86626ceaa8b38e 100644
--- a/src/cmd/compile/internal/types2/range.go
+++ b/src/cmd/compile/internal/types2/range.go
@@ -8,7 +8,6 @@ package types2
 
 import (
 	"cmd/compile/internal/syntax"
-	"go/constant"
 	"internal/buildcfg"
 	. "internal/types/errors"
 )
@@ -24,42 +23,8 @@ import (
 func (check *Checker) rangeStmt(inner stmtContext, rangeStmt *syntax.ForStmt, noNewVarPos poser, sKey, sValue, sExtra, rangeVar syntax.Expr, isDef bool) {
 	// check expression to iterate over
 	var x operand
-
-	// From the spec:
-	//   The range expression x is evaluated before beginning the loop,
-	//   with one exception: if at most one iteration variable is present
-	//   and x or len(x) is constant, the range expression is not evaluated.
-	// So we have to be careful not to evaluate the arg in the
-	// described situation.
-
-	check.hasCallOrRecv = false
 	check.expr(nil, &x, rangeVar)
 
-	if isTypes2 && x.mode != invalid && sValue == nil && !check.hasCallOrRecv {
-		if t, ok := arrayPtrDeref(under(x.typ)).(*Array); ok {
-			for {
-				// Put constant info on the thing inside parentheses.
-				// That's where (*../noder/writer).expr expects it.
-				// See issue 73476.
-				p, ok := rangeVar.(*syntax.ParenExpr)
-				if !ok {
-					break
-				}
-				rangeVar = p.X
-			}
-			// Override type of rangeVar to be a constant
-			// (and thus side-effects will not be computed
-			// by the backend).
-			check.record(&operand{
-				mode: constant_,
-				expr: rangeVar,
-				typ:  Typ[Int],
-				val:  constant.MakeInt64(t.len),
-				id:   x.id,
-			})
-		}
-	}
-
 	// determine key/value types
 	var key, val Type
 	if x.mode != invalid {
diff --git a/src/cmd/compile/internal/types2/resolver.go b/src/cmd/compile/internal/types2/resolver.go
index 9d8769b96f7c1d..b9ece5e69494df 100644
--- a/src/cmd/compile/internal/types2/resolver.go
+++ b/src/cmd/compile/internal/types2/resolver.go
@@ -436,8 +436,10 @@ func (check *Checker) collectObjects() {
 					if name == "init" {
 						obj.parent = pkg.scope
 						check.recordDef(s.Name, obj)
+						// init functions must have a body
 						if s.Body == nil {
-							check.softErrorf(obj.pos, MissingInitBody, "func init must have a body")
+							// TODO(gri) make this error message consistent with the others above
+							check.softErrorf(obj.pos, MissingInitBody, "missing function body")
 						}
 					} else {
 						check.declare(pkg.scope, s.Name, obj, nopos)
diff --git a/src/cmd/compile/internal/types2/stdlib_test.go b/src/cmd/compile/internal/types2/stdlib_test.go
index 35e15d814defbb..6966bb94b00f26 100644
--- a/src/cmd/compile/internal/types2/stdlib_test.go
+++ b/src/cmd/compile/internal/types2/stdlib_test.go
@@ -332,8 +332,6 @@ func TestStdFixed(t *testing.T) {
 		"issue49814.go",  // go/types does not have constraints on array size
 		"issue56103.go",  // anonymous interface cycles; will be a type checker error in 1.22
 		"issue52697.go",  // types2 does not have constraints on stack size
-		"issue73309.go",  // this test requires GODEBUG=gotypesalias=1
-		"issue73309b.go", // this test requires GODEBUG=gotypesalias=1
 
 		// These tests requires runtime/cgo.Incomplete, which is only available on some platforms.
 		// However, types2 does not know about build constraints.
diff --git a/src/cmd/compile/internal/walk/builtin.go b/src/cmd/compile/internal/walk/builtin.go
index 84e7436103ecb9..2e13daf87975a1 100644
--- a/src/cmd/compile/internal/walk/builtin.go
+++ b/src/cmd/compile/internal/walk/builtin.go
@@ -278,13 +278,12 @@ func walkLenCap(n *ir.UnaryExpr, init *ir.Nodes) ir.Node {
 	// replace len(*[10]int) with 10.
 	// delayed until now to preserve side effects.
 	t := n.X.Type()
+
 	if t.IsPtr() {
 		t = t.Elem()
 	}
 	if t.IsArray() {
-		// evaluate any side effects in n.X. See issue 72844.
-		appendWalkStmt(init, ir.NewAssignStmt(base.Pos, ir.BlankNode, n.X))
-
+		safeExpr(n.X, init)
 		con := ir.NewConstExpr(constant.MakeInt64(t.NumElem()), n)
 		con.SetTypecheck(1)
 		return con
@@ -600,23 +599,11 @@ func walkMakeSlice(n *ir.MakeExpr, init *ir.Nodes) ir.Node {
 			lenCap.Body.Append(mkcall("panicmakeslicecap", nil, &lenCap.Body))
 			nif.Body.Append(lenCap)
 
-			t := types.NewArray(t.Elem(), K) // [K]E
-			// Wrap in a struct containing a [0]uintptr field to force
-			// pointer alignment. Some user code expects higher alignment
-			// than what is guaranteed by the element type, because that's
-			// the behavior they observed of mallocgc, and then relied upon.
-			// See issue 73199.
-			field := typecheck.Lookup("arr")
-			t = types.NewStruct([]*types.Field{
-				{Sym: types.BlankSym, Type: types.NewArray(types.Types[types.TUINTPTR], 0)},
-				{Sym: field, Type: t},
-			})
-			t.SetNoalg(true)
-			store := typecheck.TempAt(base.Pos, ir.CurFunc, t)            // var store struct{_ uintptr[0]; arr [K]E}
-			nif.Body.Append(ir.NewAssignStmt(base.Pos, store, nil))       // store = {} (zero it)
-			arr := ir.NewSelectorExpr(base.Pos, ir.ODOT, store, field)    // arr = store.arr
-			s := ir.NewSliceExpr(base.Pos, ir.OSLICE, arr, nil, len, cap) // store.arr[:len:cap]
-			nif.Body.Append(ir.NewAssignStmt(base.Pos, slice, s))         // slice = store.arr[:len:cap]
+			t := types.NewArray(t.Elem(), K)                              // [K]E
+			arr := typecheck.TempAt(base.Pos, ir.CurFunc, t)              // var arr [K]E
+			nif.Body.Append(ir.NewAssignStmt(base.Pos, arr, nil))         // arr = {} (zero it)
+			s := ir.NewSliceExpr(base.Pos, ir.OSLICE, arr, nil, len, cap) // arr[:len:cap]
+			nif.Body.Append(ir.NewAssignStmt(base.Pos, slice, s))         // slice = arr[:len:cap]
 
 			appendWalkStmt(init, typecheck.Stmt(nif))
 
diff --git a/src/cmd/compile/internal/walk/convert.go b/src/cmd/compile/internal/walk/convert.go
index beef6634a526ad..fc1e4c84e78153 100644
--- a/src/cmd/compile/internal/walk/convert.go
+++ b/src/cmd/compile/internal/walk/convert.go
@@ -141,27 +141,16 @@ func dataWord(conv *ir.ConvExpr, init *ir.Nodes) ir.Node {
 		isInteger = sc.IsInteger()
 		isBool = sc.IsBoolean()
 	}
-
-	diagnose := func(msg string, n ir.Node) {
-		if base.Debug.EscapeDebug > 0 {
-			// This output is most useful with -gcflags=-W=2 or similar because
-			// it often prints a temp variable name.
-			base.WarnfAt(n.Pos(), "convert: %s: %v", msg, n)
-		}
-	}
-
 	// Try a bunch of cases to avoid an allocation.
 	var value ir.Node
 	switch {
 	case fromType.Size() == 0:
 		// n is zero-sized. Use zerobase.
-		diagnose("using global for zero-sized interface value", n)
 		cheapExpr(n, init) // Evaluate n for side-effects. See issue 19246.
 		value = ir.NewLinksymExpr(base.Pos, ir.Syms.Zerobase, types.Types[types.TUINTPTR])
 	case isBool || fromType.Size() == 1 && isInteger:
 		// n is a bool/byte. Use staticuint64s[n * 8] on little-endian
 		// and staticuint64s[n * 8 + 7] on big-endian.
-		diagnose("using global for single-byte interface value", n)
 		n = cheapExpr(n, init)
 		n = soleComponent(init, n)
 		// byteindex widens n so that the multiplication doesn't overflow.
@@ -175,18 +164,11 @@ func dataWord(conv *ir.ConvExpr, init *ir.Nodes) ir.Node {
 		xe := ir.NewIndexExpr(base.Pos, staticuint64s, index)
 		xe.SetBounded(true)
 		value = xe
-	case n.Op() == ir.OLINKSYMOFFSET && n.(*ir.LinksymOffsetExpr).Linksym == ir.Syms.ZeroVal && n.(*ir.LinksymOffsetExpr).Offset_ == 0:
-		// n is using zeroVal, so we can use n directly.
-		// (Note that n does not have a proper pos in this case, so using conv for the diagnostic instead.)
-		diagnose("using global for zero value interface value", conv)
-		value = n
 	case n.Op() == ir.ONAME && n.(*ir.Name).Class == ir.PEXTERN && n.(*ir.Name).Readonly():
 		// n is a readonly global; use it directly.
-		diagnose("using global for interface value", n)
 		value = n
 	case conv.Esc() == ir.EscNone && fromType.Size() <= 1024:
 		// n does not escape. Use a stack temporary initialized to n.
-		diagnose("using stack temporary for interface value", n)
 		value = typecheck.TempAt(base.Pos, ir.CurFunc, fromType)
 		init.Append(typecheck.Stmt(ir.NewAssignStmt(base.Pos, value, n)))
 	}
diff --git a/src/cmd/compile/internal/walk/expr.go b/src/cmd/compile/internal/walk/expr.go
index 6775bc4fc8d276..96087e16b76017 100644
--- a/src/cmd/compile/internal/walk/expr.go
+++ b/src/cmd/compile/internal/walk/expr.go
@@ -594,8 +594,8 @@ func walkCall(n *ir.CallExpr, init *ir.Nodes) ir.Node {
 
 	if n.Op() == ir.OCALLFUNC {
 		fn := ir.StaticCalleeName(n.Fun)
-		if fn != nil && fn.Sym().Pkg.Path == "internal/abi" && strings.HasPrefix(fn.Sym().Name, "EscapeNonString[") {
-			// internal/abi.EscapeNonString[T] is a compiler intrinsic
+		if fn != nil && fn.Sym().Pkg.Path == "hash/maphash" && strings.HasPrefix(fn.Sym().Name, "escapeForHash[") {
+			// hash/maphash.escapeForHash[T] is a compiler intrinsic
 			// for the escape analysis to escape its argument based on
 			// the type. The call itself is no-op. Just walk the
 			// argument.
diff --git a/src/cmd/compile/internal/walk/order.go b/src/cmd/compile/internal/walk/order.go
index 8ba8dd96cc41c6..8967b7dbba4840 100644
--- a/src/cmd/compile/internal/walk/order.go
+++ b/src/cmd/compile/internal/walk/order.go
@@ -7,7 +7,6 @@ package walk
 import (
 	"fmt"
 	"go/constant"
-	"internal/abi"
 	"internal/buildcfg"
 
 	"cmd/compile/internal/base"
@@ -227,8 +226,7 @@ func (o *orderState) addrTemp(n ir.Node) ir.Node {
 	// for the implicit conversion of "foo" to any, and we can't handle
 	// the relocations in that temp.
 	if n.Op() == ir.ONIL || (n.Op() == ir.OLITERAL && !base.Ctxt.IsFIPS()) {
-		// This is a basic literal or nil that we can store
-		// directly in the read-only data section.
+		// TODO: expand this to all static composite literal nodes?
 		n = typecheck.DefaultLit(n, nil)
 		types.CalcSize(n.Type())
 		vstat := readonlystaticname(n.Type())
@@ -241,28 +239,6 @@ func (o *orderState) addrTemp(n ir.Node) ir.Node {
 		return vstat
 	}
 
-	// Check now for a composite literal to possibly store in the read-only data section.
-	v := staticValue(n)
-	if v == nil {
-		v = n
-	}
-	if (v.Op() == ir.OSTRUCTLIT || v.Op() == ir.OARRAYLIT) && !base.Ctxt.IsFIPS() {
-		if ir.IsZero(v) && 0 < v.Type().Size() && v.Type().Size() <= abi.ZeroValSize {
-			// This zero value can be represented by the read-only zeroVal.
-			zeroVal := ir.NewLinksymExpr(v.Pos(), ir.Syms.ZeroVal, n.Type())
-			vstat := typecheck.Expr(zeroVal).(*ir.LinksymOffsetExpr)
-			return vstat
-		}
-		if isStaticCompositeLiteral(v) {
-			// v can be directly represented in the read-only data section.
-			lit := v.(*ir.CompLitExpr)
-			vstat := readonlystaticname(n.Type())
-			fixedlit(inInitFunction, initKindStatic, lit, vstat, nil) // nil init
-			vstat = typecheck.Expr(vstat).(*ir.Name)
-			return vstat
-		}
-	}
-
 	// Prevent taking the address of an SSA-able local variable (#63332).
 	//
 	// TODO(mdempsky): Note that OuterValue unwraps OCONVNOPs, but
@@ -361,8 +337,8 @@ func (o *orderState) mapKeyTemp(outerPos src.XPos, t *types.Type, n ir.Node) ir.
 //
 // Note that this code does not handle the case:
 //
-//	s := string(k)
-//	x = m[s]
+//      s := string(k)
+//      x = m[s]
 //
 // Cases like this are handled during SSA, search for slicebytetostring
 // in ../ssa/_gen/generic.rules.
diff --git a/src/cmd/compile/internal/walk/range.go b/src/cmd/compile/internal/walk/range.go
index 3d3547b84b500c..ede9f2182d494f 100644
--- a/src/cmd/compile/internal/walk/range.go
+++ b/src/cmd/compile/internal/walk/range.go
@@ -5,7 +5,6 @@
 package walk
 
 import (
-	"go/constant"
 	"internal/buildcfg"
 	"unicode/utf8"
 
@@ -81,10 +80,6 @@ func walkRange(nrange *ir.RangeStmt) ir.Node {
 		base.Fatalf("walkRange")
 
 	case types.IsInt[k]:
-		if nn := arrayRangeClear(nrange, v1, v2, a); nn != nil {
-			base.Pos = lno
-			return nn
-		}
 		hv1 := typecheck.TempAt(base.Pos, ir.CurFunc, t)
 		hn := typecheck.TempAt(base.Pos, ir.CurFunc, t)
 
@@ -524,33 +519,13 @@ func arrayRangeClear(loop *ir.RangeStmt, v1, v2, a ir.Node) ir.Node {
 	}
 	lhs := stmt.X.(*ir.IndexExpr)
 	x := lhs.X
-
-	// Get constant number of iterations for int and array cases.
-	n := int64(-1)
-	if ir.IsConst(a, constant.Int) {
-		n = ir.Int64Val(a)
-	} else if a.Type().IsArray() {
-		n = a.Type().NumElem()
-	} else if a.Type().IsPtr() && a.Type().Elem().IsArray() {
-		n = a.Type().Elem().NumElem()
-	}
-
-	if n >= 0 {
-		// Int/Array case.
-		if !x.Type().IsArray() {
-			return nil
-		}
-		if x.Type().NumElem() != n {
-			return nil
-		}
-	} else {
-		// Slice case.
-		if !ir.SameSafeExpr(x, a) {
-			return nil
+	if a.Type().IsPtr() && a.Type().Elem().IsArray() {
+		if s, ok := x.(*ir.StarExpr); ok && s.Op() == ir.ODEREF {
+			x = s.X
 		}
 	}
 
-	if !ir.SameSafeExpr(lhs.Index, v1) {
+	if !ir.SameSafeExpr(x, a) || !ir.SameSafeExpr(lhs.Index, v1) {
 		return nil
 	}
 
@@ -558,7 +533,7 @@ func arrayRangeClear(loop *ir.RangeStmt, v1, v2, a ir.Node) ir.Node {
 		return nil
 	}
 
-	return arrayClear(stmt.Pos(), x, loop)
+	return arrayClear(stmt.Pos(), a, loop)
 }
 
 // arrayClear constructs a call to runtime.memclr for fast zeroing of slices and arrays.
@@ -605,7 +580,7 @@ func arrayClear(wbPos src.XPos, a ir.Node, nrange *ir.RangeStmt) ir.Node {
 
 	// For array range clear, also set "i = len(a) - 1"
 	if nrange != nil {
-		idx := ir.NewAssignStmt(base.Pos, nrange.Key, typecheck.Conv(ir.NewBinaryExpr(base.Pos, ir.OSUB, ir.NewUnaryExpr(base.Pos, ir.OLEN, a), ir.NewInt(base.Pos, 1)), nrange.Key.Type()))
+		idx := ir.NewAssignStmt(base.Pos, nrange.Key, ir.NewBinaryExpr(base.Pos, ir.OSUB, ir.NewUnaryExpr(base.Pos, ir.OLEN, a), ir.NewInt(base.Pos, 1)))
 		n.Body.Append(idx)
 	}
 
diff --git a/src/cmd/compile/internal/walk/stmt.go b/src/cmd/compile/internal/walk/stmt.go
index b2a226e0789fbb..2e5ca3180f1ac9 100644
--- a/src/cmd/compile/internal/walk/stmt.go
+++ b/src/cmd/compile/internal/walk/stmt.go
@@ -139,7 +139,8 @@ func walkStmt(n ir.Node) ir.Node {
 		n := n.(*ir.TailCallStmt)
 
 		var init ir.Nodes
-		n.Call.Fun = walkExpr(n.Call.Fun, &init)
+		call := n.Call.(*ir.CallExpr)
+		call.Fun = walkExpr(call.Fun, &init)
 
 		if len(init) > 0 {
 			init.Append(n)
diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go
index 2fa51f12809362..25e03359fd69be 100644
--- a/src/cmd/compile/internal/walk/walk.go
+++ b/src/cmd/compile/internal/walk/walk.go
@@ -24,13 +24,6 @@ const tmpstringbufsize = 32
 
 func Walk(fn *ir.Func) {
 	ir.CurFunc = fn
-
-	// Set and then clear a package-level cache of static values for this fn.
-	// (At some point, it might be worthwhile to have a walkState structure
-	// that gets passed everywhere where things like this can go.)
-	staticValues = findStaticValues(fn)
-	defer func() { staticValues = nil }()
-
 	errorsBefore := base.Errors()
 	order(fn)
 	if base.Errors() > errorsBefore {
@@ -429,43 +422,3 @@ func ifaceData(pos src.XPos, n ir.Node, t *types.Type) ir.Node {
 	ind.SetBounded(true)
 	return ind
 }
-
-// staticValue returns the earliest expression it can find that always
-// evaluates to n, with similar semantics to [ir.StaticValue].
-//
-// It only returns results for the ir.CurFunc being processed in [Walk],
-// including its closures, and uses a cache to reduce duplicative work.
-// It can return n or nil if it does not find an earlier expression.
-//
-// The current use case is reducing OCONVIFACE allocations, and hence
-// staticValue is currently only useful when given an *ir.ConvExpr.X as n.
-func staticValue(n ir.Node) ir.Node {
-	if staticValues == nil {
-		base.Fatalf("staticValues is nil. staticValue called outside of walk.Walk?")
-	}
-	return staticValues[n]
-}
-
-// staticValues is a cache of static values for use by staticValue.
-var staticValues map[ir.Node]ir.Node
-
-// findStaticValues returns a map of static values for fn.
-func findStaticValues(fn *ir.Func) map[ir.Node]ir.Node {
-	// We can't use an ir.ReassignOracle or ir.StaticValue in the
-	// middle of walk because they don't currently handle
-	// transformed assignments (e.g., will complain about 'RHS == nil').
-	// So we instead build this map to use in walk.
-	ro := &ir.ReassignOracle{}
-	ro.Init(fn)
-	m := make(map[ir.Node]ir.Node)
-	ir.Visit(fn, func(n ir.Node) {
-		if n.Op() == ir.OCONVIFACE {
-			x := n.(*ir.ConvExpr).X
-			v := ro.StaticValue(x)
-			if v != nil && v != x {
-				m[x] = v
-			}
-		}
-	})
-	return m
-}
diff --git a/src/cmd/compile/testdata/script/issue73947.txt b/src/cmd/compile/testdata/script/issue73947.txt
deleted file mode 100644
index f888ae2bfa5e04..00000000000000
--- a/src/cmd/compile/testdata/script/issue73947.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-go build main.go
-! stdout .
-! stderr .
-
--- main.go --
-
-package main
-
-import (
-	"p/b"
-)
-
-func main() {
-	f()
-}
-
-func f() {
-	typ := indexedPageType{newIndexedType(nil)}
-	page := newPage(typ.indexedType)
-	page.Data()
-}
-
-func newPage(typ *indexedType) Page {
-	values := typ.NewValues(nil, nil)
-	return &indexedPage{
-		typ:         typ,
-		values:      values.Int32(),
-		columnIndex: ^0,
-	}
-}
-
-type Type interface {
-	NewPage(columnIndex, numValues int, data b.Values) Page
-	NewValues(values []byte, offsets []uint32) b.Values
-}
-
-type Page interface {
-	Type() Type
-	Data() b.Values
-}
-
-type indexedPage struct {
-	typ         *indexedType
-	values      []int32
-	columnIndex int16
-}
-
-func (page *indexedPage) Type() Type { return indexedPageType{page.typ} }
-
-func (page *indexedPage) Data() b.Values { return b.Int32Values(page.values) }
-
-type indexedType struct {
-	Type
-}
-
-func newIndexedType(typ Type) *indexedType {
-	return &indexedType{Type: typ}
-}
-
-type indexedPageType struct{ *indexedType }
-
-func (t indexedPageType) NewValues(values []byte, _ []uint32) b.Values {
-	return b.Int32ValuesFromBytes(values)
-}
-
--- go.mod --
-module p
-
-go 1.24
-
--- internal/a/a.go --
-package a
-
-import "unsafe"
-
-type slice struct {
-	ptr unsafe.Pointer
-	len int
-	cap int
-}
-
-func Slice[To, From any](data []From) []To {
-	// This function could use unsafe.Slice but it would drop the capacity
-	// information, so instead we implement the type conversion.
-	var zf From
-	var zt To
-	var s = slice{
-		ptr: unsafe.Pointer(unsafe.SliceData(data)),
-		len: int((uintptr(len(data)) * unsafe.Sizeof(zf)) / unsafe.Sizeof(zt)),
-		cap: int((uintptr(cap(data)) * unsafe.Sizeof(zf)) / unsafe.Sizeof(zt)),
-	}
-	return *(*[]To)(unsafe.Pointer(&s))
-}
-
--- b/b.go --
-package b
-
-import "p/internal/a"
-
-type Kind int32
-
-const Int32 Kind = iota + 2
-
-type Values struct {
-	kind    Kind
-	size    int32
-	data    []byte
-	offsets []uint32
-}
-
-func (v *Values) Int32() []int32 {
-	return a.Slice[int32](v.data)
-}
-
-func makeValues[T any](kind Kind, values []T) Values {
-	return Values{kind: kind, data: a.Slice[byte](values)}
-}
-
-func Int32Values(values []int32) Values {
-	return makeValues(Int32, values)
-}
-
-func Int32ValuesFromBytes(values []byte) Values {
-	return Values{kind: Int32, data: values}
-}
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index 024050c2dd70c4..596036fce9f7f1 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -274,8 +274,7 @@ func xinit() {
 	tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch)
 
 	goversion := findgoversion()
-	isRelease = (strings.HasPrefix(goversion, "release.") || strings.HasPrefix(goversion, "go")) &&
-		!strings.Contains(goversion, "devel")
+	isRelease = strings.HasPrefix(goversion, "release.") || strings.HasPrefix(goversion, "go")
 }
 
 // compilerEnv returns a map from "goos/goarch" to the
@@ -426,10 +425,6 @@ func findgoversion() string {
 	// Otherwise, use Git.
 	//
 	// Include 1.x base version, hash, and date in the version.
-	// Make sure it includes the substring "devel", but otherwise
-	// use a format compatible with https://go.dev/doc/toolchain#name
-	// so that it's possible to use go/version.Lang, Compare and so on.
-	// See go.dev/issue/73372.
 	//
 	// Note that we lightly parse internal/goversion/goversion.go to
 	// obtain the base version. We can't just import the package,
@@ -441,7 +436,7 @@ func findgoversion() string {
 	if m == nil {
 		fatalf("internal/goversion/goversion.go does not contain 'const Version = ...'")
 	}
-	version := fmt.Sprintf("go1.%s-devel_", m[1])
+	version := fmt.Sprintf("devel go1.%s-", m[1])
 	version += chomp(run(goroot, CheckExit, "git", "log", "-n", "1", "--format=format:%h %cd", "HEAD"))
 
 	// Cache version.
@@ -620,7 +615,7 @@ func setup() {
 func mustLinkExternal(goos, goarch string, cgoEnabled bool) bool {
 	if cgoEnabled {
 		switch goarch {
-		case "mips", "mipsle", "mips64", "mips64le":
+		case "loong64", "mips", "mipsle", "mips64", "mips64le":
 			// Internally linking cgo is incomplete on some architectures.
 			// https://golang.org/issue/14449
 			return true
@@ -673,6 +668,7 @@ var gentab = []struct {
 	file string
 	gen  func(dir, file string)
 }{
+	{"go/build", "zcgo.go", mkzcgo},
 	{"cmd/go/internal/cfg", "zdefaultcc.go", mkzdefaultcc},
 	{"internal/runtime/sys", "zversion.go", mkzversion},
 	{"time/tzdata", "zzipdata.go", mktzdata},
@@ -1390,21 +1386,7 @@ func toolenv() []string {
 	return env
 }
 
-var (
-	toolchain = []string{"cmd/asm", "cmd/cgo", "cmd/compile", "cmd/link", "cmd/preprofile"}
-
-	// Keep in sync with binExes in cmd/distpack/pack.go.
-	binExesIncludedInDistpack = []string{"cmd/go", "cmd/gofmt"}
-
-	// Keep in sync with the filter in cmd/distpack/pack.go.
-	toolsIncludedInDistpack = []string{"cmd/asm", "cmd/cgo", "cmd/compile", "cmd/cover", "cmd/link", "cmd/preprofile", "cmd/vet"}
-
-	// We could install all tools in "cmd", but is unnecessary because we will
-	// remove them in distpack, so instead install the tools that will actually
-	// be included in distpack, which is a superset of toolchain. Not installing
-	// the tools will help us test what happens when the tools aren't present.
-	toolsToInstall = slices.Concat(binExesIncludedInDistpack, toolsIncludedInDistpack)
-)
+var toolchain = []string{"cmd/asm", "cmd/cgo", "cmd/compile", "cmd/link", "cmd/preprofile"}
 
 // The bootstrap command runs a build from scratch,
 // stopping at having installed the go_bootstrap command.
@@ -1470,6 +1452,11 @@ func cmdbootstrap() {
 	// GOEXPERIMENT.
 	os.Setenv("GOEXPERIMENT", "none")
 
+	if debug {
+		// cmd/buildid is used in debug mode.
+		toolchain = append(toolchain, "cmd/buildid")
+	}
+
 	if isdir(pathf("%s/src/pkg", goroot)) {
 		fatalf("\n\n"+
 			"The Go package sources have moved to $GOROOT/src.\n"+
@@ -1525,7 +1512,7 @@ func cmdbootstrap() {
 	}
 
 	// To recap, so far we have built the new toolchain
-	// (cmd/asm, cmd/cgo, cmd/compile, cmd/link, cmd/preprofile)
+	// (cmd/asm, cmd/cgo, cmd/compile, cmd/link)
 	// using the Go bootstrap toolchain and go command.
 	// Then we built the new go command (as go_bootstrap)
 	// using the new toolchain and our own build logic (above).
@@ -1614,9 +1601,9 @@ func cmdbootstrap() {
 			xprintf("\n")
 		}
 		xprintf("Building commands for host, %s/%s.\n", goos, goarch)
-		goInstall(toolenv(), goBootstrap, toolsToInstall...)
-		checkNotStale(toolenv(), goBootstrap, toolsToInstall...)
-		checkNotStale(toolenv(), gorootBinGo, toolsToInstall...)
+		goInstall(toolenv(), goBootstrap, "cmd")
+		checkNotStale(toolenv(), goBootstrap, "cmd")
+		checkNotStale(toolenv(), gorootBinGo, "cmd")
 
 		timelog("build", "target toolchain")
 		if vflag > 0 {
@@ -1630,12 +1617,12 @@ func cmdbootstrap() {
 		xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch)
 	}
 	goInstall(nil, goBootstrap, "std")
-	goInstall(toolenv(), goBootstrap, toolsToInstall...)
+	goInstall(toolenv(), goBootstrap, "cmd")
 	checkNotStale(toolenv(), goBootstrap, toolchain...)
 	checkNotStale(nil, goBootstrap, "std")
-	checkNotStale(toolenv(), goBootstrap, toolsToInstall...)
+	checkNotStale(toolenv(), goBootstrap, "cmd")
 	checkNotStale(nil, gorootBinGo, "std")
-	checkNotStale(toolenv(), gorootBinGo, toolsToInstall...)
+	checkNotStale(toolenv(), gorootBinGo, "cmd")
 	if debug {
 		run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full")
 		checkNotStale(toolenv(), goBootstrap, toolchain...)
@@ -1686,7 +1673,7 @@ func cmdbootstrap() {
 
 	if distpack {
 		xprintf("Packaging archives for %s/%s.\n", goos, goarch)
-		run("", ShowOutput|CheckExit, gorootBinGo, "tool", "distpack")
+		run("", ShowOutput|CheckExit, pathf("%s/distpack", tooldir))
 	}
 
 	// Print trailing banner unless instructed otherwise.
diff --git a/src/cmd/dist/buildgo.go b/src/cmd/dist/buildgo.go
index 6bd8a9ce8dfa6b..884e9d729a6a35 100644
--- a/src/cmd/dist/buildgo.go
+++ b/src/cmd/dist/buildgo.go
@@ -7,6 +7,7 @@ package main
 import (
 	"fmt"
 	"io"
+	"os"
 	"path/filepath"
 	"sort"
 	"strings"
@@ -107,6 +108,22 @@ func defaultCCFunc(name string, defaultcc map[string]string) string {
 	return buf.String()
 }
 
+// mkzcgo writes zcgo.go for the go/build package:
+//
+//	package build
+//	const defaultCGO_ENABLED = 
+//
+// It is invoked to write go/build/zcgo.go.
+func mkzcgo(dir, file string) {
+	var buf strings.Builder
+	writeHeader(&buf)
+	fmt.Fprintf(&buf, "package build\n")
+	fmt.Fprintln(&buf)
+	fmt.Fprintf(&buf, "const defaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED")))
+
+	writefile(buf.String(), file, writeSkipSame)
+}
+
 // mktzdata src/time/tzdata/zzipdata.go:
 //
 //	package tzdata
diff --git a/src/cmd/dist/buildruntime.go b/src/cmd/dist/buildruntime.go
index 87e88671763996..04b5b45410b70c 100644
--- a/src/cmd/dist/buildruntime.go
+++ b/src/cmd/dist/buildruntime.go
@@ -6,7 +6,6 @@ package main
 
 import (
 	"fmt"
-	"os"
 	"strings"
 )
 
@@ -67,7 +66,6 @@ func mkbuildcfg(file string) {
 	fmt.Fprintf(&buf, "const defaultGOOS = runtime.GOOS\n")
 	fmt.Fprintf(&buf, "const defaultGOARCH = runtime.GOARCH\n")
 	fmt.Fprintf(&buf, "const DefaultGOFIPS140 = `%s`\n", gofips140)
-	fmt.Fprintf(&buf, "const DefaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED")))
 
 	writefile(buf.String(), file, writeSkipSame)
 }
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index c2eaeb1248abf8..e939768a2f4809 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -178,7 +178,7 @@ func (t *tester) run() {
 			// otherwise relevant to the actual set of packages under test.
 			goInstall(toolenv(), gorootBinGo, toolchain...)
 			goInstall(toolenv(), gorootBinGo, toolchain...)
-			goInstall(toolenv(), gorootBinGo, toolsToInstall...)
+			goInstall(toolenv(), gorootBinGo, "cmd")
 		}
 	}
 
@@ -336,10 +336,6 @@ type goTest struct {
 	// omitVariant indicates that variant is used solely for the dist test name and
 	// that the set of test names run by each variant (including empty) of a package
 	// is non-overlapping.
-	//
-	// TODO(mknyszek): Consider removing omitVariant as it is no longer set to true
-	// by any test. It's too valuable to have timing information in ResultDB that
-	// corresponds directly with dist names for tests.
 	omitVariant bool
 
 	// We have both pkg and pkgs as a convenience. Both may be set, in which
@@ -599,11 +595,8 @@ func (t *tester) registerRaceBenchTest(pkg string) {
 		defer timelog("end", dt.name)
 		ranGoBench = true
 		return (&goTest{
-			variant: "racebench",
-			// Include the variant even though there's no overlap in test names.
-			// This makes the test targets distinct, allowing our build system to record
-			// elapsed time for each one, which is useful for load-balancing test shards.
-			omitVariant: false,
+			variant:     "racebench",
+			omitVariant: true,               // The only execution of benchmarks in dist; benchmark names are guaranteed not to overlap with test names.
 			timeout:     1200 * time.Second, // longer timeout for race with benchmarks
 			race:        true,
 			bench:       true,
@@ -959,7 +952,6 @@ func (t *tester) registerTests() {
 					variant:   "cpu" + strconv.Itoa(i),
 					timeout:   300 * time.Second,
 					cpu:       strconv.Itoa(i),
-					gcflags:   gogcflags,
 					short:     true,
 					testFlags: []string{"-quick"},
 					// We set GOMAXPROCS=2 in addition to -cpu=1,2,4 in order to test runtime bootstrap code,
@@ -990,11 +982,8 @@ func (t *tester) registerTests() {
 			id := fmt.Sprintf("%d_%d", shard, nShards)
 			t.registerTest("../test",
 				&goTest{
-					variant: id,
-					// Include the variant even though there's no overlap in test names.
-					// This makes the test target more clearly distinct in our build
-					// results and is important for load-balancing test shards.
-					omitVariant: false,
+					variant:     id,
+					omitVariant: true, // Shards of the same Go package; tests are guaranteed not to overlap.
 					pkg:         "cmd/internal/testdir",
 					testFlags:   []string{fmt.Sprintf("-shard=%d", shard), fmt.Sprintf("-shards=%d", nShards)},
 					runOnHost:   true,
@@ -1179,7 +1168,7 @@ func (t *tester) internalLink() bool {
 	// Internally linking cgo is incomplete on some architectures.
 	// https://golang.org/issue/10373
 	// https://golang.org/issue/14449
-	if goarch == "mips64" || goarch == "mips64le" || goarch == "mips" || goarch == "mipsle" || goarch == "riscv64" {
+	if goarch == "loong64" || goarch == "mips64" || goarch == "mips64le" || goarch == "mips" || goarch == "mipsle" || goarch == "riscv64" {
 		return false
 	}
 	if goos == "aix" {
@@ -1200,7 +1189,7 @@ func (t *tester) internalLinkPIE() bool {
 	}
 	switch goos + "-" + goarch {
 	case "darwin-amd64", "darwin-arm64",
-		"linux-amd64", "linux-arm64", "linux-loong64", "linux-ppc64le",
+		"linux-amd64", "linux-arm64", "linux-ppc64le",
 		"android-arm64",
 		"windows-amd64", "windows-386", "windows-arm":
 		return true
@@ -1689,7 +1678,7 @@ func (t *tester) makeGOROOTUnwritable() (undo func()) {
 func raceDetectorSupported(goos, goarch string) bool {
 	switch goos {
 	case "linux":
-		return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64" || goarch == "s390x" || goarch == "loong64"
+		return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64" || goarch == "s390x"
 	case "darwin":
 		return goarch == "amd64" || goarch == "arm64"
 	case "freebsd", "netbsd", "windows":
diff --git a/src/cmd/distpack/pack.go b/src/cmd/distpack/pack.go
index 27f73e593cf6fb..a4f18da8bd4bc6 100644
--- a/src/cmd/distpack/pack.go
+++ b/src/cmd/distpack/pack.go
@@ -167,12 +167,10 @@ func main() {
 			if !strings.HasPrefix(name, "pkg/tool/"+goosUnderGoarch+"/") {
 				return false
 			}
-			// Inside pkg/tool/$GOOS_$GOARCH, keep only tools needed for build actions.
+			// Inside pkg/tool/$GOOS_$GOARCH, discard helper tools.
 			switch strings.TrimSuffix(path.Base(name), ".exe") {
-			default:
+			case "api", "dist", "distpack", "metadata":
 				return false
-			// Keep in sync with toolsIncludedInDistpack in cmd/dist/build.go.
-			case "asm", "cgo", "compile", "cover", "link", "preprofile", "vet":
 			}
 		}
 		return true
@@ -180,7 +178,6 @@ func main() {
 
 	// Add go and gofmt to bin, using cross-compiled binaries
 	// if this is a cross-compiled distribution.
-	// Keep in sync with binExesIncludedInDistpack in cmd/dist/build.go.
 	binExes := []string{
 		"go",
 		"gofmt",
diff --git a/src/cmd/distpack/test.go b/src/cmd/distpack/test.go
index 7479bd77f55951..4f260cb0dfd636 100644
--- a/src/cmd/distpack/test.go
+++ b/src/cmd/distpack/test.go
@@ -66,8 +66,6 @@ var zipRules = []testRule{
 	{name: "go/pkg/tool/*/compile", goos: "darwin"},
 	{name: "go/pkg/tool/*/compile", goos: "windows", exclude: true},
 	{name: "go/pkg/tool/*/compile.exe", goos: "windows"},
-	{name: "go/pkg/tool/*/pack", exclude: true},
-	{name: "go/pkg/tool/*/pack.exe", exclude: true},
 }
 
 var modRules = []testRule{
@@ -102,8 +100,6 @@ var modRules = []testRule{
 	{name: "golang.org/toolchain@*/pkg/tool/*/compile", goos: "darwin"},
 	{name: "golang.org/toolchain@*/pkg/tool/*/compile", goos: "windows", exclude: true},
 	{name: "golang.org/toolchain@*/pkg/tool/*/compile.exe", goos: "windows"},
-	{name: "golang.org/toolchain@*/pkg/tool/*/pack", exclude: true},
-	{name: "golang.org/toolchain@*/pkg/tool/*/pack.exe", exclude: true},
 
 	// go.mod are renamed to _go.mod.
 	{name: "**/go.mod", exclude: true},
diff --git a/src/cmd/internal/doc/dirs.go b/src/cmd/doc/dirs.go
similarity index 99%
rename from src/cmd/internal/doc/dirs.go
rename to src/cmd/doc/dirs.go
index 8b1670f61c253c..60ad6d30e6a99b 100644
--- a/src/cmd/internal/doc/dirs.go
+++ b/src/cmd/doc/dirs.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package doc
+package main
 
 import (
 	"bytes"
diff --git a/src/cmd/doc/doc.go b/src/cmd/doc/doc.go
deleted file mode 100644
index ac15ad9c7d34b0..00000000000000
--- a/src/cmd/doc/doc.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Doc (usually run as go doc) accepts zero, one or two arguments.
-//
-// Zero arguments:
-//
-//	go doc
-//
-// Show the documentation for the package in the current directory.
-//
-// One argument:
-//
-//	go doc 
-//	go doc [.]
-//	go doc [.][.]
-//	go doc [.][.]
-//
-// The first item in this list that succeeds is the one whose documentation
-// is printed. If there is a symbol but no package, the package in the current
-// directory is chosen. However, if the argument begins with a capital
-// letter it is always assumed to be a symbol in the current directory.
-//
-// Two arguments:
-//
-//	go doc  [.]
-//
-// Show the documentation for the package, symbol, and method or field. The
-// first argument must be a full package path. This is similar to the
-// command-line usage for the godoc command.
-//
-// For commands, unless the -cmd flag is present "go doc command"
-// shows only the package-level docs for the package.
-//
-// The -src flag causes doc to print the full source code for the symbol, such
-// as the body of a struct, function or method.
-//
-// The -all flag causes doc to print all documentation for the package and
-// all its visible symbols. The argument must identify a package.
-//
-// For complete documentation, run "go help doc".
-package main
-
-import (
-	"cmd/internal/doc"
-	"cmd/internal/telemetry/counter"
-	"os"
-)
-
-func main() {
-	counter.Open()
-	counter.Inc("doc/invocations")
-	doc.Main(os.Args[1:])
-}
diff --git a/src/cmd/internal/doc/doc_test.go b/src/cmd/doc/doc_test.go
similarity index 99%
rename from src/cmd/internal/doc/doc_test.go
rename to src/cmd/doc/doc_test.go
index bccace40c0fb54..3b383bdd78e587 100644
--- a/src/cmd/internal/doc/doc_test.go
+++ b/src/cmd/doc/doc_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package doc
+package main
 
 import (
 	"bytes"
@@ -90,7 +90,7 @@ type test struct {
 	no   []string // Regular expressions that should not match.
 }
 
-const p = "cmd/internal/doc/testdata"
+const p = "cmd/doc/testdata"
 
 var tests = []test{
 	// Sanity check.
@@ -105,7 +105,7 @@ var tests = []test{
 	{
 		"package clause",
 		[]string{p},
-		[]string{`package pkg.*cmd/internal/doc/testdata`},
+		[]string{`package pkg.*cmd/doc/testdata`},
 		nil,
 	},
 
diff --git a/src/cmd/internal/doc/main.go b/src/cmd/doc/main.go
similarity index 75%
rename from src/cmd/internal/doc/main.go
rename to src/cmd/doc/main.go
index fe99ee70bd3a48..a199991c21d42e 100644
--- a/src/cmd/internal/doc/main.go
+++ b/src/cmd/doc/main.go
@@ -2,11 +2,49 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package doc provides the implementation of the "go doc" subcommand and cmd/doc.
-package doc
+// Doc (usually run as go doc) accepts zero, one or two arguments.
+//
+// Zero arguments:
+//
+//	go doc
+//
+// Show the documentation for the package in the current directory.
+//
+// One argument:
+//
+//	go doc 
+//	go doc [.]
+//	go doc [.][.]
+//	go doc [.][.]
+//
+// The first item in this list that succeeds is the one whose documentation
+// is printed. If there is a symbol but no package, the package in the current
+// directory is chosen. However, if the argument begins with a capital
+// letter it is always assumed to be a symbol in the current directory.
+//
+// Two arguments:
+//
+//	go doc  [.]
+//
+// Show the documentation for the package, symbol, and method or field. The
+// first argument must be a full package path. This is similar to the
+// command-line usage for the godoc command.
+//
+// For commands, unless the -cmd flag is present "go doc command"
+// shows only the package-level docs for the package.
+//
+// The -src flag causes doc to print the full source code for the symbol, such
+// as the body of a struct, function or method.
+//
+// The -all flag causes doc to print all documentation for the package and
+// all its visible symbols. The argument must identify a package.
+//
+// For complete documentation, run "go help doc".
+package main
 
 import (
 	"bytes"
+	"context"
 	"errors"
 	"flag"
 	"fmt"
@@ -15,13 +53,17 @@ import (
 	"io"
 	"log"
 	"net"
+	"net/http"
 	"os"
 	"os/exec"
 	"os/signal"
 	"path"
 	"path/filepath"
 	"strings"
+	"time"
 
+	"cmd/internal/browser"
+	"cmd/internal/quoted"
 	"cmd/internal/telemetry/counter"
 )
 
@@ -37,7 +79,7 @@ var (
 )
 
 // usage is a replacement usage function for the flags package.
-func usage(flagSet *flag.FlagSet) {
+func usage() {
 	fmt.Fprintf(os.Stderr, "Usage of [go] doc:\n")
 	fmt.Fprintf(os.Stderr, "\tgo doc\n")
 	fmt.Fprintf(os.Stderr, "\tgo doc \n")
@@ -48,17 +90,16 @@ func usage(flagSet *flag.FlagSet) {
 	fmt.Fprintf(os.Stderr, "For more information run\n")
 	fmt.Fprintf(os.Stderr, "\tgo help doc\n\n")
 	fmt.Fprintf(os.Stderr, "Flags:\n")
-	flagSet.PrintDefaults()
+	flag.PrintDefaults()
 	os.Exit(2)
 }
 
-// Main is the entry point, invoked both by go doc and cmd/doc.
-func Main(args []string) {
+func main() {
 	log.SetFlags(0)
 	log.SetPrefix("doc: ")
+	counter.Open()
 	dirsInit()
-	var flagSet flag.FlagSet
-	err := do(os.Stdout, &flagSet, args)
+	err := do(os.Stdout, flag.CommandLine, os.Args[1:])
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -66,7 +107,7 @@ func Main(args []string) {
 
 // do is the workhorse, broken out of main to make testing easier.
 func do(writer io.Writer, flagSet *flag.FlagSet, args []string) (err error) {
-	flagSet.Usage = func() { usage(flagSet) }
+	flagSet.Usage = usage
 	unexported = false
 	matchCase = false
 	flagSet.StringVar(&chdir, "C", "", "change to `dir` before running command")
@@ -78,43 +119,19 @@ func do(writer io.Writer, flagSet *flag.FlagSet, args []string) (err error) {
 	flagSet.BoolVar(&short, "short", false, "one-line representation for each symbol")
 	flagSet.BoolVar(&serveHTTP, "http", false, "serve HTML docs over HTTP")
 	flagSet.Parse(args)
+	counter.Inc("doc/invocations")
 	counter.CountFlags("doc/flag:", *flag.CommandLine)
 	if chdir != "" {
 		if err := os.Chdir(chdir); err != nil {
 			return err
 		}
 	}
-	if serveHTTP {
-		// Special case: if there are no arguments, try to go to an appropriate page
-		// depending on whether we're in a module or workspace. The pkgsite homepage
-		// is often not the most useful page.
-		if len(flagSet.Args()) == 0 {
-			mod, err := runCmd(append(os.Environ(), "GOWORK=off"), "go", "list", "-m")
-			if err == nil && mod != "" && mod != "command-line-arguments" {
-				// If there's a module, go to the module's doc page.
-				return doPkgsite(mod)
-			}
-			gowork, err := runCmd(nil, "go", "env", "GOWORK")
-			if err == nil && gowork != "" {
-				// Outside a module, but in a workspace, go to the home page
-				// with links to each of the modules' pages.
-				return doPkgsite("")
-			}
-			// Outside a module or workspace, go to the documentation for the standard library.
-			return doPkgsite("std")
-		}
-
-		// If args are provided, we need to figure out which page to open on the pkgsite
-		// instance. Run the logic below to determine a match for a symbol, method,
-		// or field, but don't actually print the documentation to the output.
-		writer = io.Discard
-	}
 	var paths []string
 	var symbol, method string
 	// Loop until something is printed.
 	dirs.Reset()
 	for i := 0; ; i++ {
-		buildPackage, userPath, sym, more := parseArgs(flagSet, flagSet.Args())
+		buildPackage, userPath, sym, more := parseArgs(flagSet.Args())
 		if i > 0 && !more { // Ignore the "more" bit on the first iteration.
 			return failMessage(paths, symbol, method)
 		}
@@ -128,7 +145,7 @@ func do(writer io.Writer, flagSet *flag.FlagSet, args []string) (err error) {
 			unexported = true
 		}
 
-		symbol, method = parseSymbol(flagSet, sym)
+		symbol, method = parseSymbol(sym)
 		pkg := parsePackage(writer, buildPackage, userPath)
 		paths = append(paths, pkg.prettyPath())
 
@@ -146,113 +163,74 @@ func do(writer io.Writer, flagSet *flag.FlagSet, args []string) (err error) {
 			panic(e)
 		}()
 
-		var found bool
+		if serveHTTP {
+			return doPkgsite(pkg, symbol, method)
+		}
 		switch {
 		case symbol == "":
 			pkg.packageDoc() // The package exists, so we got some output.
-			found = true
+			return
 		case method == "":
 			if pkg.symbolDoc(symbol) {
-				found = true
+				return
 			}
 		case pkg.printMethodDoc(symbol, method):
-			found = true
+			return
 		case pkg.printFieldDoc(symbol, method):
-			found = true
-		}
-		if found {
-			if serveHTTP {
-				path, err := objectPath(userPath, pkg, symbol, method)
-				if err != nil {
-					return err
-				}
-				return doPkgsite(path)
-			}
-			return nil
+			return
 		}
 	}
 }
 
-func runCmd(env []string, cmdline ...string) (string, error) {
-	var stdout, stderr strings.Builder
-	cmd := exec.Command(cmdline[0], cmdline[1:]...)
-	cmd.Env = env
-	cmd.Stdout = &stdout
-	cmd.Stderr = &stderr
-	if err := cmd.Run(); err != nil {
-		return "", fmt.Errorf("go doc: %s: %v\n%s\n", strings.Join(cmdline, " "), err, stderr.String())
-	}
-	return strings.TrimSpace(stdout.String()), nil
-}
-
-func objectPath(userPath string, pkg *Package, symbol, method string) (string, error) {
-	var err error
-	path := pkg.build.ImportPath
-	if path == "." {
-		// go/build couldn't determine the import path, probably
-		// because this was a relative path into a module. Use
-		// go list to get the import path.
-		path, err = runCmd(nil, "go", "list", userPath)
-		if err != nil {
-			return "", err
-		}
-	}
-
-	object := symbol
-	if symbol != "" && method != "" {
-		object = symbol + "." + method
-	}
-	if object != "" {
-		path = path + "#" + object
-	}
-	return path, nil
-}
+func doPkgsite(pkg *Package, symbol, method string) error {
+	ctx := context.Background()
 
-func doPkgsite(urlPath string) error {
+	cmdline := "go run golang.org/x/pkgsite/cmd/pkgsite@latest -gorepo=" + buildCtx.GOROOT
+	words, err := quoted.Split(cmdline)
 	port, err := pickUnusedPort()
 	if err != nil {
 		return fmt.Errorf("failed to find port for documentation server: %v", err)
 	}
 	addr := fmt.Sprintf("localhost:%d", port)
-	path := path.Join("http://"+addr, urlPath)
-
+	words = append(words, fmt.Sprintf("-http=%s", addr))
+	cmd := exec.CommandContext(context.Background(), words[0], words[1:]...)
+	cmd.Stdout = os.Stderr
+	cmd.Stderr = os.Stderr
 	// Turn off the default signal handler for SIGINT (and SIGQUIT on Unix)
 	// and instead wait for the child process to handle the signal and
 	// exit before exiting ourselves.
 	signal.Ignore(signalsToIgnore...)
 
-	// Prepend the local download cache to GOPROXY to get around deprecation checks.
-	env := os.Environ()
-	vars, err := runCmd(nil, "go", "env", "GOPROXY", "GOMODCACHE")
-	fields := strings.Fields(vars)
-	if err == nil && len(fields) == 2 {
-		goproxy, gomodcache := fields[0], fields[1]
-		goproxy = "file://" + filepath.Join(gomodcache, "cache", "download") + "," + goproxy
-		env = append(env, "GOPROXY="+goproxy)
+	if err := cmd.Start(); err != nil {
+		return fmt.Errorf("starting pkgsite: %v", err)
 	}
 
-	const version = "v0.0.0-20250608123103-82c52f1754cd"
-	cmd := exec.Command("go", "run", "golang.org/x/pkgsite/cmd/internal/doc@"+version,
-		"-gorepo", buildCtx.GOROOT,
-		"-http", addr,
-		"-open", path)
-	cmd.Env = env
-	cmd.Stdout = os.Stderr
-	cmd.Stderr = os.Stderr
+	// Wait for pkgsite to became available.
+	if !waitAvailable(ctx, addr) {
+		cmd.Cancel()
+		cmd.Wait()
+		return errors.New("could not connect to local documentation server")
+	}
 
-	if err := cmd.Run(); err != nil {
-		var ee *exec.ExitError
-		if errors.As(err, &ee) {
-			// Exit with the same exit status as pkgsite to avoid
-			// printing of "exit status" error messages.
-			// Any relevant messages have already been printed
-			// to stdout or stderr.
-			os.Exit(ee.ExitCode())
-		}
-		return err
+	// Open web browser.
+	path := path.Join("http://"+addr, pkg.build.ImportPath)
+	object := symbol
+	if symbol != "" && method != "" {
+		object = symbol + "." + method
+	}
+	if object != "" {
+		path = path + "#" + object
+	}
+	if ok := browser.Open(path); !ok {
+		cmd.Cancel()
+		cmd.Wait()
+		return errors.New("failed to open browser")
 	}
 
-	return nil
+	// Wait for child to terminate. We expect the child process to receive signals from
+	// this terminal and terminate in a timely manner, so this process will terminate
+	// soon after.
+	return cmd.Wait()
 }
 
 // pickUnusedPort finds an unused port by trying to listen on port 0
@@ -271,6 +249,24 @@ func pickUnusedPort() (int, error) {
 	return port, nil
 }
 
+func waitAvailable(ctx context.Context, addr string) bool {
+	ctx, cancel := context.WithTimeout(ctx, 15*time.Second)
+	defer cancel()
+	for ctx.Err() == nil {
+		req, err := http.NewRequestWithContext(ctx, "HEAD", "http://"+addr, nil)
+		if err != nil {
+			log.Println(err)
+			return false
+		}
+		resp, err := http.DefaultClient.Do(req)
+		if err == nil {
+			resp.Body.Close()
+			return true
+		}
+	}
+	return false
+}
+
 // failMessage creates a nicely formatted error message when there is no result to show.
 func failMessage(paths []string, symbol, method string) error {
 	var b bytes.Buffer
@@ -301,7 +297,7 @@ func failMessage(paths []string, symbol, method string) error {
 // and there may be more matches. For example, if the argument
 // is rand.Float64, we must scan both crypto/rand and math/rand
 // to find the symbol, and the first call will return crypto/rand, true.
-func parseArgs(flagSet *flag.FlagSet, args []string) (pkg *build.Package, path, symbol string, more bool) {
+func parseArgs(args []string) (pkg *build.Package, path, symbol string, more bool) {
 	wd, err := os.Getwd()
 	if err != nil {
 		log.Fatal(err)
@@ -319,7 +315,7 @@ func parseArgs(flagSet *flag.FlagSet, args []string) (pkg *build.Package, path,
 	}
 	switch len(args) {
 	default:
-		usage(flagSet)
+		usage()
 	case 1:
 		// Done below.
 	case 2:
@@ -462,7 +458,7 @@ func importDir(dir string) *build.Package {
 // parseSymbol breaks str apart into a symbol and method.
 // Both may be missing or the method may be missing.
 // If present, each must be a valid Go identifier.
-func parseSymbol(flagSet *flag.FlagSet, str string) (symbol, method string) {
+func parseSymbol(str string) (symbol, method string) {
 	if str == "" {
 		return
 	}
@@ -473,7 +469,7 @@ func parseSymbol(flagSet *flag.FlagSet, str string) (symbol, method string) {
 		method = elem[1]
 	default:
 		log.Printf("too many periods in symbol specification")
-		usage(flagSet)
+		usage()
 	}
 	symbol = elem[0]
 	return
diff --git a/src/cmd/internal/doc/pkg.go b/src/cmd/doc/pkg.go
similarity index 99%
rename from src/cmd/internal/doc/pkg.go
rename to src/cmd/doc/pkg.go
index 953b0d9a2840ab..a21d8a46882334 100644
--- a/src/cmd/internal/doc/pkg.go
+++ b/src/cmd/doc/pkg.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package doc
+package main
 
 import (
 	"bufio"
diff --git a/src/cmd/internal/doc/signal_notunix.go b/src/cmd/doc/signal_notunix.go
similarity index 95%
rename from src/cmd/internal/doc/signal_notunix.go
rename to src/cmd/doc/signal_notunix.go
index b91a67eb5fbff0..3b8fa9e080354d 100644
--- a/src/cmd/internal/doc/signal_notunix.go
+++ b/src/cmd/doc/signal_notunix.go
@@ -4,7 +4,7 @@
 
 //go:build plan9 || windows
 
-package doc
+package main
 
 import (
 	"os"
diff --git a/src/cmd/internal/doc/signal_unix.go b/src/cmd/doc/signal_unix.go
similarity index 95%
rename from src/cmd/internal/doc/signal_unix.go
rename to src/cmd/doc/signal_unix.go
index f30612ce9dce45..52431c221b5ba1 100644
--- a/src/cmd/internal/doc/signal_unix.go
+++ b/src/cmd/doc/signal_unix.go
@@ -4,7 +4,7 @@
 
 //go:build unix || js || wasip1
 
-package doc
+package main
 
 import (
 	"os"
diff --git a/src/cmd/internal/doc/testdata/merge/aa.go b/src/cmd/doc/testdata/merge/aa.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/merge/aa.go
rename to src/cmd/doc/testdata/merge/aa.go
diff --git a/src/cmd/internal/doc/testdata/merge/bb.go b/src/cmd/doc/testdata/merge/bb.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/merge/bb.go
rename to src/cmd/doc/testdata/merge/bb.go
diff --git a/src/cmd/internal/doc/testdata/nested/empty/empty.go b/src/cmd/doc/testdata/nested/empty/empty.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/nested/empty/empty.go
rename to src/cmd/doc/testdata/nested/empty/empty.go
diff --git a/src/cmd/internal/doc/testdata/nested/ignore.go b/src/cmd/doc/testdata/nested/ignore.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/nested/ignore.go
rename to src/cmd/doc/testdata/nested/ignore.go
diff --git a/src/cmd/internal/doc/testdata/nested/nested/real.go b/src/cmd/doc/testdata/nested/nested/real.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/nested/nested/real.go
rename to src/cmd/doc/testdata/nested/nested/real.go
diff --git a/src/cmd/internal/doc/testdata/pkg.go b/src/cmd/doc/testdata/pkg.go
similarity index 100%
rename from src/cmd/internal/doc/testdata/pkg.go
rename to src/cmd/doc/testdata/pkg.go
diff --git a/src/cmd/go.mod b/src/cmd/go.mod
index 5624b81cc51bac..f541c6182de772 100644
--- a/src/cmd/go.mod
+++ b/src/cmd/go.mod
@@ -4,18 +4,18 @@ go 1.25
 
 require (
 	github.com/google/pprof v0.0.0-20250208200701-d0013a598941
-	golang.org/x/arch v0.18.1-0.20250605182141-b2f4e2807dec
-	golang.org/x/build v0.0.0-20250606033421-8c8ff6f34a83
-	golang.org/x/mod v0.25.0
-	golang.org/x/sync v0.15.0
-	golang.org/x/sys v0.33.0
-	golang.org/x/telemetry v0.0.0-20250606142133-60998feb31a8
-	golang.org/x/term v0.32.0
-	golang.org/x/tools v0.34.0
+	golang.org/x/arch v0.14.0
+	golang.org/x/build v0.0.0-20250211223606-a5e3f75caa63
+	golang.org/x/mod v0.24.0
+	golang.org/x/sync v0.12.0
+	golang.org/x/sys v0.31.0
+	golang.org/x/telemetry v0.0.0-20250212145848-75305293b65a
+	golang.org/x/term v0.29.0
+	golang.org/x/tools v0.31.1-0.20250328151535-a857356d5cc5
 )
 
 require (
 	github.com/ianlancetaylor/demangle v0.0.0-20240912202439-0a2b6291aafd // indirect
-	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/text v0.22.0 // indirect
 	rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef // indirect
 )
diff --git a/src/cmd/go.sum b/src/cmd/go.sum
index d5d1553e5b7829..1a01abb60ef228 100644
--- a/src/cmd/go.sum
+++ b/src/cmd/go.sum
@@ -6,23 +6,23 @@ github.com/ianlancetaylor/demangle v0.0.0-20240912202439-0a2b6291aafd h1:EVX1s+X
 github.com/ianlancetaylor/demangle v0.0.0-20240912202439-0a2b6291aafd/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
 github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=
 github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-golang.org/x/arch v0.18.1-0.20250605182141-b2f4e2807dec h1:fCOjXc18tBlkVy4m+VuL1WU8VTukYOGtAk7nC5QYPRY=
-golang.org/x/arch v0.18.1-0.20250605182141-b2f4e2807dec/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
-golang.org/x/build v0.0.0-20250606033421-8c8ff6f34a83 h1:IiFSc399rOkpudtnsTDKdtfFEsvd+dGfNfl+ytV267c=
-golang.org/x/build v0.0.0-20250606033421-8c8ff6f34a83/go.mod h1:SDzKvZFXqZyl3tLink1AnKsAocWm0yFc3UfmxR6aIOw=
-golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
-golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/telemetry v0.0.0-20250606142133-60998feb31a8 h1:jBJ3nsFeGb1DzjhOg2ZgZTpnDnOZfHId7RNlBJUtkOM=
-golang.org/x/telemetry v0.0.0-20250606142133-60998feb31a8/go.mod h1:mUcjA5g0luJpMYCLjhH91f4t4RAUNp+zq9ZmUoqPD7M=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
-golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
-golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
+golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4=
+golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
+golang.org/x/build v0.0.0-20250211223606-a5e3f75caa63 h1:QZ8/V1B4oK7N5t6w0zX5dAxFIHt0WaTX+r1z29cWXjY=
+golang.org/x/build v0.0.0-20250211223606-a5e3f75caa63/go.mod h1:JhINjMoWj8G2oLkaBLNDBIr/GLqJNOkCr4XzFWWYCf4=
+golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
+golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/telemetry v0.0.0-20250212145848-75305293b65a h1:3fgycqG+90xOafOruMBVZXa8DUeOt5qbGLjQoNvZ8Ew=
+golang.org/x/telemetry v0.0.0-20250212145848-75305293b65a/go.mod h1:Ng+6E7PnWNge4EifZkPKeQUnm5iyAoH8qQgw3pLCiF4=
+golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
+golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/tools v0.31.1-0.20250328151535-a857356d5cc5 h1:noURjvaY1txrDU1W+7n5WHPVZdcKoMi7KAak9zwwbL0=
+golang.org/x/tools v0.31.1-0.20250328151535-a857356d5cc5/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
 rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef h1:mqLYrXCXYEZOop9/Dbo6RPX11539nwiCNBb1icVPmw8=
 rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef/go.mod h1:8xcPgWmwlZONN1D9bjxtHEjrUtSEa3fakVF8iaewYKQ=
diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go
index e8034bf5d17a2e..e40d981bd44dc0 100644
--- a/src/cmd/go/alldocs.go
+++ b/src/cmd/go/alldocs.go
@@ -1071,8 +1071,8 @@
 //
 // The -retracted flag causes list to report information about retracted
 // module versions. When -retracted is used with -f or -json, the Retracted
-// field explains why the version was retracted.
-// The strings are taken from comments on the retract directive in the
+// field will be set to a string explaining why the version was retracted.
+// The string is taken from comments on the retract directive in the
 // module's go.mod file. When -retracted is used with -versions, retracted
 // versions are listed together with unretracted versions. The -retracted
 // flag may be used with or without -m.
@@ -1259,13 +1259,9 @@
 // The -tool=path and -droptool=path flags add and drop a tool declaration
 // for the given path.
 //
-// The -ignore=path and -dropignore=path flags add and drop a ignore declaration
-// for the given path.
-//
 // The -godebug, -dropgodebug, -require, -droprequire, -exclude, -dropexclude,
-// -replace, -dropreplace, -retract, -dropretract, -tool, -droptool, -ignore,
-// and -dropignore editing flags may be repeated, and the changes are applied
-// in the order given.
+// -replace, -dropreplace, -retract, -dropretract, -tool, and -droptool editing
+// flags may be repeated, and the changes are applied in the order given.
 //
 // The -print flag prints the final go.mod in its text format instead of
 // writing it back to go.mod.
@@ -1320,10 +1316,6 @@
 //		Path string
 //	}
 //
-//	type Ignore struct {
-//		Path string
-//	}
-//
 // Retract entries representing a single version (not an interval) will have
 // the "Low" and "High" fields set to the same value.
 //
@@ -1975,7 +1967,7 @@
 //
 // Usage:
 //
-//	go version [-m] [-v] [-json] [file ...]
+//	go version [-m] [-v] [file ...]
 //
 // Version prints the build information for Go binary files.
 //
@@ -1994,9 +1986,6 @@
 // information consists of multiple lines following the version line, each
 // indented by a leading tab character.
 //
-// The -json flag is similar to -m but outputs the runtime/debug.BuildInfo in JSON format.
-// If flag -json is specified without -m, go version reports an error.
-//
 // See also: go doc runtime/debug.BuildInfo.
 //
 // # Report likely mistakes in packages
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index 3e691abe41f702..83323aeaad0e75 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -1093,10 +1093,10 @@ func TestGoListTest(t *testing.T) {
 	tg.grepStdoutNot(`^testing \[bytes.test\]$`, "unexpected test copy of testing")
 	tg.grepStdoutNot(`^testing$`, "unexpected real copy of testing")
 
-	tg.run("list", "-test", "cmd/buildid", "cmd/gofmt")
+	tg.run("list", "-test", "cmd/buildid", "cmd/doc")
 	tg.grepStdout(`^cmd/buildid$`, "missing cmd/buildid")
-	tg.grepStdout(`^cmd/gofmt$`, "missing cmd/gofmt")
-	tg.grepStdout(`^cmd/gofmt\.test$`, "missing cmd/gofmt test")
+	tg.grepStdout(`^cmd/doc$`, "missing cmd/doc")
+	tg.grepStdout(`^cmd/doc\.test$`, "missing cmd/doc test")
 	tg.grepStdoutNot(`^cmd/buildid\.test$`, "unexpected cmd/buildid test")
 	tg.grepStdoutNot(`^testing`, "unexpected testing")
 
diff --git a/src/cmd/go/internal/base/base.go b/src/cmd/go/internal/base/base.go
index 83cbad401e2c83..a2c95fb52f25cb 100644
--- a/src/cmd/go/internal/base/base.go
+++ b/src/cmd/go/internal/base/base.go
@@ -191,28 +191,20 @@ func GetExitStatus() int {
 // connected to the go command's own stdout and stderr.
 // If the command fails, Run reports the error using Errorf.
 func Run(cmdargs ...any) {
-	if err := RunErr(cmdargs...); err != nil {
-		Errorf("%v", err)
-	}
-}
-
-// Run runs the command, with stdout and stderr
-// connected to the go command's own stdout and stderr.
-// If the command fails, RunErr returns the error, which
-// may be an *exec.ExitError.
-func RunErr(cmdargs ...any) error {
 	cmdline := str.StringList(cmdargs...)
 	if cfg.BuildN || cfg.BuildX {
 		fmt.Printf("%s\n", strings.Join(cmdline, " "))
 		if cfg.BuildN {
-			return nil
+			return
 		}
 	}
 
 	cmd := exec.Command(cmdline[0], cmdline[1:]...)
 	cmd.Stdout = os.Stdout
 	cmd.Stderr = os.Stderr
-	return cmd.Run()
+	if err := cmd.Run(); err != nil {
+		Errorf("%v", err)
+	}
 }
 
 // RunStdin is like run but connects Stdin. It retries if it encounters an ETXTBSY.
diff --git a/src/cmd/go/internal/base/tool.go b/src/cmd/go/internal/base/tool.go
index f2fc0ff7435f86..1d864aa2cc0068 100644
--- a/src/cmd/go/internal/base/tool.go
+++ b/src/cmd/go/internal/base/tool.go
@@ -30,7 +30,7 @@ func Tool(toolName string) string {
 // ToolPath returns the path at which we expect to find the named tool
 // (for example, "vet"), and the error (if any) from statting that path.
 func ToolPath(toolName string) (string, error) {
-	if !ValidToolName(toolName) {
+	if !validToolName(toolName) {
 		return "", fmt.Errorf("bad tool name: %q", toolName)
 	}
 	toolPath := filepath.Join(build.ToolDir, toolName) + cfg.ToolExeSuffix()
@@ -41,7 +41,7 @@ func ToolPath(toolName string) (string, error) {
 	return toolPath, err
 }
 
-func ValidToolName(toolName string) bool {
+func validToolName(toolName string) bool {
 	for _, c := range toolName {
 		switch {
 		case 'a' <= c && c <= 'z', '0' <= c && c <= '9', c == '_':
diff --git a/src/cmd/go/internal/bug/bug.go b/src/cmd/go/internal/bug/bug.go
index 4ff45d2d888c96..d3f9065d3da4e5 100644
--- a/src/cmd/go/internal/bug/bug.go
+++ b/src/cmd/go/internal/bug/bug.go
@@ -69,7 +69,7 @@ const bugFooter = `### What did you do?
 
 
 
diff --git a/src/cmd/go/internal/cache/default.go b/src/cmd/go/internal/cache/default.go
index cc4e0517b4a12d..b2dd69edc539a2 100644
--- a/src/cmd/go/internal/cache/default.go
+++ b/src/cmd/go/internal/cache/default.go
@@ -28,7 +28,7 @@ var initDefaultCacheOnce = sync.OnceValue(initDefaultCache)
 const cacheREADME = `This directory holds cached build artifacts from the Go build system.
 Run "go clean -cache" if the directory is getting too large.
 Run "go clean -fuzzcache" to delete the fuzz cache.
-See go.dev to learn more about Go.
+See golang.org to learn more about Go.
 `
 
 // initDefaultCache does the work of finding the default cache
diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go
index a4edd854f1d35a..3b9f27e91d517e 100644
--- a/src/cmd/go/internal/cfg/cfg.go
+++ b/src/cmd/go/internal/cfg/cfg.go
@@ -13,7 +13,6 @@ import (
 	"go/build"
 	"internal/buildcfg"
 	"internal/cfg"
-	"internal/platform"
 	"io"
 	"io/fs"
 	"os"
@@ -141,12 +140,10 @@ func defaultContext() build.Context {
 	// Recreate that logic here with the new GOOS/GOARCH setting.
 	// We need to run steps 2 and 3 to determine what the default value
 	// of CgoEnabled would be for computing CGOChanged.
-	defaultCgoEnabled := false
-	if buildcfg.DefaultCGO_ENABLED == "1" {
-		defaultCgoEnabled = true
-	} else if buildcfg.DefaultCGO_ENABLED == "0" {
-	} else if runtime.GOARCH == ctxt.GOARCH && runtime.GOOS == ctxt.GOOS {
-		defaultCgoEnabled = platform.CgoSupported(ctxt.GOOS, ctxt.GOARCH)
+	defaultCgoEnabled := ctxt.CgoEnabled
+	if ctxt.GOOS != runtime.GOOS || ctxt.GOARCH != runtime.GOARCH {
+		defaultCgoEnabled = false
+	} else {
 		// Use built-in default cgo setting for GOOS/GOARCH.
 		// Note that ctxt.GOOS/GOARCH are derived from the preference list
 		// (1) environment, (2) go/env file, (3) runtime constants,
@@ -207,34 +204,6 @@ func init() {
 	SetGOROOT(Getenv("GOROOT"), false)
 }
 
-// ForceHost forces GOOS and GOARCH to runtime.GOOS and runtime.GOARCH.
-// This is used by go tool to build tools for the go command's own
-// GOOS and GOARCH.
-func ForceHost() {
-	Goos = runtime.GOOS
-	Goarch = runtime.GOARCH
-	ExeSuffix = exeSuffix()
-	GO386 = buildcfg.DefaultGO386
-	GOAMD64 = buildcfg.DefaultGOAMD64
-	GOARM = buildcfg.DefaultGOARM
-	GOARM64 = buildcfg.DefaultGOARM64
-	GOMIPS = buildcfg.DefaultGOMIPS
-	GOMIPS64 = buildcfg.DefaultGOMIPS64
-	GOPPC64 = buildcfg.DefaultGOPPC64
-	GORISCV64 = buildcfg.DefaultGORISCV64
-	GOWASM = ""
-
-	// Recompute the build context using Goos and Goarch to
-	// set the correct value for ctx.CgoEnabled.
-	BuildContext = defaultContext()
-	// Call SetGOROOT to properly set the GOROOT on the new context.
-	SetGOROOT(Getenv("GOROOT"), false)
-	// Recompute experiments: the settings determined depend on GOOS and GOARCH.
-	// This will also update the BuildContext's tool tags to include the new
-	// experiment tags.
-	computeExperiment()
-}
-
 // SetGOROOT sets GOROOT and associated variables to the given values.
 //
 // If isTestGo is true, build.ToolDir is set based on the TESTGO_GOHOSTOS and
@@ -297,10 +266,6 @@ var (
 )
 
 func init() {
-	computeExperiment()
-}
-
-func computeExperiment() {
 	Experiment, ExperimentErr = buildcfg.ParseGOEXPERIMENT(Goos, Goarch, RawGOEXPERIMENT)
 	if ExperimentErr != nil {
 		return
diff --git a/src/cmd/go/internal/doc/doc.go b/src/cmd/go/internal/doc/doc.go
index 131da814951d0f..3b6cd94799ada3 100644
--- a/src/cmd/go/internal/doc/doc.go
+++ b/src/cmd/go/internal/doc/doc.go
@@ -2,14 +2,12 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !cmd_go_bootstrap
-
 // Package doc implements the “go doc” command.
 package doc
 
 import (
 	"cmd/go/internal/base"
-	"cmd/internal/doc"
+	"cmd/go/internal/cfg"
 	"context"
 )
 
@@ -132,5 +130,5 @@ Flags:
 }
 
 func runDoc(ctx context.Context, cmd *base.Command, args []string) {
-	doc.Main(args)
+	base.Run(cfg.BuildToolexec, base.Tool("doc"), args)
 }
diff --git a/src/cmd/go/internal/doc/doc_bootstrap.go b/src/cmd/go/internal/doc/doc_bootstrap.go
deleted file mode 100644
index 8be95dc9a60a80..00000000000000
--- a/src/cmd/go/internal/doc/doc_bootstrap.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2025 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.
-
-//go:build cmd_go_bootstrap
-
-// Don't build cmd/doc into go_bootstrap because it depends on net.
-
-package doc
-
-import "cmd/go/internal/base"
-
-var CmdDoc = &base.Command{}
diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go
index 6ad6954dd52125..b60e2adbe51611 100644
--- a/src/cmd/go/internal/envcmd/env.go
+++ b/src/cmd/go/internal/envcmd/env.go
@@ -142,7 +142,7 @@ func MkEnv() []cfg.EnvVar {
 	if work.GccgoBin != "" {
 		env = append(env, cfg.EnvVar{Name: "GCCGO", Value: work.GccgoBin, Changed: true})
 	} else {
-		env = append(env, cfg.EnvVar{Name: "GCCGO", Value: work.GccgoName, Changed: work.GccgoChanged})
+		env = append(env, cfg.EnvVar{Name: "GCCGO", Value: work.GccgoName})
 	}
 
 	goarch, val, changed := cfg.GetArchEnv()
diff --git a/src/cmd/go/internal/fips140/fips140.go b/src/cmd/go/internal/fips140/fips140.go
index 7ca0cde5880eed..328e06088e3d47 100644
--- a/src/cmd/go/internal/fips140/fips140.go
+++ b/src/cmd/go/internal/fips140/fips140.go
@@ -114,11 +114,7 @@ func Init() {
 		fsys.Bind(Dir(), filepath.Join(cfg.GOROOT, "src/crypto/internal/fips140"))
 	}
 
-	// ExperimentErr != nil if GOEXPERIMENT failed to parse. Typically
-	// cmd/go main will exit in this case, but it is allowed during
-	// toolchain selection, as the GOEXPERIMENT may be valid for the
-	// selected toolchain version.
-	if cfg.ExperimentErr == nil && cfg.Experiment.BoringCrypto && Enabled() {
+	if cfg.Experiment.BoringCrypto && Enabled() {
 		base.Fatalf("go: cannot use GOFIPS140 with GOEXPERIMENT=boringcrypto")
 	}
 }
diff --git a/src/cmd/go/internal/fix/fix.go b/src/cmd/go/internal/fix/fix.go
index 8947da05c3ee63..28ad58daf5f44d 100644
--- a/src/cmd/go/internal/fix/fix.go
+++ b/src/cmd/go/internal/fix/fix.go
@@ -16,7 +16,6 @@ import (
 	"fmt"
 	"go/build"
 	"os"
-	"path/filepath"
 )
 
 var CmdFix = &base.Command{
@@ -81,6 +80,6 @@ func runFix(ctx context.Context, cmd *base.Command, args []string) {
 		if *fixes != "" {
 			fixArg = []string{"-r=" + *fixes}
 		}
-		base.Run(str.StringList(cfg.BuildToolexec, filepath.Join(cfg.GOROOTbin, "go"), "tool", "fix", "-go="+goVersion, fixArg, files))
+		base.Run(str.StringList(cfg.BuildToolexec, base.Tool("fix"), "-go="+goVersion, fixArg, files))
 	}
 }
diff --git a/src/cmd/go/internal/generate/generate_test.go b/src/cmd/go/internal/generate/generate_test.go
index 2eef917e7e2758..90e6a1f5528730 100644
--- a/src/cmd/go/internal/generate/generate_test.go
+++ b/src/cmd/go/internal/generate/generate_test.go
@@ -218,7 +218,7 @@ var splitTestsLines = []splitTestWithLine{
 	{"TEST2 ''", []string{"44", "''"}, 44},
 }
 
-// TestGenerateCommandShortHand2 - similar to TestGenerateCommandParse,
+// TestGenerateCommandShortHand - similar to TestGenerateCommandParse,
 // except:
 //  1. if the result starts with -command, record that shorthand
 //     before moving on to the next test.
diff --git a/src/cmd/go/internal/list/list.go b/src/cmd/go/internal/list/list.go
index 86a6b1792c5016..d6cba5a4e0640f 100644
--- a/src/cmd/go/internal/list/list.go
+++ b/src/cmd/go/internal/list/list.go
@@ -300,8 +300,8 @@ space-separated version list.
 
 The -retracted flag causes list to report information about retracted
 module versions. When -retracted is used with -f or -json, the Retracted
-field explains why the version was retracted.
-The strings are taken from comments on the retract directive in the
+field will be set to a string explaining why the version was retracted.
+The string is taken from comments on the retract directive in the
 module's go.mod file. When -retracted is used with -versions, retracted
 versions are listed together with unretracted versions. The -retracted
 flag may be used with or without -m.
@@ -930,7 +930,7 @@ func collectDeps(p *load.Package) {
 	sort.Strings(p.Deps)
 }
 
-// collectDepsErrors populates p.DepsErrors by iterating over p.Internal.Imports.
+// collectDeps populates p.DepsErrors by iterating over p.Internal.Imports.
 // collectDepsErrors must be called on all of p's Imports before being called on p.
 func collectDepsErrors(p *load.Package) {
 	depsErrors := make(map[*load.PackageError]bool)
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index e913f9885234fd..f11c2d9bed04ff 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -2227,20 +2227,12 @@ func resolveEmbed(pkgdir string, patterns []string) (files []string, pmap map[st
 					rel := filepath.ToSlash(str.TrimFilePathPrefix(path, pkgdir))
 					name := d.Name()
 					if path != file && (isBadEmbedName(name) || ((name[0] == '.' || name[0] == '_') && !all)) {
-						// Avoid hidden files that user may not know about.
+						// Ignore bad names, assuming they won't go into modules.
+						// Also avoid hidden files that user may not know about.
 						// See golang.org/issue/42328.
 						if d.IsDir() {
 							return fs.SkipDir
 						}
-						// Ignore hidden files.
-						if name[0] == '.' || name[0] == '_' {
-							return nil
-						}
-						// Error on bad embed names.
-						// See golang.org/issue/54003.
-						if isBadEmbedName(name) {
-							return fmt.Errorf("cannot embed file %s: invalid name %s", rel, name)
-						}
 						return nil
 					}
 					if d.IsDir() {
@@ -2927,7 +2919,8 @@ func PackagesAndErrors(ctx context.Context, opts PackageOpts, patterns []string)
 		}
 		matches, _ = modload.LoadPackages(ctx, modOpts, patterns...)
 	} else {
-		matches = search.ImportPaths(patterns)
+		noModRoots := []string{}
+		matches = search.ImportPaths(patterns, noModRoots)
 	}
 
 	var (
@@ -3388,7 +3381,6 @@ func PackagesAndErrorsOutsideModule(ctx context.Context, opts PackageOpts, args
 			patterns[i] = p
 		}
 	}
-	patterns = search.CleanPatterns(patterns)
 
 	// Query the module providing the first argument, load its go.mod file, and
 	// check that it doesn't contain directives that would cause it to be
diff --git a/src/cmd/go/internal/modcmd/edit.go b/src/cmd/go/internal/modcmd/edit.go
index f73269378a11e1..ba3d6ed2997e97 100644
--- a/src/cmd/go/internal/modcmd/edit.go
+++ b/src/cmd/go/internal/modcmd/edit.go
@@ -90,13 +90,9 @@ like "v1.2.3" or a closed interval like "[v1.1.0,v1.1.9]". Note that
 The -tool=path and -droptool=path flags add and drop a tool declaration
 for the given path.
 
-The -ignore=path and -dropignore=path flags add and drop a ignore declaration
-for the given path.
-
 The -godebug, -dropgodebug, -require, -droprequire, -exclude, -dropexclude,
--replace, -dropreplace, -retract, -dropretract, -tool, -droptool, -ignore,
-and -dropignore editing flags may be repeated, and the changes are applied
-in the order given.
+-replace, -dropreplace, -retract, -dropretract, -tool, and -droptool editing
+flags may be repeated, and the changes are applied in the order given.
 
 The -print flag prints the final go.mod in its text format instead of
 writing it back to go.mod.
@@ -151,10 +147,6 @@ writing it back to go.mod. The JSON output corresponds to these Go types:
 		Path string
 	}
 
-	type Ignore struct {
-		Path string
-	}
-
 Retract entries representing a single version (not an interval) will have
 the "Low" and "High" fields set to the same value.
 
@@ -198,8 +190,6 @@ func init() {
 	cmdEdit.Flag.Var(flagFunc(flagDropRetract), "dropretract", "")
 	cmdEdit.Flag.Var(flagFunc(flagTool), "tool", "")
 	cmdEdit.Flag.Var(flagFunc(flagDropTool), "droptool", "")
-	cmdEdit.Flag.Var(flagFunc(flagIgnore), "ignore", "")
-	cmdEdit.Flag.Var(flagFunc(flagDropIgnore), "dropignore", "")
 
 	base.AddBuildFlagsNX(&cmdEdit.Flag)
 	base.AddChdirFlag(&cmdEdit.Flag)
@@ -556,24 +546,6 @@ func flagDropTool(arg string) {
 	})
 }
 
-// flagIgnore implements the -ignore flag.
-func flagIgnore(arg string) {
-	edits = append(edits, func(f *modfile.File) {
-		if err := f.AddIgnore(arg); err != nil {
-			base.Fatalf("go: -ignore=%s: %v", arg, err)
-		}
-	})
-}
-
-// flagDropIgnore implements the -dropignore flag.
-func flagDropIgnore(arg string) {
-	edits = append(edits, func(f *modfile.File) {
-		if err := f.DropIgnore(arg); err != nil {
-			base.Fatalf("go: -dropignore=%s: %v", arg, err)
-		}
-	})
-}
-
 // fileJSON is the -json output data structure.
 type fileJSON struct {
 	Module    editModuleJSON
@@ -584,7 +556,6 @@ type fileJSON struct {
 	Replace   []replaceJSON
 	Retract   []retractJSON
 	Tool      []toolJSON
-	Ignore    []ignoreJSON
 }
 
 type editModuleJSON struct {
@@ -613,10 +584,6 @@ type toolJSON struct {
 	Path string
 }
 
-type ignoreJSON struct {
-	Path string
-}
-
 // editPrintJSON prints the -json output.
 func editPrintJSON(modFile *modfile.File) {
 	var f fileJSON
@@ -647,9 +614,6 @@ func editPrintJSON(modFile *modfile.File) {
 	for _, t := range modFile.Tool {
 		f.Tool = append(f.Tool, toolJSON{t.Path})
 	}
-	for _, i := range modFile.Ignore {
-		f.Ignore = append(f.Ignore, ignoreJSON{i.Path})
-	}
 	data, err := json.MarshalIndent(&f, "", "\t")
 	if err != nil {
 		base.Fatalf("go: internal error: %v", err)
diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go
index b445ac24862202..dfb366788967f7 100644
--- a/src/cmd/go/internal/modfetch/codehost/git.go
+++ b/src/cmd/go/internal/modfetch/codehost/git.go
@@ -59,7 +59,6 @@ func newGitRepo(ctx context.Context, remote string, local bool) (Repo, error) {
 		}
 		r.dir = remote
 		r.mu.Path = r.dir + ".lock"
-		r.sha256Hashes = r.checkConfigSHA256(ctx)
 		return r, nil
 	}
 	// This is a remote path lookup.
@@ -82,20 +81,7 @@ func newGitRepo(ctx context.Context, remote string, local bool) (Repo, error) {
 	defer unlock()
 
 	if _, err := os.Stat(filepath.Join(r.dir, "objects")); err != nil {
-		repoSha256Hash := false
-		if refs, lrErr := r.loadRefs(ctx); lrErr == nil {
-			// Check any ref's hash, it doesn't matter which; they won't be mixed
-			// between sha1 and sha256 for the moment.
-			for _, refHash := range refs {
-				repoSha256Hash = len(refHash) == (256 / 4)
-				break
-			}
-		}
-		objFormatFlag := []string{}
-		if repoSha256Hash {
-			objFormatFlag = []string{"--object-format=sha256"}
-		}
-		if _, err := Run(ctx, r.dir, "git", "init", "--bare", objFormatFlag); err != nil {
+		if _, err := Run(ctx, r.dir, "git", "init", "--bare"); err != nil {
 			os.RemoveAll(r.dir)
 			return nil, err
 		}
@@ -123,7 +109,6 @@ func newGitRepo(ctx context.Context, remote string, local bool) (Repo, error) {
 			}
 		}
 	}
-	r.sha256Hashes = r.checkConfigSHA256(ctx)
 	r.remoteURL = r.remote
 	r.remote = "origin"
 	return r, nil
@@ -136,9 +121,6 @@ type gitRepo struct {
 	local             bool // local only lookups; no remote fetches
 	dir               string
 
-	// Repo uses the SHA256 for hashes, so expect the hashes to be 256/4 == 64-bytes in hex.
-	sha256Hashes bool
-
 	mu lockedfile.Mutex // protects fetchLevel and git repo state
 
 	fetchLevel int
@@ -404,32 +386,6 @@ func (r *gitRepo) findRef(ctx context.Context, hash string) (ref string, ok bool
 	return "", false
 }
 
-func (r *gitRepo) checkConfigSHA256(ctx context.Context) bool {
-	if hashType, sha256CfgErr := r.runGit(ctx, "git", "config", "extensions.objectformat"); sha256CfgErr == nil {
-		return "sha256" == strings.TrimSpace(string(hashType))
-	}
-	return false
-}
-
-func (r *gitRepo) hexHashLen() int {
-	if !r.sha256Hashes {
-		return 160 / 4
-	}
-	return 256 / 4
-}
-
-// shortenObjectHash shortens a SHA1 or SHA256 hash (40 or 64 hex digits) to
-// the canonical length used in pseudo-versions (12 hex digits).
-func (r *gitRepo) shortenObjectHash(rev string) string {
-	if !r.sha256Hashes {
-		return ShortenSHA1(rev)
-	}
-	if AllHex(rev) && len(rev) == 256/4 {
-		return rev[:12]
-	}
-	return rev
-}
-
 // minHashDigits is the minimum number of digits to require
 // before accepting a hex digit sequence as potentially identifying
 // a specific commit in a git repo. (Of course, users can always
@@ -443,7 +399,7 @@ const minHashDigits = 7
 func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err error) {
 	// Fast path: maybe rev is a hash we already have locally.
 	didStatLocal := false
-	if len(rev) >= minHashDigits && len(rev) <= r.hexHashLen() && AllHex(rev) {
+	if len(rev) >= minHashDigits && len(rev) <= 40 && AllHex(rev) {
 		if info, err := r.statLocal(ctx, rev, rev); err == nil {
 			return info, nil
 		}
@@ -459,8 +415,7 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro
 
 	// Maybe rev is the name of a tag or branch on the remote server.
 	// Or maybe it's the prefix of a hash of a named ref.
-	// Try to resolve to both a ref (git name) and full (40-hex-digit for
-	// sha1 64 for sha256) commit hash.
+	// Try to resolve to both a ref (git name) and full (40-hex-digit) commit hash.
 	refs, err := r.loadRefs(ctx)
 	if err != nil {
 		return nil, err
@@ -481,7 +436,7 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro
 		ref = "HEAD"
 		hash = refs[ref]
 		rev = hash // Replace rev, because meaning of HEAD can change.
-	} else if len(rev) >= minHashDigits && len(rev) <= r.hexHashLen() && AllHex(rev) {
+	} else if len(rev) >= minHashDigits && len(rev) <= 40 && AllHex(rev) {
 		// At the least, we have a hash prefix we can look up after the fetch below.
 		// Maybe we can map it to a full hash using the known refs.
 		prefix := rev
@@ -500,7 +455,7 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro
 				hash = h
 			}
 		}
-		if hash == "" && len(rev) == r.hexHashLen() { // Didn't find a ref, but rev is a full hash.
+		if hash == "" && len(rev) == 40 { // Didn't find a ref, but rev is a full hash.
 			hash = rev
 		}
 	} else {
@@ -676,7 +631,7 @@ func (r *gitRepo) statLocal(ctx context.Context, version, rev string) (*RevInfo,
 			Hash: hash,
 		},
 		Name:    hash,
-		Short:   r.shortenObjectHash(hash),
+		Short:   ShortenSHA1(hash),
 		Time:    time.Unix(t, 0).UTC(),
 		Version: hash,
 	}
diff --git a/src/cmd/go/internal/modfetch/codehost/git_test.go b/src/cmd/go/internal/modfetch/codehost/git_test.go
index e8884abdfedb60..eb06d3d7a9af5b 100644
--- a/src/cmd/go/internal/modfetch/codehost/git_test.go
+++ b/src/cmd/go/internal/modfetch/codehost/git_test.go
@@ -33,7 +33,7 @@ func TestMain(m *testing.M) {
 	}
 }
 
-var gitrepo1, gitsha256repo, hgrepo1, vgotest1 string
+var gitrepo1, hgrepo1, vgotest1 string
 
 var altRepos = func() []string {
 	return []string{
@@ -69,7 +69,6 @@ func localGitURL(t testing.TB) string {
 		}
 		repo := gitRepo{dir: localGitRepo}
 		_, localGitURLErr = repo.runGit(context.Background(), "git", "config", "daemon.uploadarch", "true")
-		// TODO(david.finkel): do the same with the git repo using sha256 object hashes
 	})
 
 	if localGitURLErr != nil {
@@ -104,7 +103,6 @@ func testMain(m *testing.M) (err error) {
 	}()
 
 	gitrepo1 = srv.HTTP.URL + "/git/gitrepo1"
-	gitsha256repo = srv.HTTP.URL + "/git/gitrepo-sha256"
 	hgrepo1 = srv.HTTP.URL + "/hg/hgrepo1"
 	vgotest1 = srv.HTTP.URL + "/git/vgotest1"
 
@@ -241,29 +239,6 @@ func TestTags(t *testing.T) {
 			{"v1.2.4-annotated", "ede458df7cd0fdca520df19a33158086a8a68e81"},
 		}},
 		{gitrepo1, "2", []Tag{}},
-		{gitsha256repo, "xxx", []Tag{}},
-		{gitsha256repo, "", []Tag{
-			{"v1.2.3", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.2.4-annotated", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.3.0", "a9157cad2aa6dc2f78aa31fced5887f04e758afa8703f04d0178702ebf04ee17"},
-			{"v2.0.1", "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09"},
-			{"v2.0.2", "1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82"},
-			{"v2.3", "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09"},
-		}},
-		{gitsha256repo, "v", []Tag{
-			{"v1.2.3", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.2.4-annotated", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.3.0", "a9157cad2aa6dc2f78aa31fced5887f04e758afa8703f04d0178702ebf04ee17"},
-			{"v2.0.1", "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09"},
-			{"v2.0.2", "1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82"},
-			{"v2.3", "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09"},
-		}},
-		{gitsha256repo, "v1", []Tag{
-			{"v1.2.3", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.2.4-annotated", "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c"},
-			{"v1.3.0", "a9157cad2aa6dc2f78aa31fced5887f04e758afa8703f04d0178702ebf04ee17"},
-		}},
-		{gitsha256repo, "2", []Tag{}},
 	} {
 		t.Run(path.Base(tt.repo)+"/"+tt.prefix, runTest(tt))
 		if tt.repo == gitrepo1 {
@@ -328,22 +303,6 @@ func TestLatest(t *testing.T) {
 				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
 			},
 		},
-		{
-			gitsha256repo,
-			&RevInfo{
-				Origin: &Origin{
-					VCS:  "git",
-					URL:  gitsha256repo,
-					Ref:  "HEAD",
-					Hash: "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				},
-				Name:    "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Short:   "47b8b51b2a2d",
-				Version: "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Time:    time.Date(2018, 4, 17, 19, 43, 22, 0, time.UTC),
-				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
-			},
-		},
 		{
 			hgrepo1,
 			&RevInfo{
@@ -432,24 +391,6 @@ func TestReadFile(t *testing.T) {
 			file: "another.txt",
 			err:  fs.ErrNotExist.Error(),
 		},
-		{
-			repo: gitsha256repo,
-			rev:  "latest",
-			file: "README",
-			data: "",
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v2",
-			file: "another.txt",
-			data: "another\n",
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v2.3.4",
-			file: "another.txt",
-			err:  fs.ErrNotExist.Error(),
-		},
 	} {
 		t.Run(path.Base(tt.repo)+"/"+tt.rev+"/"+tt.file, runTest(tt))
 		if tt.repo == gitrepo1 {
@@ -540,16 +481,6 @@ func TestReadZip(t *testing.T) {
 				"prefix/v2":     3,
 			},
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "v2.3.4",
-			subdir: "",
-			files: map[string]uint64{
-				"prefix/":       0,
-				"prefix/README": 0,
-				"prefix/v2":     3,
-			},
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "v2.3.4",
@@ -573,18 +504,6 @@ func TestReadZip(t *testing.T) {
 				"prefix/foo.txt":     13,
 			},
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "v2",
-			subdir: "",
-			files: map[string]uint64{
-				"prefix/":            0,
-				"prefix/README":      0,
-				"prefix/v2":          3,
-				"prefix/another.txt": 8,
-				"prefix/foo.txt":     13,
-			},
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "v2",
@@ -611,19 +530,6 @@ func TestReadZip(t *testing.T) {
 				"prefix/README":              0,
 			},
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "v3",
-			subdir: "",
-			files: map[string]uint64{
-				"prefix/":                    0,
-				"prefix/v3/":                 0,
-				"prefix/v3/sub/":             0,
-				"prefix/v3/sub/dir/":         0,
-				"prefix/v3/sub/dir/file.txt": 16,
-				"prefix/README":              0,
-			},
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "v3",
@@ -648,18 +554,6 @@ func TestReadZip(t *testing.T) {
 				"prefix/v3/sub/dir/file.txt": 16,
 			},
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "v3",
-			subdir: "v3/sub/dir",
-			files: map[string]uint64{
-				"prefix/":                    0,
-				"prefix/v3/":                 0,
-				"prefix/v3/sub/":             0,
-				"prefix/v3/sub/dir/":         0,
-				"prefix/v3/sub/dir/file.txt": 16,
-			},
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "v3",
@@ -681,18 +575,6 @@ func TestReadZip(t *testing.T) {
 				"prefix/v3/sub/dir/file.txt": 16,
 			},
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "v3",
-			subdir: "v3/sub",
-			files: map[string]uint64{
-				"prefix/":                    0,
-				"prefix/v3/":                 0,
-				"prefix/v3/sub/":             0,
-				"prefix/v3/sub/dir/":         0,
-				"prefix/v3/sub/dir/file.txt": 16,
-			},
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "v3",
@@ -708,12 +590,6 @@ func TestReadZip(t *testing.T) {
 			subdir: "",
 			err:    "unknown revision",
 		},
-		{
-			repo:   gitsha256repo,
-			rev:    "aaaaaaaaab",
-			subdir: "",
-			err:    "unknown revision",
-		},
 		{
 			repo:   hgrepo1,
 			rev:    "aaaaaaaaab",
@@ -881,98 +757,6 @@ func TestStat(t *testing.T) {
 			rev:  "aaaaaaaaab",
 			err:  "unknown revision",
 		},
-		{
-			repo: gitsha256repo,
-			rev:  "HEAD",
-			info: &RevInfo{
-				Name:    "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Short:   "47b8b51b2a2d",
-				Version: "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Time:    time.Date(2018, 4, 17, 19, 43, 22, 0, time.UTC),
-				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v2", // branch
-			info: &RevInfo{
-				Name:    "1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82",
-				Short:   "1401e4e1fdb4",
-				Version: "1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82",
-				Time:    time.Date(2018, 4, 17, 20, 00, 32, 0, time.UTC),
-				Tags:    []string{"v2.0.2"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v2.3.4", // badly-named branch (semver should be a tag)
-			info: &RevInfo{
-				Name:    "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09",
-				Short:   "b7550fd9d212",
-				Version: "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09",
-				Time:    time.Date(2018, 4, 17, 19, 45, 48, 0, time.UTC),
-				Tags:    []string{"v2.0.1", "v2.3"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v2.3", // badly-named tag (we only respect full semver v2.3.0)
-			info: &RevInfo{
-				Name:    "b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09",
-				Short:   "b7550fd9d212",
-				Version: "v2.3",
-				Time:    time.Date(2018, 4, 17, 19, 45, 48, 0, time.UTC),
-				Tags:    []string{"v2.0.1", "v2.3"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v1.2.3", // tag
-			info: &RevInfo{
-				Name:    "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Short:   "47b8b51b2a2d",
-				Version: "v1.2.3",
-				Time:    time.Date(2018, 4, 17, 19, 43, 22, 0, time.UTC),
-				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "47b8b51b", // hash prefix in refs
-			info: &RevInfo{
-				Name:    "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Short:   "47b8b51b2a2d",
-				Version: "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Time:    time.Date(2018, 4, 17, 19, 43, 22, 0, time.UTC),
-				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "0be440b6", // hash prefix not in refs
-			info: &RevInfo{
-				Name:    "0be440b60b6c81be26c7256781d8e57112ec46c8cd1a9481a8e78a283f10570c",
-				Short:   "0be440b60b6c",
-				Version: "0be440b60b6c81be26c7256781d8e57112ec46c8cd1a9481a8e78a283f10570c",
-				Time:    time.Date(2018, 4, 17, 20, 0, 19, 0, time.UTC),
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "v1.2.4-annotated", // annotated tag uses unwrapped commit hash
-			info: &RevInfo{
-				Name:    "47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c",
-				Short:   "47b8b51b2a2d",
-				Version: "v1.2.4-annotated",
-				Time:    time.Date(2018, 4, 17, 19, 43, 22, 0, time.UTC),
-				Tags:    []string{"v1.2.3", "v1.2.4-annotated"},
-			},
-		},
-		{
-			repo: gitsha256repo,
-			rev:  "aaaaaaaaab",
-			err:  "unknown revision",
-		},
 	} {
 		t.Run(path.Base(tt.repo)+"/"+tt.rev, runTest(tt))
 		if tt.repo == gitrepo1 {
diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go
index 5d310ccbba90fa..c16e83aea3175e 100644
--- a/src/cmd/go/internal/modfetch/fetch.go
+++ b/src/cmd/go/internal/modfetch/fetch.go
@@ -35,12 +35,7 @@ import (
 	modzip "golang.org/x/mod/zip"
 )
 
-// The downloadCache is used to cache the operation of downloading a module to disk
-// (if it's not already downloaded) and getting the directory it was downloaded to.
-// It is important that downloadCache must not be accessed by any of the exported
-// functions of this package after they return, because it can be modified by the
-// non-thread-safe SetState function
-var downloadCache = new(par.ErrCache[module.Version, string]) // version → directory;
+var downloadCache par.ErrCache[module.Version, string] // version → directory
 
 var ErrToolchain = errors.New("internal error: invalid operation on toolchain module")
 
@@ -437,10 +432,6 @@ func RemoveAll(dir string) error {
 	return robustio.RemoveAll(dir)
 }
 
-// The GoSumFile, WorkspaceGoSumFiles, and goSum are global state that must not be
-// accessed by any of the exported functions of this package after they return, because
-// they can be modified by the non-thread-safe SetState function.
-
 var GoSumFile string             // path to go.sum; set by package modload
 var WorkspaceGoSumFiles []string // path to module go.sums in workspace; set by package modload
 
@@ -450,11 +441,7 @@ type modSum struct {
 }
 
 var goSum struct {
-	mu sync.Mutex
-	sumState
-}
-
-type sumState struct {
+	mu        sync.Mutex
 	m         map[module.Version][]string            // content of go.sum file
 	w         map[string]map[module.Version][]string // sum file in workspace -> content of that sum file
 	status    map[modSum]modSumStatus                // state of sums in m
@@ -466,55 +453,26 @@ type modSumStatus struct {
 	used, dirty bool
 }
 
-// State holds a snapshot of the global state of the modfetch package.
-type State struct {
-	goSumFile           string
-	workspaceGoSumFiles []string
-	lookupCache         *par.Cache[lookupCacheKey, Repo]
-	downloadCache       *par.ErrCache[module.Version, string]
-	sumState            sumState
-}
-
 // Reset resets globals in the modfetch package, so previous loads don't affect
 // contents of go.sum files.
 func Reset() {
-	SetState(State{})
-}
-
-// SetState sets the global state of the modfetch package to the newState, and returns the previous
-// global state. newState should have been returned by SetState, or be an empty State.
-// There should be no concurrent calls to any of the exported functions of this package with
-// a call to SetState because it will modify the global state in a non-thread-safe way.
-func SetState(newState State) (oldState State) {
-	if newState.lookupCache == nil {
-		newState.lookupCache = new(par.Cache[lookupCacheKey, Repo])
-	}
-	if newState.downloadCache == nil {
-		newState.downloadCache = new(par.ErrCache[module.Version, string])
-	}
+	GoSumFile = ""
+	WorkspaceGoSumFiles = nil
 
-	goSum.mu.Lock()
-	defer goSum.mu.Unlock()
-
-	oldState = State{
-		goSumFile:           GoSumFile,
-		workspaceGoSumFiles: WorkspaceGoSumFiles,
-		lookupCache:         lookupCache,
-		downloadCache:       downloadCache,
-		sumState:            goSum.sumState,
-	}
-
-	GoSumFile = newState.goSumFile
-	WorkspaceGoSumFiles = newState.workspaceGoSumFiles
 	// Uses of lookupCache and downloadCache both can call checkModSum,
 	// which in turn sets the used bit on goSum.status for modules.
-	// Set (or reset) them so used can be computed properly.
-	lookupCache = newState.lookupCache
-	downloadCache = newState.downloadCache
-	// Set, or reset all fields on goSum. If being reset to empty, it will be initialized later.
-	goSum.sumState = newState.sumState
+	// Reset them so used can be computed properly.
+	lookupCache = par.Cache[lookupCacheKey, Repo]{}
+	downloadCache = par.ErrCache[module.Version, string]{}
 
-	return oldState
+	// Clear all fields on goSum. It will be initialized later
+	goSum.mu.Lock()
+	goSum.m = nil
+	goSum.w = nil
+	goSum.status = nil
+	goSum.overwrite = false
+	goSum.enabled = false
+	goSum.mu.Unlock()
 }
 
 // initGoSum initializes the go.sum data.
diff --git a/src/cmd/go/internal/modfetch/repo.go b/src/cmd/go/internal/modfetch/repo.go
index 0fdb2a87369ccf..dd707ec264d165 100644
--- a/src/cmd/go/internal/modfetch/repo.go
+++ b/src/cmd/go/internal/modfetch/repo.go
@@ -184,10 +184,7 @@ type RevInfo struct {
 // To avoid version control access except when absolutely necessary,
 // Lookup does not attempt to connect to the repository itself.
 
-// The Lookup cache is used cache the work done by Lookup.
-// It is important that the global functions of this package that access it do not
-// do so after they return.
-var lookupCache = new(par.Cache[lookupCacheKey, Repo])
+var lookupCache par.Cache[lookupCacheKey, Repo]
 
 type lookupCacheKey struct {
 	proxy, path string
@@ -221,7 +218,7 @@ func Lookup(ctx context.Context, proxy, path string) Repo {
 	})
 }
 
-var lookupLocalCache = new(par.Cache[string, Repo]) // path, Repo
+var lookupLocalCache par.Cache[string, Repo] // path, Repo
 
 // LookupLocal returns a Repo that accesses local VCS information.
 //
diff --git a/src/cmd/go/internal/modget/get.go b/src/cmd/go/internal/modget/get.go
index 31e9244e2dce54..48ae12fe53a783 100644
--- a/src/cmd/go/internal/modget/get.go
+++ b/src/cmd/go/internal/modget/get.go
@@ -337,7 +337,6 @@ func runGet(ctx context.Context, cmd *base.Command, args []string) {
 	r.performLocalQueries(ctx)
 	r.performPathQueries(ctx)
 	r.performToolQueries(ctx)
-	r.performWorkQueries(ctx)
 
 	for {
 		r.performWildcardQueries(ctx)
@@ -400,9 +399,6 @@ func runGet(ctx context.Context, cmd *base.Command, args []string) {
 			pkgPatterns = append(pkgPatterns, q.pattern)
 		}
 	}
-
-	// If a workspace applies, checkPackageProblems will switch to the workspace
-	// using modload.EnterWorkspace when doing the final load, and then switch back.
 	r.checkPackageProblems(ctx, pkgPatterns)
 
 	if *getTool {
@@ -514,7 +510,6 @@ type resolver struct {
 	pathQueries       []*query // package path literal queries in original order
 	wildcardQueries   []*query // path wildcard queries in original order
 	patternAllQueries []*query // queries with the pattern "all"
-	workQueries       []*query // queries with the pattern "work"
 	toolQueries       []*query // queries with the pattern "tool"
 
 	// Indexed "none" queries. These are also included in the slices above;
@@ -537,10 +532,6 @@ type resolver struct {
 	work *par.Queue
 
 	matchInModuleCache par.ErrCache[matchInModuleKey, []string]
-
-	// workspace is used to check whether, in workspace mode, any of the workspace
-	// modules would contain a package.
-	workspace *workspace
 }
 
 type versionReason struct {
@@ -574,14 +565,11 @@ func newResolver(ctx context.Context, queries []*query) *resolver {
 		buildListVersion: initialVersion,
 		initialVersion:   initialVersion,
 		nonesByPath:      map[string]*query{},
-		workspace:        loadWorkspace(modload.FindGoWork(base.Cwd())),
 	}
 
 	for _, q := range queries {
 		if q.pattern == "all" {
 			r.patternAllQueries = append(r.patternAllQueries, q)
-		} else if q.pattern == "work" {
-			r.workQueries = append(r.workQueries, q)
 		} else if q.pattern == "tool" {
 			r.toolQueries = append(r.toolQueries, q)
 		} else if q.patternIsLocal {
@@ -1074,37 +1062,6 @@ func (r *resolver) performToolQueries(ctx context.Context) {
 	}
 }
 
-// performWorkQueries populates the candidates for each query whose pattern is "work".
-// The candidate module to resolve the work pattern is exactly the single main module.
-func (r *resolver) performWorkQueries(ctx context.Context) {
-	for _, q := range r.workQueries {
-		q.pathOnce(q.pattern, func() pathSet {
-			// TODO(matloob): Maybe export MainModules.mustGetSingleMainModule and call that.
-			// There are a few other places outside the modload package where we expect
-			// a single main module.
-			if len(modload.MainModules.Versions()) != 1 {
-				panic("internal error: number of main modules is not exactly one in resolution phase of go get")
-			}
-			mainModule := modload.MainModules.Versions()[0]
-
-			// We know what the result is going to be, assuming the main module is not
-			// empty, (it's the main module itself) but first check to see that there
-			// are packages in the main module, so that if there aren't any, we can
-			// return the expected warning that the pattern matched no packages.
-			match := modload.MatchInModule(ctx, q.pattern, mainModule, imports.AnyTags())
-			if len(match.Errs) > 0 {
-				return pathSet{err: match.Errs[0]}
-			}
-			if len(match.Pkgs) == 0 {
-				search.WarnUnmatched([]*search.Match{match})
-				return pathSet{} // There are no packages in the main module, so the main module isn't needed to resolve them.
-			}
-
-			return pathSet{pkgMods: []module.Version{mainModule}}
-		})
-	}
-}
-
 // performPatternAllQueries populates the candidates for each query whose
 // pattern is "all".
 //
@@ -1276,12 +1233,12 @@ func (r *resolver) loadPackages(ctx context.Context, patterns []string, findPack
 	}
 
 	_, pkgs := modload.LoadPackages(ctx, opts, patterns...)
-	for _, pkgPath := range pkgs {
+	for _, path := range pkgs {
 		const (
 			parentPath  = ""
 			parentIsStd = false
 		)
-		_, _, err := modload.Lookup(parentPath, parentIsStd, pkgPath)
+		_, _, err := modload.Lookup(parentPath, parentIsStd, path)
 		if err == nil {
 			continue
 		}
@@ -1289,10 +1246,6 @@ func (r *resolver) loadPackages(ctx context.Context, patterns []string, findPack
 			// We already added candidates during loading.
 			continue
 		}
-		if r.workspace != nil && r.workspace.hasPackage(pkgPath) {
-			// Don't try to resolve imports that are in the resolver's associated workspace. (#73654)
-			continue
-		}
 
 		var (
 			importMissing *modload.ImportMissingError
@@ -1305,7 +1258,7 @@ func (r *resolver) loadPackages(ctx context.Context, patterns []string, findPack
 			continue
 		}
 
-		path := pkgPath
+		path := path
 		r.work.Add(func() {
 			findPackage(ctx, path, module.Version{})
 		})
@@ -1604,27 +1557,6 @@ func (r *resolver) chooseArbitrarily(cs pathSet) (isPackage bool, m module.Versi
 func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []string) {
 	defer base.ExitIfErrors()
 
-	// Enter workspace mode, if the current main module would belong to it, when
-	// doing the workspace load. We want to check that the workspace loads properly
-	// and doesn't have missing or ambiguous imports (rather than checking the module
-	// by itself) because the module may have unreleased dependencies in the workspace.
-	// We'll also report issues for retracted and deprecated modules using the workspace
-	// info, but switch back to single module mode when fetching sums so that we update
-	// the single module's go.sum file.
-	var exitWorkspace func()
-	if r.workspace != nil && r.workspace.hasModule(modload.MainModules.Versions()[0].Path) {
-		var err error
-		exitWorkspace, err = modload.EnterWorkspace(ctx)
-		if err != nil {
-			// A TooNewError can happen for
-			// go get go@newversion when all the required modules
-			// are old enough but the go command itself is not new
-			// enough. See the related comment on the SwitchOrFatal
-			// in runGet when WriteGoMod returns an error.
-			toolchain.SwitchOrFatal(ctx, err)
-		}
-	}
-
 	// Gather information about modules we might want to load retractions and
 	// deprecations for. Loading this metadata requires at least one version
 	// lookup per module, and we don't want to load information that's neither
@@ -1634,7 +1566,7 @@ func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []strin
 		resolved modFlags = 1 << iota // version resolved by 'go get'
 		named                         // explicitly named on command line or provides a named package
 		hasPkg                        // needed to build named packages
-		direct                        // provides a direct dependency of the main module or workspace modules
+		direct                        // provides a direct dependency of the main module
 	)
 	relevantMods := make(map[module.Version]modFlags)
 	for path, reason := range r.resolvedVersion {
@@ -1725,8 +1657,8 @@ func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []strin
 
 	// Load deprecations for modules mentioned on the command line. Only load
 	// deprecations for indirect dependencies if they're also direct dependencies
-	// of the main module or workspace modules. Deprecations of purely indirect
-	// dependencies are not actionable.
+	// of the main module. Deprecations of purely indirect dependencies are
+	// not actionable.
 	deprecations := make([]modMessage, 0, len(relevantMods))
 	for m, flags := range relevantMods {
 		if flags&(resolved|named) != 0 || flags&(hasPkg|direct) == hasPkg|direct {
@@ -1745,16 +1677,6 @@ func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []strin
 		})
 	}
 
-	// exit the workspace if we had entered it earlier. We want to add the sums
-	// to the go.sum file for the module we're running go get from.
-	if exitWorkspace != nil {
-		// Wait for retraction and deprecation checks (that depend on the global
-		// modload state containing the workspace) to finish before we reset the
-		// state back to single module mode.
-		<-r.work.Idle()
-		exitWorkspace()
-	}
-
 	// Load sums for updated modules that had sums before. When we update a
 	// module, we may update another module in the build list that provides a
 	// package in 'all' that wasn't loaded as part of this 'go get' command.
@@ -2078,53 +2000,3 @@ func isNoSuchPackageVersion(err error) bool {
 	var noPackage *modload.PackageNotInModuleError
 	return isNoSuchModuleVersion(err) || errors.As(err, &noPackage)
 }
-
-// workspace represents the set of modules in a workspace.
-// It can be used
-type workspace struct {
-	modules map[string]string // path -> modroot
-}
-
-// loadWorkspace loads infomation about a workspace using a go.work
-// file path.
-func loadWorkspace(workFilePath string) *workspace {
-	if workFilePath == "" {
-		// Return the empty workspace checker. All HasPackage checks will return false.
-		return nil
-	}
-
-	_, modRoots, err := modload.LoadWorkFile(workFilePath)
-	if err != nil {
-		return nil
-	}
-
-	w := &workspace{modules: make(map[string]string)}
-	for _, modRoot := range modRoots {
-		modFile := filepath.Join(modRoot, "go.mod")
-		_, f, err := modload.ReadModFile(modFile, nil)
-		if err != nil {
-			continue // Error will be reported in the final load of the workspace.
-		}
-		w.modules[f.Module.Mod.Path] = modRoot
-	}
-
-	return w
-}
-
-// hasPackage reports whether there is a workspace module that could
-// provide the package with the given path.
-func (w *workspace) hasPackage(pkgpath string) bool {
-	for modPath, modroot := range w.modules {
-		if modload.PkgIsInLocalModule(pkgpath, modPath, modroot) {
-			return true
-		}
-	}
-	return false
-}
-
-// hasModule reports whether there is a workspace module with the given
-// path.
-func (w *workspace) hasModule(modPath string) bool {
-	_, ok := w.modules[modPath]
-	return ok
-}
diff --git a/src/cmd/go/internal/modload/import.go b/src/cmd/go/internal/modload/import.go
index 171d9d692fbb82..5003ede241afda 100644
--- a/src/cmd/go/internal/modload/import.go
+++ b/src/cmd/go/internal/modload/import.go
@@ -661,15 +661,6 @@ var (
 	haveGoFilesCache par.ErrCache[string, bool] // dir → haveGoFiles
 )
 
-// PkgIsInLocalModule reports whether the directory of the package with
-// the given pkgpath, exists in the module with the given modpath
-// at the given modroot, and contains go source files.
-func PkgIsInLocalModule(pkgpath, modpath, modroot string) bool {
-	const isLocal = true
-	_, haveGoFiles, err := dirInModule(pkgpath, modpath, modroot, isLocal)
-	return err == nil && haveGoFiles
-}
-
 // dirInModule locates the directory that would hold the package named by the given path,
 // if it were in the module with module path mpath and root mdir.
 // If path is syntactically not within mpath,
@@ -682,8 +673,6 @@ func PkgIsInLocalModule(pkgpath, modpath, modroot string) bool {
 // whether there are in fact Go source files in that directory.
 // A non-nil error indicates that the existence of the directory and/or
 // source files could not be determined, for example due to a permission error.
-//
-// TODO(matloob): Could we use the modindex to check packages in indexed modules?
 func dirInModule(path, mpath, mdir string, isLocal bool) (dir string, haveGoFiles bool, err error) {
 	// Determine where to expect the package.
 	if path == mpath {
diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go
index 3cf447e648ce4e..41b3b9df1ba20c 100644
--- a/src/cmd/go/internal/modload/init.go
+++ b/src/cmd/go/internal/modload/init.go
@@ -7,12 +7,12 @@ package modload
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"internal/godebugs"
 	"internal/lazyregexp"
 	"io"
-	"maps"
 	"os"
 	"path"
 	"path/filepath"
@@ -82,36 +82,6 @@ func EnterModule(ctx context.Context, enterModroot string) {
 	LoadModFile(ctx)
 }
 
-// EnterWorkspace enters workspace mode from module mode, applying the updated requirements to the main
-// module to that module in the workspace. There should be no calls to any of the exported
-// functions of the modload package running concurrently with a call to EnterWorkspace as
-// EnterWorkspace will modify the global state they depend on in a non-thread-safe way.
-func EnterWorkspace(ctx context.Context) (exit func(), err error) {
-	// Find the identity of the main module that will be updated before we reset modload state.
-	mm := MainModules.mustGetSingleMainModule()
-	// Get the updated modfile we will use for that module.
-	_, _, updatedmodfile, err := UpdateGoModFromReqs(ctx, WriteOpts{})
-	if err != nil {
-		return nil, err
-	}
-
-	// Reset the state to a clean state.
-	oldstate := setState(state{})
-	ForceUseModules = true
-
-	// Load in workspace mode.
-	InitWorkfile()
-	LoadModFile(ctx)
-
-	// Update the content of the previous main module, and recompute the requirements.
-	*MainModules.ModFile(mm) = *updatedmodfile
-	requirements = requirementsFromModFiles(ctx, MainModules.workFile, slices.Collect(maps.Values(MainModules.modFiles)), nil)
-
-	return func() {
-		setState(oldstate)
-	}, nil
-}
-
 // Variable set in InitWorkfile
 var (
 	// Set to the path to the go.work file, or "" if workspace mode is disabled.
@@ -425,44 +395,15 @@ func WorkFilePath() string {
 // Reset clears all the initialized, cached state about the use of modules,
 // so that we can start over.
 func Reset() {
-	setState(state{})
-}
-
-func setState(s state) state {
-	oldState := state{
-		initialized:     initialized,
-		forceUseModules: ForceUseModules,
-		rootMode:        RootMode,
-		modRoots:        modRoots,
-		modulesEnabled:  cfg.ModulesEnabled,
-		mainModules:     MainModules,
-		requirements:    requirements,
-	}
-	initialized = s.initialized
-	ForceUseModules = s.forceUseModules
-	RootMode = s.rootMode
-	modRoots = s.modRoots
-	cfg.ModulesEnabled = s.modulesEnabled
-	MainModules = s.mainModules
-	requirements = s.requirements
-	workFilePath = s.workFilePath
-	// The modfetch package's global state is used to compute
-	// the go.sum file, so save and restore it along with the
-	// modload state.
-	oldState.modfetchState = modfetch.SetState(s.modfetchState)
-	return oldState
-}
-
-type state struct {
-	initialized     bool
-	forceUseModules bool
-	rootMode        Root
-	modRoots        []string
-	modulesEnabled  bool
-	mainModules     *MainModuleSet
-	requirements    *Requirements
-	workFilePath    string
-	modfetchState   modfetch.State
+	initialized = false
+	ForceUseModules = false
+	RootMode = 0
+	modRoots = nil
+	cfg.ModulesEnabled = false
+	MainModules = nil
+	requirements = nil
+	workFilePath = ""
+	modfetch.Reset()
 }
 
 // Init determines whether module mode is enabled, locates the root of the
@@ -695,9 +636,6 @@ func ModFilePath() string {
 }
 
 func modFilePath(modRoot string) string {
-	// TODO(matloob): This seems incompatible with workspaces
-	// (unless the user's intention is to replace all workspace modules' modfiles?).
-	// Should we produce an error in workspace mode if cfg.ModFile is set?
 	if cfg.ModFile != "" {
 		return cfg.ModFile
 	}
@@ -751,10 +689,7 @@ func (goModDirtyError) Error() string {
 
 var errGoModDirty error = goModDirtyError{}
 
-// LoadWorkFile parses and checks the go.work file at the given path,
-// and returns the absolute paths of the workspace modules' modroots.
-// It does not modify the global state of the modload package.
-func LoadWorkFile(path string) (workFile *modfile.WorkFile, modRoots []string, err error) {
+func loadWorkFile(path string) (workFile *modfile.WorkFile, modRoots []string, err error) {
 	workDir := filepath.Dir(path)
 	wf, err := ReadWorkFile(path)
 	if err != nil {
@@ -903,7 +838,7 @@ func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error)
 	var workFile *modfile.WorkFile
 	if inWorkspaceMode() {
 		var err error
-		workFile, modRoots, err = LoadWorkFile(workFilePath)
+		workFile, modRoots, err = loadWorkFile(workFilePath)
 		if err != nil {
 			return nil, err
 		}
@@ -1746,6 +1681,22 @@ func findModulePath(dir string) (string, error) {
 		}
 	}
 
+	// Look for Godeps.json declaring import path.
+	data, _ := os.ReadFile(filepath.Join(dir, "Godeps/Godeps.json"))
+	var cfg1 struct{ ImportPath string }
+	json.Unmarshal(data, &cfg1)
+	if cfg1.ImportPath != "" {
+		return cfg1.ImportPath, nil
+	}
+
+	// Look for vendor.json declaring import path.
+	data, _ = os.ReadFile(filepath.Join(dir, "vendor/vendor.json"))
+	var cfg2 struct{ RootPath string }
+	json.Unmarshal(data, &cfg2)
+	if cfg2.RootPath != "" {
+		return cfg2.RootPath, nil
+	}
+
 	// Look for path in GOPATH.
 	var badPathErr error
 	for _, gpdir := range filepath.SplitList(cfg.BuildContext.GOPATH) {
diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go
index 8b2be3b300e9e1..6cb6b9e7423694 100644
--- a/src/cmd/go/internal/modload/load.go
+++ b/src/cmd/go/internal/modload/load.go
@@ -2009,13 +2009,6 @@ func (ld *loader) stdVendor(parentPath, path string) string {
 // starting with a list of the import paths for the packages in the main module.
 func (ld *loader) computePatternAll() (all []string) {
 	for _, pkg := range ld.pkgs {
-		if module.CheckImportPath(pkg.path) != nil {
-			// Don't add packages with invalid paths. This means that
-			// we don't try to load invalid imports of the main modules'
-			// packages. We will still report an errors invalid imports
-			// when we load the importing package.
-			continue
-		}
 		if pkg.flags.has(pkgInAll) && !pkg.isTest() {
 			all = append(all, pkg.path)
 		}
diff --git a/src/cmd/go/internal/modload/modfile.go b/src/cmd/go/internal/modload/modfile.go
index cb385c3505d57e..4687deae686c89 100644
--- a/src/cmd/go/internal/modload/modfile.go
+++ b/src/cmd/go/internal/modload/modfile.go
@@ -94,7 +94,6 @@ type modFileIndex struct {
 	require      map[module.Version]requireMeta
 	replace      map[module.Version]module.Version
 	exclude      map[module.Version]bool
-	ignore       []string
 }
 
 type requireMeta struct {
@@ -456,11 +455,7 @@ func indexModFile(data []byte, modFile *modfile.File, mod module.Version, needsF
 	for _, x := range modFile.Exclude {
 		i.exclude[x.Mod] = true
 	}
-	if modFile.Ignore != nil {
-		for _, x := range modFile.Ignore {
-			i.ignore = append(i.ignore, x.Path)
-		}
-	}
+
 	return i
 }
 
@@ -544,7 +539,6 @@ type modFileSummary struct {
 	module     module.Version
 	goVersion  string
 	toolchain  string
-	ignore     []string
 	pruning    modPruning
 	require    []module.Version
 	retract    []retraction
@@ -695,16 +689,9 @@ func rawGoModSummary(m module.Version) (*modFileSummary, error) {
 		// If there are no modules in the workspace, we synthesize an empty
 		// command-line-arguments module, which rawGoModData cannot read a go.mod for.
 		return &modFileSummary{module: m}, nil
-	} else if m.Version == "" && inWorkspaceMode() && MainModules.Contains(m.Path) {
-		// When go get uses EnterWorkspace to check that the workspace loads properly,
-		// it will update the contents of the workspace module's modfile in memory. To use the updated
-		// contents of the modfile when doing the load, don't read from disk and instead
-		// recompute a summary using the updated contents of the modfile.
-		if mf := MainModules.ModFile(m); mf != nil {
-			return summaryFromModFile(m, MainModules.modFiles[m])
-		}
 	}
 	return rawGoModSummaryCache.Do(m, func() (*modFileSummary, error) {
+		summary := new(modFileSummary)
 		name, data, err := rawGoModData(m)
 		if err != nil {
 			return nil, err
@@ -713,59 +700,49 @@ func rawGoModSummary(m module.Version) (*modFileSummary, error) {
 		if err != nil {
 			return nil, module.VersionError(m, fmt.Errorf("parsing %s: %v", base.ShortPath(name), err))
 		}
-		return summaryFromModFile(m, f)
-	})
-}
-
-func summaryFromModFile(m module.Version, f *modfile.File) (*modFileSummary, error) {
-	summary := new(modFileSummary)
-	if f.Module != nil {
-		summary.module = f.Module.Mod
-		summary.deprecated = f.Module.Deprecated
-	}
-	if f.Go != nil {
-		rawGoVersion.LoadOrStore(m, f.Go.Version)
-		summary.goVersion = f.Go.Version
-		summary.pruning = pruningForGoVersion(f.Go.Version)
-	} else {
-		summary.pruning = unpruned
-	}
-	if f.Toolchain != nil {
-		summary.toolchain = f.Toolchain.Name
-	}
-	if f.Ignore != nil {
-		for _, i := range f.Ignore {
-			summary.ignore = append(summary.ignore, i.Path)
+		if f.Module != nil {
+			summary.module = f.Module.Mod
+			summary.deprecated = f.Module.Deprecated
 		}
-	}
-	if len(f.Require) > 0 {
-		summary.require = make([]module.Version, 0, len(f.Require)+1)
-		for _, req := range f.Require {
-			summary.require = append(summary.require, req.Mod)
+		if f.Go != nil {
+			rawGoVersion.LoadOrStore(m, f.Go.Version)
+			summary.goVersion = f.Go.Version
+			summary.pruning = pruningForGoVersion(f.Go.Version)
+		} else {
+			summary.pruning = unpruned
+		}
+		if f.Toolchain != nil {
+			summary.toolchain = f.Toolchain.Name
+		}
+		if len(f.Require) > 0 {
+			summary.require = make([]module.Version, 0, len(f.Require)+1)
+			for _, req := range f.Require {
+				summary.require = append(summary.require, req.Mod)
+			}
 		}
-	}
 
-	if len(f.Retract) > 0 {
-		summary.retract = make([]retraction, 0, len(f.Retract))
-		for _, ret := range f.Retract {
-			summary.retract = append(summary.retract, retraction{
-				VersionInterval: ret.VersionInterval,
-				Rationale:       ret.Rationale,
-			})
+		if len(f.Retract) > 0 {
+			summary.retract = make([]retraction, 0, len(f.Retract))
+			for _, ret := range f.Retract {
+				summary.retract = append(summary.retract, retraction{
+					VersionInterval: ret.VersionInterval,
+					Rationale:       ret.Rationale,
+				})
+			}
 		}
-	}
 
-	// This block must be kept at the end of the function because the summary may
-	// be used for reading retractions or deprecations even if a TooNewError is
-	// returned.
-	if summary.goVersion != "" && gover.Compare(summary.goVersion, gover.GoStrictVersion) >= 0 {
-		summary.require = append(summary.require, module.Version{Path: "go", Version: summary.goVersion})
-		if gover.Compare(summary.goVersion, gover.Local()) > 0 {
-			return summary, &gover.TooNewError{What: "module " + m.String(), GoVersion: summary.goVersion}
+		// This block must be kept at the end of the function because the summary may
+		// be used for reading retractions or deprecations even if a TooNewError is
+		// returned.
+		if summary.goVersion != "" && gover.Compare(summary.goVersion, gover.GoStrictVersion) >= 0 {
+			summary.require = append(summary.require, module.Version{Path: "go", Version: summary.goVersion})
+			if gover.Compare(summary.goVersion, gover.Local()) > 0 {
+				return summary, &gover.TooNewError{What: "module " + m.String(), GoVersion: summary.goVersion}
+			}
 		}
-	}
 
-	return summary, nil
+		return summary, nil
+	})
 }
 
 var rawGoModSummaryCache par.ErrCache[module.Version, *modFileSummary]
diff --git a/src/cmd/go/internal/modload/search.go b/src/cmd/go/internal/modload/search.go
index 9ff9738e281118..6c60101c8b46b7 100644
--- a/src/cmd/go/internal/modload/search.go
+++ b/src/cmd/go/internal/modload/search.go
@@ -74,7 +74,7 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 	)
 
 	q := par.NewQueue(runtime.GOMAXPROCS(0))
-	ignorePatternsMap := parseIgnorePatterns(ctx, treeCanMatch, modules)
+
 	walkPkgs := func(root, importPathRoot string, prune pruning) {
 		_, span := trace.StartSpan(ctx, "walkPkgs "+root)
 		defer span.Done()
@@ -82,8 +82,7 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 		// If the root itself is a symlink to a directory,
 		// we want to follow it (see https://go.dev/issue/50807).
 		// Add a trailing separator to force that to happen.
-		cleanRoot := filepath.Clean(root)
-		root = str.WithFilePathSeparator(cleanRoot)
+		root = str.WithFilePathSeparator(filepath.Clean(root))
 		err := fsys.WalkDir(root, func(pkgDir string, d fs.DirEntry, err error) error {
 			if err != nil {
 				m.AddError(err)
@@ -92,7 +91,6 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 
 			want := true
 			elem := ""
-			relPkgDir := filepath.ToSlash(pkgDir[len(root):])
 
 			// Don't use GOROOT/src but do walk down into it.
 			if pkgDir == root {
@@ -104,15 +102,10 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 				_, elem = filepath.Split(pkgDir)
 				if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" {
 					want = false
-				} else if ignorePatternsMap[cleanRoot] != nil && ignorePatternsMap[cleanRoot].ShouldIgnore(relPkgDir) {
-					if cfg.BuildX {
-						fmt.Fprintf(os.Stderr, "# ignoring directory %s\n", pkgDir)
-					}
-					want = false
 				}
 			}
 
-			name := path.Join(importPathRoot, relPkgDir)
+			name := path.Join(importPathRoot, filepath.ToSlash(pkgDir[len(root):]))
 			if !treeCanMatch(name) {
 				want = false
 			}
@@ -208,7 +201,7 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 			modPrefix = mod.Path
 		}
 		if mi, err := modindex.GetModule(root); err == nil {
-			walkFromIndex(mi, modPrefix, isMatch, treeCanMatch, tags, have, addPkg, ignorePatternsMap[root], root)
+			walkFromIndex(mi, modPrefix, isMatch, treeCanMatch, tags, have, addPkg)
 			continue
 		} else if !errors.Is(err, modindex.ErrNotIndexed) {
 			m.AddError(err)
@@ -225,7 +218,7 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
 // walkFromIndex matches packages in a module using the module index. modroot
 // is the module's root directory on disk, index is the modindex.Module for the
 // module, and importPathRoot is the module's path prefix.
-func walkFromIndex(index *modindex.Module, importPathRoot string, isMatch, treeCanMatch func(string) bool, tags, have map[string]bool, addPkg func(string), ignorePatterns *search.IgnorePatterns, modRoot string) {
+func walkFromIndex(index *modindex.Module, importPathRoot string, isMatch, treeCanMatch func(string) bool, tags, have map[string]bool, addPkg func(string)) {
 	index.Walk(func(reldir string) {
 		// Avoid .foo, _foo, and testdata subdirectory trees.
 		p := reldir
@@ -248,14 +241,6 @@ func walkFromIndex(index *modindex.Module, importPathRoot string, isMatch, treeC
 			p = rest
 		}
 
-		if ignorePatterns != nil && ignorePatterns.ShouldIgnore(reldir) {
-			if cfg.BuildX {
-				absPath := filepath.Join(modRoot, reldir)
-				fmt.Fprintf(os.Stderr, "# ignoring directory %s\n", absPath)
-			}
-			return
-		}
-
 		// Don't use GOROOT/src.
 		if reldir == "" && importPathRoot == "" {
 			return
@@ -318,43 +303,3 @@ func MatchInModule(ctx context.Context, pattern string, m module.Version, tags m
 	}
 	return match
 }
-
-// parseIgnorePatterns collects all ignore patterns associated with the
-// provided list of modules.
-// It returns a map of module root -> *search.IgnorePatterns.
-func parseIgnorePatterns(ctx context.Context, treeCanMatch func(string) bool, modules []module.Version) map[string]*search.IgnorePatterns {
-	ignorePatternsMap := make(map[string]*search.IgnorePatterns)
-	for _, mod := range modules {
-		if gover.IsToolchain(mod.Path) || !treeCanMatch(mod.Path) {
-			continue
-		}
-		var modRoot string
-		var ignorePatterns []string
-		if MainModules.Contains(mod.Path) {
-			modRoot = MainModules.ModRoot(mod)
-			if modRoot == "" {
-				continue
-			}
-			modIndex := MainModules.Index(mod)
-			if modIndex == nil {
-				continue
-			}
-			ignorePatterns = modIndex.ignore
-		} else if cfg.BuildMod != "vendor" {
-			// Skip getting ignore patterns for vendored modules because they
-			// do not have go.mod files.
-			var err error
-			modRoot, _, err = fetch(ctx, mod)
-			if err != nil {
-				continue
-			}
-			summary, err := goModSummary(mod)
-			if err != nil {
-				continue
-			}
-			ignorePatterns = summary.ignore
-		}
-		ignorePatternsMap[modRoot] = search.NewIgnorePatterns(ignorePatterns)
-	}
-	return ignorePatternsMap
-}
diff --git a/src/cmd/go/internal/search/search.go b/src/cmd/go/internal/search/search.go
index a54486e540ca16..0d83cbd47d3008 100644
--- a/src/cmd/go/internal/search/search.go
+++ b/src/cmd/go/internal/search/search.go
@@ -17,8 +17,6 @@ import (
 	"path"
 	"path/filepath"
 	"strings"
-
-	"golang.org/x/mod/modfile"
 )
 
 // A Match represents the result of matching a single package pattern.
@@ -210,69 +208,6 @@ func (m *Match) MatchPackages() {
 	}
 }
 
-// IgnorePatterns is normalized with normalizePath.
-type IgnorePatterns struct {
-	relativePatterns []string
-	anyPatterns      []string
-}
-
-// ShouldIgnore returns true if the given directory should be ignored
-// based on the ignore patterns.
-//
-// An ignore pattern "x" will cause any file or directory named "x"
-// (and its entire subtree) to be ignored, regardless of its location
-// within the module.
-//
-// An ignore pattern "./x" will only cause the specific file or directory
-// named "x" at the root of the module to be ignored.
-// Wildcards in ignore patterns are not supported.
-func (ignorePatterns *IgnorePatterns) ShouldIgnore(dir string) bool {
-	if dir == "" {
-		return false
-	}
-	dir = normalizePath(dir)
-	for _, pattern := range ignorePatterns.relativePatterns {
-		if strings.HasPrefix(dir, pattern) {
-			return true
-		}
-	}
-	for _, pattern := range ignorePatterns.anyPatterns {
-		if strings.Contains(dir, pattern) {
-			return true
-		}
-	}
-	return false
-}
-
-func NewIgnorePatterns(patterns []string) *IgnorePatterns {
-	var relativePatterns, anyPatterns []string
-	for _, pattern := range patterns {
-		ignorePatternPath, isRelative := strings.CutPrefix(pattern, "./")
-		ignorePatternPath = normalizePath(ignorePatternPath)
-		if isRelative {
-			relativePatterns = append(relativePatterns, ignorePatternPath)
-		} else {
-			anyPatterns = append(anyPatterns, ignorePatternPath)
-		}
-	}
-	return &IgnorePatterns{
-		relativePatterns: relativePatterns,
-		anyPatterns:      anyPatterns,
-	}
-}
-
-// normalizePath adds slashes to the front and end of the given path.
-func normalizePath(path string) string {
-	path = filepath.ToSlash(path)
-	if !strings.HasPrefix(path, "/") {
-		path = "/" + path
-	}
-	if !strings.HasSuffix(path, "/") {
-		path += "/"
-	}
-	return path
-}
-
 // MatchDirs sets m.Dirs to a non-nil slice containing all directories that
 // potentially match a local pattern. The pattern must begin with an absolute
 // path, or "./", or "../". On Windows, the pattern may use slash or backslash
@@ -318,18 +253,16 @@ func (m *Match) MatchDirs(modRoots []string) {
 	// We need to preserve the ./ for pattern matching
 	// and in the returned import paths.
 
-	var modRoot string
-	if len(modRoots) > 0 {
+	if len(modRoots) > 1 {
 		abs, err := filepath.Abs(dir)
 		if err != nil {
 			m.AddError(err)
 			return
 		}
 		var found bool
-		for _, mr := range modRoots {
-			if mr != "" && str.HasFilePathPrefix(abs, mr) {
+		for _, modRoot := range modRoots {
+			if modRoot != "" && str.HasFilePathPrefix(abs, modRoot) {
 				found = true
-				modRoot = mr
 			}
 		}
 		if !found {
@@ -341,7 +274,6 @@ func (m *Match) MatchDirs(modRoots []string) {
 		}
 	}
 
-	ignorePatterns := parseIgnorePatterns(modRoot)
 	// If dir is actually a symlink to a directory,
 	// we want to follow it (see https://go.dev/issue/50807).
 	// Add a trailing separator to force that to happen.
@@ -373,17 +305,6 @@ func (m *Match) MatchDirs(modRoots []string) {
 		if dot || strings.HasPrefix(elem, "_") || elem == "testdata" {
 			return filepath.SkipDir
 		}
-		absPath, err := filepath.Abs(path)
-		if err != nil {
-			return err
-		}
-
-		if ignorePatterns != nil && ignorePatterns.ShouldIgnore(InDir(absPath, modRoot)) {
-			if cfg.BuildX {
-				fmt.Fprintf(os.Stderr, "# ignoring directory %s\n", absPath)
-			}
-			return filepath.SkipDir
-		}
 
 		if !top && cfg.ModulesEnabled {
 			// Ignore other modules found in subdirectories.
@@ -432,20 +353,20 @@ func WarnUnmatched(matches []*Match) {
 
 // ImportPaths returns the matching paths to use for the given command line.
 // It calls ImportPathsQuiet and then WarnUnmatched.
-func ImportPaths(patterns []string) []*Match {
-	matches := ImportPathsQuiet(patterns)
+func ImportPaths(patterns, modRoots []string) []*Match {
+	matches := ImportPathsQuiet(patterns, modRoots)
 	WarnUnmatched(matches)
 	return matches
 }
 
 // ImportPathsQuiet is like ImportPaths but does not warn about patterns with no matches.
-func ImportPathsQuiet(patterns []string) []*Match {
+func ImportPathsQuiet(patterns, modRoots []string) []*Match {
 	patterns = CleanPatterns(patterns)
 	out := make([]*Match, 0, len(patterns))
 	for _, a := range patterns {
 		m := NewMatch(a)
 		if m.IsLocal() {
-			m.MatchDirs(nil)
+			m.MatchDirs(modRoots)
 
 			// Change the file import path to a regular import path if the package
 			// is in GOPATH or GOROOT. We don't report errors here; LoadImport
@@ -498,7 +419,9 @@ func CleanPatterns(patterns []string) []string {
 		if filepath.IsAbs(p) {
 			p = filepath.Clean(p)
 		} else {
-			p = strings.ReplaceAll(p, `\`, `/`)
+			if filepath.Separator == '\\' {
+				p = strings.ReplaceAll(p, `\`, `/`)
+			}
 
 			// Put argument in canonical form, but preserve leading ./.
 			if strings.HasPrefix(p, "./") {
@@ -588,25 +511,3 @@ func InDir(path, dir string) string {
 	}
 	return ""
 }
-
-// parseIgnorePatterns reads the go.mod file at the given module root
-// and extracts the ignore patterns defined within it.
-// If modRoot is empty, it returns nil.
-func parseIgnorePatterns(modRoot string) *IgnorePatterns {
-	if modRoot == "" {
-		return nil
-	}
-	data, err := os.ReadFile(filepath.Join(modRoot, "go.mod"))
-	if err != nil {
-		return nil
-	}
-	modFile, err := modfile.Parse("go.mod", data, nil)
-	if err != nil {
-		return nil
-	}
-	var patterns []string
-	for _, i := range modFile.Ignore {
-		patterns = append(patterns, i.Path)
-	}
-	return NewIgnorePatterns(patterns)
-}
diff --git a/src/cmd/go/internal/test/flagdefs.go b/src/cmd/go/internal/test/flagdefs.go
index 8aa0bfc2bf3120..372142467b8bf3 100644
--- a/src/cmd/go/internal/test/flagdefs.go
+++ b/src/cmd/go/internal/test/flagdefs.go
@@ -55,7 +55,6 @@ var passAnalyzersToVet = map[string]bool{
 	"directive":        true,
 	"errorsas":         true,
 	"framepointer":     true,
-	"hostport":         true,
 	"httpresponse":     true,
 	"ifaceassert":      true,
 	"loopclosure":      true,
diff --git a/src/cmd/go/internal/test/flagdefs_test.go b/src/cmd/go/internal/test/flagdefs_test.go
index 8a7ce1d7d6b85f..5461b2d1a52378 100644
--- a/src/cmd/go/internal/test/flagdefs_test.go
+++ b/src/cmd/go/internal/test/flagdefs_test.go
@@ -18,9 +18,6 @@ func TestMain(m *testing.M) {
 	os.Exit(m.Run())
 }
 
-// TestPassFlagToTest ensures that the generated table of flags is
-// consistent with output of "go tool vet -flags", using the installed
-// go command---so if it fails, you may need to re-run make.bash.
 func TestPassFlagToTest(t *testing.T) {
 	wantNames := genflags.ShortTestFlags()
 
diff --git a/src/cmd/go/internal/tool/tool.go b/src/cmd/go/internal/tool/tool.go
index 16e1a4f47f49c0..7033eb1d9c3587 100644
--- a/src/cmd/go/internal/tool/tool.go
+++ b/src/cmd/go/internal/tool/tool.go
@@ -18,7 +18,7 @@ import (
 	"os"
 	"os/exec"
 	"os/signal"
-	"path"
+	"path/filepath"
 	"slices"
 	"sort"
 	"strings"
@@ -26,7 +26,6 @@ import (
 	"cmd/go/internal/base"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
-	"cmd/go/internal/modindex"
 	"cmd/go/internal/modload"
 	"cmd/go/internal/str"
 	"cmd/go/internal/work"
@@ -102,20 +101,9 @@ func runTool(ctx context.Context, cmd *base.Command, args []string) {
 			}
 		}
 
-		// See if tool can be a builtin tool. If so, try to build and run it.
-		// buildAndRunBuiltinTool will fail if the install target of the loaded package is not
-		// the tool directory.
-		if tool := loadBuiltinTool(toolName); tool != "" {
-			// Increment a counter for the tool subcommand with the tool name.
-			counter.Inc("go/subcommand:tool-" + toolName)
-			buildAndRunBuiltinTool(ctx, toolName, tool, args[1:])
-			return
-		}
-
-		// Try to build and run mod tool.
 		tool := loadModTool(ctx, toolName)
 		if tool != "" {
-			buildAndRunModtool(ctx, toolName, tool, args[1:])
+			buildAndRunModtool(ctx, tool, args[1:])
 			return
 		}
 
@@ -128,7 +116,47 @@ func runTool(ctx context.Context, cmd *base.Command, args []string) {
 		counter.Inc("go/subcommand:tool-" + toolName)
 	}
 
-	runBuiltTool(toolName, nil, append([]string{toolPath}, args[1:]...))
+	if toolN {
+		cmd := toolPath
+		if len(args) > 1 {
+			cmd += " " + strings.Join(args[1:], " ")
+		}
+		fmt.Printf("%s\n", cmd)
+		return
+	}
+	args[0] = toolPath // in case the tool wants to re-exec itself, e.g. cmd/dist
+	toolCmd := &exec.Cmd{
+		Path:   toolPath,
+		Args:   args,
+		Stdin:  os.Stdin,
+		Stdout: os.Stdout,
+		Stderr: os.Stderr,
+	}
+	err = toolCmd.Start()
+	if err == nil {
+		c := make(chan os.Signal, 100)
+		signal.Notify(c)
+		go func() {
+			for sig := range c {
+				toolCmd.Process.Signal(sig)
+			}
+		}()
+		err = toolCmd.Wait()
+		signal.Stop(c)
+		close(c)
+	}
+	if err != nil {
+		// Only print about the exit status if the command
+		// didn't even run (not an ExitError) or it didn't exit cleanly
+		// or we're printing command lines too (-x mode).
+		// Assume if command exited cleanly (even with non-zero status)
+		// it printed any messages it wanted to print.
+		if e, ok := err.(*exec.ExitError); !ok || !e.Exited() || cfg.BuildX {
+			fmt.Fprintf(os.Stderr, "go tool %s: %s\n", toolName, err)
+		}
+		base.SetExitStatus(1)
+		return
+	}
 }
 
 // listTools prints a list of the available tools in the tools directory.
@@ -234,23 +262,6 @@ func defaultExecName(importPath string) string {
 	return p.DefaultExecName()
 }
 
-func loadBuiltinTool(toolName string) string {
-	if !base.ValidToolName(toolName) {
-		return ""
-	}
-	cmdTool := path.Join("cmd", toolName)
-	if !modindex.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, cmdTool) {
-		return ""
-	}
-	// Create a fake package and check to see if it would be installed to the tool directory.
-	// If not, it's not a builtin tool.
-	p := &load.Package{PackagePublic: load.PackagePublic{Name: "main", ImportPath: cmdTool, Goroot: true}}
-	if load.InstallTargetDir(p) != load.ToTool {
-		return ""
-	}
-	return cmdTool
-}
-
 func loadModTool(ctx context.Context, name string) string {
 	modload.InitWorkfile()
 	modload.LoadModFile(ctx)
@@ -277,42 +288,7 @@ func loadModTool(ctx context.Context, name string) string {
 	return ""
 }
 
-func buildAndRunBuiltinTool(ctx context.Context, toolName, tool string, args []string) {
-	// Override GOOS and GOARCH for the build to build the tool using
-	// the same GOOS and GOARCH as this go command.
-	cfg.ForceHost()
-
-	// Ignore go.mod and go.work: we don't need them, and we want to be able
-	// to run the tool even if there's an issue with the module or workspace the
-	// user happens to be in.
-	modload.RootMode = modload.NoRoot
-
-	runFunc := func(b *work.Builder, ctx context.Context, a *work.Action) error {
-		cmdline := str.StringList(a.Deps[0].BuiltTarget(), a.Args)
-		return runBuiltTool(toolName, nil, cmdline)
-	}
-
-	buildAndRunTool(ctx, tool, args, runFunc)
-}
-
-func buildAndRunModtool(ctx context.Context, toolName, tool string, args []string) {
-	runFunc := func(b *work.Builder, ctx context.Context, a *work.Action) error {
-		// Use the ExecCmd to run the binary, as go run does. ExecCmd allows users
-		// to provide a runner to run the binary, for example a simulator for binaries
-		// that are cross-compiled to a different platform.
-		cmdline := str.StringList(work.FindExecCmd(), a.Deps[0].BuiltTarget(), a.Args)
-		// Use same environment go run uses to start the executable:
-		// the original environment with cfg.GOROOTbin added to the path.
-		env := slices.Clip(cfg.OrigEnv)
-		env = base.AppendPATH(env)
-
-		return runBuiltTool(toolName, env, cmdline)
-	}
-
-	buildAndRunTool(ctx, tool, args, runFunc)
-}
-
-func buildAndRunTool(ctx context.Context, tool string, args []string, runTool work.ActorFunc) {
+func buildAndRunModtool(ctx context.Context, tool string, args []string) {
 	work.BuildInit()
 	b := work.NewBuilder("")
 	defer func() {
@@ -328,16 +304,23 @@ func buildAndRunTool(ctx context.Context, tool string, args []string, runTool wo
 
 	a1 := b.LinkAction(work.ModeBuild, work.ModeBuild, p)
 	a1.CacheExecutable = true
-	a := &work.Action{Mode: "go tool", Actor: runTool, Args: args, Deps: []*work.Action{a1}}
+	a := &work.Action{Mode: "go tool", Actor: work.ActorFunc(runBuiltTool), Args: args, Deps: []*work.Action{a1}}
 	b.Do(ctx, a)
 }
 
-func runBuiltTool(toolName string, env, cmdline []string) error {
+func runBuiltTool(b *work.Builder, ctx context.Context, a *work.Action) error {
+	cmdline := str.StringList(work.FindExecCmd(), a.Deps[0].BuiltTarget(), a.Args)
+
 	if toolN {
 		fmt.Println(strings.Join(cmdline, " "))
 		return nil
 	}
 
+	// Use same environment go run uses to start the executable:
+	// the original environment with cfg.GOROOTbin added to the path.
+	env := slices.Clip(cfg.OrigEnv)
+	env = base.AppendPATH(env)
+
 	toolCmd := &exec.Cmd{
 		Path:   cmdline[0],
 		Args:   cmdline,
@@ -361,17 +344,13 @@ func runBuiltTool(toolName string, env, cmdline []string) error {
 	}
 	if err != nil {
 		// Only print about the exit status if the command
-		// didn't even run (not an ExitError) or if it didn't exit cleanly
-		// or we're printing command lines too (-x mode).
+		// didn't even run (not an ExitError)
 		// Assume if command exited cleanly (even with non-zero status)
 		// it printed any messages it wanted to print.
-		e, ok := err.(*exec.ExitError)
-		if !ok || !e.Exited() || cfg.BuildX {
-			fmt.Fprintf(os.Stderr, "go tool %s: %s\n", toolName, err)
-		}
-		if ok {
+		if e, ok := err.(*exec.ExitError); ok {
 			base.SetExitStatus(e.ExitCode())
 		} else {
+			fmt.Fprintf(os.Stderr, "go tool %s: %s\n", filepath.Base(a.Deps[0].Target), err)
 			base.SetExitStatus(1)
 		}
 	}
diff --git a/src/cmd/go/internal/vcs/vcs.go b/src/cmd/go/internal/vcs/vcs.go
index ebcb2efb348650..acf9404aee1633 100644
--- a/src/cmd/go/internal/vcs/vcs.go
+++ b/src/cmd/go/internal/vcs/vcs.go
@@ -498,7 +498,6 @@ var vcsSvn = &Cmd{
 	Scheme:     []string{"https", "http", "svn", "svn+ssh"},
 	PingCmd:    "info -- {scheme}://{repo}",
 	RemoteRepo: svnRemoteRepo,
-	Status:     svnStatus,
 }
 
 func svnRemoteRepo(vcsSvn *Cmd, rootDir string) (remoteRepo string, err error) {
@@ -531,35 +530,6 @@ func svnRemoteRepo(vcsSvn *Cmd, rootDir string) (remoteRepo string, err error) {
 	return strings.TrimSpace(out), nil
 }
 
-func svnStatus(vcsSvn *Cmd, rootDir string) (Status, error) {
-	out, err := vcsSvn.runOutputVerboseOnly(rootDir, "info --show-item last-changed-revision")
-	if err != nil {
-		return Status{}, err
-	}
-	rev := strings.TrimSpace(string(out))
-
-	out, err = vcsSvn.runOutputVerboseOnly(rootDir, "info --show-item last-changed-date")
-	if err != nil {
-		return Status{}, err
-	}
-	commitTime, err := time.Parse(time.RFC3339, strings.TrimSpace(string(out)))
-	if err != nil {
-		return Status{}, fmt.Errorf("unable to parse output of svn info: %v", err)
-	}
-
-	out, err = vcsSvn.runOutputVerboseOnly(rootDir, "status")
-	if err != nil {
-		return Status{}, err
-	}
-	uncommitted := len(out) > 0
-
-	return Status{
-		Revision:    rev,
-		CommitTime:  commitTime,
-		Uncommitted: uncommitted,
-	}, nil
-}
-
 // fossilRepoName is the name go get associates with a fossil repository. In the
 // real world the file can be named anything.
 const fossilRepoName = ".fossil"
diff --git a/src/cmd/go/internal/version/version.go b/src/cmd/go/internal/version/version.go
index c26dd42b4e1a08..c5b69c0a7e6cf8 100644
--- a/src/cmd/go/internal/version/version.go
+++ b/src/cmd/go/internal/version/version.go
@@ -8,7 +8,6 @@ package version
 import (
 	"context"
 	"debug/buildinfo"
-	"encoding/json"
 	"errors"
 	"fmt"
 	"io/fs"
@@ -22,7 +21,7 @@ import (
 )
 
 var CmdVersion = &base.Command{
-	UsageLine: "go version [-m] [-v] [-json] [file ...]",
+	UsageLine: "go version [-m] [-v] [file ...]",
 	Short:     "print Go version",
 	Long: `Version prints the build information for Go binary files.
 
@@ -41,9 +40,6 @@ module version information, when available. In the output, the module
 information consists of multiple lines following the version line, each
 indented by a leading tab character.
 
-The -json flag is similar to -m but outputs the runtime/debug.BuildInfo in JSON format.
-If flag -json is specified without -m, go version reports an error.
-
 See also: go doc runtime/debug.BuildInfo.
 `,
 }
@@ -54,9 +50,8 @@ func init() {
 }
 
 var (
-	versionM    = CmdVersion.Flag.Bool("m", false, "")
-	versionV    = CmdVersion.Flag.Bool("v", false, "")
-	versionJson = CmdVersion.Flag.Bool("json", false, "")
+	versionM = CmdVersion.Flag.Bool("m", false, "")
+	versionV = CmdVersion.Flag.Bool("v", false, "")
 )
 
 func runVersion(ctx context.Context, cmd *base.Command, args []string) {
@@ -73,11 +68,6 @@ func runVersion(ctx context.Context, cmd *base.Command, args []string) {
 			argOnlyFlag = "-m"
 		} else if !base.InGOFLAGS("-v") && *versionV {
 			argOnlyFlag = "-v"
-		} else if !base.InGOFLAGS("-json") && *versionJson {
-			// Even though '-json' without '-m' should report an error,
-			// it reports 'no arguments' issue only because that error will be reported
-			// once the 'no arguments' issue is fixed by users.
-			argOnlyFlag = "-json"
 		}
 		if argOnlyFlag != "" {
 			fmt.Fprintf(os.Stderr, "go: 'go version' only accepts %s flag with arguments\n", argOnlyFlag)
@@ -92,12 +82,6 @@ func runVersion(ctx context.Context, cmd *base.Command, args []string) {
 		return
 	}
 
-	if !*versionM && *versionJson {
-		fmt.Fprintf(os.Stderr, "go: 'go version' with -json flag requires -m flag\n")
-		base.SetExitStatus(2)
-		return
-	}
-
 	for _, arg := range args {
 		info, err := os.Stat(arg)
 		if err != nil {
@@ -171,6 +155,7 @@ func scanFile(file string, info fs.FileInfo, mustPrint bool) bool {
 			if pathErr := (*os.PathError)(nil); errors.As(err, &pathErr) && filepath.Clean(pathErr.Path) == filepath.Clean(file) {
 				fmt.Fprintf(os.Stderr, "%v\n", file)
 			} else {
+
 				// Skip errors for non-Go binaries.
 				// buildinfo.ReadFile errors are not fine-grained enough
 				// to know if the file is a Go binary or not,
@@ -183,15 +168,6 @@ func scanFile(file string, info fs.FileInfo, mustPrint bool) bool {
 		return false
 	}
 
-	if *versionM && *versionJson {
-		bs, err := json.MarshalIndent(bi, "", "\t")
-		if err != nil {
-			base.Fatal(err)
-		}
-		fmt.Printf("%s\n", bs)
-		return true
-	}
-
 	fmt.Printf("%s: %s\n", file, bi.GoVersion)
 	bi.GoVersion = "" // suppress printing go version again
 	mod := bi.String()
diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go
index 0bf9ba1781b0f7..3497ad7a27dc3f 100644
--- a/src/cmd/go/internal/work/buildid.go
+++ b/src/cmd/go/internal/work/buildid.go
@@ -169,10 +169,10 @@ func (b *Builder) toolID(name string) string {
 
 		line := stdout.String()
 		f := strings.Fields(line)
-		if len(f) < 3 || f[0] != name && path != VetTool || f[1] != "version" || strings.Contains(f[2], "devel") && !strings.HasPrefix(f[len(f)-1], "buildID=") {
+		if len(f) < 3 || f[0] != name && path != VetTool || f[1] != "version" || f[2] == "devel" && !strings.HasPrefix(f[len(f)-1], "buildID=") {
 			base.Fatalf("go: parsing buildID from %s -V=full: unexpected output:\n\t%s", desc, line)
 		}
-		if strings.Contains(f[2], "devel") {
+		if f[2] == "devel" {
 			// On the development branch, use the content ID part of the build ID.
 			return contentID(f[len(f)-1])
 		}
@@ -642,7 +642,7 @@ func (b *Builder) updateBuildID(a *Action, target string) error {
 	sh := b.Shell(a)
 
 	if cfg.BuildX || cfg.BuildN {
-		sh.ShowCmd("", "%s # internal", joinUnambiguously(str.StringList("go", "tool", "buildid", "-w", target)))
+		sh.ShowCmd("", "%s # internal", joinUnambiguously(str.StringList(base.Tool("buildid"), "-w", target)))
 		if cfg.BuildN {
 			return nil
 		}
diff --git a/src/cmd/go/internal/work/cover.go b/src/cmd/go/internal/work/cover.go
index 62fcdb3fdad603..3b732569a8736c 100644
--- a/src/cmd/go/internal/work/cover.go
+++ b/src/cmd/go/internal/work/cover.go
@@ -7,6 +7,7 @@
 package work
 
 import (
+	"cmd/go/internal/base"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/str"
 	"cmd/internal/cov/covcmd"
@@ -24,7 +25,7 @@ import (
 func (b *Builder) CovData(a *Action, cmdargs ...any) ([]byte, error) {
 	cmdline := str.StringList(cmdargs...)
 	args := append([]string{}, cfg.BuildToolexec...)
-	args = append(args, "go", "tool", "covdata")
+	args = append(args, base.Tool("covdata"))
 	args = append(args, cmdline...)
 	return b.Shell(a).runOut(a.Objdir, nil, args)
 }
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index 63fd13f7544db3..8d47b8d5cfe3a5 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -2587,8 +2587,7 @@ func (b *Builder) gccArchArgs() []string {
 	case "arm":
 		return []string{"-marm"} // not thumb
 	case "s390x":
-		// minimum supported s390x version on Go is z13
-		return []string{"-m64", "-march=z13"}
+		return []string{"-m64", "-march=z196"}
 	case "mips64", "mips64le":
 		args := []string{"-mabi=64"}
 		if cfg.GOMIPS64 == "hardfloat" {
@@ -2759,7 +2758,6 @@ func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgo
 	// consists of the original $CGO_LDFLAGS (unchecked) and all the
 	// flags put together from source code (checked).
 	cgoenv := b.cCompilerEnv()
-	cgoenv = append(cgoenv, cfgChangedEnv...)
 	var ldflagsOption []string
 	if len(cgoLDFLAGS) > 0 {
 		flags := make([]string, len(cgoLDFLAGS))
diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go
index 39a1f5f74c228c..3a173efee88ae4 100644
--- a/src/cmd/go/internal/work/gc.go
+++ b/src/cmd/go/internal/work/gc.go
@@ -174,7 +174,8 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg, embedcfg
 		// code that uses those values to expect absolute paths.
 		args = append(args, fsys.Actual(f))
 	}
-	output, err = sh.runOut(base.Cwd(), cfgChangedEnv, args...)
+
+	output, err = sh.runOut(base.Cwd(), nil, args...)
 	return ofile, output, err
 }
 
@@ -396,7 +397,7 @@ func (gcToolchain) asm(b *Builder, a *Action, sfiles []string) ([]string, error)
 		ofile := a.Objdir + sfile[:len(sfile)-len(".s")] + ".o"
 		ofiles = append(ofiles, ofile)
 		args1 := append(args, "-o", ofile, fsys.Actual(mkAbs(p.Dir, sfile)))
-		if err := b.Shell(a).run(p.Dir, p.ImportPath, cfgChangedEnv, args1...); err != nil {
+		if err := b.Shell(a).run(p.Dir, p.ImportPath, nil, args1...); err != nil {
 			return nil, err
 		}
 	}
@@ -423,7 +424,7 @@ func (gcToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, erro
 			return err
 		}
 
-		return sh.run(p.Dir, p.ImportPath, cfgChangedEnv, args...)
+		return sh.run(p.Dir, p.ImportPath, nil, args...)
 	}
 
 	var symabis string // Only set if we actually create the file
@@ -482,7 +483,7 @@ func (gcToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) er
 	p := a.Package
 	sh := b.Shell(a)
 	if cfg.BuildN || cfg.BuildX {
-		cmdline := str.StringList("go", "tool", "pack", "r", absAfile, absOfiles)
+		cmdline := str.StringList(base.Tool("pack"), "r", absAfile, absOfiles)
 		sh.ShowCmd(p.Dir, "%s # internal", joinUnambiguously(cmdline))
 	}
 	if cfg.BuildN {
@@ -672,7 +673,7 @@ func (gcToolchain) ld(b *Builder, root *Action, targetPath, importcfg, mainpkg s
 		dir, targetPath = filepath.Split(targetPath)
 	}
 
-	env := cfgChangedEnv
+	env := []string{}
 	// When -trimpath is used, GOROOT is cleared
 	if cfg.BuildTrimpath {
 		env = append(env, "GOROOT=")
@@ -727,7 +728,7 @@ func (gcToolchain) ldShared(b *Builder, root *Action, toplevelactions []*Action,
 	// the output file path is recorded in the .gnu.version_d section.
 	dir, targetPath := filepath.Split(targetPath)
 
-	return b.Shell(root).run(dir, targetPath, cfgChangedEnv, cfg.BuildToolexec, base.Tool("link"), "-o", targetPath, "-importcfg", importcfg, ldflags)
+	return b.Shell(root).run(dir, targetPath, nil, cfg.BuildToolexec, base.Tool("link"), "-o", targetPath, "-importcfg", importcfg, ldflags)
 }
 
 func (gcToolchain) cc(b *Builder, a *Action, ofile, cfile string) error {
diff --git a/src/cmd/go/internal/work/gccgo.go b/src/cmd/go/internal/work/gccgo.go
index b42e92ea690981..bdd76f6364e14a 100644
--- a/src/cmd/go/internal/work/gccgo.go
+++ b/src/cmd/go/internal/work/gccgo.go
@@ -27,7 +27,6 @@ import (
 type gccgoToolchain struct{}
 
 var GccgoName, GccgoBin string
-var GccgoChanged bool
 var gccgoErr error
 
 func init() {
@@ -35,9 +34,6 @@ func init() {
 	if GccgoName == "" {
 		GccgoName = "gccgo"
 	}
-	if GccgoName != "gccgo" {
-		GccgoChanged = true
-	}
 	GccgoBin, gccgoErr = pathcache.LookPath(GccgoName)
 }
 
diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go
index e4e83dc8f9853e..adee7c027413ce 100644
--- a/src/cmd/go/internal/work/init.go
+++ b/src/cmd/go/internal/work/init.go
@@ -20,36 +20,12 @@ import (
 	"path/filepath"
 	"regexp"
 	"runtime"
-	"slices"
 	"strconv"
 	"sync"
 )
 
 var buildInitStarted = false
 
-// makeCfgChangedEnv is the environment to set to
-// override the current environment for GOOS, GOARCH, and the GOARCH-specific
-// architecture environment variable to the configuration used by
-// the go command. They may be different because go tool  for builtin
-// tools need to be built using the host configuration, so the configuration
-// used will be changed from that set in the environment. It is clipped
-// so its can append to it without changing it.
-var cfgChangedEnv []string
-
-func makeCfgChangedEnv() []string {
-	var env []string
-	if cfg.Getenv("GOOS") != cfg.Goos {
-		env = append(env, "GOOS="+cfg.Goos)
-	}
-	if cfg.Getenv("GOARCH") != cfg.Goarch {
-		env = append(env, "GOARCH="+cfg.Goarch)
-	}
-	if archenv, val, changed := cfg.GetArchEnv(); changed {
-		env = append(env, archenv+"="+val)
-	}
-	return slices.Clip(env)
-}
-
 func BuildInit() {
 	if buildInitStarted {
 		base.Fatalf("go: internal error: work.BuildInit called more than once")
@@ -60,8 +36,6 @@ func BuildInit() {
 	modload.Init()
 	instrumentInit()
 	buildModeInit()
-	cfgChangedEnv = makeCfgChangedEnv()
-
 	if err := fsys.Init(); err != nil {
 		base.Fatal(err)
 	}
diff --git a/src/cmd/go/internal/work/shell.go b/src/cmd/go/internal/work/shell.go
index 284ed26f223d7d..2604b074da9f73 100644
--- a/src/cmd/go/internal/work/shell.go
+++ b/src/cmd/go/internal/work/shell.go
@@ -178,7 +178,7 @@ func (sh *Shell) moveOrCopyFile(dst, src string, perm fs.FileMode, force bool) e
 	return sh.CopyFile(dst, src, perm, force)
 }
 
-// CopyFile is like 'cp src dst'.
+// copyFile is like 'cp src dst'.
 func (sh *Shell) CopyFile(dst, src string, perm fs.FileMode, force bool) error {
 	if cfg.BuildN || cfg.BuildX {
 		sh.ShowCmd("", "cp %s %s", src, dst)
diff --git a/src/cmd/go/testdata/mod/example.com_ignore_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_ignore_v1.0.0.txt
deleted file mode 100644
index ed205844229de6..00000000000000
--- a/src/cmd/go/testdata/mod/example.com_ignore_v1.0.0.txt
+++ /dev/null
@@ -1,11 +0,0 @@
--- .mod --
-module example.com/ignore
-
-ignore ./foo
--- .info --
-{"Version":"v1.0.0"}
-
--- foo/foo.go --
-package foo
-
-const Bar = "Hello from foo!"
\ No newline at end of file
diff --git a/src/cmd/go/testdata/script/build_dash_x.txt b/src/cmd/go/testdata/script/build_dash_x.txt
index c7a2c6fe671ca7..e5580a2cc69ed1 100644
--- a/src/cmd/go/testdata/script/build_dash_x.txt
+++ b/src/cmd/go/testdata/script/build_dash_x.txt
@@ -19,7 +19,7 @@ env GOCACHE=$WORK/tmp/cache
 # loading to properly affect the import graph.)
 go build runtime/cgo
 
-go build -x -o main ./...
+go build -x -o main main.go
 cp stderr commands.txt
 cat header.txt commands.txt
 cp stdout test.sh
@@ -42,13 +42,6 @@ import "C"
 func main() {
 	print("hello\n")
 }
--- go.mod --
-module example
-
-go 1.24
-
-ignore foo
--- foo/foo.txt --
 -- header.txt --
 set -e
 -- hello.txt --
diff --git a/src/cmd/go/testdata/script/build_git_sha256_go_get_branch.txt b/src/cmd/go/testdata/script/build_git_sha256_go_get_branch.txt
deleted file mode 100644
index fa5557b21e6d7f..00000000000000
--- a/src/cmd/go/testdata/script/build_git_sha256_go_get_branch.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-[short] skip
-[!git] skip
-
-env GOPRIVATE=vcs-test.golang.org
-
-go get vcs-test.golang.org/go/mod/gitrepo-sha256@basic_module
-stderr 'downloading vcs-test\.golang.org/go/mod/gitrepo-sha256 v1.3.0'
-
-go run .
-stdout '1234'
-
--- main.go --
-package main
-
-import (
-	"fmt"
-
-	sha256repo "vcs-test.golang.org/go/mod/gitrepo-sha256"
-)
-
-func main() {
-	fmt.Println(sha256repo.Foobar(1234))
-}
-
--- go.mod --
-module test
-
-go 1.24.3
diff --git a/src/cmd/go/testdata/script/build_git_sha256_moddep.txt b/src/cmd/go/testdata/script/build_git_sha256_moddep.txt
deleted file mode 100644
index e5bf209d895867..00000000000000
--- a/src/cmd/go/testdata/script/build_git_sha256_moddep.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-[short] skip
-[!git] skip
-
-env GOPRIVATE=vcs-test.golang.org
-
-go mod tidy
-stderr 'downloading vcs-test\.golang.org/go/mod/gitrepo-sha256 v1.3.0'
-
-go run .
-stdout '1234'
-
--- main.go --
-package main
-
-import (
-	"fmt"
-
-	sha256repo "vcs-test.golang.org/go/mod/gitrepo-sha256"
-)
-
-func main() {
-	fmt.Println(sha256repo.Foobar(1234))
-}
-
--- go.mod --
-module test
-
-go 1.24.3
-
-require vcs-test.golang.org/go/mod/gitrepo-sha256 v1.3.0
diff --git a/src/cmd/go/testdata/script/build_ignoredirective.txt b/src/cmd/go/testdata/script/build_ignoredirective.txt
deleted file mode 100644
index d3da9d6a0837d7..00000000000000
--- a/src/cmd/go/testdata/script/build_ignoredirective.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-# go build ./... should skip 'ignore' directives
-# See golang.org/issue/42965
-
-env ROOT=$WORK${/}gopath${/}src
-
-# no ignore directive; should not skip any directories.
-cp go.mod.orig go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/foo'
-stderr 'packagefile example/pkg/fo'
-! stderr 'ignoring directory'
-
-# ignored ./foo should be skipped.
-cp go.mod.relative go.mod
-go build -x ./...
-stderr 'packagefile example/pkg/foo'
-stderr 'packagefile example/pkg/fo'
-! stderr 'packagefile example/foo/secret'
-stderr 'ignoring directory '$ROOT''${/}'foo'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored foo; any foo should be skipped.
-cp go.mod.any go.mod
-go build -x ./...
-stderr 'packagefile example/pkg/fo'
-! stderr 'packagefile example/pkg/foo'
-! stderr 'packagefile example/foo/secret'
-stderr 'ignoring directory '$ROOT''${/}'foo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# non-existent ignore; should not skip any directories.
-cp go.mod.dne go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/foo'
-stderr 'packagefile example/pkg/fo'
-! stderr 'ignoring directory'
-
-# ignored fo; should not skip foo/ and should skip fo/
-cp go.mod.partial go.mod
-go build -x ./...
-! stderr 'ignoring directory '$ROOT''${/}'foo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'fo$'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored pkg/foo; should skip pkg/foo/
-cp go.mod.tree go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/fo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored /pkg/foo/; should skip pkg/foo/
-cp go.mod.sep1 go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/fo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored pkg/foo/; should skip pkg/foo/
-cp go.mod.sep2 go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/fo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored /pkg/foo; should skip pkg/foo/
-cp go.mod.sep3 go.mod
-go build -x ./...
-stderr 'packagefile example/foo/secret'
-stderr 'packagefile example/pkg/fo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
--- foo/secret/secret.go --
-package main
-func main() {}
--- pkg/foo/foo.go --
-package main
-func main() {}
--- pkg/fo/fo.go --
-package main
-func main() {}
--- go.mod.orig --
-module example
-
-go 1.24
-
--- go.mod.relative --
-module example
-
-go 1.24
-
-ignore ./foo
-
--- go.mod.any --
-module example
-
-go 1.24
-
-ignore foo
-
--- go.mod.dne --
-module example
-
-go 1.24
-
-ignore bar
-
--- go.mod.partial --
-module example
-
-go 1.24
-
-ignore fo
-
--- go.mod.tree --
-module example
-
-go 1.24
-
-ignore pkg/foo
-
--- go.mod.sep1 --
-module example
-
-go 1.24
-
-ignore /pkg/foo/
-
--- go.mod.sep2 --
-module example
-
-go 1.24
-
-ignore pkg/foo/
-
--- go.mod.sep3 --
-module example
-
-go 1.24
-
-ignore /pkg/foo
-
--- main.go --
-package main
-func main() {}
diff --git a/src/cmd/go/testdata/script/embed.txt b/src/cmd/go/testdata/script/embed.txt
index dcd250549b4e2c..0e6bb63737e047 100644
--- a/src/cmd/go/testdata/script/embed.txt
+++ b/src/cmd/go/testdata/script/embed.txt
@@ -95,29 +95,6 @@ go build -x
 [symlink] stderr 'x.go:5:12: pattern symdir/x.txt: cannot embed file symdir[\\/]x.txt: in non-directory symdir'
 [symlink] env 'GODEBUG='
 
-# build rejects names in subdirectories with invalid punctuation
-cp x.go6 x.go
-mkdir photos/subdir
-cp x.txt photos/subdir/foo.jpg
-cp x.txt 'photos/subdir/2022-07-22T15''02''45Z.jpg'
-! go build -x
-stderr '^x.go:5:12: pattern photos/\*: cannot embed file photos/subdir/2022-07-22T15''02''45Z.jpg: invalid name 2022-07-22T15''02''45Z.jpg$'
-[!GOOS:windows] mv 'photos/subdir/2022-07-22T15''02''45Z.jpg' photos/subdir/2022-07-22T15:02:45Z.jpg
-[!GOOS:windows] ! go build -x
-[!GOOS:windows] stderr '^x.go:5:12: pattern photos/\*: cannot embed file photos/subdir/2022-07-22T15:02:45Z.jpg: invalid name 2022-07-22T15:02:45Z.jpg$'
-rm photos
-
-# build ignores hidden names in subdirectories with invalid punctuation
-cp x.go6 x.go
-mkdir photos/subdir
-[!GOOS:windows] cp x.txt photos/subdir/.2022-07-22T15:02:45Z.jpg
-[!GOOS:windows] cp x.txt photos/subdir/_2022-07-22T15:02:45Z.jpg
-cp x.txt 'photos/subdir/.2022-07-22T15''02''45Z.jpg'
-cp x.txt 'photos/subdir/_2022-07-22T15''02''45Z.jpg'
-cp x.txt photos/subdir/foo.jpg
-go build -x
-rm photos
-
 -- x.go --
 package p
 
@@ -165,7 +142,6 @@ import "embed"
 
 //go:embed symdir/*
 var X embed.FS
-
 -- x.go5 --
 package p
 
@@ -173,15 +149,6 @@ import "embed"
 
 //go:embed symdir/x.txt
 var Z string
-
--- x.go6 --
-package p
-
-import "embed"
-
-//go:embed photos/*
-var X embed.FS
-
 -- x.txt --
 hello
 
diff --git a/src/cmd/go/testdata/script/env_changed.txt b/src/cmd/go/testdata/script/env_changed.txt
index da9560062704e6..5ba13b4dbfa085 100644
--- a/src/cmd/go/testdata/script/env_changed.txt
+++ b/src/cmd/go/testdata/script/env_changed.txt
@@ -11,8 +11,6 @@ env GO111MODULE=auto
 env CGO_CFLAGS=nodefault
 env CGO_CPPFLAGS=nodefault
 env GOFIPS140=latest
-[cgo] env CGO_ENABLED=0
-env GCCGO=nodefault
 
 go env -changed
 # linux output like GOTOOLCHAIN='local'
@@ -24,8 +22,6 @@ stdout 'GO111MODULE=''?auto''?'
 stdout 'CGO_CFLAGS=''?nodefault''?'
 stdout 'CGO_CPPFLAGS=''?nodefault''?'
 stdout 'GOFIPS140=''?latest''?'
-[cgo] stdout 'CGO_ENABLED=''?0''?'
-stdout 'GCCGO=''?nodefault''?'
 
 go env -changed -json
 stdout '"GOTOOLCHAIN": "local"'
@@ -35,8 +31,6 @@ stdout '"GO111MODULE": "auto"'
 stdout '"CGO_CFLAGS": "nodefault"'
 stdout '"CGO_CPPFLAGS": "nodefault"'
 stdout '"GOFIPS140": "latest"'
-[cgo] stdout '"CGO_ENABLED": "0"'
-stdout '"GCCGO": "nodefault"'
 
 [GOOS:windows] env GOOS=linux
 [!GOOS:windows] env GOOS=windows
diff --git a/src/cmd/go/testdata/script/install_backslash.txt b/src/cmd/go/testdata/script/install_backslash.txt
deleted file mode 100644
index adb359c8581a39..00000000000000
--- a/src/cmd/go/testdata/script/install_backslash.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# Issue #24233: allow backslash in path of command
-go install -n rsc.io\fortune@v1.0.0
-! stderr 'malformed'
-
-mkdir m
-cd m
-go mod init example.com/m
-go get rsc.io\fortune
-! stderr 'malformed'
-
-go install -n rsc.io\fortune@v1.0.0
-! stderr 'malformed'
diff --git a/src/cmd/go/testdata/script/list_empty_importpath.txt b/src/cmd/go/testdata/script/list_empty_importpath.txt
deleted file mode 100644
index 0960a7795d12ea..00000000000000
--- a/src/cmd/go/testdata/script/list_empty_importpath.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-! go list all
-! stderr 'panic'
-stderr 'invalid import path'
-
-# go list produces a package for 'p' but not for ''
-go list -e all
-cmp stdout wantlist.txt
--- wantlist.txt --
-example.com/e
--- go.mod --
-module example.com/e
-
-go 1.25
--- p.go --
-package p
-
-import ""
\ No newline at end of file
diff --git a/src/cmd/go/testdata/script/list_ignore.txt b/src/cmd/go/testdata/script/list_ignore.txt
deleted file mode 100644
index 2ba25ca29358b2..00000000000000
--- a/src/cmd/go/testdata/script/list_ignore.txt
+++ /dev/null
@@ -1,151 +0,0 @@
-# go list should skip 'ignore' directives
-# See golang.org/issue/42965
-
-env ROOT=$WORK${/}gopath${/}src
-
-# no ignore directive; should not skip any directories.
-cp go.mod.orig go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/foo'
-stdout 'example/pkg/fo$'
-! stderr 'ignoring directory'
-
-# ignored ./foo should be skipped.
-cp go.mod.relative go.mod
-go list -x ./...
-stdout 'example/pkg/foo'
-stdout 'example/pkg/fo$'
-! stdout 'example/foo/secret'
-stderr 'ignoring directory '$ROOT''${/}'foo'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored foo; any foo should be skipped.
-cp go.mod.any go.mod
-go list -x ./...
-stdout 'example/pkg/fo$'
-! stdout 'example/pkg/foo'
-! stdout 'example/foo/secret'
-stderr 'ignoring directory '$ROOT''${/}'foo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# non-existent ignore; should not skip any directories.
-cp go.mod.dne go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/foo'
-stdout 'example/pkg/fo$'
-! stderr 'ignoring directory'
-
-# ignored fo; should not skip foo/ and should skip fo/
-cp go.mod.partial go.mod
-go list -x ./...
-! stderr 'ignoring directory '$ROOT''${/}'foo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'fo$'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored pkg/foo; should skip pkg/foo/
-cp go.mod.tree go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/fo$'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored /pkg/foo/; should skip pkg/foo/
-cp go.mod.sep1 go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/fo$'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored pkg/foo/; should skip pkg/foo/
-cp go.mod.sep2 go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/fo$'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
-# ignored /pkg/foo; should skip pkg/foo/
-cp go.mod.sep3 go.mod
-go list -x ./...
-stdout 'example/foo/secret'
-stdout 'example/pkg/fo$'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-
--- foo/secret/secret.go --
-package secret
-
-const Secret = "this should be ignored"
--- pkg/foo/foo.go --
-package foo
-
-const Bar = "Hello from foo!"
--- pkg/fo/fo.go --
-package fo
-
-const Gar = "Hello from fo!"
--- go.mod.orig --
-module example
-
-go 1.24
-
--- go.mod.relative --
-module example
-
-go 1.24
-
-ignore ./foo
-
--- go.mod.any --
-module example
-
-go 1.24
-
-ignore foo
-
--- go.mod.dne --
-module example
-
-go 1.24
-
-ignore bar
-
--- go.mod.partial --
-module example
-
-go 1.24
-
-ignore fo
-
--- go.mod.tree --
-module example
-
-go 1.24
-
-ignore pkg/foo
-
--- go.mod.sep1 --
-module example
-
-go 1.24
-
-ignore /pkg/foo/
-
--- go.mod.sep2 --
-module example
-
-go 1.24
-
-ignore pkg/foo/
-
--- go.mod.sep3 --
-module example
-
-go 1.24
-
-ignore /pkg/foo
-
--- main.go --
-package main
-
-func main() {}
diff --git a/src/cmd/go/testdata/script/list_ignore_dependency.txt b/src/cmd/go/testdata/script/list_ignore_dependency.txt
deleted file mode 100644
index cafa2845b3f276..00000000000000
--- a/src/cmd/go/testdata/script/list_ignore_dependency.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-# go list should skip 'ignore' directives with respect to module boundaries.
-# See golang.org/issue/42965
-
-env ROOT=$WORK${/}gopath${/}src
-
-# Lists all packages known to the Go toolchain.
-# Since go list already does not traverse into other modules found in
-# subdirectories, it should only ignore the root node_modules.
-go list -x all
-stdout 'example$'
-stdout 'example/depA'
-stderr 'ignoring directory '$ROOT''${/}'node_modules'
-! stderr 'ignoring directory '$ROOT''${/}'depA'${/}'node_modules'
-
-# Lists all packages within the current Go module.
-# Since go list already does not traverse into other modules found in
-# subdirectories, it should only ignore the root node_modules.
-go list -x ./...
-stdout 'example$'
-stderr 'ignoring directory '$ROOT''${/}'node_modules'
-! stderr 'ignoring directory '$ROOT''${/}'depA'${/}'node_modules'
-
-# Lists all packages belonging to the module whose import path starts with
-# example.
-# In this case, go list will traverse into each module that starts with example.
-# So it should ignore the root node_modules and the subdirectories' node_modules.
-go list -x example/...
-stdout 'example$'
-stdout 'example/depA'
-stderr 'ignoring directory '$ROOT''${/}'node_modules'
-stderr 'ignoring directory '$ROOT''${/}'depA'${/}'node_modules'
-
-# Entering the submodule should now cause go list to ignore depA/node_modules.
-cd depA
-go list -x all
-stdout 'example/depA'
-stderr 'ignoring directory '$ROOT''${/}'depA'${/}'node_modules'
-! stderr 'ignoring directory '$ROOT''${/}'node_modules'
-
-go list -x ./...
-stdout 'example/depA'
-stderr 'ignoring directory '$ROOT''${/}'depA'${/}'node_modules'
-! stderr 'ignoring directory '$ROOT''${/}'node_modules'
-
--- depA/go.mod --
-module example/depA
-
-go 1.24
-ignore ./node_modules
--- depA/depA.go --
-package depA
-
-const Foo = "This is Foo!"
--- depA/node_modules/some_pkg/index.js --
-console.log("This should be ignored!");
--- node_modules/some_pkg/index.js --
-console.log("This should be ignored!");
--- go.mod --
-module example
-
-go 1.24
-
-ignore ./node_modules
-require example/depA v1.0.0
-replace example/depA => ./depA
-
--- main.go --
-package main
-import (
-        "fmt"
-        "example/depA"
-)
-func main() {
-        fmt.Println("test")
-        fmt.Println(depA.Foo)
-}
diff --git a/src/cmd/go/testdata/script/list_ignore_modcache.txt b/src/cmd/go/testdata/script/list_ignore_modcache.txt
deleted file mode 100644
index 2cb8ed6ee24509..00000000000000
--- a/src/cmd/go/testdata/script/list_ignore_modcache.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# go list should skip 'ignore' directives for indexed modules in the module cache
-# See golang.org/issue/42965
-
-env GOMODCACHE=$WORK${/}modcache
-go get example.com/ignore/...@v1.0.0
-go list -x example.com/ignore/...
-stderr 'ignoring directory '$GOMODCACHE''${/}'example.com'${/}'ignore@v1.0.0'${/}'foo'
-
--- go.mod --
-module example
-
-go 1.24
-
--- main.go --
-package main
-
-func main() {}
\ No newline at end of file
diff --git a/src/cmd/go/testdata/script/list_ignore_workspace.txt b/src/cmd/go/testdata/script/list_ignore_workspace.txt
deleted file mode 100644
index 609e97620078d4..00000000000000
--- a/src/cmd/go/testdata/script/list_ignore_workspace.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-# go list should skip 'ignore' directives in workspaces
-# See golang.org/issue/42965
-
-env ROOT=$WORK${/}gopath${/}src
-
-# go list ./... should only consider the current module's ignore directive
-cd moduleA
-go list -x ./...
-stdout 'moduleA$'
-stdout 'moduleA/pkg$'
-stderr 'ignoring directory '$ROOT''${/}'moduleA'${/}'node_modules'
-
-# go list ./... should only consider the current module's ignore directive
-cd ../moduleB
-go list -x ./...
-stdout 'moduleB$'
-! stdout 'moduleB/pkg/helper'
-stderr 'ignoring directory '$ROOT''${/}'moduleB'${/}'pkg'
-
-# go list should respect module boundaries for ignore directives.
-# moduleA ignores './node_modules', moduleB ignores 'pkg'
-cd ..
-go list -x all
-stderr 'ignoring directory '$ROOT''${/}'moduleA'${/}'node_modules'
-stderr 'ignoring directory '$ROOT''${/}'moduleB'${/}'pkg'
-! stderr 'ignoring directory '$ROOT''${/}'moduleA'${/}'pkg'
-stdout 'moduleA$'
-stdout 'moduleA/pkg$'
-stdout 'moduleB$'
-stdout 'moduleB/pkg/helper'
-
--- go.work --
-go 1.24
-
-use (
-    ./moduleA
-    ./moduleB
-)
-
--- moduleA/go.mod --
-module moduleA
-
-go 1.24
-
-ignore ./node_modules
-
--- moduleA/main.go --
-package main
-
-import (
-        "fmt"
-        "moduleB/pkg/helper"
-)
-
-func main() {
-        fmt.Println("Running moduleA")
-        fmt.Println(helper.Message())
-        fmt.Println(hello.Hello())
-}
--- moduleA/node_modules/some_pkg/index.js --
-console.log("This should be ignored!");
--- moduleA/pkg/hello.go --
-package hello
-
-func Hello() string {
-        return "Hello from moduleA"
-}
--- moduleB/go.mod --
-module moduleB
-
-go 1.24
-
-ignore pkg
-
--- moduleB/main.go --
-package main
-
-import "fmt"
-
-func main() {
-        fmt.Println("Running moduleB")
-}
-
--- moduleB/pkg/helper/helper.go --
-package helper
-
-func Message() string {
-        return "Helper from moduleB"
-}
diff --git a/src/cmd/go/testdata/script/mod_download_git_bareRepository_sha256.txt b/src/cmd/go/testdata/script/mod_download_git_bareRepository_sha256.txt
deleted file mode 100644
index 9e8dc3c0150d7f..00000000000000
--- a/src/cmd/go/testdata/script/mod_download_git_bareRepository_sha256.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-[short] skip
-[!git] skip
-
-# This is a git sha256-mode copy of mod_download_git_bareRepository
-
-# Redirect git to a test-specific .gitconfig.
-# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer.
-# For older git versions we also set $HOME.
-env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig
-env HOME=$WORK${/}home${/}gopher
-exec git config --global --show-origin user.name
-stdout 'Go Gopher'
-
-env GOPRIVATE=vcs-test.golang.org
-
-go mod download -x
-
--- go.mod --
-module test
-
-go 1.18
-
-require vcs-test.golang.org/git/gitrepo-sha256.git v1.2.3
-
--- $WORK/home/gopher/.gitconfig --
-[user]
-	name = Go Gopher
-	email = gopher@golang.org
-[safe]
-	bareRepository = explicit
diff --git a/src/cmd/go/testdata/script/mod_edit.txt b/src/cmd/go/testdata/script/mod_edit.txt
index 6b7dd2c2c5e21c..e52575683327b5 100644
--- a/src/cmd/go/testdata/script/mod_edit.txt
+++ b/src/cmd/go/testdata/script/mod_edit.txt
@@ -107,16 +107,6 @@ cmpenv go.mod go.mod.edit
 go mod edit -droptool example.com/tool
 cmpenv go.mod go.mod.start
 
-# go mod edit -ignore
-cd $WORK/i
-cp go.mod.start go.mod
-go mod edit -ignore example.com/ignore
-cmpenv go.mod go.mod.edit
-go mod edit -dropignore example.com/ignore2
-cmpenv go.mod go.mod.edit
-go mod edit -dropignore example.com/ignore
-cmpenv go.mod go.mod.start
-
 -- x.go --
 package x
 
@@ -205,8 +195,7 @@ require x.3 v1.99.0
 			"High": "v1.4.0"
 		}
 	],
-	"Tool": null,
-	"Ignore": null
+	"Tool": null
 }
 -- $WORK/go.mod.edit3 --
 module x.x/y/z
@@ -344,8 +333,7 @@ retract (
 			"Rationale": "c"
 		}
 	],
-	"Tool": null,
-	"Ignore": null
+	"Tool": null
 }
 -- $WORK/go.mod.deprecation --
 // Deprecated: and the new one is not ready yet
@@ -360,8 +348,7 @@ module m
 	"Exclude": null,
 	"Replace": null,
 	"Retract": null,
-	"Tool": null,
-	"Ignore": null
+	"Tool": null
 }
 -- $WORK/go.mod.empty --
 -- $WORK/go.mod.empty.json --
@@ -373,8 +360,7 @@ module m
 	"Exclude": null,
 	"Replace": null,
 	"Retract": null,
-	"Tool": null,
-	"Ignore": null
+	"Tool": null
 }
 -- $WORK/g/go.mod.start --
 module g
@@ -396,13 +382,3 @@ module g
 go 1.24
 
 tool example.com/tool
--- $WORK/i/go.mod.start --
-module g
-
-go 1.24
--- $WORK/i/go.mod.edit --
-module g
-
-go 1.24
-
-ignore example.com/ignore
\ No newline at end of file
diff --git a/src/cmd/go/testdata/script/mod_find.txt b/src/cmd/go/testdata/script/mod_find.txt
index 748713cdf37c0c..9c2037b6e0fc64 100644
--- a/src/cmd/go/testdata/script/mod_find.txt
+++ b/src/cmd/go/testdata/script/mod_find.txt
@@ -24,6 +24,12 @@ cp $devnull go.mod # can't use touch to create it because Windows
 ! go mod init
 stderr 'go.mod already exists'
 
+# Module path from Godeps/Godeps.json overrides GOPATH.
+cd $GOPATH/src/example.com/x/y/z
+go mod init
+stderr 'unexpected.com/z'
+rm go.mod
+
 # Empty directory outside GOPATH fails.
 mkdir $WORK/empty
 cd $WORK/empty
diff --git a/src/cmd/go/testdata/script/mod_get_nopkgs.txt b/src/cmd/go/testdata/script/mod_get_nopkgs.txt
index e2bfdf30a8d860..14176a7dc8786d 100644
--- a/src/cmd/go/testdata/script/mod_get_nopkgs.txt
+++ b/src/cmd/go/testdata/script/mod_get_nopkgs.txt
@@ -29,10 +29,6 @@ stderr '^go: example\.net/emptysubdir/subdir/\.\.\.: module example\.net/emptysu
 ! go get builtin/...  # in GOROOT/src, but contains no packages
 stderr '^go: builtin/...: malformed module path "builtin": missing dot in first path element$'
 
-cd ../subdirmod
-go get work
-stderr -count=1 'matched no packages'
-
 -- go.mod --
 module example.net/emptysubdir
 
@@ -42,7 +38,3 @@ go 1.16
 package emptysubdir
 -- subdir/README.txt --
 This module intentionally does not contain any p
--- subdirmod/go.mod --
-module example.net/emptysubdir/subdirmod
-
-go 1.16
diff --git a/src/cmd/go/testdata/script/mod_get_work.txt b/src/cmd/go/testdata/script/mod_get_work.txt
deleted file mode 100644
index 39c7ea6beba42a..00000000000000
--- a/src/cmd/go/testdata/script/mod_get_work.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-# Test go get with the work pattern.
-
-# go get work gets dependencies to satisfy missing imports in the
-# main modules' package graph. Before the 'work' pattern existed, users
-# would have to run './...' in the root of the work (main) module.
-cp go.mod go.mod.orig
-go get work
-cmp go.mod go.mod.want
-
-# 'go get work' and 'go get all' behave very differently. Because
-# 'all' evaluates to work packages but also to their dependencies,
-# 'go get all' will run the 'get' logic on all the dependency module
-# packages, bumping all their modules to the latest versions.
-cp go.mod.orig go.mod
-go get all
-cmp go.mod go.mod.all.want
--- go.mod --
-module example.com/a
-
-go 1.25
--- go.mod.want --
-module example.com/a
-
-go 1.25
-
-require rsc.io/quote v1.5.2
-
-require (
-	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
-	rsc.io/sampler v1.3.0 // indirect
-)
--- go.mod.all.want --
-module example.com/a
-
-go 1.25
-
-require rsc.io/quote v1.5.2
-
-require (
-	golang.org/x/text v0.3.0 // indirect
-	rsc.io/sampler v1.99.99 // indirect
-)
--- a.go --
-package a
-
-import _ "rsc.io/quote"
diff --git a/src/cmd/go/testdata/script/mod_get_workspace_incomplete.txt b/src/cmd/go/testdata/script/mod_get_workspace_incomplete.txt
deleted file mode 100644
index 89340ffb5735f1..00000000000000
--- a/src/cmd/go/testdata/script/mod_get_workspace_incomplete.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-# Enter the first set of test cases. In this test case, package
-# example.com/m has an import of example.com/n, which is also
-# in the workspace, but is not required by example.com/m, and does not exist
-# upstream. It also has an import of rsc.io/quote, which
-# is also not required by example.com/m but does exist upstream. get should resolve
-# rsc.io/quote and not try to resolve example.com/n.
-cd m
-cp go.mod go.mod.orig
-
-# Test go get with an incomplete module using a local query.
-cp go.mod.orig go.mod
-go get
-cmp go.mod go.mod.want
-cmp go.sum go.sum.want
-
-# Test go get with an incomplete module using a wildcard query.
-cp go.mod.orig go.mod
-rm go.sum
-go get ./...
-cmp go.mod go.mod.want
-cmp go.sum go.sum.want
-
-# Test go get with an incomplete module using a "work" query.
-cp go.mod.orig go.mod
-rm go.sum
-go get work
-cmp go.mod go.mod.want
-cmp go.sum go.sum.want
-
-# Test go get with an incomplete module using a path query that can be resolved.
-cp go.mod.orig go.mod
-rm go.sum
-go get rsc.io/quote
-cmp go.mod go.mod.want.path_query # query wasn't resolved through import, so don't know if it's direct
-cmp go.sum go.sum.want
-
-# Test go get with a path query that is to a workspace module but that can't be resolved.
-# Normally, when we encounter an unresolved import of a workspace module, it's
-# ignored, but a path query of the module was asked for explicitly and isn't ignored.
-cp go.mod.orig go.mod
-rm go.sum
-! go get example.com/n
-# The following error is returned because module example.com does exist in the proxy we use
-# to run these tests, and because its is a prefix of example.com/n, it is a candidate to
-# satisfy the import.
-stderr 'module example.com@upgrade found \(v1\.0\.0\), but does not contain package example.com/n'
-
-# Test go get with an incomplete module using an "all" query.
-cp go.mod.orig go.mod
-rm go.sum
-go get all
-cmp go.mod go.mod.want.all # all loads a different graph so the requirements get bumped up
-cmp go.sum go.sum.want.all
-
-# Test go get with an incomplete module using a tool query
-# The hastool directory has its own go.work file than includes example.com/n and hastool.
-cd ../hastool
-go get tool
-cmp go.mod go.mod.want
-
-# Test that missing imports from loading the workspace are reported.
-# In this example, there is a workspace with the
-# example.com/missingworkspaceimport and example.com/withmissing modules.
-# missingworkspaceimport imports withmissing, and withmissing in turn
-# imports rsc.io/quote, but doesn't have a requirement on it.
-# The get operation won't resolve rsc.io/quote because it doesn't
-# appear in the missingworkspaceimport's module graph, and the
-# workspace will fail to load in checkPackageProblems because of the missing import.
-cd ../missingworkspaceimport
-! go get ./...
-stderr 'cannot find module providing package rsc.io/quote'
-
-# Test that missing imports are not reported if they're not in the package
-# graph. This test case is the same as the above except that there's no
-# import from the missingworkspaceimport package to the one that
-# imports the unresolved rsc.io/quote dependency. The example.com/missingworkspaceimport
-# package imports example.com/withmissing/other so it still depends on the example.com/missing
-# module, but not on the withmissing package itself. The example.com/withmissing
-# module still has an import on the rsc.io/quote package, but the package
-# with the import doesn't appear in the loaded package graph.
-cd ../missingworkspaceimport_disconnected
-go get ./...
-
-# Test that deprecations are reported using the workspace.
-# First, the control case: without the workspace, the deprecated module
-# is an indirect dependency of example.com/withdeprecation/indirect,
-# so we shouldn't get a deprecation warning.
-cd ../withdeprecation/indirect
-cp go.mod go.mod.orig
-env GOWORK=off
-go get ./...
-! stderr 'is deprecated'
-cmp go.mod go.mod.want
-# Now, in the workspace, we should get a deprecation warning, because
-# the deprecated module is a direct dependency of example.com/withdeprecation/direct, which
-# is a workspace module.
-cp go.mod.orig go.mod
-env GOWORK=
-go get ./...
-stderr 'go: module example.com/deprecated/b is deprecated: in example.com/deprecated/b@v1.9.0'
-cmp go.mod go.mod.want
-
-# Test that retractions are reported using the workspace.
-# First, the control case. Even though a workspace module depends on
-# a retracted version, because we didn't ask for it on the command line,
-# we didn't resolve that retracted module to satisfy an import,
-# or need it to build a requested package, we don't produce the warning.
-cd ../../withretraction/doesnotrequireretracted
-cp go.mod go.mod.orig
-go get rsc.io/quote
-! stderr 'retracted'
-# If we do request a non-retracted version of the module but the workspace
-# is off, we also won't see the retraction warning because the retracted
-# module isn't selected in the graph.
-cp go.mod.orig go.mod
-env GOWORK=off
-go get example.com/retract@v1.0.0-good
-! stderr 'retracted'
-# Now, with the workspace on, because example.com/retract@v1.0.0-unused
-# is a higher version, it will be selected and the retraction will
-# be reported.
-cp go.mod.orig go.mod
-env GOWORK=
-go get example.com/retract@v1.0.0-good
-stderr 'retracted'
-# Finally, with the workspace on, if the other workspace depends on
-# example.com/retract@v1.0.0-bad rather than 'v1.0.0-unused', because
-# 'v1.0.0-bad' is considered a lower version than 'v1.0.0-good', 'v1.0.0-good'
-# will be selected and the deprecation will not be reported.
-cp go.mod.orig go.mod
-cd ../requiresretracted
-go get example.com/retract@v1.0.0-bad # set the verison to 'v1.0.0-bad'
-stderr 'retracted'
-cd ../doesnotrequireretracted
-go get example.com/retract@v1.0.0-good
-! stderr 'retracted'
-
--- go.work --
-go 1.25
-
-use (
-	m
-	n
-)
--- q/go.mod --
-module example.com/q
-
-go 1.25
--- q/q.go --
-package q
-
-import "rsc.io/quote"
-
-func Q() {
-	quote.Hello()
-}
--- m/go.mod --
-module example.com/m
-
-go 1.25
--- m/go.mod.want --
-module example.com/m
-
-go 1.25
-
-require rsc.io/quote v1.5.2
-
-require (
-	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
-	rsc.io/sampler v1.3.0 // indirect
-)
--- m/go.mod.want.path_query --
-module example.com/m
-
-go 1.25
-
-require (
-	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
-	rsc.io/quote v1.5.2 // indirect
-	rsc.io/sampler v1.3.0 // indirect
-)
--- m/go.sum.want --
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:pvCbr/wm8HzDD3fVywevekufpn6tCGPY3spdHeZJEsw=
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-rsc.io/quote v1.5.2 h1:3fEykkD9k7lYzXqCYrwGAf7iNhbk4yCjHmKBN9td4L0=
-rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
-rsc.io/sampler v1.3.0 h1:HLGR/BgEtI3r0uymSP/nl2uPLsUnNJX8toRyhfpBTII=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
--- m/go.mod.want.all --
-module example.com/m
-
-go 1.25
-
-require rsc.io/quote v1.5.2
-
-require (
-	golang.org/x/text v0.3.0 // indirect
-	rsc.io/sampler v1.99.99 // indirect
-)
--- m/go.sum.want.all --
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0 h1:ivTorhoiROmZ1mcs15mO2czVF0uy0tnezXpBVNzgrmA=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-rsc.io/quote v1.5.2 h1:3fEykkD9k7lYzXqCYrwGAf7iNhbk4yCjHmKBN9td4L0=
-rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-rsc.io/sampler v1.99.99 h1:iMG9lbEG/8MdeR4lgL+Q8IcwbLNw7ijW7fTiK8Miqts=
-rsc.io/sampler v1.99.99/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
--- m/m.go --
-package m
-
-import (
-	"example.com/n"
-	"rsc.io/quote"
-)
-
-func M() {
-	n.Hello()
-	quote.Hello()
-}
--- n/go.mod --
-module example.com/n
-
-go 1.25
--- n/n.go --
-package n
-
-func Hello() {
-}
--- hastool/go.work --
-go 1.25
-
-use (
-	.
-	../n
-)
--- hastool/go.mod --
-module example.com/hastool
-
-go 1.25
-
-tool rsc.io/fortune
--- hastool/go.mod.want --
-module example.com/hastool
-
-go 1.25
-
-tool rsc.io/fortune
-
-require (
-	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
-	rsc.io/fortune v1.0.0 // indirect
-	rsc.io/quote v1.5.2 // indirect
-	rsc.io/sampler v1.3.0 // indirect
-)
--- hastool/p.go --
-package hastool
-
-import "example.com/n"
-
-func T() {
-	n.Hello()
-}
--- missingworkspaceimport/go.work --
-go 1.25
-
-use (
-	.
-	withmissing
-)
--- missingworkspaceimport/go.mod --
-module example.com/missingworkspaceimport
-
-go 1.25
--- missingworkspaceimport/m.go --
-package m
-
-import _ "example.com/withmissing"
--- missingworkspaceimport/withmissing/go.mod --
-module example.com/withmissing
-
-go 1.25
--- missingworkspaceimport/withmissing/w.go --
-package w
-
-import _ "rsc.io/quote"
--- missingworkspaceimport_disconnected/go.work --
-go 1.25
-
-use (
-	.
-	withmissing
-)
--- missingworkspaceimport_disconnected/go.mod --
-module example.com/missingworkspaceimport
-
-go 1.25
--- missingworkspaceimport_disconnected/m.go --
-package m
-
-import _ "example.com/withmissing/other"
--- missingworkspaceimport_disconnected/withmissing/go.mod --
-module example.com/withmissing
-
-go 1.25
--- missingworkspaceimport_disconnected/withmissing/w.go --
-package w
-
-import _ "rsc.io/quote"
--- missingworkspaceimport_disconnected/withmissing/other/other.go --
-package other
--- withdeprecation/go.work --
-go 1.25
-
-use (
-	indirect
-	direct
-)
-
-replace example.com/requiresdeprecatednotworkspace => ./requiresdeprecatednotworkspace
--- withdeprecation/indirect/go.mod --
-module example.com/withdeprecation/indirect
-
-go 1.25
-
-replace example.com/requiresdeprecatednotworkspace => ../requiresdeprecatednotworkspace
--- withdeprecation/indirect/go.mod.want --
-module example.com/withdeprecation/indirect
-
-go 1.25
-
-replace example.com/requiresdeprecatednotworkspace => ../requiresdeprecatednotworkspace
-
-require example.com/requiresdeprecatednotworkspace v0.0.0-00010101000000-000000000000
-
-require example.com/deprecated/b v1.9.0 // indirect
--- withdeprecation/indirect/go.mod.want.direct --
-module example.com/withdeprecation/indirect
-
-go 1.25
-
-replace example.com/requiresdeprecatednotworkspace => ../requiresdeprecatednotworkspace
-
-require example.com/requiresdeprecatednotworkspace v0.0.0-00010101000000-000000000000
-
-require example.com/deprecated/b v1.9.0
--- withdeprecation/indirect/a.go --
-package indirect
-
-import "example.com/requiresdeprecatednotworkspace"
--- withdeprecation/direct/go.mod --
-module example.com/withdeprecation/direct
-
-go 1.25
-
-require "example.com/deprecated/b" v1.9.0
--- withdeprecation/direct/import.go --
-package direct
-
-import "example.com/deprecated/b"
--- withdeprecation/requiresdeprecatednotworkspace/go.mod --
-module example.com/requiresdeprecatednotworkspace
-
-go 1.25
--- withdeprecation/requiresdeprecatednotworkspace/a.go --
-package a
-
-import "example.com/deprecated/b"
--- withretraction/go.work --
-go 1.25
-
-use (
-	doesnotrequireretracted
-	requiresretracted
-)
--- withretraction/doesnotrequireretracted/go.mod --
-module example.com/withretraction/doesnotrequireretracted
-
-go 1.25
--- withretraction/requiresretracted/go.mod --
-module example.com/withretraction/requiresretracted
-
-go 1.25
-
-require example.com/retract v1.0.0-unused
diff --git a/src/cmd/go/testdata/script/mod_tidy_ignore.txt b/src/cmd/go/testdata/script/mod_tidy_ignore.txt
deleted file mode 100644
index d3019bb467fc0c..00000000000000
--- a/src/cmd/go/testdata/script/mod_tidy_ignore.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-# go mod tidy should skip 'ignore' directives
-# See golang.org/issue/42965
-env ROOT=$WORK${/}gopath${/}src
-
-# no ignore directive; should not skip any directories.
-cp go.mod.orig go.mod
-go mod tidy -x
-! stderr 'ignoring directory'
-
-# ignored ./foo should be skipped.
-cp go.mod.relative go.mod
-go mod tidy -x
-stderr 'ignoring directory '$ROOT''${/}'foo'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'fo$'
-
-# ignored foo; any foo should be skipped.
-cp go.mod.any go.mod
-go mod tidy -x
-stderr 'ignoring directory '$ROOT''${/}'foo'
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'fo$'
-
-# non-existent ignore; should not skip any directories.
-cp go.mod.dne go.mod
-go mod tidy -x
-! stderr 'ignoring directory'
-
-# ignored fo; should not skip foo/ but should skip fo/
-cp go.mod.partial go.mod
-go mod tidy -x
-stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'fo$'
-! stderr 'ignoring directory '$ROOT''${/}'pkg'${/}'foo'
--- foo/secret/secret.go --
-package secret
-
-const Secret = "this should be ignored"
--- pkg/foo/foo.go --
-package example/pkg/foo
-
-const Bar = "Hello from foo!"
--- pkg/fo/fo.go --
-package fo
-
-const Gar = "Hello from fo!"
--- go.mod.orig --
-module example
-
-go 1.24
--- go.mod.relative --
-module example
-
-go 1.24
-
-ignore ./foo
--- go.mod.any --
-module example
-
-go 1.24
-
-ignore foo
--- go.mod.dne --
-module example
-
-go 1.24
-
-ignore bar
--- go.mod.partial --
-module example
-
-go 1.24
-
-ignore fo
-
--- main.go --
-package main
-
-func main() {}
diff --git a/src/cmd/go/testdata/script/test_cleanup_failnow.txt b/src/cmd/go/testdata/script/test_cleanup_failnow.txt
index 8f39d98852ec20..80182cd9e3fae9 100644
--- a/src/cmd/go/testdata/script/test_cleanup_failnow.txt
+++ b/src/cmd/go/testdata/script/test_cleanup_failnow.txt
@@ -14,8 +14,8 @@ env GOGC=off
 
 ! go test -v cleanup_failnow/panic_nocleanup_test.go
 ! stdout 'no tests to run'
-stdout '(?s)panic: die \[recovered, repanicked\]'
-! stdout '(?s)panic: die \[recovered, repanicked\].*panic: die'
+stdout '(?s)panic: die \[recovered, reraised\]'
+! stdout '(?s)panic: die \[recovered, reraised\].*panic: die'
 
 ! go test -v cleanup_failnow/panic_withcleanup_test.go
 ! stdout 'no tests to run'
diff --git a/src/cmd/go/testdata/script/test_fuzz_return.txt b/src/cmd/go/testdata/script/test_fuzz_return.txt
index c0540efb23342d..d86783e9cb9bb1 100644
--- a/src/cmd/go/testdata/script/test_fuzz_return.txt
+++ b/src/cmd/go/testdata/script/test_fuzz_return.txt
@@ -3,7 +3,7 @@
 # Disable vet, as its "tests" analyzer would report the same problem statically.
 
 ! go test -vet=off .
-stdout '^panic: testing: fuzz target must not return a value \[recovered, repanicked\]$'
+stdout '^panic: testing: fuzz target must not return a value \[recovered, reraised\]$'
 
 -- go.mod --
 module test
diff --git a/src/cmd/go/testdata/script/test_json_build.txt b/src/cmd/go/testdata/script/test_json_build.txt
index 2a572ace723361..df8863ae03287f 100644
--- a/src/cmd/go/testdata/script/test_json_build.txt
+++ b/src/cmd/go/testdata/script/test_json_build.txt
@@ -56,7 +56,7 @@ stdout '"Action":"fail","Package":"m/cycle/p","Elapsed":.*,"FailedBuild":"m/cycl
 ! go test -json -o=$devnull ./veterror
 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"# m/veterror\\n"'
 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"# \[m/veterror\]\\n"'
-stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"veterror(/|\\\\)main_test.go:9:21: fmt.Printf format %s reads arg #1, but call has 0 args\\n"'
+stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"veterror(/|\\\\)main_test.go:9:9: fmt.Printf format %s reads arg #1, but call has 0 args\\n"'
 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-fail"'
 stdout '"Action":"start","Package":"m/veterror"'
 stdout '"Action":"output","Package":"m/veterror","Output":"FAIL\\tm/veterror \[build failed\]\\n"'
diff --git a/src/cmd/go/testdata/script/tool_build_as_needed.txt b/src/cmd/go/testdata/script/tool_build_as_needed.txt
deleted file mode 100644
index 8868ed3085b490..00000000000000
--- a/src/cmd/go/testdata/script/tool_build_as_needed.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-[short] skip 'builds and runs go programs'
-[!symlink] skip 'uses symlinks to construct a GOROOT'
-
-env NEWGOROOT=$WORK${/}goroot
-env TOOLDIR=$GOROOT/pkg/tool/${GOOS}_${GOARCH}
-# Use ${/} in paths we'll check for in stdout below, so they contain '\' on Windows
-env NEWTOOLDIR=$NEWGOROOT${/}pkg${/}tool${/}${GOOS}_${GOARCH}
-mkdir $NEWGOROOT $NEWGOROOT/bin $NEWTOOLDIR
-[symlink] symlink $NEWGOROOT/src -> $GOROOT/src
-[symlink] symlink $NEWGOROOT/pkg/include -> $GOROOT/pkg/include
-[symlink] symlink $NEWGOROOT/bin/go -> $GOROOT/bin/go
-[symlink] symlink $NEWTOOLDIR/compile$GOEXE -> $TOOLDIR/compile$GOEXE
-[symlink] symlink $NEWTOOLDIR/cgo$GOEXE -> $TOOLDIR/cgo$GOEXE
-[symlink] symlink $NEWTOOLDIR/link$GOEXE -> $TOOLDIR/link$GOEXE
-[symlink] symlink $NEWTOOLDIR/asm$GOEXE -> $TOOLDIR/asm$GOEXE
-[symlink] symlink $NEWTOOLDIR/pack$GOEXE -> $TOOLDIR/pack$GOEXE
-env GOROOT=$NEWGOROOT
-env TOOLDIR=$NEWTOOLDIR
-
-# GOROOT without test2json tool builds and runs it as needed
-go env GOROOT
-! exists $TOOLDIR/test2json
-go tool test2json
-stdout '{"Action":"start"}'
-! exists $TOOLDIR/test2json$GOEXE
-go tool -n test2json
-! stdout $NEWTOOLDIR${/}test2json$GOEXE
-
-# GOROOT with test2json uses the test2json in the GOROOT
-go install cmd/test2json
-exists $TOOLDIR/test2json$GOEXE
-go tool test2json
-stdout '{"Action":"start"}'
-go tool -n test2json
-stdout $NEWTOOLDIR${/}test2json$GOEXE
-
-# Tool still runs properly even with wrong GOOS/GOARCH
-# Remove test2json from tooldir
-rm $TOOLDIR/test2json$GOEXE
-go tool -n test2json
-! stdout $NEWTOOLDIR${/}test2json$GOEXE
-# Set GOOS/GOARCH to different values than host GOOS/GOARCH.
-env GOOS=windows
-[GOOS:windows] env GOOS=linux
-env GOARCH=arm64
-[GOARCH:arm64] env GOARCH=amd64
-# Control case: go run shouldn't work because it respects
-# GOOS/GOARCH, and we can't execute non-native binary.
-! go run cmd/test2json -exec=''
-# But go tool should because it doesn't respect GOOS/GOARCH.
-go tool test2json
-stdout '{"Action":"start"}'
diff --git a/src/cmd/go/testdata/script/version.txt b/src/cmd/go/testdata/script/version.txt
index 722859f25867e7..a18bcdd915d40e 100644
--- a/src/cmd/go/testdata/script/version.txt
+++ b/src/cmd/go/testdata/script/version.txt
@@ -8,8 +8,6 @@ stdout '^go version'
 stderr 'with arguments'
 ! go version -v
 stderr 'with arguments'
-! go version -json
-stderr 'with arguments'
 
 # Check that 'go version' succeed even when it does not contain Go build info.
 # It should print an error if the file has a known Go binary extension.
@@ -24,8 +22,8 @@ stderr 'could not read Go build info'
 go version empty.dll
 stderr 'could not read Go build info'
 
-# Neither of the three flags above should be an issue via GOFLAGS.
-env GOFLAGS='-m -v -json'
+# Neither of the two flags above should be an issue via GOFLAGS.
+env GOFLAGS='-m -v'
 go version
 stdout '^go version'
 env GOFLAGS=
@@ -59,23 +57,6 @@ stdout '^test2json.exe: .+'
 stdout '^\tpath\tcmd/test2json$'
 ! stdout 'mod[^e]'
 
-# Check -json flag
-go build -o test2json.exe cmd/test2json
-go version -m -json test2json.exe
-stdout '"Path": "cmd/test2json"'
-! stdout 'null'
-
-# Check -json flag output with multiple binaries
-go build -o test2json.exe cmd/test2json
-go version -m -json test2json.exe test2json.exe
-stdout -count=2 '"Path": "cmd/test2json"'
-
-# Check -json flag without -m
-go build -o test2json.exe cmd/test2json
-! go version -json test2json.exe
-! stdout '"Path": "cmd/test2json"'
-stderr 'with -json flag requires -m flag'
-
 # Repeat the test with -buildmode=pie and default linking.
 [!buildmode:pie] stop
 [pielinkext] [!cgo] stop
diff --git a/src/cmd/go/testdata/script/version_buildvcs_svn.txt b/src/cmd/go/testdata/script/version_buildvcs_svn.txt
deleted file mode 100644
index 8fc5f023db7909..00000000000000
--- a/src/cmd/go/testdata/script/version_buildvcs_svn.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-# This test checks that VCS information is stamped into Go binaries by default,
-# controlled with -buildvcs. This test focuses on Subversion specifics.
-# The Git test covers common functionality.
-
-[!exec:svn] skip
-[!exec:svnadmin] skip
-[short] skip
-env GOBIN=$WORK/gopath/bin
-env oldpath=$PATH
-cd repo/a
-
-# If there's no local repository, there's no VCS info.
-go install
-go version -m $GOBIN/a$GOEXE
-! stdout vcs.revision
-stdout '\s+mod\s+example.com/a\s+\(devel\)'
-rm $GOBIN/a$GOEXE
-
-# If there is a repository, but it can't be used for some reason,
-# there should be an error. It should hint about -buildvcs=false.
-cd ..
-mkdir .svn
-env PATH=$WORK${/}fakebin${:}$oldpath
-chmod 0755 $WORK/fakebin/svn
-! exec svn help
-cd a
-! go install
-stderr '^error obtaining VCS status: exit status 1\n\tUse -buildvcs=false to disable VCS stamping.$'
-rm $GOBIN/a$GOEXE
-cd ..
-env PATH=$oldpath
-rm .svn
-
-# Untagged repo.
-exec svnadmin create repo
-exec svn checkout file://$PWD/repo workingDir
-cd workingDir
-cp ../a/a.go .
-cp ../a/go.mod .
-cp ../README .
-exec svn status
-exec svn add a.go go.mod README
-exec svn commit -m 'initial commit'
-exec svn update
-go install
-go version -m $GOBIN/a$GOEXE
-stdout '^\tbuild\tvcs=svn$'
-stdout '^\tbuild\tvcs.revision=1$'
-stdout '^\tbuild\tvcs.time='
-stdout '^\tbuild\tvcs.modified=false$'
-stdout '^\tmod\texample.com/a\tv0.0.0-\d+-\d+\t+'
-rm $GOBIN/a$GOEXE
-
-# Building with -buildvcs=false suppresses the info.
-go install -buildvcs=false
-go version -m $GOBIN/a$GOEXE
-! stdout vcs.revision
-stdout '\s+mod\s+example.com/a\s+\(devel\)'
-rm $GOBIN/a$GOEXE
-
-# An untracked file is shown as uncommitted, even if it isn't part of the build.
-cp ../../outside/empty.txt extra.txt
-go install
-go version -m $GOBIN/a$GOEXE
-stdout '^\tbuild\tvcs.modified=true$'
-stdout '\s+mod\s+example.com/a\s+v0.0.0-\d+-\d+\+dirty\s+'
-rm extra.txt
-rm $GOBIN/a$GOEXE
-
-# An edited file is shown as uncommitted, even if it isn't part of the build.
-cp ../../outside/empty.txt README
-go install
-go version -m $GOBIN/a$GOEXE
-stdout '^\tbuild\tvcs.modified=true$'
-stdout '\s+mod\s+example.com/a\s+v0.0.0-\d+-\d+\+dirty\s+'
-exec svn revert README
-rm $GOBIN/a$GOEXE
-
--- $WORK/fakebin/svn --
-#!/bin/sh
-exit 1
--- $WORK/fakebin/svn.bat --
-exit 1
--- repo/README --
-Far out in the uncharted backwaters of the unfashionable end of the western
-spiral arm of the Galaxy lies a small, unregarded yellow sun.
--- repo/a/go.mod --
-module example.com/a
-
-go 1.18
--- repo/a/a.go --
-package main
-
-func main() {}
-
--- outside/empty.txt --
diff --git a/src/cmd/go/testdata/vcstest/git/gitrepo-sha256.txt b/src/cmd/go/testdata/vcstest/git/gitrepo-sha256.txt
deleted file mode 100644
index 81b9a71c12593d..00000000000000
--- a/src/cmd/go/testdata/vcstest/git/gitrepo-sha256.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-handle git
-
-# This is a sha256 version of gitrepo1.txt (which uses sha1 hashes)
-env GIT_AUTHOR_NAME='David Finkel'
-env GIT_AUTHOR_EMAIL='david.finkel@gmail.com'
-env GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME
-env GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL
-
-git init --object-format=sha256
-
-at 2018-04-17T15:43:22-04:00
-unquote ''
-cp stdout README
-git add README
-git commit -m 'empty README'
-git branch -m main
-git tag v1.2.3
-
-at 2018-04-17T15:45:48-04:00
-git branch v2
-git checkout v2
-echo 'v2'
-cp stdout v2
-git add v2
-git commit -m 'v2'
-git tag v2.3
-git tag v2.0.1
-git branch v2.3.4
-
-at 2018-04-17T16:00:19-04:00
-echo 'intermediate'
-cp stdout foo.txt
-git add foo.txt
-git commit -m 'intermediate'
-
-at 2018-04-17T16:00:32-04:00
-echo 'another'
-cp stdout another.txt
-git add another.txt
-git commit -m 'another'
-git tag v2.0.2
-
-at 2018-04-17T16:16:52-04:00
-git checkout main
-git branch v3
-git checkout v3
-mkdir v3/sub/dir
-echo 'v3/sub/dir/file'
-cp stdout v3/sub/dir/file.txt
-git add v3
-git commit -m 'add v3/sub/dir/file.txt'
-
-at 2018-04-17T22:23:00-04:00
-git checkout main
-git tag -a v1.2.4-annotated -m 'v1.2.4-annotated'
-
-git switch -c basic_module
-git add go.mod foobar.go
-git commit -m 'add go.mod & Foobar function'
-git tag v1.3.0
-git switch main
-
-git show-ref --tags --heads
-cmp stdout .git-refs
-
--- go.mod --
-module vcs-test.golang.org/go/mod/gitrepo-sha256
-
-go 1.24.3
-
--- foobar.go --
-
-package sha256repo
-
-// Foobar is the identity function
-func Foobar[T any](v T) T {
-	return v
-}
-
--- .git-refs --
-a9157cad2aa6dc2f78aa31fced5887f04e758afa8703f04d0178702ebf04ee17 refs/heads/basic_module
-47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c refs/heads/main
-1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82 refs/heads/v2
-b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09 refs/heads/v2.3.4
-c2a5bbdbeb8b2c82e819a4af94ea59f7d67faeb6df7cb4907c3f0d70836a977b refs/heads/v3
-47b8b51b2a2d9d5caa3d460096c4e01f05700ce3a9390deb54400bd508214c5c refs/tags/v1.2.3
-f88263be2704531e0f664784b66c2f84dea6d0dc4231cf9c6be482af0400c607 refs/tags/v1.2.4-annotated
-a9157cad2aa6dc2f78aa31fced5887f04e758afa8703f04d0178702ebf04ee17 refs/tags/v1.3.0
-b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09 refs/tags/v2.0.1
-1401e4e1fdb4169b51d44a1ff62af63ccc708bf5c12d15051268b51bbb6cbd82 refs/tags/v2.0.2
-b7550fd9d2129c724c39ae0536e8b2fae4364d8c82bb8b0880c9b71f67295d09 refs/tags/v2.3
diff --git a/src/cmd/go/testdata/vcstest/go/mod/gitrepo-sha256.txt b/src/cmd/go/testdata/vcstest/go/mod/gitrepo-sha256.txt
deleted file mode 100644
index 5349b3a2ecfca5..00000000000000
--- a/src/cmd/go/testdata/vcstest/go/mod/gitrepo-sha256.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-handle dir
-
--- index.html --
-
-
-
diff --git a/src/cmd/internal/goobj/builtinlist.go b/src/cmd/internal/goobj/builtinlist.go
index 9e21544391b47d..3e550d8dd9763b 100644
--- a/src/cmd/internal/goobj/builtinlist.go
+++ b/src/cmd/internal/goobj/builtinlist.go
@@ -221,7 +221,6 @@ var builtins = [...]struct {
 	{"runtime.loong64HasLAMCAS", 0},
 	{"runtime.loong64HasLAM_BH", 0},
 	{"runtime.loong64HasLSX", 0},
-	{"runtime.riscv64HasZbb", 0},
 	{"runtime.asanregisterglobals", 1},
 	{"runtime.deferproc", 1},
 	{"runtime.deferprocStack", 1},
diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go
index 193993ec4d9b4c..4bef470c86704a 100644
--- a/src/cmd/internal/obj/loong64/a.out.go
+++ b/src/cmd/internal/obj/loong64/a.out.go
@@ -225,6 +225,8 @@ const (
 	REGZERO = REG_R0 // set to zero
 	REGLINK = REG_R1
 	REGSP   = REG_R3
+	REGRET  = REG_R20 // not use
+	REGARG  = -1      // -1 disables passing the first argument in register
 	REGRT1  = REG_R20 // reserved for runtime, duffzero and duffcopy
 	REGRT2  = REG_R21 // reserved for runtime, duffcopy
 	REGCTXT = REG_R29 // context for closures
@@ -661,10 +663,6 @@ const (
 	ABSTRPICKW
 	ABSTRPICKV
 
-	// 2.2.5.4. Prefetch Instructions
-	APRELD
-	APRELDX
-
 	// 2.2.9. CRC Check Instructions
 	ACRCWBW
 	ACRCWHW
@@ -952,50 +950,6 @@ const (
 	AXVFRSQRTF
 	AXVFRSQRTD
 
-	AVADDF
-	AVADDD
-	AVSUBF
-	AVSUBD
-	AVMULF
-	AVMULD
-	AVDIVF
-	AVDIVD
-	AXVADDF
-	AXVADDD
-	AXVSUBF
-	AXVSUBD
-	AXVMULF
-	AXVMULD
-	AXVDIVF
-	AXVDIVD
-
-	AVFCLASSF
-	AVFCLASSD
-	AXVFCLASSF
-	AXVFCLASSD
-
-	// LSX and LASX floating point conversion instructions
-	AVFRINTRNEF
-	AVFRINTRNED
-	AVFRINTRZF
-	AVFRINTRZD
-	AVFRINTRPF
-	AVFRINTRPD
-	AVFRINTRMF
-	AVFRINTRMD
-	AVFRINTF
-	AVFRINTD
-	AXVFRINTRNEF
-	AXVFRINTRNED
-	AXVFRINTRZF
-	AXVFRINTRZD
-	AXVFRINTRPF
-	AXVFRINTRPD
-	AXVFRINTRMF
-	AXVFRINTRMD
-	AXVFRINTF
-	AXVFRINTD
-
 	// LSX and LASX integer neg instructions
 	AVNEGB
 	AVNEGH
diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go
index bf9b0722cc39d7..d50c29a9f9d306 100644
--- a/src/cmd/internal/obj/loong64/anames.go
+++ b/src/cmd/internal/obj/loong64/anames.go
@@ -199,8 +199,6 @@ var Anames = []string{
 	"BSTRINSV",
 	"BSTRPICKW",
 	"BSTRPICKV",
-	"PRELD",
-	"PRELDX",
 	"CRCWBW",
 	"CRCWHW",
 	"CRCWWW",
@@ -451,46 +449,6 @@ var Anames = []string{
 	"XVFRECIPD",
 	"XVFRSQRTF",
 	"XVFRSQRTD",
-	"VADDF",
-	"VADDD",
-	"VSUBF",
-	"VSUBD",
-	"VMULF",
-	"VMULD",
-	"VDIVF",
-	"VDIVD",
-	"XVADDF",
-	"XVADDD",
-	"XVSUBF",
-	"XVSUBD",
-	"XVMULF",
-	"XVMULD",
-	"XVDIVF",
-	"XVDIVD",
-	"VFCLASSF",
-	"VFCLASSD",
-	"XVFCLASSF",
-	"XVFCLASSD",
-	"VFRINTRNEF",
-	"VFRINTRNED",
-	"VFRINTRZF",
-	"VFRINTRZD",
-	"VFRINTRPF",
-	"VFRINTRPD",
-	"VFRINTRMF",
-	"VFRINTRMD",
-	"VFRINTF",
-	"VFRINTD",
-	"XVFRINTRNEF",
-	"XVFRINTRNED",
-	"XVFRINTRZF",
-	"XVFRINTRZD",
-	"XVFRINTRPF",
-	"XVFRINTRPD",
-	"XVFRINTRMF",
-	"XVFRINTRMD",
-	"XVFRINTF",
-	"XVFRINTD",
 	"VNEGB",
 	"VNEGH",
 	"VNEGW",
diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index 6e09930183383c..1254695be8c806 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -92,13 +92,9 @@ var optab = []Optab{
 	{AVSEQB, C_S5CON, C_VREG, C_NONE, C_VREG, C_NONE, 22, 4, 0, 0},
 	{AXVSEQB, C_S5CON, C_XREG, C_NONE, C_XREG, C_NONE, 22, 4, 0, 0},
 	{AVANDV, C_VREG, C_VREG, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
-	{AVANDV, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
 	{AXVANDV, C_XREG, C_XREG, C_NONE, C_XREG, C_NONE, 2, 4, 0, 0},
-	{AXVANDV, C_XREG, C_NONE, C_NONE, C_XREG, C_NONE, 2, 4, 0, 0},
 	{AVANDB, C_U8CON, C_VREG, C_NONE, C_VREG, C_NONE, 23, 4, 0, 0},
-	{AVANDB, C_U8CON, C_NONE, C_NONE, C_VREG, C_NONE, 23, 4, 0, 0},
 	{AXVANDB, C_U8CON, C_XREG, C_NONE, C_XREG, C_NONE, 23, 4, 0, 0},
-	{AXVANDB, C_U8CON, C_NONE, C_NONE, C_XREG, C_NONE, 23, 4, 0, 0},
 
 	{AVADDB, C_VREG, C_VREG, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
 	{AVADDB, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 2, 4, 0, 0},
@@ -312,8 +308,7 @@ var optab = []Optab{
 	{ABEQ, C_REG, C_REG, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0},
 	{ABEQ, C_REG, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0},
 	{ABLEZ, C_REG, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0},
-	{ABFPT, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0},
-	{ABFPT, C_FCCREG, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0},
+	{ABFPT, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, NOTUSETMP},
 
 	{AJMP, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // b
 	{AJAL, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // bl
@@ -416,9 +411,6 @@ var optab = []Optab{
 
 	{AVMOVQ, C_ELEM, C_NONE, C_NONE, C_ARNG, C_NONE, 45, 4, 0, 0},
 
-	{APRELD, C_SOREG, C_U5CON, C_NONE, C_NONE, C_NONE, 46, 4, 0, 0},
-	{APRELDX, C_SOREG, C_DCON, C_U5CON, C_NONE, C_NONE, 47, 20, 0, 0},
-
 	{obj.APCALIGN, C_U12CON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0},
 	{obj.APCDATA, C_32CON, C_NONE, C_NONE, C_32CON, C_NONE, 0, 0, 0, 0},
 	{obj.APCDATA, C_DCON, C_NONE, C_NONE, C_DCON, C_NONE, 0, 0, 0, 0},
@@ -1105,22 +1097,6 @@ func (c *ctxt0) oplook(p *obj.Prog) *Optab {
 		c.ctxt.Diag("loong64 ops not initialized, call loong64.buildop first")
 	}
 
-	restArgsIndex := 0
-	restArgsLen := len(p.RestArgs)
-	if restArgsLen > 2 {
-		c.ctxt.Diag("too many RestArgs: got %v, maximum is 2\n", restArgsLen)
-		return nil
-	}
-
-	restArgsv := [2]int{C_NONE + 1, C_NONE + 1}
-	for i, ap := range p.RestArgs {
-		restArgsv[i] = int(ap.Addr.Class)
-		if restArgsv[i] == 0 {
-			restArgsv[i] = c.aclass(&ap.Addr) + 1
-			ap.Addr.Class = int8(restArgsv[i])
-		}
-	}
-
 	a1 := int(p.Optab)
 	if a1 != 0 {
 		return &optab[a1-1]
@@ -1146,9 +1122,6 @@ func (c *ctxt0) oplook(p *obj.Prog) *Optab {
 	a2 := C_NONE
 	if p.Reg != 0 {
 		a2 = c.rclass(p.Reg)
-	} else if restArgsLen > 0 {
-		a2 = restArgsv[restArgsIndex] - 1
-		restArgsIndex++
 	}
 
 	// 2nd destination operand
@@ -1159,20 +1132,22 @@ func (c *ctxt0) oplook(p *obj.Prog) *Optab {
 
 	// 3rd source operand
 	a3 := C_NONE
-	if restArgsLen > 0 && restArgsIndex < restArgsLen {
-		a3 = restArgsv[restArgsIndex] - 1
-		restArgsIndex++
+	if len(p.RestArgs) > 0 {
+		a3 = int(p.RestArgs[0].Class)
+		if a3 == 0 {
+			a3 = c.aclass(&p.RestArgs[0].Addr) + 1
+			p.RestArgs[0].Class = int8(a3)
+		}
+		a3--
 	}
 
 	ops := oprange[p.As&obj.AMask]
 	c1 := &xcmp[a1]
-	c2 := &xcmp[a2]
 	c3 := &xcmp[a3]
 	c4 := &xcmp[a4]
-	c5 := &xcmp[a5]
 	for i := range ops {
 		op := &ops[i]
-		if c1[op.from1] && c2[op.reg] && c3[op.from3] && c4[op.to1] && c5[op.to2] {
+		if (int(op.reg) == a2) && c3[op.from3] && c1[op.from1] && c4[op.to1] && (int(op.to2) == a5) {
 			p.Optab = uint16(cap(optab) - cap(ops) + i + 1)
 			return op
 		}
@@ -1510,8 +1485,6 @@ func buildop(ctxt *obj.Link) {
 			ANEGW,
 			ANEGV,
 			AWORD,
-			APRELD,
-			APRELDX,
 			obj.ANOP,
 			obj.ATEXT,
 			obj.AFUNCDATA,
@@ -1636,14 +1609,6 @@ func buildop(ctxt *obj.Link) {
 			opset(AVMULWODWHUH, r0)
 			opset(AVMULWODVWUW, r0)
 			opset(AVMULWODQVUV, r0)
-			opset(AVADDF, r0)
-			opset(AVADDD, r0)
-			opset(AVSUBF, r0)
-			opset(AVSUBD, r0)
-			opset(AVMULF, r0)
-			opset(AVMULD, r0)
-			opset(AVDIVF, r0)
-			opset(AVDIVD, r0)
 
 		case AXVSEQB:
 			opset(AXVSEQH, r0)
@@ -1709,14 +1674,6 @@ func buildop(ctxt *obj.Link) {
 			opset(AXVMULWODWHUH, r0)
 			opset(AXVMULWODVWUW, r0)
 			opset(AXVMULWODQVUV, r0)
-			opset(AXVADDF, r0)
-			opset(AXVADDD, r0)
-			opset(AXVSUBF, r0)
-			opset(AXVSUBD, r0)
-			opset(AXVMULF, r0)
-			opset(AXVMULD, r0)
-			opset(AXVDIVF, r0)
-			opset(AXVDIVD, r0)
 
 		case AVANDB:
 			opset(AVORB, r0)
@@ -1764,18 +1721,6 @@ func buildop(ctxt *obj.Link) {
 			opset(AVNEGH, r0)
 			opset(AVNEGW, r0)
 			opset(AVNEGV, r0)
-			opset(AVFRINTRNEF, r0)
-			opset(AVFRINTRNED, r0)
-			opset(AVFRINTRZF, r0)
-			opset(AVFRINTRZD, r0)
-			opset(AVFRINTRPF, r0)
-			opset(AVFRINTRPD, r0)
-			opset(AVFRINTRMF, r0)
-			opset(AVFRINTRMD, r0)
-			opset(AVFRINTF, r0)
-			opset(AVFRINTD, r0)
-			opset(AVFCLASSF, r0)
-			opset(AVFCLASSD, r0)
 
 		case AXVPCNTB:
 			opset(AXVPCNTH, r0)
@@ -1791,18 +1736,6 @@ func buildop(ctxt *obj.Link) {
 			opset(AXVNEGH, r0)
 			opset(AXVNEGW, r0)
 			opset(AXVNEGV, r0)
-			opset(AXVFRINTRNEF, r0)
-			opset(AXVFRINTRNED, r0)
-			opset(AXVFRINTRZF, r0)
-			opset(AXVFRINTRZD, r0)
-			opset(AXVFRINTRPF, r0)
-			opset(AXVFRINTRPD, r0)
-			opset(AXVFRINTRMF, r0)
-			opset(AXVFRINTRMD, r0)
-			opset(AXVFRINTF, r0)
-			opset(AXVFRINTD, r0)
-			opset(AXVFCLASSF, r0)
-			opset(AXVFCLASSD, r0)
 
 		case AVADDB:
 			opset(AVADDH, r0)
@@ -1933,10 +1866,6 @@ func OP_16IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 {
 	return op | (i&0xFFFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0
 }
 
-func OP_12IR_5I(op uint32, i1 uint32, r2 uint32, i2 uint32) uint32 {
-	return op | (i1&0xFFF)<<10 | (r2&0x1F)<<5 | (i2&0x1F)<<0
-}
-
 func OP_12IRR(op uint32, i uint32, r2 uint32, r3 uint32) uint32 {
 	return op | (i&0xFFF)<<10 | (r2&0x1F)<<5 | (r3&0x1F)<<0
 }
@@ -2056,9 +1985,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
 			width = 21
 			// FCC0 is the implicit source operand, now that we
 			// don't register-allocate from the FCC bank.
-			if rj == 0 {
-				rj = REG_FCC0
-			}
+			rj = REG_FCC0
 		case ABEQ, ABNE:
 			if rd == 0 || rd == REGZERO || rj == REGZERO {
 				// BEQZ/BNEZ can be encoded with 21-bit offsets.
@@ -2474,41 +2401,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
 		c.checkindex(p, index, m)
 		o1 = v | (index << 10) | (vj << 5) | vd
 
-	case 46: // preld  offset(Rbase), $hint
-		offs := c.regoff(&p.From)
-		hint := p.GetFrom3().Offset
-		o1 = OP_12IR_5I(c.opiir(p.As), uint32(offs), uint32(p.From.Reg), uint32(hint))
-
-	case 47: // preldx offset(Rbase), $n, $hint
-		offs := c.regoff(&p.From)
-		hint := p.RestArgs[1].Offset
-		n := uint64(p.GetFrom3().Offset)
-
-		addrSeq := (n >> 0) & 0x1
-		blkSize := (n >> 1) & 0x7ff
-		blkNums := (n >> 12) & 0x1ff
-		stride := (n >> 21) & 0xffff
-
-		if blkSize > 1024 {
-			c.ctxt.Diag("%v: block_size amount out of range[16, 1024]: %v\n", p, blkSize)
-		}
-
-		if blkNums > 256 {
-			c.ctxt.Diag("%v: block_nums amount out of range[1, 256]: %v\n", p, blkSize)
-		}
-
-		v := (uint64(offs) & 0xffff)
-		v += addrSeq << 16
-		v += ((blkSize / 16) - 1) << 20
-		v += (blkNums - 1) << 32
-		v += stride << 44
-
-		o1 = OP_IR(c.opir(ALU12IW), uint32(v>>12), uint32(REGTMP))
-		o2 = OP_12IRR(c.opirr(AOR), uint32(v), uint32(REGTMP), uint32(REGTMP))
-		o3 = OP_IR(c.opir(ALU32ID), uint32(v>>32), uint32(REGTMP))
-		o4 = OP_12IRR(c.opirr(ALU52ID), uint32(v>>52), uint32(REGTMP), uint32(REGTMP))
-		o5 = OP_5IRR(c.opirr(p.As), uint32(REGTMP), uint32(p.From.Reg), uint32(hint))
-
 	case 49:
 		if p.As == ANOOP {
 			// andi r0, r0, 0
@@ -3472,38 +3364,6 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
 		return 0xe912 << 15 // xvmuh.wu
 	case AXVMUHVU:
 		return 0xe913 << 15 // xvmuh.du
-	case AVADDF:
-		return 0xe261 << 15 // vfadd.s
-	case AVADDD:
-		return 0xe262 << 15 // vfadd.d
-	case AVSUBF:
-		return 0xe265 << 15 // vfsub.s
-	case AVSUBD:
-		return 0xe266 << 15 // vfsub.d
-	case AVMULF:
-		return 0xe271 << 15 // vfmul.s
-	case AVMULD:
-		return 0xe272 << 15 // vfmul.d
-	case AVDIVF:
-		return 0xe275 << 15 // vfdiv.s
-	case AVDIVD:
-		return 0xe276 << 15 // vfdiv.d
-	case AXVADDF:
-		return 0xea61 << 15 // xvfadd.s
-	case AXVADDD:
-		return 0xea62 << 15 // xvfadd.d
-	case AXVSUBF:
-		return 0xea65 << 15 // xvfsub.s
-	case AXVSUBD:
-		return 0xea66 << 15 // xvfsub.d
-	case AXVMULF:
-		return 0xea71 << 15 // xvfmul.s
-	case AXVMULD:
-		return 0xea72 << 15 // xvfmul.d
-	case AXVDIVF:
-		return 0xea75 << 15 // xvfdiv.s
-	case AXVDIVD:
-		return 0xea76 << 15 // xvfdiv.d
 	}
 
 	if a < 0 {
@@ -3720,54 +3580,6 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
 		return 0x1da70e << 10 // xvneg.w
 	case AXVNEGV:
 		return 0x1da70f << 10 // xvneg.d
-	case AVFRINTRNEF:
-		return 0x1ca75d << 10 // vfrintrne.s
-	case AVFRINTRNED:
-		return 0x1ca75e << 10 // vfrintrne.d
-	case AVFRINTRZF:
-		return 0x1ca759 << 10 // vfrintrz.s
-	case AVFRINTRZD:
-		return 0x1ca75a << 10 // vfrintrz.d
-	case AVFRINTRPF:
-		return 0x1ca755 << 10 // vfrintrp.s
-	case AVFRINTRPD:
-		return 0x1ca756 << 10 // vfrintrp.d
-	case AVFRINTRMF:
-		return 0x1ca751 << 10 // vfrintrm.s
-	case AVFRINTRMD:
-		return 0x1ca752 << 10 // vfrintrm.d
-	case AVFRINTF:
-		return 0x1ca74d << 10 // vfrint.s
-	case AVFRINTD:
-		return 0x1ca74e << 10 // vfrint.d
-	case AXVFRINTRNEF:
-		return 0x1da75d << 10 // xvfrintrne.s
-	case AXVFRINTRNED:
-		return 0x1da75e << 10 // xvfrintrne.d
-	case AXVFRINTRZF:
-		return 0x1da759 << 10 // xvfrintrz.s
-	case AXVFRINTRZD:
-		return 0x1da75a << 10 // xvfrintrz.d
-	case AXVFRINTRPF:
-		return 0x1da755 << 10 // xvfrintrp.s
-	case AXVFRINTRPD:
-		return 0x1da756 << 10 // xvfrintrp.d
-	case AXVFRINTRMF:
-		return 0x1da751 << 10 // xvfrintrm.s
-	case AXVFRINTRMD:
-		return 0x1da752 << 10 // xvfrintrm.d
-	case AXVFRINTF:
-		return 0x1da74d << 10 // xvfrint.s
-	case AXVFRINTD:
-		return 0x1da74e << 10 // xvfrint.d
-	case AVFCLASSF:
-		return 0x1ca735 << 10 // vfclass.s
-	case AVFCLASSD:
-		return 0x1ca736 << 10 // vfclass.d
-	case AXVFCLASSF:
-		return 0x1da735 << 10 // xvfclass.s
-	case AXVFCLASSD:
-		return 0x1da736 << 10 // xvfclass.d
 	case AVSETEQV:
 		return 0x1ca726<<10 | 0x0<<3 // vseteqz.v
 	case AVSETNEV:
@@ -3901,8 +3713,7 @@ func (c *ctxt0) opirr(a obj.As) uint32 {
 		return 0x12<<26 | 0x1<<8
 	case ABFPF:
 		return 0x12<<26 | 0x0<<8
-	case APRELDX:
-		return 0x07058 << 15 // preldx
+
 	case AMOVB,
 		AMOVBU:
 		return 0x0a4 << 22
@@ -4129,15 +3940,6 @@ func (c *ctxt0) opirir(a obj.As) uint32 {
 	return 0
 }
 
-func (c *ctxt0) opiir(a obj.As) uint32 {
-	switch a {
-	case APRELD:
-		return 0x0AB << 22 // preld
-	}
-
-	return 0
-}
-
 func (c *ctxt0) specialFpMovInst(a obj.As, fclass int, tclass int) uint32 {
 	switch a {
 	case AMOVV:
diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go
index 0818389c8d9366..0896168fa1f6b7 100644
--- a/src/cmd/internal/obj/loong64/doc.go
+++ b/src/cmd/internal/obj/loong64/doc.go
@@ -226,31 +226,5 @@ Note: In the following sections 3.1 to 3.6, "ui4" (4-bit unsigned int immediate)
   - When using the AM*_.W[U]/D[U] instruction, registers rd and rj cannot be the same,
     otherwise an exception is triggered, and rd and rk cannot be the same, otherwise
     the execution result is uncertain.
-
-3. Prefetch instructions
-    Instruction format:
-      PRELD	offset(Rbase), $hint
-      PRELDX	offset(Rbase), $n, $hint
-
-    Mapping between Go and platform assembly:
-               Go assembly            |    platform assembly
-      PRELD  offset(Rbase), $hint     | preld hint, Rbase, offset
-      PRELDX offset(Rbase), $n, $hint | move rk, $x; preldx hint, Rbase, rk
-
-      note: $x is the value after $n and offset are reassembled
-
-    Definition of hint value:
-      0: load to L1
-      2: load to L3
-      8: store to L1
-
-      The meaning of the rest of values is not defined yet, and the processor executes it as NOP
-
-    Definition of $n in the PRELDX instruction:
-      bit[0]: address sequence, 0 indicating ascending and 1 indicating descending
-      bits[11:1]:  block size, the value range is [16, 1024], and it must be an integer multiple of 16
-      bits[20:12]: block num, the value range is [1, 256]
-      bits[36:21]: stride, the value range is [0, 0xffff]
 */
-
 package loong64
diff --git a/src/cmd/internal/obj/riscv/anames.go b/src/cmd/internal/obj/riscv/anames.go
index a689f2de274a30..a65dfceea9e33b 100644
--- a/src/cmd/internal/obj/riscv/anames.go
+++ b/src/cmd/internal/obj/riscv/anames.go
@@ -650,18 +650,10 @@ var Anames = []string{
 	"RDTIME",
 	"SEQZ",
 	"SNEZ",
-	"VFABSV",
-	"VFNEGV",
 	"VL1RV",
 	"VL2RV",
 	"VL4RV",
 	"VL8RV",
-	"VMCLRM",
-	"VMFGEVV",
-	"VMFGTVV",
-	"VMMVM",
-	"VMNOTM",
-	"VMSETM",
 	"VMSGEUVI",
 	"VMSGEUVV",
 	"VMSGEVI",
diff --git a/src/cmd/internal/obj/riscv/cpu.go b/src/cmd/internal/obj/riscv/cpu.go
index 382c08a9d96f5f..fa4c2cf37206b9 100644
--- a/src/cmd/internal/obj/riscv/cpu.go
+++ b/src/cmd/internal/obj/riscv/cpu.go
@@ -1178,18 +1178,10 @@ const (
 	ARDTIME
 	ASEQZ
 	ASNEZ
-	AVFABSV
-	AVFNEGV
 	AVL1RV
 	AVL2RV
 	AVL4RV
 	AVL8RV
-	AVMCLRM
-	AVMFGEVV
-	AVMFGTVV
-	AVMMVM
-	AVMNOTM
-	AVMSETM
 	AVMSGEUVI
 	AVMSGEUVV
 	AVMSGEVI
@@ -1297,9 +1289,9 @@ var specialOperands = map[SpecialOperand]struct {
 	SPOP_M2:  {encoding: 1, name: "M2"},
 	SPOP_M4:  {encoding: 2, name: "M4"},
 	SPOP_M8:  {encoding: 3, name: "M8"},
-	SPOP_MF8: {encoding: 5, name: "MF8"},
+	SPOP_MF2: {encoding: 5, name: "MF2"},
 	SPOP_MF4: {encoding: 6, name: "MF4"},
-	SPOP_MF2: {encoding: 7, name: "MF2"},
+	SPOP_MF8: {encoding: 7, name: "MF8"},
 
 	SPOP_E8:  {encoding: 0, name: "E8"},
 	SPOP_E16: {encoding: 1, name: "E16"},
diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go
index 5b598b57574c4a..25d3b11c97d4e8 100644
--- a/src/cmd/internal/obj/riscv/obj.go
+++ b/src/cmd/internal/obj/riscv/obj.go
@@ -1315,20 +1315,6 @@ func validateRFI(ctxt *obj.Link, ins *instruction) {
 	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
 }
 
-func validateRFV(ctxt *obj.Link, ins *instruction) {
-	wantVectorReg(ctxt, ins, "vd", ins.rd)
-	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
-	wantFloatReg(ctxt, ins, "rs2", ins.rs2)
-	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
-}
-
-func validateRFF(ctxt *obj.Link, ins *instruction) {
-	wantFloatReg(ctxt, ins, "rd", ins.rd)
-	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
-	wantFloatReg(ctxt, ins, "rs2", ins.rs2)
-	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
-}
-
 func validateRIF(ctxt *obj.Link, ins *instruction) {
 	wantFloatReg(ctxt, ins, "rd", ins.rd)
 	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
@@ -1336,31 +1322,10 @@ func validateRIF(ctxt *obj.Link, ins *instruction) {
 	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
 }
 
-func validateRIV(ctxt *obj.Link, ins *instruction) {
-	wantVectorReg(ctxt, ins, "vd", ins.rd)
-	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
-	wantIntReg(ctxt, ins, "rs2", ins.rs2)
-	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
-}
-
-func validateRVF(ctxt *obj.Link, ins *instruction) {
+func validateRFF(ctxt *obj.Link, ins *instruction) {
 	wantFloatReg(ctxt, ins, "rd", ins.rd)
 	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
-	wantVectorReg(ctxt, ins, "vs2", ins.rs2)
-	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
-}
-
-func validateRVFV(ctxt *obj.Link, ins *instruction) {
-	wantVectorReg(ctxt, ins, "vd", ins.rd)
-	wantFloatReg(ctxt, ins, "rs1", ins.rs1)
-	wantVectorReg(ctxt, ins, "vs2", ins.rs2)
-	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
-}
-
-func validateRVI(ctxt *obj.Link, ins *instruction) {
-	wantIntReg(ctxt, ins, "rd", ins.rd)
-	wantNoneReg(ctxt, ins, "rs1", ins.rs1)
-	wantVectorReg(ctxt, ins, "vs2", ins.rs2)
+	wantFloatReg(ctxt, ins, "rs2", ins.rs2)
 	wantNoneReg(ctxt, ins, "rs3", ins.rs3)
 }
 
@@ -1601,36 +1566,12 @@ func encodeRFI(ins *instruction) uint32 {
 	return encodeR(ins.as, regF(ins.rs2), 0, regI(ins.rd), ins.funct3, ins.funct7)
 }
 
-func encodeRFF(ins *instruction) uint32 {
-	return encodeR(ins.as, regF(ins.rs2), 0, regF(ins.rd), ins.funct3, ins.funct7)
-}
-
-func encodeRFV(ins *instruction) uint32 {
-	return encodeR(ins.as, regF(ins.rs2), 0, regV(ins.rd), ins.funct3, ins.funct7)
-}
-
 func encodeRIF(ins *instruction) uint32 {
 	return encodeR(ins.as, regI(ins.rs2), 0, regF(ins.rd), ins.funct3, ins.funct7)
 }
 
-func encodeRIV(ins *instruction) uint32 {
-	return encodeR(ins.as, regI(ins.rs2), 0, regV(ins.rd), ins.funct3, ins.funct7)
-}
-
-func encodeRVF(ins *instruction) uint32 {
-	return encodeR(ins.as, 0, regV(ins.rs2), regF(ins.rd), ins.funct3, ins.funct7)
-}
-
-func encodeRVFV(ins *instruction) uint32 {
-	return encodeR(ins.as, regF(ins.rs1), regV(ins.rs2), regV(ins.rd), ins.funct3, ins.funct7)
-}
-
-func encodeRVI(ins *instruction) uint32 {
-	return encodeR(ins.as, 0, regV(ins.rs2), regI(ins.rd), ins.funct3, ins.funct7)
-}
-
-func encodeRVIV(ins *instruction) uint32 {
-	return encodeR(ins.as, regI(ins.rs1), regV(ins.rs2), regV(ins.rd), ins.funct3, ins.funct7)
+func encodeRFF(ins *instruction) uint32 {
+	return encodeR(ins.as, regF(ins.rs2), 0, regF(ins.rd), ins.funct3, ins.funct7)
 }
 
 func encodeRVV(ins *instruction) uint32 {
@@ -1645,6 +1586,10 @@ func encodeRVVu(ins *instruction) uint32 {
 	return encodeR(ins.as, immU(ins.as, ins.imm, 5), regV(ins.rs2), regV(ins.rd), ins.funct3, ins.funct7)
 }
 
+func encodeRVIV(ins *instruction) uint32 {
+	return encodeR(ins.as, regI(ins.rs1), regV(ins.rs2), regV(ins.rd), ins.funct3, ins.funct7)
+}
+
 func encodeRVVV(ins *instruction) uint32 {
 	return encodeR(ins.as, regV(ins.rs1), regV(ins.rs2), regV(ins.rd), ins.funct3, ins.funct7)
 }
@@ -1930,17 +1875,12 @@ var (
 	rFFFFEncoding = encoding{encode: encodeRFFFF, validate: validateRFFFF, length: 4}
 	rFFIEncoding  = encoding{encode: encodeRFFI, validate: validateRFFI, length: 4}
 	rFIEncoding   = encoding{encode: encodeRFI, validate: validateRFI, length: 4}
-	rFVEncoding   = encoding{encode: encodeRFV, validate: validateRFV, length: 4}
 	rIFEncoding   = encoding{encode: encodeRIF, validate: validateRIF, length: 4}
-	rIVEncoding   = encoding{encode: encodeRIV, validate: validateRIV, length: 4}
 	rFFEncoding   = encoding{encode: encodeRFF, validate: validateRFF, length: 4}
-	rVFEncoding   = encoding{encode: encodeRVF, validate: validateRVF, length: 4}
-	rVFVEncoding  = encoding{encode: encodeRVFV, validate: validateRVFV, length: 4}
-	rVIEncoding   = encoding{encode: encodeRVI, validate: validateRVI, length: 4}
-	rVIVEncoding  = encoding{encode: encodeRVIV, validate: validateRVIV, length: 4}
 	rVVEncoding   = encoding{encode: encodeRVV, validate: validateRVV, length: 4}
 	rVViEncoding  = encoding{encode: encodeRVVi, validate: validateRVVi, length: 4}
 	rVVuEncoding  = encoding{encode: encodeRVVu, validate: validateRVVu, length: 4}
+	rVIVEncoding  = encoding{encode: encodeRVIV, validate: validateRVIV, length: 4}
 	rVVVEncoding  = encoding{encode: encodeRVVV, validate: validateRVVV, length: 4}
 
 	iIIEncoding  = encoding{encode: encodeIII, validate: validateIII, length: 4}
@@ -2514,207 +2454,6 @@ var instructions = [ALAST & obj.AMask]instructionData{
 	AVNCLIPWX & obj.AMask:  {enc: rVIVEncoding},
 	AVNCLIPWI & obj.AMask:  {enc: rVVuEncoding},
 
-	// 31.13.2: Vector Single-Width Floating-Point Add/Subtract Instructions
-	AVFADDVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFADDVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFSUBVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFSUBVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFRSUBVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.3: Vector Widening Floating-Point Add/Subtract Instructions
-	AVFWADDVV & obj.AMask: {enc: rVVVEncoding},
-	AVFWADDVF & obj.AMask: {enc: rVFVEncoding},
-	AVFWSUBVV & obj.AMask: {enc: rVVVEncoding},
-	AVFWSUBVF & obj.AMask: {enc: rVFVEncoding},
-	AVFWADDWV & obj.AMask: {enc: rVVVEncoding},
-	AVFWADDWF & obj.AMask: {enc: rVFVEncoding},
-	AVFWSUBWV & obj.AMask: {enc: rVVVEncoding},
-	AVFWSUBWF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.4: Vector Single-Width Floating-Point Multiply/Divide Instructions
-	AVFMULVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFMULVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFDIVVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFDIVVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFRDIVVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.5: Vector Widening Floating-Point Multiply
-	AVFWMULVV & obj.AMask: {enc: rVVVEncoding},
-	AVFWMULVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.6: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
-	AVFMACCVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFMACCVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFNMACCVV & obj.AMask: {enc: rVVVEncoding},
-	AVFNMACCVF & obj.AMask: {enc: rVFVEncoding},
-	AVFMSACVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFMSACVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFNMSACVV & obj.AMask: {enc: rVVVEncoding},
-	AVFNMSACVF & obj.AMask: {enc: rVFVEncoding},
-	AVFMADDVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFMADDVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFNMADDVV & obj.AMask: {enc: rVVVEncoding},
-	AVFNMADDVF & obj.AMask: {enc: rVFVEncoding},
-	AVFMSUBVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFMSUBVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFNMSUBVV & obj.AMask: {enc: rVVVEncoding},
-	AVFNMSUBVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.7: Vector Widening Floating-Point Fused Multiply-Add Instructions
-	AVFWMACCVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFWMACCVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFWNMACCVV & obj.AMask: {enc: rVVVEncoding},
-	AVFWNMACCVF & obj.AMask: {enc: rVFVEncoding},
-	AVFWMSACVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFWMSACVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFWNMSACVV & obj.AMask: {enc: rVVVEncoding},
-	AVFWNMSACVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.8: Vector Floating-Point Square-Root Instruction
-	AVFSQRTV & obj.AMask: {enc: rVVEncoding},
-
-	// 31.13.9: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
-	AVFRSQRT7V & obj.AMask: {enc: rVVEncoding},
-
-	// 31.13.10: Vector Floating-Point Reciprocal Estimate Instruction
-	AVFREC7V & obj.AMask: {enc: rVVEncoding},
-
-	// 31.13.11: Vector Floating-Point MIN/MAX Instructions
-	AVFMINVV & obj.AMask: {enc: rVVVEncoding},
-	AVFMINVF & obj.AMask: {enc: rVFVEncoding},
-	AVFMAXVV & obj.AMask: {enc: rVVVEncoding},
-	AVFMAXVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.12: Vector Floating-Point Sign-Injection Instructions
-	AVFSGNJVV & obj.AMask:  {enc: rVVVEncoding},
-	AVFSGNJVF & obj.AMask:  {enc: rVFVEncoding},
-	AVFSGNJNVV & obj.AMask: {enc: rVVVEncoding},
-	AVFSGNJNVF & obj.AMask: {enc: rVFVEncoding},
-	AVFSGNJXVV & obj.AMask: {enc: rVVVEncoding},
-	AVFSGNJXVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.13: Vector Floating-Point Compare Instructions
-	AVMFEQVV & obj.AMask: {enc: rVVVEncoding},
-	AVMFEQVF & obj.AMask: {enc: rVFVEncoding},
-	AVMFNEVV & obj.AMask: {enc: rVVVEncoding},
-	AVMFNEVF & obj.AMask: {enc: rVFVEncoding},
-	AVMFLTVV & obj.AMask: {enc: rVVVEncoding},
-	AVMFLTVF & obj.AMask: {enc: rVFVEncoding},
-	AVMFLEVV & obj.AMask: {enc: rVVVEncoding},
-	AVMFLEVF & obj.AMask: {enc: rVFVEncoding},
-	AVMFGTVF & obj.AMask: {enc: rVFVEncoding},
-	AVMFGEVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.14: Vector Floating-Point Classify Instruction
-	AVFCLASSV & obj.AMask: {enc: rVVEncoding},
-
-	// 31.13.15: Vector Floating-Point Merge Instruction
-	AVFMERGEVFM & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.16: Vector Floating-Point Move Instruction
-	AVFMVVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.13.17: Single-Width Floating-Point/Integer Type-Convert Instructions
-	AVFCVTXUFV & obj.AMask:    {enc: rVVEncoding},
-	AVFCVTXFV & obj.AMask:     {enc: rVVEncoding},
-	AVFCVTRTZXUFV & obj.AMask: {enc: rVVEncoding},
-	AVFCVTRTZXFV & obj.AMask:  {enc: rVVEncoding},
-	AVFCVTFXUV & obj.AMask:    {enc: rVVEncoding},
-	AVFCVTFXV & obj.AMask:     {enc: rVVEncoding},
-
-	// 31.13.18: Widening Floating-Point/Integer Type-Convert Instructions
-	AVFWCVTXUFV & obj.AMask:    {enc: rVVEncoding},
-	AVFWCVTXFV & obj.AMask:     {enc: rVVEncoding},
-	AVFWCVTRTZXUFV & obj.AMask: {enc: rVVEncoding},
-	AVFWCVTRTZXFV & obj.AMask:  {enc: rVVEncoding},
-	AVFWCVTFXUV & obj.AMask:    {enc: rVVEncoding},
-	AVFWCVTFXV & obj.AMask:     {enc: rVVEncoding},
-	AVFWCVTFFV & obj.AMask:     {enc: rVVEncoding},
-
-	// 31.13.19: Narrowing Floating-Point/Integer Type-Convert Instructions
-	AVFNCVTXUFW & obj.AMask:    {enc: rVVEncoding},
-	AVFNCVTXFW & obj.AMask:     {enc: rVVEncoding},
-	AVFNCVTRTZXUFW & obj.AMask: {enc: rVVEncoding},
-	AVFNCVTRTZXFW & obj.AMask:  {enc: rVVEncoding},
-	AVFNCVTFXUW & obj.AMask:    {enc: rVVEncoding},
-	AVFNCVTFXW & obj.AMask:     {enc: rVVEncoding},
-	AVFNCVTFFW & obj.AMask:     {enc: rVVEncoding},
-	AVFNCVTRODFFW & obj.AMask:  {enc: rVVEncoding},
-
-	// 31.14.1: Vector Single-Width Integer Reduction Instructions
-	AVREDSUMVS & obj.AMask:  {enc: rVVVEncoding},
-	AVREDMAXUVS & obj.AMask: {enc: rVVVEncoding},
-	AVREDMAXVS & obj.AMask:  {enc: rVVVEncoding},
-	AVREDMINUVS & obj.AMask: {enc: rVVVEncoding},
-	AVREDMINVS & obj.AMask:  {enc: rVVVEncoding},
-	AVREDANDVS & obj.AMask:  {enc: rVVVEncoding},
-	AVREDORVS & obj.AMask:   {enc: rVVVEncoding},
-	AVREDXORVS & obj.AMask:  {enc: rVVVEncoding},
-
-	// 31.14.2: Vector Widening Integer Reduction Instructions
-	AVWREDSUMUVS & obj.AMask: {enc: rVVVEncoding},
-	AVWREDSUMVS & obj.AMask:  {enc: rVVVEncoding},
-
-	// 31.14.3: Vector Single-Width Floating-Point Reduction Instructions
-	AVFREDOSUMVS & obj.AMask: {enc: rVVVEncoding},
-	AVFREDUSUMVS & obj.AMask: {enc: rVVVEncoding},
-	AVFREDMAXVS & obj.AMask:  {enc: rVVVEncoding},
-	AVFREDMINVS & obj.AMask:  {enc: rVVVEncoding},
-
-	// 31.14.4: Vector Widening Floating-Point Reduction Instructions
-	AVFWREDOSUMVS & obj.AMask: {enc: rVVVEncoding},
-	AVFWREDUSUMVS & obj.AMask: {enc: rVVVEncoding},
-
-	// 31.15: Vector Mask Instructions
-	AVMANDMM & obj.AMask:  {enc: rVVVEncoding},
-	AVMNANDMM & obj.AMask: {enc: rVVVEncoding},
-	AVMANDNMM & obj.AMask: {enc: rVVVEncoding},
-	AVMXORMM & obj.AMask:  {enc: rVVVEncoding},
-	AVMORMM & obj.AMask:   {enc: rVVVEncoding},
-	AVMNORMM & obj.AMask:  {enc: rVVVEncoding},
-	AVMORNMM & obj.AMask:  {enc: rVVVEncoding},
-	AVMXNORMM & obj.AMask: {enc: rVVVEncoding},
-	AVCPOPM & obj.AMask:   {enc: rVIEncoding},
-	AVFIRSTM & obj.AMask:  {enc: rVIEncoding},
-	AVMSBFM & obj.AMask:   {enc: rVVEncoding},
-	AVMSIFM & obj.AMask:   {enc: rVVEncoding},
-	AVMSOFM & obj.AMask:   {enc: rVVEncoding},
-	AVIOTAM & obj.AMask:   {enc: rVVEncoding},
-	AVIDV & obj.AMask:     {enc: rVVEncoding},
-
-	// 31.16.1: Integer Scalar Move Instructions
-	AVMVXS & obj.AMask: {enc: rVIEncoding},
-	AVMVSX & obj.AMask: {enc: rIVEncoding},
-
-	// 31.16.2: Floating-Point Scalar Move Instructions
-	AVFMVFS & obj.AMask: {enc: rVFEncoding},
-	AVFMVSF & obj.AMask: {enc: rFVEncoding},
-
-	// 31.16.3: Vector Slide Instructions
-	AVSLIDEUPVX & obj.AMask:     {enc: rVIVEncoding},
-	AVSLIDEUPVI & obj.AMask:     {enc: rVVuEncoding},
-	AVSLIDEDOWNVX & obj.AMask:   {enc: rVIVEncoding},
-	AVSLIDEDOWNVI & obj.AMask:   {enc: rVVuEncoding},
-	AVSLIDE1UPVX & obj.AMask:    {enc: rVIVEncoding},
-	AVFSLIDE1UPVF & obj.AMask:   {enc: rVFVEncoding},
-	AVSLIDE1DOWNVX & obj.AMask:  {enc: rVIVEncoding},
-	AVFSLIDE1DOWNVF & obj.AMask: {enc: rVFVEncoding},
-
-	// 31.16.4: Vector Register Gather Instructions
-	AVRGATHERVV & obj.AMask:     {enc: rVVVEncoding},
-	AVRGATHEREI16VV & obj.AMask: {enc: rVVVEncoding},
-	AVRGATHERVX & obj.AMask:     {enc: rVIVEncoding},
-	AVRGATHERVI & obj.AMask:     {enc: rVVuEncoding},
-
-	// 31.16.5: Vector Compress Instruction
-	AVCOMPRESSVM & obj.AMask: {enc: rVVVEncoding},
-
-	// 31.16.6: Whole Vector Register Move
-	AVMV1RV & obj.AMask: {enc: rVVEncoding},
-	AVMV2RV & obj.AMask: {enc: rVVEncoding},
-	AVMV4RV & obj.AMask: {enc: rVVEncoding},
-	AVMV8RV & obj.AMask: {enc: rVVEncoding},
-
 	//
 	// Privileged ISA
 	//
@@ -3697,20 +3436,12 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 		AVMULVV, AVMULVX, AVMULHVV, AVMULHVX, AVMULHUVV, AVMULHUVX, AVMULHSUVV, AVMULHSUVX,
 		AVDIVUVV, AVDIVUVX, AVDIVVV, AVDIVVX, AVREMUVV, AVREMUVX, AVREMVV, AVREMVX,
 		AVWMULVV, AVWMULVX, AVWMULUVV, AVWMULUVX, AVWMULSUVV, AVWMULSUVX, AVNSRLWV, AVNSRLWX, AVNSRAWV, AVNSRAWX,
+		AVMACCVV, AVMACCVX, AVNMSACVV, AVNMSACVX, AVMADDVV, AVMADDVX, AVNMSUBVV, AVNMSUBVX,
+		AVWMACCUVV, AVWMACCUVX, AVWMACCVV, AVWMACCVX, AVWMACCSUVV, AVWMACCSUVX, AVWMACCUSVX,
 		AVSADDUVV, AVSADDUVX, AVSADDUVI, AVSADDVV, AVSADDVX, AVSADDVI, AVSSUBUVV, AVSSUBUVX, AVSSUBVV, AVSSUBVX,
 		AVAADDUVV, AVAADDUVX, AVAADDVV, AVAADDVX, AVASUBUVV, AVASUBUVX, AVASUBVV, AVASUBVX,
 		AVSMULVV, AVSMULVX, AVSSRLVV, AVSSRLVX, AVSSRLVI, AVSSRAVV, AVSSRAVX, AVSSRAVI,
-		AVNCLIPUWV, AVNCLIPUWX, AVNCLIPUWI, AVNCLIPWV, AVNCLIPWX, AVNCLIPWI,
-		AVFADDVV, AVFADDVF, AVFSUBVV, AVFSUBVF, AVFRSUBVF,
-		AVFWADDVV, AVFWADDVF, AVFWSUBVV, AVFWSUBVF, AVFWADDWV, AVFWADDWF, AVFWSUBWV, AVFWSUBWF,
-		AVFMULVV, AVFMULVF, AVFDIVVV, AVFDIVVF, AVFRDIVVF, AVFWMULVV, AVFWMULVF,
-		AVFMINVV, AVFMINVF, AVFMAXVV, AVFMAXVF,
-		AVFSGNJVV, AVFSGNJVF, AVFSGNJNVV, AVFSGNJNVF, AVFSGNJXVV, AVFSGNJXVF,
-		AVMFEQVV, AVMFEQVF, AVMFNEVV, AVMFNEVF, AVMFLTVV, AVMFLTVF, AVMFLEVV, AVMFLEVF, AVMFGTVF, AVMFGEVF,
-		AVREDSUMVS, AVREDMAXUVS, AVREDMAXVS, AVREDMINUVS, AVREDMINVS, AVREDANDVS, AVREDORVS, AVREDXORVS,
-		AVWREDSUMUVS, AVWREDSUMVS, AVFREDOSUMVS, AVFREDUSUMVS, AVFREDMAXVS, AVFREDMINVS, AVFWREDOSUMVS, AVFWREDUSUMVS,
-		AVSLIDEUPVX, AVSLIDEDOWNVX, AVSLIDE1UPVX, AVFSLIDE1UPVF, AVSLIDE1DOWNVX, AVFSLIDE1DOWNVF,
-		AVRGATHERVV, AVRGATHEREI16VV, AVRGATHERVX:
+		AVNCLIPUWV, AVNCLIPUWX, AVNCLIPUWI, AVNCLIPWV, AVNCLIPWX, AVNCLIPWI:
 		// Set mask bit
 		switch {
 		case ins.rs3 == obj.REG_NONE:
@@ -3720,21 +3451,8 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 		}
 		ins.rd, ins.rs1, ins.rs2, ins.rs3 = uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg), obj.REG_NONE
 
-	case AVFMACCVV, AVFMACCVF, AVFNMACCVV, AVFNMACCVF, AVFMSACVV, AVFMSACVF, AVFNMSACVV, AVFNMSACVF,
-		AVFMADDVV, AVFMADDVF, AVFNMADDVV, AVFNMADDVF, AVFMSUBVV, AVFMSUBVF, AVFNMSUBVV, AVFNMSUBVF,
-		AVFWMACCVV, AVFWMACCVF, AVFWNMACCVV, AVFWNMACCVF, AVFWMSACVV, AVFWMSACVF, AVFWNMSACVV, AVFWNMSACVF,
-		AVMACCVV, AVMACCVX, AVNMSACVV, AVNMSACVX, AVMADDVV, AVMADDVX, AVNMSUBVV, AVNMSUBVX,
-		AVWMACCUVV, AVWMACCUVX, AVWMACCVV, AVWMACCVX, AVWMACCSUVV, AVWMACCSUVX, AVWMACCUSVX:
-		switch {
-		case ins.rs3 == obj.REG_NONE:
-			ins.funct7 |= 1 // unmasked
-		case ins.rs3 != REG_V0:
-			p.Ctxt.Diag("%v: invalid vector mask register", p)
-		}
-		ins.rd, ins.rs1, ins.rs2, ins.rs3 = uint32(p.To.Reg), uint32(p.Reg), uint32(p.From.Reg), obj.REG_NONE
-
 	case AVADDVI, AVRSUBVI, AVANDVI, AVORVI, AVXORVI, AVMSEQVI, AVMSNEVI, AVMSLEUVI, AVMSLEVI, AVMSGTUVI, AVMSGTVI,
-		AVSLLVI, AVSRLVI, AVSRAVI, AVNSRLWI, AVNSRAWI, AVRGATHERVI, AVSLIDEUPVI, AVSLIDEDOWNVI:
+		AVSLLVI, AVSRLVI, AVSRAVI, AVNSRLWI, AVNSRAWI:
 		// Set mask bit
 		switch {
 		case ins.rs3 == obj.REG_NONE:
@@ -3744,10 +3462,7 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 		}
 		ins.rd, ins.rs1, ins.rs2, ins.rs3 = uint32(p.To.Reg), obj.REG_NONE, uint32(p.Reg), obj.REG_NONE
 
-	case AVZEXTVF2, AVSEXTVF2, AVZEXTVF4, AVSEXTVF4, AVZEXTVF8, AVSEXTVF8, AVFSQRTV, AVFRSQRT7V, AVFREC7V, AVFCLASSV,
-		AVFCVTXUFV, AVFCVTXFV, AVFCVTRTZXUFV, AVFCVTRTZXFV, AVFCVTFXUV, AVFCVTFXV,
-		AVFWCVTXUFV, AVFWCVTXFV, AVFWCVTRTZXUFV, AVFWCVTRTZXFV, AVFWCVTFXUV, AVFWCVTFXV, AVFWCVTFFV,
-		AVFNCVTXUFW, AVFNCVTXFW, AVFNCVTRTZXUFW, AVFNCVTRTZXFW, AVFNCVTFXUW, AVFNCVTFXW, AVFNCVTFFW, AVFNCVTRODFFW:
+	case AVZEXTVF2, AVSEXTVF2, AVZEXTVF4, AVSEXTVF4, AVZEXTVF8, AVSEXTVF8:
 		// Set mask bit
 		switch {
 		case ins.rs1 == obj.REG_NONE:
@@ -3769,17 +3484,8 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 		}
 		ins.rd, ins.rs1, ins.rs2 = uint32(p.To.Reg), obj.REG_NONE, REG_V0
 
-	case AVFMVVF:
-		ins.funct7 |= 1 // unmasked
-		ins.rd, ins.rs1, ins.rs2 = uint32(p.To.Reg), uint32(p.From.Reg), REG_V0
-
-	case AVADCVIM, AVADCVVM, AVADCVXM, AVSBCVVM, AVSBCVXM:
-		if ins.rd == REG_V0 {
-			p.Ctxt.Diag("%v: invalid destination register V0", p)
-		}
-		fallthrough
-
-	case AVMADCVVM, AVMADCVXM, AVMSBCVVM, AVMSBCVXM, AVMADCVIM, AVMERGEVVM, AVMERGEVXM, AVMERGEVIM, AVFMERGEVFM:
+	case AVADCVVM, AVADCVXM, AVMADCVVM, AVMADCVXM, AVSBCVVM, AVSBCVXM, AVMSBCVVM, AVMSBCVXM, AVADCVIM, AVMADCVIM,
+		AVMERGEVVM, AVMERGEVXM, AVMERGEVIM:
 		if ins.rs3 != REG_V0 {
 			p.Ctxt.Diag("%v: invalid vector mask register", p)
 		}
@@ -3819,7 +3525,7 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 		ins.as = AVXORVI
 		ins.rd, ins.rs1, ins.rs2, ins.imm = uint32(p.To.Reg), obj.REG_NONE, uint32(p.From.Reg), -1
 
-	case AVMSGTVV, AVMSGTUVV, AVMSGEVV, AVMSGEUVV, AVMFGTVV, AVMFGEVV:
+	case AVMSGTVV, AVMSGTUVV, AVMSGEVV, AVMSGEUVV:
 		// Set mask bit
 		switch {
 		case ins.rs3 == obj.REG_NONE:
@@ -3836,10 +3542,6 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 			ins.as = AVMSLEVV
 		case AVMSGEUVV:
 			ins.as = AVMSLEUVV
-		case AVMFGTVV:
-			ins.as = AVMFLTVV
-		case AVMFGEVV:
-			ins.as = AVMFLEVV
 		}
 		ins.rd, ins.rs1, ins.rs2, ins.rs3 = uint32(p.To.Reg), uint32(p.Reg), uint32(p.From.Reg), obj.REG_NONE
 
@@ -3862,63 +3564,6 @@ func instructionsForProg(p *obj.Prog) []*instruction {
 			ins.as = AVMSGTUVI
 		}
 		ins.rd, ins.rs1, ins.rs2, ins.rs3, ins.imm = uint32(p.To.Reg), obj.REG_NONE, uint32(p.Reg), obj.REG_NONE, ins.imm-1
-
-	case AVFABSV, AVFNEGV:
-		// Set mask bit
-		switch {
-		case ins.rs1 == obj.REG_NONE:
-			ins.funct7 |= 1 // unmasked
-		case ins.rs1 != REG_V0:
-			p.Ctxt.Diag("%v: invalid vector mask register", p)
-		}
-		switch ins.as {
-		case AVFABSV:
-			ins.as = AVFSGNJXVV
-		case AVFNEGV:
-			ins.as = AVFSGNJNVV
-		}
-		ins.rd, ins.rs1, ins.rs2 = uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.From.Reg)
-
-	case AVMANDMM, AVMNANDMM, AVMANDNMM, AVMXORMM, AVMORMM, AVMNORMM, AVMORNMM, AVMXNORMM, AVMMVM, AVMNOTM, AVCOMPRESSVM:
-		ins.rd, ins.rs1, ins.rs2 = uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg)
-		switch ins.as {
-		case AVMMVM:
-			ins.as, ins.rs2 = AVMANDMM, ins.rs1
-		case AVMNOTM:
-			ins.as, ins.rs2 = AVMNANDMM, ins.rs1
-		}
-
-	case AVMCLRM, AVMSETM:
-		ins.rd, ins.rs1, ins.rs2 = uint32(p.From.Reg), uint32(p.From.Reg), uint32(p.From.Reg)
-		switch ins.as {
-		case AVMCLRM:
-			ins.as = AVMXORMM
-		case AVMSETM:
-			ins.as = AVMXNORMM
-		}
-
-	case AVCPOPM, AVFIRSTM, AVMSBFM, AVMSIFM, AVMSOFM, AVIOTAM:
-		// Set mask bit
-		switch {
-		case ins.rs1 == obj.REG_NONE:
-			ins.funct7 |= 1 // unmasked
-		case ins.rs1 != REG_V0:
-			p.Ctxt.Diag("%v: invalid vector mask register", p)
-		}
-		ins.rs1 = obj.REG_NONE
-
-	case AVIDV:
-		// Set mask bit
-		switch {
-		case ins.rd == obj.REG_NONE:
-			ins.funct7 |= 1 // unmasked
-		case ins.rd != obj.REG_NONE && ins.rs2 != REG_V0:
-			p.Ctxt.Diag("%v: invalid vector mask register", p)
-		}
-		if ins.rd == obj.REG_NONE {
-			ins.rd = uint32(p.From.Reg)
-		}
-		ins.rs1, ins.rs2 = obj.REG_NONE, REG_V0
 	}
 
 	for _, ins := range inss {
diff --git a/src/cmd/internal/obj/s390x/condition_code.go b/src/cmd/internal/obj/s390x/condition_code.go
index 3330d1310dd704..f498fd6f774421 100644
--- a/src/cmd/internal/obj/s390x/condition_code.go
+++ b/src/cmd/internal/obj/s390x/condition_code.go
@@ -122,7 +122,7 @@ func (c CCMask) String() string {
 	}
 
 	// invalid
-	return fmt.Sprintf("Invalid (%#x)", uint8(c))
+	return fmt.Sprintf("Invalid (%#x)", c)
 }
 
 func (CCMask) CanBeAnSSAAux() {}
diff --git a/src/cmd/internal/objabi/flag.go b/src/cmd/internal/objabi/flag.go
index 1bb46e3bcdc01b..cfd86dc6dc4a7e 100644
--- a/src/cmd/internal/objabi/flag.go
+++ b/src/cmd/internal/objabi/flag.go
@@ -113,7 +113,7 @@ func (versionFlag) Set(s string) error {
 	// build ID of the binary, so that if the compiler is changed and
 	// rebuilt, we notice and rebuild all packages.
 	if s == "full" {
-		if strings.Contains(buildcfg.Version, "devel") {
+		if strings.HasPrefix(buildcfg.Version, "devel") {
 			p += " buildID=" + buildID
 		}
 	}
diff --git a/src/cmd/internal/objabi/funcid.go b/src/cmd/internal/objabi/funcid.go
index b953d848032893..5fd0c02baa29a3 100644
--- a/src/cmd/internal/objabi/funcid.go
+++ b/src/cmd/internal/objabi/funcid.go
@@ -10,28 +10,27 @@ import (
 )
 
 var funcIDs = map[string]abi.FuncID{
-	"abort":              abi.FuncID_abort,
-	"asmcgocall":         abi.FuncID_asmcgocall,
-	"asyncPreempt":       abi.FuncID_asyncPreempt,
-	"cgocallback":        abi.FuncID_cgocallback,
-	"corostart":          abi.FuncID_corostart,
-	"debugCallV2":        abi.FuncID_debugCallV2,
-	"gcBgMarkWorker":     abi.FuncID_gcBgMarkWorker,
-	"rt0_go":             abi.FuncID_rt0_go,
-	"goexit":             abi.FuncID_goexit,
-	"gogo":               abi.FuncID_gogo,
-	"gopanic":            abi.FuncID_gopanic,
-	"handleAsyncEvent":   abi.FuncID_handleAsyncEvent,
-	"main":               abi.FuncID_runtime_main,
-	"mcall":              abi.FuncID_mcall,
-	"morestack":          abi.FuncID_morestack,
-	"mstart":             abi.FuncID_mstart,
-	"panicwrap":          abi.FuncID_panicwrap,
-	"runFinalizers":      abi.FuncID_runFinalizers,
-	"runCleanups":        abi.FuncID_runCleanups,
-	"sigpanic":           abi.FuncID_sigpanic,
-	"systemstack_switch": abi.FuncID_systemstack_switch,
-	"systemstack":        abi.FuncID_systemstack,
+	"abort":                    abi.FuncID_abort,
+	"asmcgocall":               abi.FuncID_asmcgocall,
+	"asyncPreempt":             abi.FuncID_asyncPreempt,
+	"cgocallback":              abi.FuncID_cgocallback,
+	"corostart":                abi.FuncID_corostart,
+	"debugCallV2":              abi.FuncID_debugCallV2,
+	"gcBgMarkWorker":           abi.FuncID_gcBgMarkWorker,
+	"rt0_go":                   abi.FuncID_rt0_go,
+	"goexit":                   abi.FuncID_goexit,
+	"gogo":                     abi.FuncID_gogo,
+	"gopanic":                  abi.FuncID_gopanic,
+	"handleAsyncEvent":         abi.FuncID_handleAsyncEvent,
+	"main":                     abi.FuncID_runtime_main,
+	"mcall":                    abi.FuncID_mcall,
+	"morestack":                abi.FuncID_morestack,
+	"mstart":                   abi.FuncID_mstart,
+	"panicwrap":                abi.FuncID_panicwrap,
+	"runFinalizersAndCleanups": abi.FuncID_runFinalizersAndCleanups,
+	"sigpanic":                 abi.FuncID_sigpanic,
+	"systemstack_switch":       abi.FuncID_systemstack_switch,
+	"systemstack":              abi.FuncID_systemstack,
 
 	// Don't show in call stack but otherwise not special.
 	"deferreturn": abi.FuncIDWrapper,
diff --git a/src/cmd/internal/objabi/pkgspecial.go b/src/cmd/internal/objabi/pkgspecial.go
index e09aeadbc21c82..118d2d412678d0 100644
--- a/src/cmd/internal/objabi/pkgspecial.go
+++ b/src/cmd/internal/objabi/pkgspecial.go
@@ -49,12 +49,9 @@ var runtimePkgs = []string{
 	"runtime",
 
 	"internal/runtime/atomic",
-	"internal/runtime/cgroup",
 	"internal/runtime/exithook",
-	"internal/runtime/gc",
 	"internal/runtime/maps",
 	"internal/runtime/math",
-	"internal/runtime/strconv",
 	"internal/runtime/sys",
 	"internal/runtime/syscall",
 
diff --git a/src/cmd/internal/script/scripttest/setup.go b/src/cmd/internal/script/scripttest/setup.go
index f9d650af1c48fc..2826b56e87edb2 100644
--- a/src/cmd/internal/script/scripttest/setup.go
+++ b/src/cmd/internal/script/scripttest/setup.go
@@ -114,16 +114,6 @@ func linkOrCopy(t *testing.T, src, dst string) {
 	if err == nil {
 		return
 	}
-	fi, err := os.Stat(src)
-	if err != nil {
-		t.Fatalf("copying %s to %s: %v", src, dst, err)
-	}
-	if fi.IsDir() {
-		if err := os.CopyFS(dst, os.DirFS(src)); err != nil {
-			t.Fatalf("copying %s to %s: %v", src, dst, err)
-		}
-		return
-	}
 	srcf, err := os.Open(src)
 	if err != nil {
 		t.Fatalf("copying %s to %s: %v", src, dst, err)
diff --git a/src/cmd/internal/test2json/test2json.go b/src/cmd/internal/test2json/test2json.go
index d08ef389f82a21..ed78764d26791f 100644
--- a/src/cmd/internal/test2json/test2json.go
+++ b/src/cmd/internal/test2json/test2json.go
@@ -36,8 +36,6 @@ type event struct {
 	Elapsed     *float64   `json:",omitempty"`
 	Output      *textBytes `json:",omitempty"`
 	FailedBuild string     `json:",omitempty"`
-	Key         string     `json:",omitempty"`
-	Value       string     `json:",omitempty"`
 }
 
 // textBytes is a hack to get JSON to emit a []byte as a string
@@ -179,7 +177,6 @@ var (
 		[]byte("=== PASS  "),
 		[]byte("=== FAIL  "),
 		[]byte("=== SKIP  "),
-		[]byte("=== ATTR  "),
 	}
 
 	reports = [][]byte{
@@ -336,11 +333,6 @@ func (c *Converter) handleInputLine(line []byte) {
 		c.output.write(origLine)
 		return
 	}
-	if action == "attr" {
-		var rest string
-		name, rest, _ = strings.Cut(name, " ")
-		e.Key, e.Value, _ = strings.Cut(rest, " ")
-	}
 	// === update.
 	// Finish any pending PASS/FAIL reports.
 	c.needMarker = sawMarker
diff --git a/src/cmd/internal/test2json/testdata/attr.json b/src/cmd/internal/test2json/testdata/attr.json
deleted file mode 100644
index 9d7b0195ba3703..00000000000000
--- a/src/cmd/internal/test2json/testdata/attr.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{"Action":"start"}
-{"Action":"run","Test":"TestAttr"}
-{"Action":"output","Test":"TestAttr","Output":"=== RUN   TestAttr\n"}
-{"Action":"attr","Test":"TestAttr","Key":"key","Value":"value"}
-{"Action":"output","Test":"TestAttr","Output":"=== ATTR  TestAttr key value\n"}
-{"Action":"run","Test":"TestAttr/sub"}
-{"Action":"output","Test":"TestAttr/sub","Output":"=== RUN   TestAttr/sub\n"}
-{"Action":"attr","Test":"TestAttr/sub","Key":"key","Value":"value"}
-{"Action":"output","Test":"TestAttr/sub","Output":"=== ATTR  TestAttr/sub key value\n"}
-{"Action":"output","Test":"TestAttr","Output":"--- PASS: TestAttr (0.00s)\n"}
-{"Action":"output","Test":"TestAttr/sub","Output":"    --- PASS: TestAttr/sub (0.00s)\n"}
-{"Action":"pass","Test":"TestAttr/sub"}
-{"Action":"pass","Test":"TestAttr"}
-{"Action":"output","Output":"PASS\n"}
-{"Action":"pass"}
diff --git a/src/cmd/internal/test2json/testdata/attr.test b/src/cmd/internal/test2json/testdata/attr.test
deleted file mode 100644
index 6ec9f116edc7dc..00000000000000
--- a/src/cmd/internal/test2json/testdata/attr.test
+++ /dev/null
@@ -1,7 +0,0 @@
-=== RUN   TestAttr
-=== ATTR  TestAttr key value
-=== RUN   TestAttr/sub
-=== ATTR  TestAttr/sub key value
---- PASS: TestAttr (0.00s)
-    --- PASS: TestAttr/sub (0.00s)
-PASS
diff --git a/src/cmd/internal/testdir/testdir_test.go b/src/cmd/internal/testdir/testdir_test.go
index 483a9ec33c6798..7e7867d83f9c47 100644
--- a/src/cmd/internal/testdir/testdir_test.go
+++ b/src/cmd/internal/testdir/testdir_test.go
@@ -1242,24 +1242,6 @@ func (t test) errorCheck(outStr string, wantAuto bool, fullshort ...string) (err
 		}
 	}
 
-	if len(out) > 0 {
-		// If a test uses -m and instantiates an imported generic function,
-		// the errors will include messages for the instantiated function
-		// with locations in the other package. Filter those out.
-		localOut := make([]string, 0, len(out))
-	outLoop:
-		for _, errLine := range out {
-			for j := 0; j < len(fullshort); j += 2 {
-				full, short := fullshort[j], fullshort[j+1]
-				if strings.HasPrefix(errLine, full+":") || strings.HasPrefix(errLine, short+":") {
-					localOut = append(localOut, errLine)
-					continue outLoop
-				}
-			}
-		}
-		out = localOut
-	}
-
 	if len(out) > 0 {
 		errs = append(errs, fmt.Errorf("Unmatched Errors:"))
 		for _, errLine := range out {
diff --git a/src/cmd/link/internal/ld/asmb.go b/src/cmd/link/internal/ld/asmb.go
index 2088e13be1233a..ca9a57741c0393 100644
--- a/src/cmd/link/internal/ld/asmb.go
+++ b/src/cmd/link/internal/ld/asmb.go
@@ -195,7 +195,10 @@ func relocSectFn(ctxt *Link, relocSect func(*Link, *OutBuf, *sym.Section, []load
 		fn = func(ctxt *Link, sect *sym.Section, syms []loader.Sym) {
 			wg.Add(1)
 			sem <- 1
-			out := ctxt.Out.View(sect.Reloff)
+			out, err := ctxt.Out.View(sect.Reloff)
+			if err != nil {
+				panic(err)
+			}
 			go func() {
 				relocSect(ctxt, out, sect, syms)
 				wg.Done()
diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go
index 42756e86bbf0ea..b3e1ac457dc0f5 100644
--- a/src/cmd/link/internal/ld/data.go
+++ b/src/cmd/link/internal/ld/data.go
@@ -894,15 +894,10 @@ func windynrelocsym(ctxt *Link, rel *loader.SymbolBuilder, s loader.Sym) error {
 				rel.AddUint8(0x90)
 				rel.AddUint8(0x90)
 			case sys.AMD64:
-				// The relocation symbol might be at an absolute offset
-				// higher than 32 bits, but the jump instruction can't
-				// encode more than 32 bit offsets. We use a jump
-				// relative to the instruction pointer to get around this
-				// limitation.
 				rel.AddUint8(0xff)
+				rel.AddUint8(0x24)
 				rel.AddUint8(0x25)
-				rel.AddPCRelPlus(ctxt.Arch, targ, 0)
-				rel.AddUint8(0x90)
+				rel.AddAddrPlus4(ctxt.Arch, targ, 0)
 				rel.AddUint8(0x90)
 			}
 		} else if tplt >= 0 {
@@ -1063,8 +1058,7 @@ func writeBlocks(ctxt *Link, out *OutBuf, sem chan int, ldr *loader.Loader, syms
 		}
 
 		// Start the block output operator.
-		if ctxt.Out.isMmapped() {
-			o := out.View(uint64(out.Offset() + written))
+		if o, err := out.View(uint64(out.Offset() + written)); err == nil {
 			sem <- 1
 			wg.Add(1)
 			go func(o *OutBuf, ldr *loader.Loader, syms []loader.Sym, addr, size int64, pad []byte) {
@@ -1143,16 +1137,15 @@ type writeFn func(*Link, *OutBuf, int64, int64)
 
 // writeParallel handles scheduling parallel execution of data write functions.
 func writeParallel(wg *sync.WaitGroup, fn writeFn, ctxt *Link, seek, vaddr, length uint64) {
-	if ctxt.Out.isMmapped() {
-		out := ctxt.Out.View(seek)
+	if out, err := ctxt.Out.View(seek); err != nil {
+		ctxt.Out.SeekSet(int64(seek))
+		fn(ctxt, ctxt.Out, int64(vaddr), int64(length))
+	} else {
 		wg.Add(1)
 		go func() {
 			defer wg.Done()
 			fn(ctxt, out, int64(vaddr), int64(length))
 		}()
-	} else {
-		ctxt.Out.SeekSet(int64(seek))
-		fn(ctxt, ctxt.Out, int64(vaddr), int64(length))
 	}
 }
 
diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go
index ab086c57f4ff0f..28b5ddf74c70ca 100644
--- a/src/cmd/link/internal/ld/dwarf_test.go
+++ b/src/cmd/link/internal/ld/dwarf_test.go
@@ -287,10 +287,7 @@ func TestSizes(t *testing.T) {
 	mustHaveDWARF(t)
 
 	// External linking may bring in C symbols with unknown size. Skip.
-	//
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	t.Parallel()
 
@@ -864,9 +861,7 @@ func TestAbstractOriginSanityIssue26237(t *testing.T) {
 
 func TestRuntimeTypeAttrInternal(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	mustHaveDWARF(t)
 
@@ -1496,11 +1491,7 @@ func TestIssue39757(t *testing.T) {
 
 func TestIssue42484(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
-	// Avoid spurious failures from external linkers.
-	//
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false) // Avoid spurious failures from external linkers.
 
 	mustHaveDWARF(t)
 
diff --git a/src/cmd/link/internal/ld/elf_test.go b/src/cmd/link/internal/ld/elf_test.go
index c2a1bc0b9442e0..c42a1173b6e70d 100644
--- a/src/cmd/link/internal/ld/elf_test.go
+++ b/src/cmd/link/internal/ld/elf_test.go
@@ -278,8 +278,7 @@ func TestElfBindNow(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.name, func(t *testing.T) {
 			if test.mustInternalLink {
-				// N.B. none of the tests pass -asan/-msan/-asan.
-				testenv.MustInternalLink(t, testenv.SpecialBuildTypes{Cgo: test.mustHaveCGO})
+				testenv.MustInternalLink(t, test.mustHaveCGO)
 			}
 			if test.mustHaveCGO {
 				testenv.MustHaveCGO(t)
diff --git a/src/cmd/link/internal/ld/ld_test.go b/src/cmd/link/internal/ld/ld_test.go
index 4f343f3eb80f92..c954ab6bca7294 100644
--- a/src/cmd/link/internal/ld/ld_test.go
+++ b/src/cmd/link/internal/ld/ld_test.go
@@ -21,10 +21,7 @@ func TestUndefinedRelocErrors(t *testing.T) {
 
 	// When external linking, symbols may be defined externally, so we allow
 	// undefined symbols and let external linker resolve. Skip the test.
-	//
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	t.Parallel()
 
diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go
index 431dad9d6bcbaa..f55f342d6eeb5f 100644
--- a/src/cmd/link/internal/ld/macho.go
+++ b/src/cmd/link/internal/ld/macho.go
@@ -430,10 +430,8 @@ func (ctxt *Link) domacho() {
 				// This must be fairly recent for Apple signing (go.dev/issue/30488).
 				// Having too old a version here was also implicated in some problems
 				// calling into macOS libraries (go.dev/issue/56784).
-				// CL 460476 noted that in general this can be the most recent supported
-				// macOS version, but we haven't tested if going higher than Go's oldest
-				// supported macOS version could cause new problems.
-				version = 12<<16 | 0<<8 | 0<<0 // 12.0.0
+				// In general this can be the most recent supported macOS version.
+				version = 11<<16 | 0<<8 | 0<<0 // 11.0.0
 			}
 			ml := newMachoLoad(ctxt.Arch, imacho.LC_BUILD_VERSION, 4)
 			ml.data[0] = uint32(machoPlatform)
diff --git a/src/cmd/link/internal/ld/macho_test.go b/src/cmd/link/internal/ld/macho_test.go
index 29adc0b78b1165..ad02731d3a5d93 100644
--- a/src/cmd/link/internal/ld/macho_test.go
+++ b/src/cmd/link/internal/ld/macho_test.go
@@ -66,7 +66,7 @@ func TestMachoSectionsReadOnly(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.name, func(t *testing.T) {
 			if test.mustInternalLink {
-				testenv.MustInternalLink(t, testenv.SpecialBuildTypes{Cgo: test.mustHaveCGO})
+				testenv.MustInternalLink(t, test.mustHaveCGO)
 			}
 			if test.mustHaveCGO {
 				testenv.MustHaveCGO(t)
diff --git a/src/cmd/link/internal/ld/outbuf.go b/src/cmd/link/internal/ld/outbuf.go
index 8732fcc5feee8c..54fafcaf9963b5 100644
--- a/src/cmd/link/internal/ld/outbuf.go
+++ b/src/cmd/link/internal/ld/outbuf.go
@@ -92,7 +92,9 @@ func NewOutBuf(arch *sys.Arch) *OutBuf {
 	}
 }
 
-func (out *OutBuf) View(start uint64) *OutBuf {
+var viewError = errors.New("output not mmapped")
+
+func (out *OutBuf) View(start uint64) (*OutBuf, error) {
 	return &OutBuf{
 		arch:   out.arch,
 		name:   out.name,
@@ -100,7 +102,7 @@ func (out *OutBuf) View(start uint64) *OutBuf {
 		heap:   out.heap,
 		off:    int64(start),
 		isView: true,
-	}
+	}, nil
 }
 
 var viewCloseError = errors.New("cannot Close OutBuf from View")
diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go
index fbfd928e873be5..2808644150c242 100644
--- a/src/cmd/link/internal/ld/pe.go
+++ b/src/cmd/link/internal/ld/pe.go
@@ -1097,10 +1097,18 @@ func Peinit(ctxt *Link) {
 	if ctxt.Arch.PtrSize == 8 {
 		// 64-bit architectures
 		pe64 = true
+		PEBASE = 1 << 32
+		if ctxt.Arch.Family == sys.AMD64 {
+			// TODO(rsc): For cgo we currently use 32-bit relocations
+			// that fail when PEBASE is too large.
+			// We need to fix this, but for now, use a smaller PEBASE.
+			PEBASE = 1 << 22
+		}
 		var oh64 pe.OptionalHeader64
 		l = binary.Size(&oh64)
 	} else {
 		// 32-bit architectures
+		PEBASE = 1 << 22
 		var oh pe.OptionalHeader32
 		l = binary.Size(&oh)
 	}
@@ -1114,13 +1122,6 @@ func Peinit(ctxt *Link) {
 		PEFILEALIGN = 0
 		// We are creating an object file. The absolute address is irrelevant.
 		PEBASE = 0
-	} else {
-		// Use the same base image address as MSVC and LLVM.
-		if pe64 {
-			PEBASE = 0x140000000
-		} else {
-			PEBASE = 0x400000
-		}
 	}
 
 	var sh [16]pe.SectionHeader32
diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go
index 22c5dbc007ce4f..e0363b5535ccea 100644
--- a/src/cmd/link/internal/loadelf/ldelf.go
+++ b/src/cmd/link/internal/loadelf/ldelf.go
@@ -602,19 +602,6 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, f *bio.Reader,
 					// See https://sourceware.org/bugzilla/show_bug.cgi?id=21809
 					continue
 				}
-
-				if arch.Family == sys.RISCV64 &&
-					(strings.HasPrefix(elfsym.name, "$d") || strings.HasPrefix(elfsym.name, "$x")) {
-					// Ignore RISC-V mapping symbols, which
-					// are similar to ARM64's case.
-					// See issue 73591.
-					continue
-				}
-
-				if arch.Family == sys.Loong64 && (strings.HasPrefix(elfsym.name, ".L") || elfsym.name == "L0\001") {
-					// Symbols generated by the relax feature of gcc and binutils on loong64.
-					continue
-				}
 			}
 
 			if strings.HasPrefix(elfsym.name, ".Linfo_string") {
@@ -622,7 +609,7 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, f *bio.Reader,
 				continue
 			}
 
-			if strings.HasPrefix(elfsym.name, ".LASF") || strings.HasPrefix(elfsym.name, ".LLRL") || strings.HasPrefix(elfsym.name, ".LLST") || strings.HasPrefix(elfsym.name, ".LVUS") {
+			if strings.HasPrefix(elfsym.name, ".LASF") || strings.HasPrefix(elfsym.name, ".LLRL") || strings.HasPrefix(elfsym.name, ".LLST") {
 				// gcc on s390x and riscv64 does this.
 				continue
 			}
@@ -695,12 +682,6 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, f *bio.Reader,
 			l.SetAttrOnList(s, true)
 			textp = append(textp, s)
 			for ss := l.SubSym(s); ss != 0; ss = l.SubSym(ss) {
-				if arch.Family == sys.Loong64 && (strings.HasPrefix(l.SymName(ss), ".L") || l.SymName(ss) == "L0\001") {
-					// Symbols generated by the relax feature of gcc and binutils on loong64.
-					// We ignore them here because there are too many symbols of this type,
-					// resulting in insufficient space in findfunctable.
-					continue
-				}
 				if l.AttrOnList(ss) {
 					return errorf("symbol %s listed multiple times",
 						l.SymName(ss))
@@ -1037,14 +1018,7 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) {
 		MIPS64 | uint32(elf.R_MIPS_PC32)<<16:
 		return 4, 4, nil
 
-	// These are informational annotations to assist linker optimizations.
-	case LOONG64 | uint32(elf.R_LARCH_ALIGN)<<16,
-		LOONG64 | uint32(elf.R_LARCH_RELAX)<<16:
-		return 0, 0, nil
-
 	case LOONG64 | uint32(elf.R_LARCH_ADD8)<<16,
-		LOONG64 | uint32(elf.R_LARCH_ADD6)<<16,
-		LOONG64 | uint32(elf.R_LARCH_SUB6)<<16,
 		LOONG64 | uint32(elf.R_LARCH_SUB8)<<16:
 		return 1, 1, nil
 
@@ -1058,13 +1032,7 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) {
 		LOONG64 | uint32(elf.R_LARCH_ADD32)<<16,
 		LOONG64 | uint32(elf.R_LARCH_SUB24)<<16,
 		LOONG64 | uint32(elf.R_LARCH_SUB32)<<16,
-		LOONG64 | uint32(elf.R_LARCH_B16)<<16,
-		LOONG64 | uint32(elf.R_LARCH_B21)<<16,
 		LOONG64 | uint32(elf.R_LARCH_B26)<<16,
-		LOONG64 | uint32(elf.R_LARCH_PCALA_HI20)<<16,
-		LOONG64 | uint32(elf.R_LARCH_PCALA_LO12)<<16,
-		LOONG64 | uint32(elf.R_LARCH_GOT_PC_HI20)<<16,
-		LOONG64 | uint32(elf.R_LARCH_GOT_PC_LO12)<<16,
 		LOONG64 | uint32(elf.R_LARCH_32_PCREL)<<16:
 		return 4, 4, nil
 
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index 2bf52d221bfadf..d4605ae6f7f3ac 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -452,50 +452,33 @@ func (st *loadState) addSym(name string, ver int, r *oReader, li uint32, kind in
 	if oldsym.Dupok() {
 		return oldi
 	}
-	// If one is a DATA symbol (i.e. has content, DataSize != 0,
-	// including RODATA) and the other is BSS, the one with content wins.
+	// If one is a DATA symbol (i.e. has content, DataSize != 0)
+	// and the other is BSS, the one with content wins.
 	// If both are BSS, the one with larger size wins.
+	// Specifically, the "overwrite" variable and the final result are
 	//
-	// For a special case, we allow a TEXT symbol overwrites a BSS symbol
-	// even if the BSS symbol has larger size. This is because there is
-	// code like below to take the address of a function
-	//
-	//	//go:linkname fn
-	//	var fn uintptr
-	//	var fnAddr = uintptr(unsafe.Pointer(&fn))
-	//
-	// TODO: maybe limit this case to just pointer sized variable?
-	//
-	// In summary, the "overwrite" variable and the final result are
-	//
-	// new sym       old sym       result
+	// new sym       old sym       overwrite
 	// ---------------------------------------------
-	// TEXT          BSS           new wins
-	// DATA          DATA          ERROR
-	// DATA lg/eq    BSS  sm/eq    new wins
-	// DATA small    BSS  large    ERROR
-	// BSS  large    DATA small    ERROR
-	// BSS  large    BSS  small    new wins
-	// BSS  sm/eq    D/B  lg/eq    old wins
-	// BSS           TEXT          old wins
-	oldtyp := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
-	newtyp := sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type())]
-	oldIsText := oldtyp.IsText()
-	newIsText := newtyp.IsText()
-	oldHasContent := oldr.DataSize(oldli) != 0
-	newHasContent := r.DataSize(li) != 0
-	oldIsBSS := oldtyp.IsData() && !oldHasContent
-	newIsBSS := newtyp.IsData() && !newHasContent
-	switch {
-	case newIsText && oldIsBSS,
-		newHasContent && oldIsBSS && sz >= oldsz,
-		newIsBSS && oldIsBSS && sz > oldsz:
+	// DATA          DATA          true  => ERROR
+	// DATA lg/eq    BSS  sm/eq    true  => new wins
+	// DATA small    BSS  large    true  => ERROR
+	// BSS  large    DATA small    true  => ERROR
+	// BSS  large    BSS  small    true  => new wins
+	// BSS  sm/eq    D/B  lg/eq    false => old wins
+	overwrite := r.DataSize(li) != 0 || oldsz < sz
+	if overwrite {
 		// new symbol overwrites old symbol.
+		oldtyp := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
+		if !(oldtyp.IsData() && oldr.DataSize(oldli) == 0) || oldsz > sz {
+			log.Fatalf("duplicated definition of symbol %s, from %s and %s", name, r.unit.Lib.Pkg, oldr.unit.Lib.Pkg)
+		}
 		l.objSyms[oldi] = objSym{r.objidx, li}
-	case newIsBSS && (oldsz >= sz || oldIsText):
-		// old win, just ignore the new symbol.
-	default:
-		log.Fatalf("duplicated definition of symbol %s, from %s (type %s size %d) and %s (type %s size %d)", name, r.unit.Lib.Pkg, newtyp, sz, oldr.unit.Lib.Pkg, oldtyp, oldsz)
+	} else {
+		// old symbol overwrites new symbol.
+		typ := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
+		if !typ.IsData() { // only allow overwriting data symbol
+			log.Fatalf("duplicated definition of symbol %s, from %s and %s", name, r.unit.Lib.Pkg, oldr.unit.Lib.Pkg)
+		}
 	}
 	return oldi
 }
@@ -1736,6 +1719,14 @@ func (l *Loader) GetVarDwarfAuxSym(i Sym) Sym {
 // expected to have the actual content/payload) and then a set of
 // interior loader.Sym's that point into a portion of the container.
 func (l *Loader) AddInteriorSym(container Sym, interior Sym) {
+	// Container symbols are expected to have content/data.
+	// NB: this restriction may turn out to be too strict (it's possible
+	// to imagine a zero-sized container with an interior symbol pointing
+	// into it); it's ok to relax or remove it if we counter an
+	// oddball host object that triggers this.
+	if l.SymSize(container) == 0 && len(l.Data(container)) == 0 {
+		panic("unexpected empty container symbol")
+	}
 	// The interior symbols for a container are not expected to have
 	// content/data or relocations.
 	if len(l.Data(interior)) != 0 {
@@ -2369,6 +2360,7 @@ var blockedLinknames = map[string][]string{
 	"crypto/rand.fatal":                     {"crypto/rand"},
 	"internal/runtime/maps.errNilAssign":    {"internal/runtime/maps"},
 	"internal/runtime/maps.fatal":           {"internal/runtime/maps"},
+	"internal/runtime/maps.mapKeyError":     {"internal/runtime/maps"},
 	"internal/runtime/maps.newarray":        {"internal/runtime/maps"},
 	"internal/runtime/maps.newobject":       {"internal/runtime/maps"},
 	"internal/runtime/maps.typedmemclr":     {"internal/runtime/maps"},
@@ -2398,22 +2390,6 @@ var blockedLinknames = map[string][]string{
 	"runtime.mapdelete_fast32":   {"runtime"},
 	"runtime.mapdelete_fast64":   {"runtime"},
 	"runtime.mapdelete_faststr":  {"runtime"},
-	// New internal linknames in Go 1.25
-	// Pushed from runtime
-	"internal/runtime/cgroup.throw":                  {"internal/runtime/cgroup"},
-	"internal/runtime/maps.typeString":               {"internal/runtime/maps"},
-	"internal/synctest.IsInBubble":                   {"internal/synctest"},
-	"internal/synctest.associate":                    {"internal/synctest"},
-	"internal/synctest.disassociate":                 {"internal/synctest"},
-	"internal/synctest.isAssociated":                 {"internal/synctest"},
-	"runtime/trace.runtime_readTrace":                {"runtime/trace"},
-	"runtime/trace.runtime_traceClockUnitsPerSecond": {"runtime/trace"},
-	"sync_test.runtime_blockUntilEmptyCleanupQueue":  {"sync_test"},
-	"time.runtimeIsBubbled":                          {"time"},
-	"unique.runtime_blockUntilEmptyCleanupQueue":     {"unique"},
-	// Others
-	"net.newWindowsFile":                   {"net"},              // pushed from os
-	"testing/synctest.testingSynctestTest": {"testing/synctest"}, // pushed from testing
 }
 
 // check if a linkname reference to symbol s from pkg is allowed
diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go
index 6adafd38fc5466..8a6cce177e7190 100644
--- a/src/cmd/link/internal/loong64/asm.go
+++ b/src/cmd/link/internal/loong64/asm.go
@@ -58,328 +58,10 @@ func gentext(ctxt *ld.Link, ldr *loader.Loader) {
 }
 
 func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
-	targ := r.Sym()
-	var targType sym.SymKind
-	if targ != 0 {
-		targType = ldr.SymType(targ)
-	}
-
-	switch r.Type() {
-	default:
-		if r.Type() >= objabi.ElfRelocOffset {
-			ldr.Errorf(s, "adddynrel: unexpected reloction type %d (%s)", r.Type(), sym.RelocName(target.Arch, r.Type()))
-			return false
-		}
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_64):
-		if targType == sym.SDYNIMPORT {
-			ldr.Errorf(s, "unexpected R_LARCH_64 relocation for dynamic symbol %s", ldr.SymName(targ))
-		}
-		su := ldr.MakeSymbolUpdater(s)
-		su.SetRelocType(rIdx, objabi.R_ADDR)
-		if target.IsPIE() && target.IsInternal() {
-			// For internal linking PIE, this R_ADDR relocation cannot
-			// be resolved statically. We need to generate a dynamic
-			// relocation. Let the code below handle it.
-			break
-		}
-		return true
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_B26):
-		if targType == sym.SDYNIMPORT {
-			addpltsym(target, ldr, syms, targ)
-			su := ldr.MakeSymbolUpdater(s)
-			su.SetRelocSym(rIdx, syms.PLT)
-			su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymPlt(targ)))
-		}
-		if targType == 0 || targType == sym.SXREF {
-			ldr.Errorf(s, "unknown symbol %s in callloong64", ldr.SymName(targ))
-		}
-		su := ldr.MakeSymbolUpdater(s)
-		su.SetRelocType(rIdx, objabi.R_CALLLOONG64)
-		return true
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_GOT_PC_HI20),
-		objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_GOT_PC_LO12):
-		if targType != sym.SDYNIMPORT {
-			// TODO: turn LDR of GOT entry into ADR of symbol itself
-		}
-
-		ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_LARCH_64))
-		su := ldr.MakeSymbolUpdater(s)
-		if r.Type() == objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_GOT_PC_HI20) {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_HI)
-		} else {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_LO)
-		}
-		su.SetRelocSym(rIdx, syms.GOT)
-		su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ)))
-		return true
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_PCALA_HI20),
-		objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_PCALA_LO12):
-		if targType == sym.SDYNIMPORT {
-			ldr.Errorf(s, "unexpected relocation for dynamic symbol %s", ldr.SymName(targ))
-		}
-		if targType == 0 || targType == sym.SXREF {
-			ldr.Errorf(s, "unknown symbol %s", ldr.SymName(targ))
-		}
-
-		su := ldr.MakeSymbolUpdater(s)
-		if r.Type() == objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_PCALA_HI20) {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_HI)
-		} else {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_LO)
-		}
-		return true
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_ADD64),
-		objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_SUB64):
-		su := ldr.MakeSymbolUpdater(s)
-		if r.Type() == objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_ADD64) {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADD64)
-		} else {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_SUB64)
-		}
-		return true
-
-	case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_B16),
-		objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_B21):
-		if targType == sym.SDYNIMPORT {
-			addpltsym(target, ldr, syms, targ)
-			su := ldr.MakeSymbolUpdater(s)
-			su.SetRelocSym(rIdx, syms.PLT)
-			su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymPlt(targ)))
-		}
-		if targType == 0 || targType == sym.SXREF {
-			ldr.Errorf(s, "unknown symbol %s in R_JMPxxLOONG64", ldr.SymName(targ))
-		}
-		su := ldr.MakeSymbolUpdater(s)
-		if r.Type() == objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_B16) {
-			su.SetRelocType(rIdx, objabi.R_JMP16LOONG64)
-		} else {
-			su.SetRelocType(rIdx, objabi.R_JMP21LOONG64)
-		}
-		return true
-	}
-
-	relocs := ldr.Relocs(s)
-	r = relocs.At(rIdx)
-
-	switch r.Type() {
-	case objabi.R_CALLLOONG64:
-		if targType != sym.SDYNIMPORT {
-			return true
-		}
-		if target.IsExternal() {
-			return true
-		}
-
-		// Internal linking.
-		if r.Add() != 0 {
-			ldr.Errorf(s, "PLT call with no-zero addend (%v)", r.Add())
-		}
-
-		// Build a PLT entry and change the relocation target to that entry.
-		addpltsym(target, ldr, syms, targ)
-		su := ldr.MakeSymbolUpdater(s)
-		su.SetRelocSym(rIdx, syms.PLT)
-		su.SetRelocAdd(rIdx, int64(ldr.SymPlt(targ)))
-		return true
-
-	case objabi.R_ADDR:
-		if ldr.SymType(s) == sym.STEXT && target.IsElf() {
-			// The code is asking for the address of an external
-			// function. We provide it with the address of the
-			// correspondent GOT symbol.
-			ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_LARCH_64))
-			su := ldr.MakeSymbolUpdater(s)
-			su.SetRelocSym(rIdx, syms.GOT)
-			su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ)))
-			return true
-		}
-
-		// Process dynamic relocations for the data sections.
-		if target.IsPIE() && target.IsInternal() {
-			// When internally linking, generate dynamic relocations
-			// for all typical R_ADDR relocations. The exception
-			// are those R_ADDR that are created as part of generating
-			// the dynamic relocations and must be resolved statically.
-			//
-			// There are three phases relevant to understanding this:
-			//
-			//	dodata()  // we are here
-			//	address() // symbol address assignment
-			//	reloc()   // resolution of static R_ADDR relocs
-			//
-			// At this point symbol addresses have not been
-			// assigned yet (as the final size of the .rela section
-			// will affect the addresses), and so we cannot write
-			// the Elf64_Rela.r_offset now. Instead we delay it
-			// until after the 'address' phase of the linker is
-			// complete. We do this via Addaddrplus, which creates
-			// a new R_ADDR relocation which will be resolved in
-			// the 'reloc' phase.
-			//
-			// These synthetic static R_ADDR relocs must be skipped
-			// now, or else we will be caught in an infinite loop
-			// of generating synthetic relocs for our synthetic
-			// relocs.
-			//
-			// Furthermore, the rela sections contain dynamic
-			// relocations with R_ADDR relocations on
-			// Elf64_Rela.r_offset. This field should contain the
-			// symbol offset as determined by reloc(), not the
-			// final dynamically linked address as a dynamic
-			// relocation would provide.
-			switch ldr.SymName(s) {
-			case ".dynsym", ".rela", ".rela.plt", ".got.plt", ".dynamic":
-				return false
-			}
-		} else {
-			// Either internally linking a static executable,
-			// in which case we can resolve these relocations
-			// statically in the 'reloc' phase, or externally
-			// linking, in which case the relocation will be
-			// prepared in the 'reloc' phase and passed to the
-			// external linker in the 'asmb' phase.
-			if ldr.SymType(s) != sym.SDATA && ldr.SymType(s) != sym.SRODATA {
-				break
-			}
-		}
-
-		if target.IsElf() {
-			// Generate R_LARCH_RELATIVE relocations for best
-			// efficiency in the dynamic linker.
-			//
-			// As noted above, symbol addresses have not been
-			// assigned yet, so we can't generate the final reloc
-			// entry yet. We ultimately want:
-			//
-			// r_offset = s + r.Off
-			// r_info = R_LARCH_RELATIVE
-			// r_addend = targ + r.Add
-			//
-			// The dynamic linker will set *offset = base address +
-			// addend.
-			//
-			// AddAddrPlus is used for r_offset and r_addend to
-			// generate new R_ADDR relocations that will update
-			// these fields in the 'reloc' phase.
-			rela := ldr.MakeSymbolUpdater(syms.Rela)
-			rela.AddAddrPlus(target.Arch, s, int64(r.Off()))
-			if r.Siz() == 8 {
-				rela.AddUint64(target.Arch, elf.R_INFO(0, uint32(elf.R_LARCH_RELATIVE)))
-			} else {
-				ldr.Errorf(s, "unexpected relocation for dynamic symbol %s", ldr.SymName(targ))
-			}
-			rela.AddAddrPlus(target.Arch, targ, int64(r.Add()))
-			return true
-		}
-
-	case objabi.R_LOONG64_GOT_HI,
-		objabi.R_LOONG64_GOT_LO:
-		ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_LARCH_64))
-		su := ldr.MakeSymbolUpdater(s)
-		if r.Type() == objabi.R_LOONG64_GOT_HI {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_HI)
-		} else {
-			su.SetRelocType(rIdx, objabi.R_LOONG64_ADDR_LO)
-		}
-		su.SetRelocSym(rIdx, syms.GOT)
-		su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ)))
-		return true
-	}
+	log.Fatalf("adddynrel not implemented")
 	return false
 }
 
-func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
-	if plt.Size() == 0 {
-		// pcalau12i $r14, imm
-		plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_HI, 4)
-		plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x1a00000e)
-
-		// sub.d $r13, $r13, $r15
-		plt.AddUint32(ctxt.Arch, 0x0011bdad)
-
-		// ld.d $r15, $r14, imm
-		plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_LO, 4)
-		plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x28c001cf)
-
-		// addi.d $r13, $r13, -40
-		plt.AddUint32(ctxt.Arch, 0x02ff61ad)
-
-		// addi.d $r12, $r14, imm
-		plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_LOONG64_ADDR_LO, 4)
-		plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x2c001cc)
-
-		// srli.d $r13, $r13, 1
-		plt.AddUint32(ctxt.Arch, 0x004505ad)
-
-		// ld.d $r12, $r12, 8
-		plt.AddUint32(ctxt.Arch, 0x28c0218c)
-
-		// jirl $r0, $r15, 0
-		plt.AddUint32(ctxt.Arch, 0x4c0001e0)
-
-		// check gotplt.size == 0
-		if gotplt.Size() != 0 {
-			ctxt.Errorf(gotplt.Sym(), "got.plt is not empty at the very beginning")
-		}
-
-		gotplt.AddUint64(ctxt.Arch, 0)
-		gotplt.AddUint64(ctxt.Arch, 0)
-	}
-}
-
-func addpltsym(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym) {
-	if ldr.SymPlt(s) >= 0 {
-		return
-	}
-
-	ld.Adddynsym(ldr, target, syms, s)
-
-	if target.IsElf() {
-		plt := ldr.MakeSymbolUpdater(syms.PLT)
-		gotplt := ldr.MakeSymbolUpdater(syms.GOTPLT)
-		rela := ldr.MakeSymbolUpdater(syms.RelaPLT)
-		if plt.Size() == 0 {
-			panic("plt is not set up")
-		}
-
-		// pcalau12i $r15, imm
-		plt.AddAddrPlus4(target.Arch, gotplt.Sym(), gotplt.Size())
-		plt.SetUint32(target.Arch, plt.Size()-4, 0x1a00000f)
-		relocs := plt.Relocs()
-		plt.SetRelocType(relocs.Count()-1, objabi.R_LOONG64_ADDR_HI)
-
-		// ld.d $r15, $r15, imm
-		plt.AddAddrPlus4(target.Arch, gotplt.Sym(), gotplt.Size())
-		plt.SetUint32(target.Arch, plt.Size()-4, 0x28c001ef)
-		relocs = plt.Relocs()
-		plt.SetRelocType(relocs.Count()-1, objabi.R_LOONG64_ADDR_LO)
-
-		// pcaddu12i $r13, 0
-		plt.AddUint32(target.Arch, 0x1c00000d)
-
-		// jirl r0, r15, 0
-		plt.AddUint32(target.Arch, 0x4c0001e0)
-
-		// add to got.plt: pointer to plt[0]
-		gotplt.AddAddrPlus(target.Arch, plt.Sym(), 0)
-
-		// rela
-		rela.AddAddrPlus(target.Arch, gotplt.Sym(), gotplt.Size()-8)
-		sDynid := ldr.SymDynid(s)
-		rela.AddUint64(target.Arch, elf.R_INFO(uint32(sDynid), uint32(elf.R_LARCH_JUMP_SLOT)))
-		rela.AddUint64(target.Arch, 0)
-
-		ldr.SetPlt(s, int32(plt.Size()-16))
-	} else {
-		ldr.Errorf(s, "addpltsym: unsupport binary format")
-	}
-}
-
 func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym, r loader.ExtReloc, ri int, sectoff int64) bool {
 	// loong64 ELF relocation (endian neutral)
 	//		offset     uint64
@@ -452,6 +134,10 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym,
 	return true
 }
 
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
+	return
+}
+
 func machoreloc1(*sys.Arch, *ld.OutBuf, *loader.Loader, loader.Sym, loader.ExtReloc, int64) bool {
 	return false
 }
@@ -511,38 +197,6 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade
 		pc := ldr.SymValue(s) + int64(r.Off())
 		t := ldr.SymAddr(rs) + r.Add() - pc
 		return int64(val&0xfc000000 | (((t >> 2) & 0xffff) << 10) | (((t >> 2) & 0x3ff0000) >> 16)), noExtReloc, isOk
-
-	case objabi.R_JMP16LOONG64,
-		objabi.R_JMP21LOONG64:
-		pc := ldr.SymValue(s) + int64(r.Off())
-		t := ldr.SymAddr(rs) + r.Add() - pc
-		if r.Type() == objabi.R_JMP16LOONG64 {
-			return int64(val&0xfc0003ff | (((t >> 2) & 0xffff) << 10)), noExtReloc, isOk
-		}
-		return int64(val&0xfc0003e0 | (((t >> 2) & 0xffff) << 10) | (((t >> 2) & 0x1f0000) >> 16)), noExtReloc, isOk
-
-	case objabi.R_LOONG64_TLS_IE_HI,
-		objabi.R_LOONG64_TLS_IE_LO:
-		if target.IsPIE() && target.IsElf() {
-			if !target.IsLinux() {
-				ldr.Errorf(s, "TLS reloc on unsupported OS %v", target.HeadType)
-			}
-			t := ldr.SymAddr(rs) + r.Add()
-			if r.Type() == objabi.R_LOONG64_TLS_IE_HI {
-				// pcalau12i -> lu12i.w
-				return (0x14000000 | (val & 0x1f) | ((t >> 12) << 5)), noExtReloc, isOk
-			}
-			// ld.d -> ori
-			return (0x03800000 | (val & 0x3ff) | ((t & 0xfff) << 10)), noExtReloc, isOk
-		} else {
-			log.Fatalf("cannot handle R_LOONG64_TLS_IE_x (sym %s) when linking internally", ldr.SymName(rs))
-		}
-
-	case objabi.R_LOONG64_ADD64, objabi.R_LOONG64_SUB64:
-		if r.Type() == objabi.R_LOONG64_ADD64 {
-			return int64(val + ldr.SymAddr(rs) + r.Add()), noExtReloc, isOk
-		}
-		return int64(val - (ldr.SymAddr(rs) + r.Add())), noExtReloc, isOk
 	}
 
 	return val, 0, false
diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go
index 2fe32600f1d6c7..53c4ee77fed4b4 100644
--- a/src/cmd/link/link_test.go
+++ b/src/cmd/link/link_test.go
@@ -46,9 +46,7 @@ func TestIssue21703(t *testing.T) {
 	t.Parallel()
 
 	testenv.MustHaveGoBuild(t)
-	// N.B. the build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	const source = `
 package main
@@ -93,9 +91,7 @@ func TestIssue28429(t *testing.T) {
 	t.Parallel()
 
 	testenv.MustHaveGoBuild(t)
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	tmpdir := t.TempDir()
 
@@ -193,9 +189,7 @@ main.x: relocation target main.zero not defined
 func TestIssue33979(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
 	testenv.MustHaveCGO(t)
-	// N.B. go build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.SpecialBuildTypes{Cgo: true})
+	testenv.MustInternalLink(t, true)
 
 	t.Parallel()
 
@@ -397,8 +391,8 @@ func TestMachOBuildVersion(t *testing.T) {
 	found := false
 	checkMin := func(ver uint32) {
 		major, minor, patch := (ver>>16)&0xff, (ver>>8)&0xff, (ver>>0)&0xff
-		if major < 12 {
-			t.Errorf("LC_BUILD_VERSION version %d.%d.%d < 12.0.0", major, minor, patch)
+		if major < 11 {
+			t.Errorf("LC_BUILD_VERSION version %d.%d.%d < 11.0.0", major, minor, patch)
 		}
 	}
 	for _, cmd := range exem.Loads {
@@ -959,9 +953,7 @@ func TestIndexMismatch(t *testing.T) {
 	// This shouldn't happen with "go build". We invoke the compiler and the linker
 	// manually, and try to "trick" the linker with an inconsistent object file.
 	testenv.MustHaveGoBuild(t)
-	// N.B. the build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	t.Parallel()
 
@@ -1601,9 +1593,6 @@ func TestCheckLinkname(t *testing.T) {
 		{"ok.go", true},
 		// push linkname is ok
 		{"push.go", true},
-		// using a linknamed variable to reference an assembly
-		// function in the same package is ok
-		{"textvar", true},
 		// pull linkname of blocked symbol is not ok
 		{"coro.go", false},
 		{"coro_var.go", false},
@@ -1621,7 +1610,7 @@ func TestCheckLinkname(t *testing.T) {
 		test := test
 		t.Run(test.src, func(t *testing.T) {
 			t.Parallel()
-			src := "./testdata/linkname/" + test.src
+			src := filepath.Join("testdata", "linkname", test.src)
 			exe := filepath.Join(tmpdir, test.src+".exe")
 			cmd := testenv.Command(t, testenv.GoToolPath(t), "build", "-o", exe, src)
 			out, err := cmd.CombinedOutput()
diff --git a/src/cmd/link/testdata/linkname/textvar/asm.s b/src/cmd/link/testdata/linkname/textvar/asm.s
deleted file mode 100644
index 332dcdb4e79b62..00000000000000
--- a/src/cmd/link/testdata/linkname/textvar/asm.s
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2024 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.
-
-TEXT	·asmfunc(SB),0,$0-0
-	RET
diff --git a/src/cmd/link/testdata/linkname/textvar/main.go b/src/cmd/link/testdata/linkname/textvar/main.go
deleted file mode 100644
index b38995e706ad78..00000000000000
--- a/src/cmd/link/testdata/linkname/textvar/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2024 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.
-
-// Using a linknamed variable to reference an assembly
-// function in the same package is ok.
-
-package main
-
-import _ "unsafe"
-
-func main() {
-	println(&asmfunc)
-}
-
-//go:linkname asmfunc
-var asmfunc uintptr
diff --git a/src/cmd/nm/nm_cgo_test.go b/src/cmd/nm/nm_cgo_test.go
index 13c93fb459eef4..face58c311f7b5 100644
--- a/src/cmd/nm/nm_cgo_test.go
+++ b/src/cmd/nm/nm_cgo_test.go
@@ -11,9 +11,7 @@ import (
 
 func TestInternalLinkerCgoExec(t *testing.T) {
 	testenv.MustHaveCGO(t)
-	// N.B. the go build explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.SpecialBuildTypes{Cgo: true})
+	testenv.MustInternalLink(t, true)
 	testGoExec(t, true, false)
 }
 
diff --git a/src/cmd/pack/pack_test.go b/src/cmd/pack/pack_test.go
index 2922ada8e923cb..268231e23ae3ec 100644
--- a/src/cmd/pack/pack_test.go
+++ b/src/cmd/pack/pack_test.go
@@ -163,9 +163,7 @@ func TestExtract(t *testing.T) {
 // Test that pack-created archives can be understood by the tools.
 func TestHello(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
-	// N.B. the build below explictly doesn't pass through
-	// -asan/-msan/-race, so we don't care about those.
-	testenv.MustInternalLink(t, testenv.NoSpecialBuildTypes)
+	testenv.MustInternalLink(t, false)
 
 	dir := t.TempDir()
 	hello := filepath.Join(dir, "hello.go")
diff --git a/src/cmd/trace/gen.go b/src/cmd/trace/gen.go
index 9cc22df1f68f41..6e4d82799e581d 100644
--- a/src/cmd/trace/gen.go
+++ b/src/cmd/trace/gen.go
@@ -215,12 +215,12 @@ func (g *stackSampleGenerator[R]) StackSample(ctx *traceContext, ev *trace.Event
 // to trace.ResourceNone (the global scope).
 type globalRangeGenerator struct {
 	ranges   map[string]activeRange
-	seenSync int
+	seenSync bool
 }
 
 // Sync notifies the generator of an EventSync event.
 func (g *globalRangeGenerator) Sync() {
-	g.seenSync++
+	g.seenSync = true
 }
 
 // GlobalRange implements a handler for EventRange* events whose Scope.Kind is ResourceNone.
@@ -234,9 +234,8 @@ func (g *globalRangeGenerator) GlobalRange(ctx *traceContext, ev *trace.Event) {
 	case trace.EventRangeBegin:
 		g.ranges[r.Name] = activeRange{ev.Time(), ev.Stack()}
 	case trace.EventRangeActive:
-		// If we've seen at least 2 Sync events (indicating that we're in at least the second
-		// generation), then Active events are always redundant.
-		if g.seenSync < 2 {
+		// If we've seen a Sync event, then Active events are always redundant.
+		if !g.seenSync {
 			// Otherwise, they extend back to the start of the trace.
 			g.ranges[r.Name] = activeRange{ctx.startTime, ev.Stack()}
 		}
@@ -283,11 +282,11 @@ func (g *globalMetricGenerator) GlobalMetric(ctx *traceContext, ev *trace.Event)
 	m := ev.Metric()
 	switch m.Name {
 	case "/memory/classes/heap/objects:bytes":
-		ctx.HeapAlloc(ctx.elapsed(ev.Time()), m.Value.Uint64())
+		ctx.HeapAlloc(ctx.elapsed(ev.Time()), m.Value.ToUint64())
 	case "/gc/heap/goal:bytes":
-		ctx.HeapGoal(ctx.elapsed(ev.Time()), m.Value.Uint64())
+		ctx.HeapGoal(ctx.elapsed(ev.Time()), m.Value.ToUint64())
 	case "/sched/gomaxprocs:threads":
-		ctx.Gomaxprocs(m.Value.Uint64())
+		ctx.Gomaxprocs(m.Value.ToUint64())
 	}
 }
 
@@ -295,12 +294,12 @@ func (g *globalMetricGenerator) GlobalMetric(ctx *traceContext, ev *trace.Event)
 // ResourceProc.
 type procRangeGenerator struct {
 	ranges   map[trace.Range]activeRange
-	seenSync int
+	seenSync bool
 }
 
 // Sync notifies the generator of an EventSync event.
 func (g *procRangeGenerator) Sync() {
-	g.seenSync++
+	g.seenSync = true
 }
 
 // ProcRange implements a handler for EventRange* events whose Scope.Kind is ResourceProc.
@@ -314,9 +313,8 @@ func (g *procRangeGenerator) ProcRange(ctx *traceContext, ev *trace.Event) {
 	case trace.EventRangeBegin:
 		g.ranges[r] = activeRange{ev.Time(), ev.Stack()}
 	case trace.EventRangeActive:
-		// If we've seen at least 2 Sync events (indicating that we're in at least the second
-		// generation), then Active events are always redundant.
-		if g.seenSync < 2 {
+		// If we've seen a Sync event, then Active events are always redundant.
+		if !g.seenSync {
 			// Otherwise, they extend back to the start of the trace.
 			g.ranges[r] = activeRange{ctx.startTime, ev.Stack()}
 		}
diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/inst.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/inst.go
index 39ddaf751e3cfc..866e399cd14134 100644
--- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/inst.go
+++ b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/inst.go
@@ -469,7 +469,7 @@ func (rea RegExtshiftAmount) String() string {
 		if rea.amount != 0 {
 			buf += fmt.Sprintf(" #%d", rea.amount)
 		} else {
-			if rea.show_zero {
+			if rea.show_zero == true {
 				buf += fmt.Sprintf(" #%d", rea.amount)
 			}
 		}
@@ -527,7 +527,7 @@ func (m MemImmediate) String() string {
 		postR := post.String()
 		return fmt.Sprintf("[%s], %s", R, postR)
 	}
-	return "unimplemented!"
+	return fmt.Sprintf("unimplemented!")
 }
 
 // A MemExtend is a memory reference made up of a base R and index expression X.
@@ -1021,110 +1021,110 @@ func (s sysInstFields) getType() sys {
 }
 
 var sysInstsAttrs = map[sysInstFields]sysInstAttrs{
-	{0, 8, 3, 0}:  {sys_TLBI, "VMALLE1IS", false},
-	{0, 8, 3, 1}:  {sys_TLBI, "VAE1IS", true},
-	{0, 8, 3, 2}:  {sys_TLBI, "ASIDE1IS", true},
-	{0, 8, 3, 3}:  {sys_TLBI, "VAAE1IS", true},
-	{0, 8, 3, 5}:  {sys_TLBI, "VALE1IS", true},
-	{0, 8, 3, 7}:  {sys_TLBI, "VAALE1IS", true},
-	{0, 8, 7, 0}:  {sys_TLBI, "VMALLE1", false},
-	{0, 8, 7, 1}:  {sys_TLBI, "VAE1", true},
-	{0, 8, 7, 2}:  {sys_TLBI, "ASIDE1", true},
-	{0, 8, 7, 3}:  {sys_TLBI, "VAAE1", true},
-	{0, 8, 7, 5}:  {sys_TLBI, "VALE1", true},
-	{0, 8, 7, 7}:  {sys_TLBI, "VAALE1", true},
-	{4, 8, 0, 1}:  {sys_TLBI, "IPAS2E1IS", true},
-	{4, 8, 0, 5}:  {sys_TLBI, "IPAS2LE1IS", true},
-	{4, 8, 3, 0}:  {sys_TLBI, "ALLE2IS", false},
-	{4, 8, 3, 1}:  {sys_TLBI, "VAE2IS", true},
-	{4, 8, 3, 4}:  {sys_TLBI, "ALLE1IS", false},
-	{4, 8, 3, 5}:  {sys_TLBI, "VALE2IS", true},
-	{4, 8, 3, 6}:  {sys_TLBI, "VMALLS12E1IS", false},
-	{4, 8, 4, 1}:  {sys_TLBI, "IPAS2E1", true},
-	{4, 8, 4, 5}:  {sys_TLBI, "IPAS2LE1", true},
-	{4, 8, 7, 0}:  {sys_TLBI, "ALLE2", false},
-	{4, 8, 7, 1}:  {sys_TLBI, "VAE2", true},
-	{4, 8, 7, 4}:  {sys_TLBI, "ALLE1", false},
-	{4, 8, 7, 5}:  {sys_TLBI, "VALE2", true},
-	{4, 8, 7, 6}:  {sys_TLBI, "VMALLS12E1", false},
-	{6, 8, 3, 0}:  {sys_TLBI, "ALLE3IS", false},
-	{6, 8, 3, 1}:  {sys_TLBI, "VAE3IS", true},
-	{6, 8, 3, 5}:  {sys_TLBI, "VALE3IS", true},
-	{6, 8, 7, 0}:  {sys_TLBI, "ALLE3", false},
-	{6, 8, 7, 1}:  {sys_TLBI, "VAE3", true},
-	{6, 8, 7, 5}:  {sys_TLBI, "VALE3", true},
-	{0, 8, 1, 0}:  {sys_TLBI, "VMALLE1OS", false},
-	{0, 8, 1, 1}:  {sys_TLBI, "VAE1OS", true},
-	{0, 8, 1, 2}:  {sys_TLBI, "ASIDE1OS", true},
-	{0, 8, 1, 3}:  {sys_TLBI, "VAAE1OS", true},
-	{0, 8, 1, 5}:  {sys_TLBI, "VALE1OS", true},
-	{0, 8, 1, 7}:  {sys_TLBI, "VAALE1OS", true},
-	{0, 8, 2, 1}:  {sys_TLBI, "RVAE1IS", true},
-	{0, 8, 2, 3}:  {sys_TLBI, "RVAAE1IS", true},
-	{0, 8, 2, 5}:  {sys_TLBI, "RVALE1IS", true},
-	{0, 8, 2, 7}:  {sys_TLBI, "RVAALE1IS", true},
-	{0, 8, 5, 1}:  {sys_TLBI, "RVAE1OS", true},
-	{0, 8, 5, 3}:  {sys_TLBI, "RVAAE1OS", true},
-	{0, 8, 5, 5}:  {sys_TLBI, "RVALE1OS", true},
-	{0, 8, 5, 7}:  {sys_TLBI, "RVAALE1OS", true},
-	{0, 8, 6, 1}:  {sys_TLBI, "RVAE1", true},
-	{0, 8, 6, 3}:  {sys_TLBI, "RVAAE1", true},
-	{0, 8, 6, 5}:  {sys_TLBI, "RVALE1", true},
-	{0, 8, 6, 7}:  {sys_TLBI, "RVAALE1", true},
-	{4, 8, 0, 2}:  {sys_TLBI, "RIPAS2E1IS", true},
-	{4, 8, 0, 6}:  {sys_TLBI, "RIPAS2LE1IS", true},
-	{4, 8, 1, 0}:  {sys_TLBI, "ALLE2OS", false},
-	{4, 8, 1, 1}:  {sys_TLBI, "VAE2OS", true},
-	{4, 8, 1, 4}:  {sys_TLBI, "ALLE1OS", false},
-	{4, 8, 1, 5}:  {sys_TLBI, "VALE2OS", true},
-	{4, 8, 1, 6}:  {sys_TLBI, "VMALLS12E1OS", false},
-	{4, 8, 2, 1}:  {sys_TLBI, "RVAE2IS", true},
-	{4, 8, 2, 5}:  {sys_TLBI, "RVALE2IS", true},
-	{4, 8, 4, 0}:  {sys_TLBI, "IPAS2E1OS", true},
-	{4, 8, 4, 2}:  {sys_TLBI, "RIPAS2E1", true},
-	{4, 8, 4, 3}:  {sys_TLBI, "RIPAS2E1OS", true},
-	{4, 8, 4, 4}:  {sys_TLBI, "IPAS2LE1OS", true},
-	{4, 8, 4, 6}:  {sys_TLBI, "RIPAS2LE1", true},
-	{4, 8, 4, 7}:  {sys_TLBI, "RIPAS2LE1OS", true},
-	{4, 8, 5, 1}:  {sys_TLBI, "RVAE2OS", true},
-	{4, 8, 5, 5}:  {sys_TLBI, "RVALE2OS", true},
-	{4, 8, 6, 1}:  {sys_TLBI, "RVAE2", true},
-	{4, 8, 6, 5}:  {sys_TLBI, "RVALE2", true},
-	{6, 8, 1, 0}:  {sys_TLBI, "ALLE3OS", false},
-	{6, 8, 1, 1}:  {sys_TLBI, "VAE3OS", true},
-	{6, 8, 1, 5}:  {sys_TLBI, "VALE3OS", true},
-	{6, 8, 2, 1}:  {sys_TLBI, "RVAE3IS", true},
-	{6, 8, 2, 5}:  {sys_TLBI, "RVALE3IS", true},
-	{6, 8, 5, 1}:  {sys_TLBI, "RVAE3OS", true},
-	{6, 8, 5, 5}:  {sys_TLBI, "RVALE3OS", true},
-	{6, 8, 6, 1}:  {sys_TLBI, "RVAE3", true},
-	{6, 8, 6, 5}:  {sys_TLBI, "RVALE3", true},
-	{0, 7, 6, 1}:  {sys_DC, "IVAC", true},
-	{0, 7, 6, 2}:  {sys_DC, "ISW", true},
-	{0, 7, 10, 2}: {sys_DC, "CSW", true},
-	{0, 7, 14, 2}: {sys_DC, "CISW", true},
-	{3, 7, 4, 1}:  {sys_DC, "ZVA", true},
-	{3, 7, 10, 1}: {sys_DC, "CVAC", true},
-	{3, 7, 11, 1}: {sys_DC, "CVAU", true},
-	{3, 7, 14, 1}: {sys_DC, "CIVAC", true},
-	{0, 7, 6, 3}:  {sys_DC, "IGVAC", true},
-	{0, 7, 6, 4}:  {sys_DC, "IGSW", true},
-	{0, 7, 6, 5}:  {sys_DC, "IGDVAC", true},
-	{0, 7, 6, 6}:  {sys_DC, "IGDSW", true},
-	{0, 7, 10, 4}: {sys_DC, "CGSW", true},
-	{0, 7, 10, 6}: {sys_DC, "CGDSW", true},
-	{0, 7, 14, 4}: {sys_DC, "CIGSW", true},
-	{0, 7, 14, 6}: {sys_DC, "CIGDSW", true},
-	{3, 7, 4, 3}:  {sys_DC, "GVA", true},
-	{3, 7, 4, 4}:  {sys_DC, "GZVA", true},
-	{3, 7, 10, 3}: {sys_DC, "CGVAC", true},
-	{3, 7, 10, 5}: {sys_DC, "CGDVAC", true},
-	{3, 7, 12, 3}: {sys_DC, "CGVAP", true},
-	{3, 7, 12, 5}: {sys_DC, "CGDVAP", true},
-	{3, 7, 13, 3}: {sys_DC, "CGVADP", true},
-	{3, 7, 13, 5}: {sys_DC, "CGDVADP", true},
-	{3, 7, 14, 3}: {sys_DC, "CIGVAC", true},
-	{3, 7, 14, 5}: {sys_DC, "CIGDVAC", true},
-	{3, 7, 12, 1}: {sys_DC, "CVAP", true},
-	{3, 7, 13, 1}: {sys_DC, "CVADP", true},
+	sysInstFields{0, 8, 3, 0}:  {sys_TLBI, "VMALLE1IS", false},
+	sysInstFields{0, 8, 3, 1}:  {sys_TLBI, "VAE1IS", true},
+	sysInstFields{0, 8, 3, 2}:  {sys_TLBI, "ASIDE1IS", true},
+	sysInstFields{0, 8, 3, 3}:  {sys_TLBI, "VAAE1IS", true},
+	sysInstFields{0, 8, 3, 5}:  {sys_TLBI, "VALE1IS", true},
+	sysInstFields{0, 8, 3, 7}:  {sys_TLBI, "VAALE1IS", true},
+	sysInstFields{0, 8, 7, 0}:  {sys_TLBI, "VMALLE1", false},
+	sysInstFields{0, 8, 7, 1}:  {sys_TLBI, "VAE1", true},
+	sysInstFields{0, 8, 7, 2}:  {sys_TLBI, "ASIDE1", true},
+	sysInstFields{0, 8, 7, 3}:  {sys_TLBI, "VAAE1", true},
+	sysInstFields{0, 8, 7, 5}:  {sys_TLBI, "VALE1", true},
+	sysInstFields{0, 8, 7, 7}:  {sys_TLBI, "VAALE1", true},
+	sysInstFields{4, 8, 0, 1}:  {sys_TLBI, "IPAS2E1IS", true},
+	sysInstFields{4, 8, 0, 5}:  {sys_TLBI, "IPAS2LE1IS", true},
+	sysInstFields{4, 8, 3, 0}:  {sys_TLBI, "ALLE2IS", false},
+	sysInstFields{4, 8, 3, 1}:  {sys_TLBI, "VAE2IS", true},
+	sysInstFields{4, 8, 3, 4}:  {sys_TLBI, "ALLE1IS", false},
+	sysInstFields{4, 8, 3, 5}:  {sys_TLBI, "VALE2IS", true},
+	sysInstFields{4, 8, 3, 6}:  {sys_TLBI, "VMALLS12E1IS", false},
+	sysInstFields{4, 8, 4, 1}:  {sys_TLBI, "IPAS2E1", true},
+	sysInstFields{4, 8, 4, 5}:  {sys_TLBI, "IPAS2LE1", true},
+	sysInstFields{4, 8, 7, 0}:  {sys_TLBI, "ALLE2", false},
+	sysInstFields{4, 8, 7, 1}:  {sys_TLBI, "VAE2", true},
+	sysInstFields{4, 8, 7, 4}:  {sys_TLBI, "ALLE1", false},
+	sysInstFields{4, 8, 7, 5}:  {sys_TLBI, "VALE2", true},
+	sysInstFields{4, 8, 7, 6}:  {sys_TLBI, "VMALLS12E1", false},
+	sysInstFields{6, 8, 3, 0}:  {sys_TLBI, "ALLE3IS", false},
+	sysInstFields{6, 8, 3, 1}:  {sys_TLBI, "VAE3IS", true},
+	sysInstFields{6, 8, 3, 5}:  {sys_TLBI, "VALE3IS", true},
+	sysInstFields{6, 8, 7, 0}:  {sys_TLBI, "ALLE3", false},
+	sysInstFields{6, 8, 7, 1}:  {sys_TLBI, "VAE3", true},
+	sysInstFields{6, 8, 7, 5}:  {sys_TLBI, "VALE3", true},
+	sysInstFields{0, 8, 1, 0}:  {sys_TLBI, "VMALLE1OS", false},
+	sysInstFields{0, 8, 1, 1}:  {sys_TLBI, "VAE1OS", true},
+	sysInstFields{0, 8, 1, 2}:  {sys_TLBI, "ASIDE1OS", true},
+	sysInstFields{0, 8, 1, 3}:  {sys_TLBI, "VAAE1OS", true},
+	sysInstFields{0, 8, 1, 5}:  {sys_TLBI, "VALE1OS", true},
+	sysInstFields{0, 8, 1, 7}:  {sys_TLBI, "VAALE1OS", true},
+	sysInstFields{0, 8, 2, 1}:  {sys_TLBI, "RVAE1IS", true},
+	sysInstFields{0, 8, 2, 3}:  {sys_TLBI, "RVAAE1IS", true},
+	sysInstFields{0, 8, 2, 5}:  {sys_TLBI, "RVALE1IS", true},
+	sysInstFields{0, 8, 2, 7}:  {sys_TLBI, "RVAALE1IS", true},
+	sysInstFields{0, 8, 5, 1}:  {sys_TLBI, "RVAE1OS", true},
+	sysInstFields{0, 8, 5, 3}:  {sys_TLBI, "RVAAE1OS", true},
+	sysInstFields{0, 8, 5, 5}:  {sys_TLBI, "RVALE1OS", true},
+	sysInstFields{0, 8, 5, 7}:  {sys_TLBI, "RVAALE1OS", true},
+	sysInstFields{0, 8, 6, 1}:  {sys_TLBI, "RVAE1", true},
+	sysInstFields{0, 8, 6, 3}:  {sys_TLBI, "RVAAE1", true},
+	sysInstFields{0, 8, 6, 5}:  {sys_TLBI, "RVALE1", true},
+	sysInstFields{0, 8, 6, 7}:  {sys_TLBI, "RVAALE1", true},
+	sysInstFields{4, 8, 0, 2}:  {sys_TLBI, "RIPAS2E1IS", true},
+	sysInstFields{4, 8, 0, 6}:  {sys_TLBI, "RIPAS2LE1IS", true},
+	sysInstFields{4, 8, 1, 0}:  {sys_TLBI, "ALLE2OS", false},
+	sysInstFields{4, 8, 1, 1}:  {sys_TLBI, "VAE2OS", true},
+	sysInstFields{4, 8, 1, 4}:  {sys_TLBI, "ALLE1OS", false},
+	sysInstFields{4, 8, 1, 5}:  {sys_TLBI, "VALE2OS", true},
+	sysInstFields{4, 8, 1, 6}:  {sys_TLBI, "VMALLS12E1OS", false},
+	sysInstFields{4, 8, 2, 1}:  {sys_TLBI, "RVAE2IS", true},
+	sysInstFields{4, 8, 2, 5}:  {sys_TLBI, "RVALE2IS", true},
+	sysInstFields{4, 8, 4, 0}:  {sys_TLBI, "IPAS2E1OS", true},
+	sysInstFields{4, 8, 4, 2}:  {sys_TLBI, "RIPAS2E1", true},
+	sysInstFields{4, 8, 4, 3}:  {sys_TLBI, "RIPAS2E1OS", true},
+	sysInstFields{4, 8, 4, 4}:  {sys_TLBI, "IPAS2LE1OS", true},
+	sysInstFields{4, 8, 4, 6}:  {sys_TLBI, "RIPAS2LE1", true},
+	sysInstFields{4, 8, 4, 7}:  {sys_TLBI, "RIPAS2LE1OS", true},
+	sysInstFields{4, 8, 5, 1}:  {sys_TLBI, "RVAE2OS", true},
+	sysInstFields{4, 8, 5, 5}:  {sys_TLBI, "RVALE2OS", true},
+	sysInstFields{4, 8, 6, 1}:  {sys_TLBI, "RVAE2", true},
+	sysInstFields{4, 8, 6, 5}:  {sys_TLBI, "RVALE2", true},
+	sysInstFields{6, 8, 1, 0}:  {sys_TLBI, "ALLE3OS", false},
+	sysInstFields{6, 8, 1, 1}:  {sys_TLBI, "VAE3OS", true},
+	sysInstFields{6, 8, 1, 5}:  {sys_TLBI, "VALE3OS", true},
+	sysInstFields{6, 8, 2, 1}:  {sys_TLBI, "RVAE3IS", true},
+	sysInstFields{6, 8, 2, 5}:  {sys_TLBI, "RVALE3IS", true},
+	sysInstFields{6, 8, 5, 1}:  {sys_TLBI, "RVAE3OS", true},
+	sysInstFields{6, 8, 5, 5}:  {sys_TLBI, "RVALE3OS", true},
+	sysInstFields{6, 8, 6, 1}:  {sys_TLBI, "RVAE3", true},
+	sysInstFields{6, 8, 6, 5}:  {sys_TLBI, "RVALE3", true},
+	sysInstFields{0, 7, 6, 1}:  {sys_DC, "IVAC", true},
+	sysInstFields{0, 7, 6, 2}:  {sys_DC, "ISW", true},
+	sysInstFields{0, 7, 10, 2}: {sys_DC, "CSW", true},
+	sysInstFields{0, 7, 14, 2}: {sys_DC, "CISW", true},
+	sysInstFields{3, 7, 4, 1}:  {sys_DC, "ZVA", true},
+	sysInstFields{3, 7, 10, 1}: {sys_DC, "CVAC", true},
+	sysInstFields{3, 7, 11, 1}: {sys_DC, "CVAU", true},
+	sysInstFields{3, 7, 14, 1}: {sys_DC, "CIVAC", true},
+	sysInstFields{0, 7, 6, 3}:  {sys_DC, "IGVAC", true},
+	sysInstFields{0, 7, 6, 4}:  {sys_DC, "IGSW", true},
+	sysInstFields{0, 7, 6, 5}:  {sys_DC, "IGDVAC", true},
+	sysInstFields{0, 7, 6, 6}:  {sys_DC, "IGDSW", true},
+	sysInstFields{0, 7, 10, 4}: {sys_DC, "CGSW", true},
+	sysInstFields{0, 7, 10, 6}: {sys_DC, "CGDSW", true},
+	sysInstFields{0, 7, 14, 4}: {sys_DC, "CIGSW", true},
+	sysInstFields{0, 7, 14, 6}: {sys_DC, "CIGDSW", true},
+	sysInstFields{3, 7, 4, 3}:  {sys_DC, "GVA", true},
+	sysInstFields{3, 7, 4, 4}:  {sys_DC, "GZVA", true},
+	sysInstFields{3, 7, 10, 3}: {sys_DC, "CGVAC", true},
+	sysInstFields{3, 7, 10, 5}: {sys_DC, "CGDVAC", true},
+	sysInstFields{3, 7, 12, 3}: {sys_DC, "CGVAP", true},
+	sysInstFields{3, 7, 12, 5}: {sys_DC, "CGDVAP", true},
+	sysInstFields{3, 7, 13, 3}: {sys_DC, "CGVADP", true},
+	sysInstFields{3, 7, 13, 5}: {sys_DC, "CGDVADP", true},
+	sysInstFields{3, 7, 14, 3}: {sys_DC, "CIGVAC", true},
+	sysInstFields{3, 7, 14, 5}: {sys_DC, "CIGDVAC", true},
+	sysInstFields{3, 7, 12, 1}: {sys_DC, "CVAP", true},
+	sysInstFields{3, 7, 13, 1}: {sys_DC, "CVADP", true},
 }
diff --git a/src/cmd/vendor/golang.org/x/arch/s390x/s390xasm/plan9.go b/src/cmd/vendor/golang.org/x/arch/s390x/s390xasm/plan9.go
index fa5e33621308b1..95464294c0cc5c 100644
--- a/src/cmd/vendor/golang.org/x/arch/s390x/s390xasm/plan9.go
+++ b/src/cmd/vendor/golang.org/x/arch/s390x/s390xasm/plan9.go
@@ -142,7 +142,7 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) strin
 		case LRVH:
 			op = "MOVHBR"
 		}
-	case LA, LAY, LARL:
+	case LA, LAY:
 		args[0], args[1] = args[1], args[0]
 		op = "MOVD"
 
@@ -349,17 +349,6 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) strin
 	case SLBGR:
 		op = "SUBE"
 		args[0], args[1] = args[1], args[0]
-	case MADBR:
-		op = "FMADD"
-		args[0], args[1], args[2] = args[1], args[2], args[0]
-	case VFM:
-		op = "WFMDB"
-		args[0], args[1], args[2] = args[1], args[2], args[0]
-		args = args[0:3]
-	case VFS:
-		op = "WFSDB"
-		args[0], args[2] = args[2], args[0]
-		args = args[0:3]
 	case MSGFR, MHI, MSFI, MSGFI:
 		switch inst.Op {
 		case MSGFR, MHI, MSFI:
@@ -511,16 +500,16 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) strin
 		if err != nil {
 			return fmt.Sprintf("GoSyntax: error in converting Atoi:%s", err)
 		}
-		opStr := branchOnConditionOp(mask, inst.Op)
+		opStr, check := branchOnConditionOp(mask, inst.Op)
 		if opStr != "" {
 			op = opStr
 		}
 		if op == "SYNC" || op == "NOPH" {
 			return op
 		}
-		if op == "RET" {
-			args = args[:0]
-			return op
+		if check {
+			args[0] = args[1]
+			args = args[:1]
 		}
 	case LOCGR:
 		mask, err := strconv.Atoi(args[2][1:])
@@ -1047,9 +1036,6 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) strin
 // branch on relative mnemonic.
 func branch_relative_op(mask int, opconst Op) (op string, check bool) {
 	switch mask & 0xf {
-	case 1:
-		op = "BVS"
-		check = true
 	case 2:
 		op = "BGT"
 		check = true
@@ -1075,7 +1061,7 @@ func branch_relative_op(mask int, opconst Op) (op string, check bool) {
 		op = "BLEU"
 		check = true
 	case 15:
-		op = "BR"
+		op = "JMP" // BR
 		check = true
 	}
 	return op, check
@@ -1083,16 +1069,17 @@ func branch_relative_op(mask int, opconst Op) (op string, check bool) {
 
 // This function returns corresponding extended mnemonic for the given
 // brach on condition mnemonic.
-func branchOnConditionOp(mask int, opconst Op) (op string) {
+func branchOnConditionOp(mask int, opconst Op) (op string, check bool) {
 	switch mask & 0xf {
 	case 0:
 		op = "NOPH"
 	case 14:
 		op = "SYNC"
 	case 15:
-		op = "RET"
+		op = "JMP"
+		check = true
 	}
-	return op
+	return op, check
 }
 
 // This function returns corresponding plan9 mnemonic for the native bitwise mnemonic.
@@ -1273,7 +1260,7 @@ func reverseOperandOrder(op Op) bool {
 	switch op {
 	case LOCR, MLGR:
 		return true
-	case LTEBR, LTDBR, LCDBR, LGDR:
+	case LTEBR, LTDBR:
 		return true
 	case VLEIB, VLEIH, VLEIF, VLEIG, VPDI:
 		return true
diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/gnu.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/gnu.go
index 864f32c12e85a3..8eba1fd0cf76b6 100644
--- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/gnu.go
+++ b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/gnu.go
@@ -667,14 +667,12 @@ func gnuArg(inst *Inst, pc uint64, symname SymLookup, x Arg, usedPrefixes *bool)
 			}
 		}
 	case Imm:
-		if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 { // See comment in plan9x.go.
-			if s, base := symname(uint64(x)); s != "" {
-				suffix := ""
-				if uint64(x) != base {
-					suffix = fmt.Sprintf("%+d", uint64(x)-base)
-				}
-				return fmt.Sprintf("$%s%s", s, suffix)
+		if s, base := symname(uint64(x)); s != "" {
+			suffix := ""
+			if uint64(x) != base {
+				suffix = fmt.Sprintf("%+d", uint64(x)-base)
 			}
+			return fmt.Sprintf("$%s%s", s, suffix)
 		}
 		if inst.Mode == 32 {
 			return fmt.Sprintf("$%#x", uint32(x))
diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/intel.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/intel.go
index a0622998c53360..472eabda80a616 100644
--- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/intel.go
+++ b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/intel.go
@@ -341,14 +341,12 @@ func IntelSyntax(inst Inst, pc uint64, symname SymLookup) string {
 func intelArg(inst *Inst, pc uint64, symname SymLookup, arg Arg) string {
 	switch a := arg.(type) {
 	case Imm:
-		if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 { // See comment in plan9x.go.
-			if s, base := symname(uint64(a)); s != "" {
-				suffix := ""
-				if uint64(a) != base {
-					suffix = fmt.Sprintf("%+d", uint64(a)-base)
-				}
-				return fmt.Sprintf("$%s%s", s, suffix)
+		if s, base := symname(uint64(a)); s != "" {
+			suffix := ""
+			if uint64(a) != base {
+				suffix = fmt.Sprintf("%+d", uint64(a)-base)
 			}
+			return fmt.Sprintf("$%s%s", s, suffix)
 		}
 		if inst.Mode == 32 {
 			return fmt.Sprintf("%#x", uint32(a))
diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x.go
index e82349cef38a5e..9e866d87b68f2c 100644
--- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x.go
+++ b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x.go
@@ -116,23 +116,12 @@ func plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg
 		return fmt.Sprintf("%#x", addr)
 
 	case Imm:
-		if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 {
-			// Only try to convert an immediate to a symbol in certain
-			// special circumstances. See issue 72942.
-			//
-			// On 64-bit, symbol addresses always hit the Mem case below.
-			// Particularly, we use LEAQ to materialize the address of
-			// a global or function.
-			//
-			// On 32-bit, we sometimes use MOVL. Still try to symbolize
-			// those immediates.
-			if s, base := symname(uint64(a)); s != "" {
-				suffix := ""
-				if uint64(a) != base {
-					suffix = fmt.Sprintf("%+d", uint64(a)-base)
-				}
-				return fmt.Sprintf("$%s%s(SB)", s, suffix)
+		if s, base := symname(uint64(a)); s != "" {
+			suffix := ""
+			if uint64(a) != base {
+				suffix = fmt.Sprintf("%+d", uint64(a)-base)
 			}
+			return fmt.Sprintf("$%s%s(SB)", s, suffix)
 		}
 		if inst.Mode == 32 {
 			return fmt.Sprintf("$%#x", uint32(a))
diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go
index a86ee4fd82575f..3e4a1d0ab4a609 100644
--- a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go
+++ b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go
@@ -20,11 +20,10 @@
 package modfile
 
 import (
-	"cmp"
 	"errors"
 	"fmt"
 	"path/filepath"
-	"slices"
+	"sort"
 	"strconv"
 	"strings"
 	"unicode"
@@ -45,7 +44,6 @@ type File struct {
 	Replace   []*Replace
 	Retract   []*Retract
 	Tool      []*Tool
-	Ignore    []*Ignore
 
 	Syntax *FileSyntax
 }
@@ -102,12 +100,6 @@ type Tool struct {
 	Syntax *Line
 }
 
-// An Ignore is a single ignore statement.
-type Ignore struct {
-	Path   string
-	Syntax *Line
-}
-
 // A VersionInterval represents a range of versions with upper and lower bounds.
 // Intervals are closed: both bounds are included. When Low is equal to High,
 // the interval may refer to a single version ('v1.2.3') or an interval
@@ -312,7 +304,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse
 					})
 				}
 				continue
-			case "module", "godebug", "require", "exclude", "replace", "retract", "tool", "ignore":
+			case "module", "godebug", "require", "exclude", "replace", "retract", "tool":
 				for _, l := range x.Line {
 					f.add(&errs, x, l, x.Token[0], l.Token, fix, strict)
 				}
@@ -345,7 +337,7 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a
 	// and simply ignore those statements.
 	if !strict {
 		switch verb {
-		case "go", "module", "retract", "require", "ignore":
+		case "go", "module", "retract", "require":
 			// want these even for dependency go.mods
 		default:
 			return
@@ -539,21 +531,6 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a
 			Path:   s,
 			Syntax: line,
 		})
-
-	case "ignore":
-		if len(args) != 1 {
-			errorf("ignore directive expects exactly one argument")
-			return
-		}
-		s, err := parseString(&args[0])
-		if err != nil {
-			errorf("invalid quoted string: %v", err)
-			return
-		}
-		f.Ignore = append(f.Ignore, &Ignore{
-			Path:   s,
-			Syntax: line,
-		})
 	}
 }
 
@@ -1642,36 +1619,6 @@ func (f *File) DropTool(path string) error {
 	return nil
 }
 
-// AddIgnore adds a new ignore directive with the given path.
-// It does nothing if the ignore line already exists.
-func (f *File) AddIgnore(path string) error {
-	for _, t := range f.Ignore {
-		if t.Path == path {
-			return nil
-		}
-	}
-
-	f.Ignore = append(f.Ignore, &Ignore{
-		Path:   path,
-		Syntax: f.Syntax.addLine(nil, "ignore", path),
-	})
-
-	f.SortBlocks()
-	return nil
-}
-
-// DropIgnore removes a ignore directive with the given path.
-// It does nothing if no such ignore directive exists.
-func (f *File) DropIgnore(path string) error {
-	for _, t := range f.Ignore {
-		if t.Path == path {
-			t.Syntax.markRemoved()
-			*t = Ignore{}
-		}
-	}
-	return nil
-}
-
 func (f *File) SortBlocks() {
 	f.removeDups() // otherwise sorting is unsafe
 
@@ -1686,13 +1633,15 @@ func (f *File) SortBlocks() {
 		if !ok {
 			continue
 		}
-		less := compareLine
+		less := lineLess
 		if block.Token[0] == "exclude" && useSemanticSortForExclude {
-			less = compareLineExclude
+			less = lineExcludeLess
 		} else if block.Token[0] == "retract" {
-			less = compareLineRetract
+			less = lineRetractLess
 		}
-		slices.SortStableFunc(block.Line, less)
+		sort.SliceStable(block.Line, func(i, j int) bool {
+			return less(block.Line[i], block.Line[j])
+		})
 	}
 }
 
@@ -1708,10 +1657,10 @@ func (f *File) SortBlocks() {
 // retract directives are not de-duplicated since comments are
 // meaningful, and versions may be retracted multiple times.
 func (f *File) removeDups() {
-	removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool, &f.Ignore)
+	removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool)
 }
 
-func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool, ignore *[]*Ignore) {
+func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool) {
 	kill := make(map[*Line]bool)
 
 	// Remove duplicate excludes.
@@ -1770,24 +1719,6 @@ func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, to
 		*tool = newTool
 	}
 
-	if ignore != nil {
-		haveIgnore := make(map[string]bool)
-		for _, i := range *ignore {
-			if haveIgnore[i.Path] {
-				kill[i.Syntax] = true
-				continue
-			}
-			haveIgnore[i.Path] = true
-		}
-		var newIgnore []*Ignore
-		for _, i := range *ignore {
-			if !kill[i.Syntax] {
-				newIgnore = append(newIgnore, i)
-			}
-		}
-		*ignore = newIgnore
-	}
-
 	// Duplicate require and retract directives are not removed.
 
 	// Drop killed statements from the syntax tree.
@@ -1815,38 +1746,39 @@ func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, to
 	syntax.Stmt = stmts
 }
 
-// compareLine compares li and lj. It sorts lexicographically without assigning
-// any special meaning to tokens.
-func compareLine(li, lj *Line) int {
+// lineLess returns whether li should be sorted before lj. It sorts
+// lexicographically without assigning any special meaning to tokens.
+func lineLess(li, lj *Line) bool {
 	for k := 0; k < len(li.Token) && k < len(lj.Token); k++ {
 		if li.Token[k] != lj.Token[k] {
-			return cmp.Compare(li.Token[k], lj.Token[k])
+			return li.Token[k] < lj.Token[k]
 		}
 	}
-	return cmp.Compare(len(li.Token), len(lj.Token))
+	return len(li.Token) < len(lj.Token)
 }
 
-// compareLineExclude compares li and lj for lines in an "exclude" block.
-func compareLineExclude(li, lj *Line) int {
+// lineExcludeLess reports whether li should be sorted before lj for lines in
+// an "exclude" block.
+func lineExcludeLess(li, lj *Line) bool {
 	if len(li.Token) != 2 || len(lj.Token) != 2 {
 		// Not a known exclude specification.
 		// Fall back to sorting lexicographically.
-		return compareLine(li, lj)
+		return lineLess(li, lj)
 	}
 	// An exclude specification has two tokens: ModulePath and Version.
 	// Compare module path by string order and version by semver rules.
 	if pi, pj := li.Token[0], lj.Token[0]; pi != pj {
-		return cmp.Compare(pi, pj)
+		return pi < pj
 	}
-	return semver.Compare(li.Token[1], lj.Token[1])
+	return semver.Compare(li.Token[1], lj.Token[1]) < 0
 }
 
-// compareLineRetract compares li and lj for lines in a "retract" block.
-// It treats each line as a version interval. Single versions are compared as
-// if they were intervals with the same low and high version.
+// lineRetractLess returns whether li should be sorted before lj for lines in
+// a "retract" block. It treats each line as a version interval. Single versions
+// are compared as if they were intervals with the same low and high version.
 // Intervals are sorted in descending order, first by low version, then by
-// high version, using [semver.Compare].
-func compareLineRetract(li, lj *Line) int {
+// high version, using semver.Compare.
+func lineRetractLess(li, lj *Line) bool {
 	interval := func(l *Line) VersionInterval {
 		if len(l.Token) == 1 {
 			return VersionInterval{Low: l.Token[0], High: l.Token[0]}
@@ -1860,9 +1792,9 @@ func compareLineRetract(li, lj *Line) int {
 	vii := interval(li)
 	vij := interval(lj)
 	if cmp := semver.Compare(vii.Low, vij.Low); cmp != 0 {
-		return -cmp
+		return cmp > 0
 	}
-	return -semver.Compare(vii.High, vij.High)
+	return semver.Compare(vii.High, vij.High) > 0
 }
 
 // checkCanonicalVersion returns a non-nil error if vers is not a canonical
diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/work.go b/src/cmd/vendor/golang.org/x/mod/modfile/work.go
index 09df5ea3c72772..5387d0c265937e 100644
--- a/src/cmd/vendor/golang.org/x/mod/modfile/work.go
+++ b/src/cmd/vendor/golang.org/x/mod/modfile/work.go
@@ -6,7 +6,7 @@ package modfile
 
 import (
 	"fmt"
-	"slices"
+	"sort"
 	"strings"
 )
 
@@ -315,7 +315,9 @@ func (f *WorkFile) SortBlocks() {
 		if !ok {
 			continue
 		}
-		slices.SortStableFunc(block.Line, compareLine)
+		sort.SliceStable(block.Line, func(i, j int) bool {
+			return lineLess(block.Line[i], block.Line[j])
+		})
 	}
 }
 
@@ -329,5 +331,5 @@ func (f *WorkFile) SortBlocks() {
 // retract directives are not de-duplicated since comments are
 // meaningful, and versions may be retracted multiple times.
 func (f *WorkFile) removeDups() {
-	removeDups(f.Syntax, nil, &f.Replace, nil, nil)
+	removeDups(f.Syntax, nil, &f.Replace, nil)
 }
diff --git a/src/cmd/vendor/golang.org/x/mod/module/module.go b/src/cmd/vendor/golang.org/x/mod/module/module.go
index 16e1aa7ab47eca..2a364b229b9f95 100644
--- a/src/cmd/vendor/golang.org/x/mod/module/module.go
+++ b/src/cmd/vendor/golang.org/x/mod/module/module.go
@@ -96,11 +96,10 @@ package module
 // Changes to the semantics in this file require approval from rsc.
 
 import (
-	"cmp"
 	"errors"
 	"fmt"
 	"path"
-	"slices"
+	"sort"
 	"strings"
 	"unicode"
 	"unicode/utf8"
@@ -658,15 +657,17 @@ func CanonicalVersion(v string) string {
 // optionally followed by a tie-breaking suffix introduced by a slash character,
 // like in "v0.0.1/go.mod".
 func Sort(list []Version) {
-	slices.SortFunc(list, func(i, j Version) int {
-		if i.Path != j.Path {
-			return strings.Compare(i.Path, j.Path)
+	sort.Slice(list, func(i, j int) bool {
+		mi := list[i]
+		mj := list[j]
+		if mi.Path != mj.Path {
+			return mi.Path < mj.Path
 		}
 		// To help go.sum formatting, allow version/file.
 		// Compare semver prefix by semver rules,
 		// file by string order.
-		vi := i.Version
-		vj := j.Version
+		vi := mi.Version
+		vj := mj.Version
 		var fi, fj string
 		if k := strings.Index(vi, "/"); k >= 0 {
 			vi, fi = vi[:k], vi[k:]
@@ -675,9 +676,9 @@ func Sort(list []Version) {
 			vj, fj = vj[:k], vj[k:]
 		}
 		if vi != vj {
-			return semver.Compare(vi, vj)
+			return semver.Compare(vi, vj) < 0
 		}
-		return cmp.Compare(fi, fj)
+		return fi < fj
 	})
 }
 
diff --git a/src/cmd/vendor/golang.org/x/mod/semver/semver.go b/src/cmd/vendor/golang.org/x/mod/semver/semver.go
index 628f8fd687c90b..9a2dfd33a77045 100644
--- a/src/cmd/vendor/golang.org/x/mod/semver/semver.go
+++ b/src/cmd/vendor/golang.org/x/mod/semver/semver.go
@@ -22,10 +22,7 @@
 // as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0.
 package semver
 
-import (
-	"slices"
-	"strings"
-)
+import "sort"
 
 // parsed returns the parsed form of a semantic version string.
 type parsed struct {
@@ -157,22 +154,19 @@ func Max(v, w string) string {
 // ByVersion implements [sort.Interface] for sorting semantic version strings.
 type ByVersion []string
 
-func (vs ByVersion) Len() int           { return len(vs) }
-func (vs ByVersion) Swap(i, j int)      { vs[i], vs[j] = vs[j], vs[i] }
-func (vs ByVersion) Less(i, j int) bool { return compareVersion(vs[i], vs[j]) < 0 }
-
-// Sort sorts a list of semantic version strings using [Compare] and falls back
-// to use [strings.Compare] if both versions are considered equal.
-func Sort(list []string) {
-	slices.SortFunc(list, compareVersion)
-}
-
-func compareVersion(a, b string) int {
-	cmp := Compare(a, b)
+func (vs ByVersion) Len() int      { return len(vs) }
+func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] }
+func (vs ByVersion) Less(i, j int) bool {
+	cmp := Compare(vs[i], vs[j])
 	if cmp != 0 {
-		return cmp
+		return cmp < 0
 	}
-	return strings.Compare(a, b)
+	return vs[i] < vs[j]
+}
+
+// Sort sorts a list of semantic version strings using [ByVersion].
+func Sort(list []string) {
+	sort.Sort(ByVersion(list))
 }
 
 func parse(v string) (p parsed, ok bool) {
diff --git a/src/cmd/vendor/golang.org/x/mod/sumdb/dirhash/hash.go b/src/cmd/vendor/golang.org/x/mod/sumdb/dirhash/hash.go
index 117985ac30b5f7..51ec4db873f293 100644
--- a/src/cmd/vendor/golang.org/x/mod/sumdb/dirhash/hash.go
+++ b/src/cmd/vendor/golang.org/x/mod/sumdb/dirhash/hash.go
@@ -16,7 +16,7 @@ import (
 	"io"
 	"os"
 	"path/filepath"
-	"slices"
+	"sort"
 	"strings"
 )
 
@@ -36,7 +36,7 @@ type Hash func(files []string, open func(string) (io.ReadCloser, error)) (string
 //	sha256sum $(find . -type f | sort) | sha256sum
 //
 // More precisely, the hashed summary contains a single line for each file in the list,
-// ordered by [slices.Sort] applied to the file names, where each line consists of
+// ordered by sort.Strings applied to the file names, where each line consists of
 // the hexadecimal SHA-256 hash of the file content,
 // two spaces (U+0020), the file name, and a newline (U+000A).
 //
@@ -44,7 +44,7 @@ type Hash func(files []string, open func(string) (io.ReadCloser, error)) (string
 func Hash1(files []string, open func(string) (io.ReadCloser, error)) (string, error) {
 	h := sha256.New()
 	files = append([]string(nil), files...)
-	slices.Sort(files)
+	sort.Strings(files)
 	for _, file := range files {
 		if strings.Contains(file, "\n") {
 			return "", errors.New("dirhash: filenames with newlines are not supported")
diff --git a/src/cmd/vendor/golang.org/x/sync/errgroup/errgroup.go b/src/cmd/vendor/golang.org/x/sync/errgroup/errgroup.go
index cb6bb9ad3ba9f8..a4ea5d14f15825 100644
--- a/src/cmd/vendor/golang.org/x/sync/errgroup/errgroup.go
+++ b/src/cmd/vendor/golang.org/x/sync/errgroup/errgroup.go
@@ -12,15 +12,13 @@ package errgroup
 import (
 	"context"
 	"fmt"
-	"runtime"
-	"runtime/debug"
 	"sync"
 )
 
 type token struct{}
 
 // A Group is a collection of goroutines working on subtasks that are part of
-// the same overall task. A Group should not be reused for different tasks.
+// the same overall task.
 //
 // A zero Group is valid, has no limit on the number of active goroutines,
 // and does not cancel on error.
@@ -33,10 +31,6 @@ type Group struct {
 
 	errOnce sync.Once
 	err     error
-
-	mu         sync.Mutex
-	panicValue any  // = PanicError | PanicValue; non-nil if some Group.Go goroutine panicked.
-	abnormal   bool // some Group.Go goroutine terminated abnormally (panic or goexit).
 }
 
 func (g *Group) done() {
@@ -56,78 +50,32 @@ func WithContext(ctx context.Context) (*Group, context.Context) {
 	return &Group{cancel: cancel}, ctx
 }
 
-// Wait blocks until all function calls from the Go method have returned
-// normally, then returns the first non-nil error (if any) from them.
-//
-// If any of the calls panics, Wait panics with a [PanicValue];
-// and if any of them calls [runtime.Goexit], Wait calls runtime.Goexit.
+// Wait blocks until all function calls from the Go method have returned, then
+// returns the first non-nil error (if any) from them.
 func (g *Group) Wait() error {
 	g.wg.Wait()
 	if g.cancel != nil {
 		g.cancel(g.err)
 	}
-	if g.panicValue != nil {
-		panic(g.panicValue)
-	}
-	if g.abnormal {
-		runtime.Goexit()
-	}
 	return g.err
 }
 
 // Go calls the given function in a new goroutine.
-//
-// The first call to Go must happen before a Wait.
 // It blocks until the new goroutine can be added without the number of
-// goroutines in the group exceeding the configured limit.
+// active goroutines in the group exceeding the configured limit.
 //
-// The first goroutine in the group that returns a non-nil error, panics, or
-// invokes [runtime.Goexit] will cancel the associated Context, if any.
+// The first call to return a non-nil error cancels the group's context, if the
+// group was created by calling WithContext. The error will be returned by Wait.
 func (g *Group) Go(f func() error) {
 	if g.sem != nil {
 		g.sem <- token{}
 	}
 
-	g.add(f)
-}
-
-func (g *Group) add(f func() error) {
 	g.wg.Add(1)
 	go func() {
 		defer g.done()
-		normalReturn := false
-		defer func() {
-			if normalReturn {
-				return
-			}
-			v := recover()
-			g.mu.Lock()
-			defer g.mu.Unlock()
-			if !g.abnormal {
-				if g.cancel != nil {
-					g.cancel(g.err)
-				}
-				g.abnormal = true
-			}
-			if v != nil && g.panicValue == nil {
-				switch v := v.(type) {
-				case error:
-					g.panicValue = PanicError{
-						Recovered: v,
-						Stack:     debug.Stack(),
-					}
-				default:
-					g.panicValue = PanicValue{
-						Recovered: v,
-						Stack:     debug.Stack(),
-					}
-				}
-			}
-		}()
 
-		err := f()
-		normalReturn = true
-		if err != nil {
+		if err := f(); err != nil {
 			g.errOnce.Do(func() {
 				g.err = err
 				if g.cancel != nil {
@@ -152,7 +100,19 @@ func (g *Group) TryGo(f func() error) bool {
 		}
 	}
 
-	g.add(f)
+	g.wg.Add(1)
+	go func() {
+		defer g.done()
+
+		if err := f(); err != nil {
+			g.errOnce.Do(func() {
+				g.err = err
+				if g.cancel != nil {
+					g.cancel(g.err)
+				}
+			})
+		}
+	}()
 	return true
 }
 
@@ -174,34 +134,3 @@ func (g *Group) SetLimit(n int) {
 	}
 	g.sem = make(chan token, n)
 }
-
-// PanicError wraps an error recovered from an unhandled panic
-// when calling a function passed to Go or TryGo.
-type PanicError struct {
-	Recovered error
-	Stack     []byte // result of call to [debug.Stack]
-}
-
-func (p PanicError) Error() string {
-	if len(p.Stack) > 0 {
-		return fmt.Sprintf("recovered from errgroup.Group: %v\n%s", p.Recovered, p.Stack)
-	}
-	return fmt.Sprintf("recovered from errgroup.Group: %v", p.Recovered)
-}
-
-func (p PanicError) Unwrap() error { return p.Recovered }
-
-// PanicValue wraps a value that does not implement the error interface,
-// recovered from an unhandled panic when calling a function passed to Go or
-// TryGo.
-type PanicValue struct {
-	Recovered any
-	Stack     []byte // result of call to [debug.Stack]
-}
-
-func (p PanicValue) String() string {
-	if len(p.Stack) > 0 {
-		return fmt.Sprintf("recovered from errgroup.Group: %v\n%s", p.Recovered, p.Stack)
-	}
-	return fmt.Sprintf("recovered from errgroup.Group: %v", p.Recovered)
-}
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 798f61ad3bf97d..099867deedec63 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -602,150 +602,7 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI
 	return
 }
 
-// sys	connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
-const minIovec = 8
-
-func Readv(fd int, iovs [][]byte) (n int, err error) {
-	if !darwinKernelVersionMin(11, 0, 0) {
-		return 0, ENOSYS
-	}
-
-	iovecs := make([]Iovec, 0, minIovec)
-	iovecs = appendBytes(iovecs, iovs)
-	n, err = readv(fd, iovecs)
-	readvRacedetect(iovecs, n, err)
-	return n, err
-}
-
-func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
-	if !darwinKernelVersionMin(11, 0, 0) {
-		return 0, ENOSYS
-	}
-	iovecs := make([]Iovec, 0, minIovec)
-	iovecs = appendBytes(iovecs, iovs)
-	n, err = preadv(fd, iovecs, offset)
-	readvRacedetect(iovecs, n, err)
-	return n, err
-}
-
-func Writev(fd int, iovs [][]byte) (n int, err error) {
-	if !darwinKernelVersionMin(11, 0, 0) {
-		return 0, ENOSYS
-	}
-
-	iovecs := make([]Iovec, 0, minIovec)
-	iovecs = appendBytes(iovecs, iovs)
-	if raceenabled {
-		raceReleaseMerge(unsafe.Pointer(&ioSync))
-	}
-	n, err = writev(fd, iovecs)
-	writevRacedetect(iovecs, n)
-	return n, err
-}
-
-func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
-	if !darwinKernelVersionMin(11, 0, 0) {
-		return 0, ENOSYS
-	}
-
-	iovecs := make([]Iovec, 0, minIovec)
-	iovecs = appendBytes(iovecs, iovs)
-	if raceenabled {
-		raceReleaseMerge(unsafe.Pointer(&ioSync))
-	}
-	n, err = pwritev(fd, iovecs, offset)
-	writevRacedetect(iovecs, n)
-	return n, err
-}
-
-func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
-	for _, b := range bs {
-		var v Iovec
-		v.SetLen(len(b))
-		if len(b) > 0 {
-			v.Base = &b[0]
-		} else {
-			v.Base = (*byte)(unsafe.Pointer(&_zero))
-		}
-		vecs = append(vecs, v)
-	}
-	return vecs
-}
-
-func writevRacedetect(iovecs []Iovec, n int) {
-	if !raceenabled {
-		return
-	}
-	for i := 0; n > 0 && i < len(iovecs); i++ {
-		m := int(iovecs[i].Len)
-		if m > n {
-			m = n
-		}
-		n -= m
-		if m > 0 {
-			raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
-		}
-	}
-}
-
-func readvRacedetect(iovecs []Iovec, n int, err error) {
-	if !raceenabled {
-		return
-	}
-	for i := 0; n > 0 && i < len(iovecs); i++ {
-		m := int(iovecs[i].Len)
-		if m > n {
-			m = n
-		}
-		n -= m
-		if m > 0 {
-			raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
-		}
-	}
-	if err == nil {
-		raceAcquire(unsafe.Pointer(&ioSync))
-	}
-}
-
-func darwinMajorMinPatch() (maj, min, patch int, err error) {
-	var un Utsname
-	err = Uname(&un)
-	if err != nil {
-		return
-	}
-
-	var mmp [3]int
-	c := 0
-Loop:
-	for _, b := range un.Release[:] {
-		switch {
-		case b >= '0' && b <= '9':
-			mmp[c] = 10*mmp[c] + int(b-'0')
-		case b == '.':
-			c++
-			if c > 2 {
-				return 0, 0, 0, ENOTSUP
-			}
-		case b == 0:
-			break Loop
-		default:
-			return 0, 0, 0, ENOTSUP
-		}
-	}
-	if c != 2 {
-		return 0, 0, 0, ENOTSUP
-	}
-	return mmp[0], mmp[1], mmp[2], nil
-}
-
-func darwinKernelVersionMin(maj, min, patch int) bool {
-	actualMaj, actualMin, actualPatch, err := darwinMajorMinPatch()
-	if err != nil {
-		return false
-	}
-	return actualMaj > maj || actualMaj == maj && (actualMin > min || actualMin == min && actualPatch >= patch)
-}
-
+//sys	connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
 //sys	sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
 
 //sys	shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
@@ -848,7 +705,3 @@ func darwinKernelVersionMin(maj, min, patch int) bool {
 //sys	write(fd int, p []byte) (n int, err error)
 //sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
 //sys	munmap(addr uintptr, length uintptr) (err error)
-//sys	readv(fd int, iovecs []Iovec) (n int, err error)
-//sys	preadv(fd int, iovecs []Iovec, offset int64) (n int, err error)
-//sys	writev(fd int, iovecs []Iovec) (n int, err error)
-//sys	pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error)
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go
index 4958a657085bcd..230a94549a7a27 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -13,7 +13,6 @@ package unix
 
 import (
 	"encoding/binary"
-	"slices"
 	"strconv"
 	"syscall"
 	"time"
@@ -418,7 +417,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
 		return nil, 0, EINVAL
 	}
 	sa.raw.Family = AF_UNIX
-	for i := range n {
+	for i := 0; i < n; i++ {
 		sa.raw.Path[i] = int8(name[i])
 	}
 	// length is family (uint16), name, NUL.
@@ -508,7 +507,7 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
 	psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
 	psm[0] = byte(sa.PSM)
 	psm[1] = byte(sa.PSM >> 8)
-	for i := range len(sa.Addr) {
+	for i := 0; i < len(sa.Addr); i++ {
 		sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
 	}
 	cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
@@ -590,11 +589,11 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {
 	sa.raw.Family = AF_CAN
 	sa.raw.Ifindex = int32(sa.Ifindex)
 	rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
-	for i := range 4 {
+	for i := 0; i < 4; i++ {
 		sa.raw.Addr[i] = rx[i]
 	}
 	tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
-	for i := range 4 {
+	for i := 0; i < 4; i++ {
 		sa.raw.Addr[i+4] = tx[i]
 	}
 	return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
@@ -619,11 +618,11 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {
 	sa.raw.Family = AF_CAN
 	sa.raw.Ifindex = int32(sa.Ifindex)
 	n := (*[8]byte)(unsafe.Pointer(&sa.Name))
-	for i := range 8 {
+	for i := 0; i < 8; i++ {
 		sa.raw.Addr[i] = n[i]
 	}
 	p := (*[4]byte)(unsafe.Pointer(&sa.PGN))
-	for i := range 4 {
+	for i := 0; i < 4; i++ {
 		sa.raw.Addr[i+8] = p[i]
 	}
 	sa.raw.Addr[12] = sa.Addr
@@ -912,7 +911,7 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {
 	// These are EBCDIC encoded by the kernel, but we still need to pad them
 	// with blanks. Initializing with blanks allows the caller to feed in either
 	// a padded or an unpadded string.
-	for i := range 8 {
+	for i := 0; i < 8; i++ {
 		sa.raw.Nodeid[i] = ' '
 		sa.raw.User_id[i] = ' '
 		sa.raw.Name[i] = ' '
@@ -1149,7 +1148,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 		var user [8]byte
 		var name [8]byte
 
-		for i := range 8 {
+		for i := 0; i < 8; i++ {
 			user[i] = byte(pp.User_id[i])
 			name[i] = byte(pp.Name[i])
 		}
@@ -1174,11 +1173,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 				Ifindex: int(pp.Ifindex),
 			}
 			name := (*[8]byte)(unsafe.Pointer(&sa.Name))
-			for i := range 8 {
+			for i := 0; i < 8; i++ {
 				name[i] = pp.Addr[i]
 			}
 			pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))
-			for i := range 4 {
+			for i := 0; i < 4; i++ {
 				pgn[i] = pp.Addr[i+8]
 			}
 			addr := (*[1]byte)(unsafe.Pointer(&sa.Addr))
@@ -1189,11 +1188,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 				Ifindex: int(pp.Ifindex),
 			}
 			rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
-			for i := range 4 {
+			for i := 0; i < 4; i++ {
 				rx[i] = pp.Addr[i]
 			}
 			tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
-			for i := range 4 {
+			for i := 0; i < 4; i++ {
 				tx[i] = pp.Addr[i+4]
 			}
 			return sa, nil
@@ -2217,7 +2216,10 @@ func readvRacedetect(iovecs []Iovec, n int, err error) {
 		return
 	}
 	for i := 0; n > 0 && i < len(iovecs); i++ {
-		m := min(int(iovecs[i].Len), n)
+		m := int(iovecs[i].Len)
+		if m > n {
+			m = n
+		}
 		n -= m
 		if m > 0 {
 			raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
@@ -2268,7 +2270,10 @@ func writevRacedetect(iovecs []Iovec, n int) {
 		return
 	}
 	for i := 0; n > 0 && i < len(iovecs); i++ {
-		m := min(int(iovecs[i].Len), n)
+		m := int(iovecs[i].Len)
+		if m > n {
+			m = n
+		}
 		n -= m
 		if m > 0 {
 			raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
@@ -2315,7 +2320,12 @@ func isGroupMember(gid int) bool {
 		return false
 	}
 
-	return slices.Contains(groups, gid)
+	for _, g := range groups {
+		if g == gid {
+			return true
+		}
+	}
+	return false
 }
 
 func isCapDacOverrideSet() bool {
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index 813c05b6647bbc..24b346e1a35159 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -2512,90 +2512,6 @@ var libc_munmap_trampoline_addr uintptr
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readv(fd int, iovecs []Iovec) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_readv_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_preadv_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func writev(fd int, iovecs []Iovec) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_writev_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_pwritev_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fstat(fd int, stat *Stat_t) (err error) {
 	_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
index fda328582b2be4..ebd213100b3521 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
@@ -738,26 +738,6 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
 GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
 DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
 
-TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_readv(SB)
-GLOBL	·libc_readv_trampoline_addr(SB), RODATA, $8
-DATA	·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
-
-TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_preadv(SB)
-GLOBL	·libc_preadv_trampoline_addr(SB), RODATA, $8
-DATA	·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
-
-TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_writev(SB)
-GLOBL	·libc_writev_trampoline_addr(SB), RODATA, $8
-DATA	·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
-
-TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_pwritev(SB)
-GLOBL	·libc_pwritev_trampoline_addr(SB), RODATA, $8
-DATA	·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
-
 TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_fstat64(SB)
 GLOBL	·libc_fstat64_trampoline_addr(SB), RODATA, $8
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index e6f58f3c6f4fb8..824b9c2d5e0e01 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -2512,90 +2512,6 @@ var libc_munmap_trampoline_addr uintptr
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func readv(fd int, iovecs []Iovec) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_readv_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_preadv_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func writev(fd int, iovecs []Iovec) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_writev_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
-	var _p0 unsafe.Pointer
-	if len(iovecs) > 0 {
-		_p0 = unsafe.Pointer(&iovecs[0])
-	} else {
-		_p0 = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
-	n = int(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_pwritev_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Fstat(fd int, stat *Stat_t) (err error) {
 	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
index 7f8998b905b917..4f178a229345e3 100644
--- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
+++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
@@ -738,26 +738,6 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
 GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
 DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
 
-TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_readv(SB)
-GLOBL	·libc_readv_trampoline_addr(SB), RODATA, $8
-DATA	·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
-
-TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_preadv(SB)
-GLOBL	·libc_preadv_trampoline_addr(SB), RODATA, $8
-DATA	·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
-
-TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_writev(SB)
-GLOBL	·libc_writev_trampoline_addr(SB), RODATA, $8
-DATA	·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
-
-TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_pwritev(SB)
-GLOBL	·libc_pwritev_trampoline_addr(SB), RODATA, $8
-DATA	·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
-
 TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_fstat(SB)
 GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
diff --git a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go
index a8b0364c7c9b64..b6e1ab76f82a09 100644
--- a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go
+++ b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go
@@ -1303,10 +1303,7 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE
 		return nil, err
 	}
 	if absoluteSDSize > 0 {
-		absoluteSD = new(SECURITY_DESCRIPTOR)
-		if unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) {
-			panic("sizeof(SECURITY_DESCRIPTOR) too small")
-		}
+		absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0]))
 	}
 	var (
 		dacl  *ACL
@@ -1315,55 +1312,19 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE
 		group *SID
 	)
 	if daclSize > 0 {
-		dacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize))))
+		dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0]))
 	}
 	if saclSize > 0 {
-		sacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize))))
+		sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0]))
 	}
 	if ownerSize > 0 {
-		owner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize))))
+		owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0]))
 	}
 	if groupSize > 0 {
-		group = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize))))
+		group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0]))
 	}
-	// We call into Windows via makeAbsoluteSD, which sets up
-	// pointers within absoluteSD that point to other chunks of memory
-	// we pass into makeAbsoluteSD, and that happens outside the view of the GC.
-	// We therefore take some care here to then verify the pointers are as we expect
-	// and set them explicitly in view of the GC. See https://go.dev/issue/73199.
-	// TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575.
 	err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize,
 		dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize)
-	if err != nil {
-		// Don't return absoluteSD, which might be partially initialized.
-		return nil, err
-	}
-	// Before using any fields, verify absoluteSD is in the format we expect according to Windows.
-	// See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors
-	absControl, _, err := absoluteSD.Control()
-	if err != nil {
-		panic("absoluteSD: " + err.Error())
-	}
-	if absControl&SE_SELF_RELATIVE != 0 {
-		panic("absoluteSD not in absolute format")
-	}
-	if absoluteSD.dacl != dacl {
-		panic("dacl pointer mismatch")
-	}
-	if absoluteSD.sacl != sacl {
-		panic("sacl pointer mismatch")
-	}
-	if absoluteSD.owner != owner {
-		panic("owner pointer mismatch")
-	}
-	if absoluteSD.group != group {
-		panic("group pointer mismatch")
-	}
-	absoluteSD.dacl = dacl
-	absoluteSD.sacl = sacl
-	absoluteSD.owner = owner
-	absoluteSD.group = group
-
 	return
 }
 
diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go
index 640f6b153f0045..4a32543868500f 100644
--- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -870,7 +870,6 @@ const socket_error = uintptr(^uint32(0))
 //sys	WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32,  from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom
 //sys	WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32,  overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo
 //sys	WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW
-//sys	WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW
 //sys	GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname
 //sys	GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname
 //sys	Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs
@@ -1699,9 +1698,8 @@ func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
 
 // Slice returns a uint16 slice that aliases the data in the NTUnicodeString.
 func (s *NTUnicodeString) Slice() []uint16 {
-	// Note: this rounds the length down, if it happens
-	// to (incorrectly) be odd. Probably safer than rounding up.
-	return unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2]
+	slice := unsafe.Slice(s.Buffer, s.MaximumLength)
+	return slice[:s.Length]
 }
 
 func (s *NTUnicodeString) String() string {
diff --git a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go
index 958bcf47a38640..9d138de5fed63c 100644
--- a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go
@@ -1074,7 +1074,6 @@ const (
 	IP_ADD_MEMBERSHIP  = 0xc
 	IP_DROP_MEMBERSHIP = 0xd
 	IP_PKTINFO         = 0x13
-	IP_MTU_DISCOVER    = 0x47
 
 	IPV6_V6ONLY         = 0x1b
 	IPV6_UNICAST_HOPS   = 0x4
@@ -1084,7 +1083,6 @@ const (
 	IPV6_JOIN_GROUP     = 0xc
 	IPV6_LEAVE_GROUP    = 0xd
 	IPV6_PKTINFO        = 0x13
-	IPV6_MTU_DISCOVER   = 0x47
 
 	MSG_OOB       = 0x1
 	MSG_PEEK      = 0x2
@@ -1134,15 +1132,6 @@ const (
 	WSASYS_STATUS_LEN  = 128
 )
 
-// enum PMTUD_STATE from ws2ipdef.h
-const (
-	IP_PMTUDISC_NOT_SET = 0
-	IP_PMTUDISC_DO      = 1
-	IP_PMTUDISC_DONT    = 2
-	IP_PMTUDISC_PROBE   = 3
-	IP_PMTUDISC_MAX     = 4
-)
-
 type WSABuf struct {
 	Len uint32
 	Buf *byte
@@ -1157,22 +1146,6 @@ type WSAMsg struct {
 	Flags       uint32
 }
 
-type WSACMSGHDR struct {
-	Len   uintptr
-	Level int32
-	Type  int32
-}
-
-type IN_PKTINFO struct {
-	Addr    [4]byte
-	Ifindex uint32
-}
-
-type IN6_PKTINFO struct {
-	Addr    [16]byte
-	Ifindex uint32
-}
-
 // Flags for WSASocket
 const (
 	WSA_FLAG_OVERLAPPED             = 0x01
@@ -2700,8 +2673,6 @@ type CommTimeouts struct {
 
 // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
 type NTUnicodeString struct {
-	// Note: Length and MaximumLength are in *bytes*, not uint16s.
-	// They should always be even.
 	Length        uint16
 	MaximumLength uint16
 	Buffer        *uint16
@@ -3630,213 +3601,3 @@ const (
 	KLF_NOTELLSHELL   = 0x00000080
 	KLF_SETFORPROCESS = 0x00000100
 )
-
-// Virtual Key codes
-// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
-const (
-	VK_LBUTTON             = 0x01
-	VK_RBUTTON             = 0x02
-	VK_CANCEL              = 0x03
-	VK_MBUTTON             = 0x04
-	VK_XBUTTON1            = 0x05
-	VK_XBUTTON2            = 0x06
-	VK_BACK                = 0x08
-	VK_TAB                 = 0x09
-	VK_CLEAR               = 0x0C
-	VK_RETURN              = 0x0D
-	VK_SHIFT               = 0x10
-	VK_CONTROL             = 0x11
-	VK_MENU                = 0x12
-	VK_PAUSE               = 0x13
-	VK_CAPITAL             = 0x14
-	VK_KANA                = 0x15
-	VK_HANGEUL             = 0x15
-	VK_HANGUL              = 0x15
-	VK_IME_ON              = 0x16
-	VK_JUNJA               = 0x17
-	VK_FINAL               = 0x18
-	VK_HANJA               = 0x19
-	VK_KANJI               = 0x19
-	VK_IME_OFF             = 0x1A
-	VK_ESCAPE              = 0x1B
-	VK_CONVERT             = 0x1C
-	VK_NONCONVERT          = 0x1D
-	VK_ACCEPT              = 0x1E
-	VK_MODECHANGE          = 0x1F
-	VK_SPACE               = 0x20
-	VK_PRIOR               = 0x21
-	VK_NEXT                = 0x22
-	VK_END                 = 0x23
-	VK_HOME                = 0x24
-	VK_LEFT                = 0x25
-	VK_UP                  = 0x26
-	VK_RIGHT               = 0x27
-	VK_DOWN                = 0x28
-	VK_SELECT              = 0x29
-	VK_PRINT               = 0x2A
-	VK_EXECUTE             = 0x2B
-	VK_SNAPSHOT            = 0x2C
-	VK_INSERT              = 0x2D
-	VK_DELETE              = 0x2E
-	VK_HELP                = 0x2F
-	VK_LWIN                = 0x5B
-	VK_RWIN                = 0x5C
-	VK_APPS                = 0x5D
-	VK_SLEEP               = 0x5F
-	VK_NUMPAD0             = 0x60
-	VK_NUMPAD1             = 0x61
-	VK_NUMPAD2             = 0x62
-	VK_NUMPAD3             = 0x63
-	VK_NUMPAD4             = 0x64
-	VK_NUMPAD5             = 0x65
-	VK_NUMPAD6             = 0x66
-	VK_NUMPAD7             = 0x67
-	VK_NUMPAD8             = 0x68
-	VK_NUMPAD9             = 0x69
-	VK_MULTIPLY            = 0x6A
-	VK_ADD                 = 0x6B
-	VK_SEPARATOR           = 0x6C
-	VK_SUBTRACT            = 0x6D
-	VK_DECIMAL             = 0x6E
-	VK_DIVIDE              = 0x6F
-	VK_F1                  = 0x70
-	VK_F2                  = 0x71
-	VK_F3                  = 0x72
-	VK_F4                  = 0x73
-	VK_F5                  = 0x74
-	VK_F6                  = 0x75
-	VK_F7                  = 0x76
-	VK_F8                  = 0x77
-	VK_F9                  = 0x78
-	VK_F10                 = 0x79
-	VK_F11                 = 0x7A
-	VK_F12                 = 0x7B
-	VK_F13                 = 0x7C
-	VK_F14                 = 0x7D
-	VK_F15                 = 0x7E
-	VK_F16                 = 0x7F
-	VK_F17                 = 0x80
-	VK_F18                 = 0x81
-	VK_F19                 = 0x82
-	VK_F20                 = 0x83
-	VK_F21                 = 0x84
-	VK_F22                 = 0x85
-	VK_F23                 = 0x86
-	VK_F24                 = 0x87
-	VK_NUMLOCK             = 0x90
-	VK_SCROLL              = 0x91
-	VK_OEM_NEC_EQUAL       = 0x92
-	VK_OEM_FJ_JISHO        = 0x92
-	VK_OEM_FJ_MASSHOU      = 0x93
-	VK_OEM_FJ_TOUROKU      = 0x94
-	VK_OEM_FJ_LOYA         = 0x95
-	VK_OEM_FJ_ROYA         = 0x96
-	VK_LSHIFT              = 0xA0
-	VK_RSHIFT              = 0xA1
-	VK_LCONTROL            = 0xA2
-	VK_RCONTROL            = 0xA3
-	VK_LMENU               = 0xA4
-	VK_RMENU               = 0xA5
-	VK_BROWSER_BACK        = 0xA6
-	VK_BROWSER_FORWARD     = 0xA7
-	VK_BROWSER_REFRESH     = 0xA8
-	VK_BROWSER_STOP        = 0xA9
-	VK_BROWSER_SEARCH      = 0xAA
-	VK_BROWSER_FAVORITES   = 0xAB
-	VK_BROWSER_HOME        = 0xAC
-	VK_VOLUME_MUTE         = 0xAD
-	VK_VOLUME_DOWN         = 0xAE
-	VK_VOLUME_UP           = 0xAF
-	VK_MEDIA_NEXT_TRACK    = 0xB0
-	VK_MEDIA_PREV_TRACK    = 0xB1
-	VK_MEDIA_STOP          = 0xB2
-	VK_MEDIA_PLAY_PAUSE    = 0xB3
-	VK_LAUNCH_MAIL         = 0xB4
-	VK_LAUNCH_MEDIA_SELECT = 0xB5
-	VK_LAUNCH_APP1         = 0xB6
-	VK_LAUNCH_APP2         = 0xB7
-	VK_OEM_1               = 0xBA
-	VK_OEM_PLUS            = 0xBB
-	VK_OEM_COMMA           = 0xBC
-	VK_OEM_MINUS           = 0xBD
-	VK_OEM_PERIOD          = 0xBE
-	VK_OEM_2               = 0xBF
-	VK_OEM_3               = 0xC0
-	VK_OEM_4               = 0xDB
-	VK_OEM_5               = 0xDC
-	VK_OEM_6               = 0xDD
-	VK_OEM_7               = 0xDE
-	VK_OEM_8               = 0xDF
-	VK_OEM_AX              = 0xE1
-	VK_OEM_102             = 0xE2
-	VK_ICO_HELP            = 0xE3
-	VK_ICO_00              = 0xE4
-	VK_PROCESSKEY          = 0xE5
-	VK_ICO_CLEAR           = 0xE6
-	VK_OEM_RESET           = 0xE9
-	VK_OEM_JUMP            = 0xEA
-	VK_OEM_PA1             = 0xEB
-	VK_OEM_PA2             = 0xEC
-	VK_OEM_PA3             = 0xED
-	VK_OEM_WSCTRL          = 0xEE
-	VK_OEM_CUSEL           = 0xEF
-	VK_OEM_ATTN            = 0xF0
-	VK_OEM_FINISH          = 0xF1
-	VK_OEM_COPY            = 0xF2
-	VK_OEM_AUTO            = 0xF3
-	VK_OEM_ENLW            = 0xF4
-	VK_OEM_BACKTAB         = 0xF5
-	VK_ATTN                = 0xF6
-	VK_CRSEL               = 0xF7
-	VK_EXSEL               = 0xF8
-	VK_EREOF               = 0xF9
-	VK_PLAY                = 0xFA
-	VK_ZOOM                = 0xFB
-	VK_NONAME              = 0xFC
-	VK_PA1                 = 0xFD
-	VK_OEM_CLEAR           = 0xFE
-)
-
-// Mouse button constants.
-// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str
-const (
-	FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001
-	RIGHTMOST_BUTTON_PRESSED     = 0x0002
-	FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004
-	FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008
-	FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010
-)
-
-// Control key state constaints.
-// https://docs.microsoft.com/en-us/windows/console/key-event-record-str
-// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str
-const (
-	CAPSLOCK_ON        = 0x0080
-	ENHANCED_KEY       = 0x0100
-	LEFT_ALT_PRESSED   = 0x0002
-	LEFT_CTRL_PRESSED  = 0x0008
-	NUMLOCK_ON         = 0x0020
-	RIGHT_ALT_PRESSED  = 0x0001
-	RIGHT_CTRL_PRESSED = 0x0004
-	SCROLLLOCK_ON      = 0x0040
-	SHIFT_PRESSED      = 0x0010
-)
-
-// Mouse event record event flags.
-// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str
-const (
-	MOUSE_MOVED    = 0x0001
-	DOUBLE_CLICK   = 0x0002
-	MOUSE_WHEELED  = 0x0004
-	MOUSE_HWHEELED = 0x0008
-)
-
-// Input Record Event Types
-// https://learn.microsoft.com/en-us/windows/console/input-record-str
-const (
-	FOCUS_EVENT              = 0x0010
-	KEY_EVENT                = 0x0001
-	MENU_EVENT               = 0x0008
-	MOUSE_EVENT              = 0x0002
-	WINDOW_BUFFER_SIZE_EVENT = 0x0004
-)
diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go
index a58bc48b8edeee..01c0716c2c4e83 100644
--- a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go
+++ b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go
@@ -511,7 +511,6 @@ var (
 	procFreeAddrInfoW                                        = modws2_32.NewProc("FreeAddrInfoW")
 	procGetAddrInfoW                                         = modws2_32.NewProc("GetAddrInfoW")
 	procWSACleanup                                           = modws2_32.NewProc("WSACleanup")
-	procWSADuplicateSocketW                                  = modws2_32.NewProc("WSADuplicateSocketW")
 	procWSAEnumProtocolsW                                    = modws2_32.NewProc("WSAEnumProtocolsW")
 	procWSAGetOverlappedResult                               = modws2_32.NewProc("WSAGetOverlappedResult")
 	procWSAIoctl                                             = modws2_32.NewProc("WSAIoctl")
@@ -4392,14 +4391,6 @@ func WSACleanup() (err error) {
 	return
 }
 
-func WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) {
-	r1, _, e1 := syscall.Syscall(procWSADuplicateSocketW.Addr(), 3, uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info)))
-	if r1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
 func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) {
 	r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength)))
 	n = int32(r0)
diff --git a/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest.go b/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest.go
index 3f0ad9e587173d..533f5e538d3e4b 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest.go
@@ -8,7 +8,6 @@ package countertest
 
 import (
 	"sync"
-	"testing"
 
 	"golang.org/x/telemetry/counter"
 	ic "golang.org/x/telemetry/internal/counter"
@@ -62,10 +61,3 @@ func ReadStackCounter(c *counter.StackCounter) (stackCounts map[string]uint64, _
 func ReadFile(name string) (counters, stackCounters map[string]uint64, _ error) {
 	return ic.ReadFile(name)
 }
-
-func init() {
-	// Extra safety check.
-	if !testing.Testing() {
-		panic("use of this package is disallowed in non-testing code")
-	}
-}
diff --git a/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest_go121.go b/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest_go121.go
new file mode 100644
index 00000000000000..8d117e053ce012
--- /dev/null
+++ b/src/cmd/vendor/golang.org/x/telemetry/counter/countertest/countertest_go121.go
@@ -0,0 +1,16 @@
+// Copyright 2023 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.
+
+//go:build go1.21
+
+package countertest
+
+import "testing"
+
+func init() {
+	// Extra safety check for go1.21+.
+	if !testing.Testing() {
+		panic("use of this package is disallowed in non-testing code")
+	}
+}
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/counter/stackcounter.go b/src/cmd/vendor/golang.org/x/telemetry/internal/counter/stackcounter.go
index 3e7ffdeb60b7d5..568d40c6165f69 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/internal/counter/stackcounter.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/counter/stackcounter.go
@@ -93,22 +93,12 @@ func EncodeStack(pcs []uintptr, prefix string) string {
 			// Use function-relative line numbering.
 			// f:+2 means two lines into function f.
 			// f:-1 should never happen, but be conservative.
-			//
-			// An inlined call is replaced by a NOP instruction
-			// with the correct pclntab information.
 			_, entryLine := fr.Func.FileLine(fr.Entry)
-			loc = fmt.Sprintf("%s.%s:%+d,+0x%x", path, fname, fr.Line-entryLine, fr.PC-fr.Entry)
+			loc = fmt.Sprintf("%s.%s:%+d", path, fname, fr.Line-entryLine)
 		} else {
 			// The function is non-Go code or is fully inlined:
 			// use absolute line number within enclosing file.
-			//
-			// For inlined calls, the PC and Entry values
-			// both refer to the enclosing combined function.
-			// For example, both these PCs are relative to "caller":
-			//
-			//   callee:=1,+0x12        ('=' means inlined)
-			//   caller:+2,+0x34
-			loc = fmt.Sprintf("%s.%s:=%d,+0x%x", path, fname, fr.Line, fr.PC-fr.Entry)
+			loc = fmt.Sprintf("%s.%s:=%d", path, fname, fr.Line)
 		}
 		locs = append(locs, loc)
 		if !more {
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/crash_go123.go b/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/crash_go123.go
new file mode 100644
index 00000000000000..8f00c4856b8fca
--- /dev/null
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/crash_go123.go
@@ -0,0 +1,17 @@
+// Copyright 2024 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.
+
+//go:build go1.23
+// +build go1.23
+
+package crashmonitor
+
+import (
+	"os"
+	"runtime/debug"
+)
+
+func init() {
+	setCrashOutput = func(f *os.File) error { return debug.SetCrashOutput(f, debug.CrashOptions{}) }
+}
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/monitor.go b/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/monitor.go
index 53966ad2bcb362..f43d2cd455b638 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/monitor.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/crashmonitor/monitor.go
@@ -21,13 +21,20 @@ import (
 	"golang.org/x/telemetry/internal/counter"
 )
 
+// Supported reports whether the runtime supports [runtime/debug.SetCrashOutput].
+//
+// TODO(adonovan): eliminate once go1.23+ is assured.
+func Supported() bool { return setCrashOutput != nil }
+
+var setCrashOutput func(*os.File) error // = runtime/debug.SetCrashOutput on go1.23+
+
 // Parent sets up the parent side of the crashmonitor. It requires
 // exclusive use of a writable pipe connected to the child process's stdin.
 func Parent(pipe *os.File) {
 	writeSentinel(pipe)
 	// Ensure that we get pc=0x%x values in the traceback.
 	debug.SetTraceback("system")
-	debug.SetCrashOutput(pipe, debug.CrashOptions{}) // ignore error
+	setCrashOutput(pipe)
 }
 
 // Child runs the part of the crashmonitor that runs in the child process.
@@ -277,7 +284,7 @@ func parseStackPCs(crash string) ([]uintptr, error) {
 				continue
 			}
 
-			pc = pc - parentSentinel + childSentinel
+			pc = pc-parentSentinel+childSentinel
 
 			// If the previous frame was sigpanic, then this frame
 			// was a trap (e.g., SIGSEGV).
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_other.go b/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_other.go
index 610ab1a15b40de..190afd8e9fb65d 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_other.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_other.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (js && wasm) || wasip1 || plan9
+//go:build (js && wasm) || wasip1 || plan9 || (solaris && !go1.20)
 
 package mmap
 
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_unix.go b/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_unix.go
index 72ad91d52488c0..f15ac615b341f4 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_unix.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/mmap/mmap_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build unix
+//go:build unix && (!solaris || go1.20)
 
 package mmap
 
diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go
index 5ff7d34fec1e18..f6b074f1c9dbbe 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go
@@ -5,7 +5,6 @@
 package telemetry
 
 import (
-	"go/version"
 	"os"
 	"path/filepath"
 	"runtime/debug"
@@ -27,7 +26,9 @@ func IsToolchainProgram(progPath string) bool {
 // special characters.
 func ProgramInfo(info *debug.BuildInfo) (goVers, progPath, progVers string) {
 	goVers = info.GoVersion
-	if strings.Contains(goVers, "devel") || strings.Contains(goVers, "-") || !version.IsValid(goVers) {
+	// TODO(matloob): Use go/version.IsValid instead of checking for X: once the telemetry
+	// module can be upgraded to require Go 1.22.
+	if strings.Contains(goVers, "devel") || strings.Contains(goVers, "-") || strings.Contains(goVers, "X:") {
 		goVers = "devel"
 	}
 
diff --git a/src/cmd/vendor/golang.org/x/telemetry/start.go b/src/cmd/vendor/golang.org/x/telemetry/start.go
index 9c0519a62cc0e6..e34086e3e6d40e 100644
--- a/src/cmd/vendor/golang.org/x/telemetry/start.go
+++ b/src/cmd/vendor/golang.org/x/telemetry/start.go
@@ -166,7 +166,7 @@ func parent(config Config) *StartResult {
 	}
 
 	childShouldUpload := config.Upload && acquireUploadToken()
-	reportCrashes := config.ReportCrashes
+	reportCrashes := config.ReportCrashes && crashmonitor.Supported()
 
 	if reportCrashes || childShouldUpload {
 		startChild(reportCrashes, childShouldUpload, result)
@@ -267,6 +267,10 @@ func child(config Config) {
 	os.Setenv(telemetryChildVar, "2")
 	upload := os.Getenv(telemetryUploadVar) == "1"
 
+	reportCrashes := config.ReportCrashes && crashmonitor.Supported()
+	uploadStartTime := config.UploadStartTime
+	uploadURL := config.UploadURL
+
 	// The crashmonitor and/or upload process may themselves record counters.
 	counter.Open()
 
@@ -276,7 +280,7 @@ func child(config Config) {
 	// upload to finish before exiting
 	var g errgroup.Group
 
-	if config.ReportCrashes {
+	if reportCrashes {
 		g.Go(func() error {
 			crashmonitor.Child()
 			return nil
@@ -284,7 +288,7 @@ func child(config Config) {
 	}
 	if upload {
 		g.Go(func() error {
-			uploaderChild(config.UploadStartTime, config.UploadURL)
+			uploaderChild(uploadStartTime, uploadURL)
 			return nil
 		})
 	}
diff --git a/src/cmd/vendor/golang.org/x/term/terminal.go b/src/cmd/vendor/golang.org/x/term/terminal.go
index 13e9a64ad10a7e..f636667fb04258 100644
--- a/src/cmd/vendor/golang.org/x/term/terminal.go
+++ b/src/cmd/vendor/golang.org/x/term/terminal.go
@@ -6,7 +6,6 @@ package term
 
 import (
 	"bytes"
-	"fmt"
 	"io"
 	"runtime"
 	"strconv"
@@ -37,26 +36,6 @@ var vt100EscapeCodes = EscapeCodes{
 	Reset: []byte{keyEscape, '[', '0', 'm'},
 }
 
-// A History provides a (possibly bounded) queue of input lines read by [Terminal.ReadLine].
-type History interface {
-	// Add will be called by [Terminal.ReadLine] to add
-	// a new, most recent entry to the history.
-	// It is allowed to drop any entry, including
-	// the entry being added (e.g., if it's deemed an invalid entry),
-	// the least-recent entry (e.g., to keep the history bounded),
-	// or any other entry.
-	Add(entry string)
-
-	// Len returns the number of entries in the history.
-	Len() int
-
-	// At returns an entry from the history.
-	// Index 0 is the most-recently added entry and
-	// index Len()-1 is the least-recently added entry.
-	// If index is < 0 or >= Len(), it panics.
-	At(idx int) string
-}
-
 // Terminal contains the state for running a VT100 terminal that is capable of
 // reading lines of input.
 type Terminal struct {
@@ -65,8 +44,6 @@ type Terminal struct {
 	// bytes, as an index into |line|). If it returns ok=false, the key
 	// press is processed normally. Otherwise it returns a replacement line
 	// and the new cursor position.
-	//
-	// This will be disabled during ReadPassword.
 	AutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool)
 
 	// Escape contains a pointer to the escape codes for this terminal.
@@ -107,14 +84,9 @@ type Terminal struct {
 	remainder []byte
 	inBuf     [256]byte
 
-	// History records and retrieves lines of input read by [ReadLine] which
-	// a user can retrieve and navigate using the up and down arrow keys.
-	//
-	// It is not safe to call ReadLine concurrently with any methods on History.
-	//
-	// [NewTerminal] sets this to a default implementation that records the
-	// last 100 lines of input.
-	History History
+	// history contains previously entered commands so that they can be
+	// accessed with the up and down keys.
+	history stRingBuffer
 	// historyIndex stores the currently accessed history entry, where zero
 	// means the immediately previous entry.
 	historyIndex int
@@ -137,7 +109,6 @@ func NewTerminal(c io.ReadWriter, prompt string) *Terminal {
 		termHeight:   24,
 		echo:         true,
 		historyIndex: -1,
-		History:      &stRingBuffer{},
 	}
 }
 
@@ -477,23 +448,6 @@ func visualLength(runes []rune) int {
 	return length
 }
 
-// histroryAt unlocks the terminal and relocks it while calling History.At.
-func (t *Terminal) historyAt(idx int) (string, bool) {
-	t.lock.Unlock()     // Unlock to avoid deadlock if History methods use the output writer.
-	defer t.lock.Lock() // panic in At (or Len) protection.
-	if idx < 0 || idx >= t.History.Len() {
-		return "", false
-	}
-	return t.History.At(idx), true
-}
-
-// historyAdd unlocks the terminal and relocks it while calling History.Add.
-func (t *Terminal) historyAdd(entry string) {
-	t.lock.Unlock()     // Unlock to avoid deadlock if History methods use the output writer.
-	defer t.lock.Lock() // panic in Add protection.
-	t.History.Add(entry)
-}
-
 // handleKey processes the given key and, optionally, returns a line of text
 // that the user has entered.
 func (t *Terminal) handleKey(key rune) (line string, ok bool) {
@@ -541,7 +495,7 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) {
 		t.pos = len(t.line)
 		t.moveCursorToPos(t.pos)
 	case keyUp:
-		entry, ok := t.historyAt(t.historyIndex + 1)
+		entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1)
 		if !ok {
 			return "", false
 		}
@@ -560,7 +514,7 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) {
 			t.setLine(runes, len(runes))
 			t.historyIndex--
 		default:
-			entry, ok := t.historyAt(t.historyIndex - 1)
+			entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1)
 			if ok {
 				t.historyIndex--
 				runes := []rune(entry)
@@ -738,8 +692,6 @@ func (t *Terminal) Write(buf []byte) (n int, err error) {
 
 // ReadPassword temporarily changes the prompt and reads a password, without
 // echo, from the terminal.
-//
-// The AutoCompleteCallback is disabled during this call.
 func (t *Terminal) ReadPassword(prompt string) (line string, err error) {
 	t.lock.Lock()
 	defer t.lock.Unlock()
@@ -747,11 +699,6 @@ func (t *Terminal) ReadPassword(prompt string) (line string, err error) {
 	oldPrompt := t.prompt
 	t.prompt = []rune(prompt)
 	t.echo = false
-	oldAutoCompleteCallback := t.AutoCompleteCallback
-	t.AutoCompleteCallback = nil
-	defer func() {
-		t.AutoCompleteCallback = oldAutoCompleteCallback
-	}()
 
 	line, err = t.readLine()
 
@@ -825,7 +772,7 @@ func (t *Terminal) readLine() (line string, err error) {
 		if lineOk {
 			if t.echo {
 				t.historyIndex = -1
-				t.historyAdd(line)
+				t.history.Add(line)
 			}
 			if lineIsPasted {
 				err = ErrPasteIndicator
@@ -982,23 +929,19 @@ func (s *stRingBuffer) Add(a string) {
 	}
 }
 
-func (s *stRingBuffer) Len() int {
-	return s.size
-}
-
-// At returns the value passed to the nth previous call to Add.
+// NthPreviousEntry returns the value passed to the nth previous call to Add.
 // If n is zero then the immediately prior value is returned, if one, then the
 // next most recent, and so on. If such an element doesn't exist then ok is
 // false.
-func (s *stRingBuffer) At(n int) string {
+func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) {
 	if n < 0 || n >= s.size {
-		panic(fmt.Sprintf("term: history index [%d] out of range [0,%d)", n, s.size))
+		return "", false
 	}
 	index := s.head - n
 	if index < 0 {
 		index += s.max
 	}
-	return s.entries[index]
+	return s.entries[index], true
 }
 
 // readPasswordLine reads from reader until it finds \n or io.EOF.
diff --git a/src/cmd/vendor/golang.org/x/text/language/parse.go b/src/cmd/vendor/golang.org/x/text/language/parse.go
index 053336e28666f0..4d57222e770133 100644
--- a/src/cmd/vendor/golang.org/x/text/language/parse.go
+++ b/src/cmd/vendor/golang.org/x/text/language/parse.go
@@ -59,7 +59,7 @@ func (c CanonType) Parse(s string) (t Tag, err error) {
 	if changed {
 		tt.RemakeString()
 	}
-	return makeTag(tt), nil
+	return makeTag(tt), err
 }
 
 // Compose creates a Tag from individual parts, which may be of type Tag, Base,
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
index 1aa7afb9c2a1ab..436b03cb29058e 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
@@ -57,7 +57,7 @@ type asmArch struct {
 	// include the first integer register and first floating-point register. Accessing
 	// any of them counts as writing to result.
 	retRegs []string
-	// writeResult is a list of instructions that will change result register implicitly.
+	// writeResult is a list of instructions that will change result register implicity.
 	writeResult []string
 	// calculated during initialization
 	sizes    types.Sizes
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go
index ed2284e6306a99..60c6afe49f06e5 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go
@@ -115,7 +115,7 @@ func run(pass *analysis.Pass) (any, error) {
 					missingKeys = append(missingKeys, analysis.TextEdit{
 						Pos:     e.Pos(),
 						End:     e.Pos(),
-						NewText: fmt.Appendf(nil, "%s: ", field.Name()),
+						NewText: []byte(fmt.Sprintf("%s: ", field.Name())),
 					})
 				}
 			}
@@ -153,8 +153,7 @@ func isLocalType(pass *analysis.Pass, typ types.Type) bool {
 		return isLocalType(pass, x.Elem())
 	case interface{ Obj() *types.TypeName }: // *Named or *TypeParam (aliases were removed already)
 		// names in package foo are local to foo_test too
-		return x.Obj().Pkg() != nil &&
-			strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test")
+		return strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test")
 	}
 	return false
 }
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go
index a4e455d9b30bf5..49c14d4980dc43 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go
@@ -355,7 +355,7 @@ func lockPath(tpkg *types.Package, typ types.Type, seen map[types.Type]bool) typ
 	}
 
 	nfields := styp.NumFields()
-	for i := range nfields {
+	for i := 0; i < nfields; i++ {
 		ftyp := styp.Field(i).Type()
 		subpath := lockPath(tpkg, ftyp, seen)
 		if subpath != nil {
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go
index ff9c8b4f818b10..ba94fd68ea4f3c 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go
@@ -28,9 +28,9 @@ var Analyzer = &analysis.Analyzer{
 // Per-architecture checks for instructions.
 // Assume comments, leading and trailing spaces are removed.
 type arch struct {
-	isFPWrite             func(string) bool
-	isFPRead              func(string) bool
-	isUnconditionalBranch func(string) bool
+	isFPWrite func(string) bool
+	isFPRead  func(string) bool
+	isBranch  func(string) bool
 }
 
 var re = regexp.MustCompile
@@ -48,8 +48,8 @@ var arches = map[string]arch{
 	"amd64": {
 		isFPWrite: re(`,\s*BP$`).MatchString, // TODO: can have false positive, e.g. for TESTQ BP,BP. Seems unlikely.
 		isFPRead:  re(`\bBP\b`).MatchString,
-		isUnconditionalBranch: func(s string) bool {
-			return hasAnyPrefix(s, "JMP", "RET")
+		isBranch: func(s string) bool {
+			return hasAnyPrefix(s, "J", "RET")
 		},
 	},
 	"arm64": {
@@ -70,16 +70,49 @@ var arches = map[string]arch{
 			return false
 		},
 		isFPRead: re(`\bR29\b`).MatchString,
-		isUnconditionalBranch: func(s string) bool {
+		isBranch: func(s string) bool {
 			// Get just the instruction
 			if i := strings.IndexFunc(s, unicode.IsSpace); i > 0 {
 				s = s[:i]
 			}
-			return s == "B" || s == "JMP" || s == "RET"
+			return arm64Branch[s]
 		},
 	},
 }
 
+// arm64 has many control flow instructions.
+// ^(B|RET) isn't sufficient or correct (e.g. BIC, BFI aren't control flow.)
+// It's easier to explicitly enumerate them in a map than to write a regex.
+// Borrowed from Go tree, cmd/asm/internal/arch/arm64.go
+var arm64Branch = map[string]bool{
+	"B":     true,
+	"BL":    true,
+	"BEQ":   true,
+	"BNE":   true,
+	"BCS":   true,
+	"BHS":   true,
+	"BCC":   true,
+	"BLO":   true,
+	"BMI":   true,
+	"BPL":   true,
+	"BVS":   true,
+	"BVC":   true,
+	"BHI":   true,
+	"BLS":   true,
+	"BGE":   true,
+	"BLT":   true,
+	"BGT":   true,
+	"BLE":   true,
+	"CBZ":   true,
+	"CBZW":  true,
+	"CBNZ":  true,
+	"CBNZW": true,
+	"JMP":   true,
+	"TBNZ":  true,
+	"TBZ":   true,
+	"RET":   true,
+}
+
 func run(pass *analysis.Pass) (any, error) {
 	arch, ok := arches[build.Default.GOARCH]
 	if !ok {
@@ -131,7 +164,7 @@ func run(pass *analysis.Pass) (any, error) {
 				active = false
 				continue
 			}
-			if arch.isFPRead(line) || arch.isUnconditionalBranch(line) {
+			if arch.isFPRead(line) || arch.isBranch(line) {
 				active = false
 				continue
 			}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/hostport/hostport.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/hostport/hostport.go
deleted file mode 100644
index e808b1aa1ba79b..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/hostport/hostport.go
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package hostport defines an analyzer for calls to net.Dial with
-// addresses of the form "%s:%d" or "%s:%s", which work only with IPv4.
-package hostport
-
-import (
-	"fmt"
-	"go/ast"
-	"go/constant"
-	"go/types"
-
-	"golang.org/x/tools/go/analysis"
-	"golang.org/x/tools/go/analysis/passes/inspect"
-	"golang.org/x/tools/go/types/typeutil"
-	typeindexanalyzer "golang.org/x/tools/internal/analysisinternal/typeindex"
-	"golang.org/x/tools/internal/typesinternal/typeindex"
-)
-
-const Doc = `check format of addresses passed to net.Dial
-
-This analyzer flags code that produce network address strings using
-fmt.Sprintf, as in this example:
-
-    addr := fmt.Sprintf("%s:%d", host, 12345) // "will not work with IPv6"
-    ...
-    conn, err := net.Dial("tcp", addr)       // "when passed to dial here"
-
-The analyzer suggests a fix to use the correct approach, a call to
-net.JoinHostPort:
-
-    addr := net.JoinHostPort(host, "12345")
-    ...
-    conn, err := net.Dial("tcp", addr)
-
-A similar diagnostic and fix are produced for a format string of "%s:%s".
-`
-
-var Analyzer = &analysis.Analyzer{
-	Name:     "hostport",
-	Doc:      Doc,
-	URL:      "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/hostport",
-	Requires: []*analysis.Analyzer{inspect.Analyzer, typeindexanalyzer.Analyzer},
-	Run:      run,
-}
-
-func run(pass *analysis.Pass) (any, error) {
-	var (
-		index      = pass.ResultOf[typeindexanalyzer.Analyzer].(*typeindex.Index)
-		info       = pass.TypesInfo
-		fmtSprintf = index.Object("fmt", "Sprintf")
-	)
-	if !index.Used(fmtSprintf) {
-		return nil, nil // fast path: package doesn't use fmt.Sprintf
-	}
-
-	// checkAddr reports a diagnostic (and returns true) if e
-	// is a call of the form fmt.Sprintf("%d:%d", ...).
-	// The diagnostic includes a fix.
-	//
-	// dialCall is non-nil if the Dial call is non-local
-	// but within the same file.
-	checkAddr := func(e ast.Expr, dialCall *ast.CallExpr) {
-		if call, ok := e.(*ast.CallExpr); ok && typeutil.Callee(info, call) == fmtSprintf {
-			// Examine format string.
-			formatArg := call.Args[0]
-			if tv := info.Types[formatArg]; tv.Value != nil {
-				numericPort := false
-				format := constant.StringVal(tv.Value)
-				switch format {
-				case "%s:%d":
-					// Have: fmt.Sprintf("%s:%d", host, port)
-					numericPort = true
-
-				case "%s:%s":
-					// Have: fmt.Sprintf("%s:%s", host, portStr)
-					// Keep port string as is.
-
-				default:
-					return
-				}
-
-				// Use granular edits to preserve original formatting.
-				edits := []analysis.TextEdit{
-					{
-						// Replace fmt.Sprintf with net.JoinHostPort.
-						Pos:     call.Fun.Pos(),
-						End:     call.Fun.End(),
-						NewText: []byte("net.JoinHostPort"),
-					},
-					{
-						// Delete format string.
-						Pos: formatArg.Pos(),
-						End: call.Args[1].Pos(),
-					},
-				}
-
-				// Turn numeric port into a string.
-				if numericPort {
-					//  port => fmt.Sprintf("%d", port)
-					//   123 => "123"
-					port := call.Args[2]
-					newPort := fmt.Sprintf(`fmt.Sprintf("%%d", %s)`, port)
-					if port := info.Types[port].Value; port != nil {
-						if i, ok := constant.Int64Val(port); ok {
-							newPort = fmt.Sprintf(`"%d"`, i) // numeric constant
-						}
-					}
-
-					edits = append(edits, analysis.TextEdit{
-						Pos:     port.Pos(),
-						End:     port.End(),
-						NewText: []byte(newPort),
-					})
-				}
-
-				// Refer to Dial call, if not adjacent.
-				suffix := ""
-				if dialCall != nil {
-					suffix = fmt.Sprintf(" (passed to net.Dial at L%d)",
-						pass.Fset.Position(dialCall.Pos()).Line)
-				}
-
-				pass.Report(analysis.Diagnostic{
-					// Highlight the format string.
-					Pos:     formatArg.Pos(),
-					End:     formatArg.End(),
-					Message: fmt.Sprintf("address format %q does not work with IPv6%s", format, suffix),
-					SuggestedFixes: []analysis.SuggestedFix{{
-						Message:   "Replace fmt.Sprintf with net.JoinHostPort",
-						TextEdits: edits,
-					}},
-				})
-			}
-		}
-	}
-
-	// Check address argument of each call to net.Dial et al.
-	for _, callee := range []types.Object{
-		index.Object("net", "Dial"),
-		index.Object("net", "DialTimeout"),
-		index.Selection("net", "Dialer", "Dial"),
-	} {
-		for curCall := range index.Calls(callee) {
-			call := curCall.Node().(*ast.CallExpr)
-			switch address := call.Args[1].(type) {
-			case *ast.CallExpr:
-				if len(call.Args) == 2 { // avoid spread-call edge case
-					// net.Dial("tcp", fmt.Sprintf("%s:%d", ...))
-					checkAddr(address, nil)
-				}
-
-			case *ast.Ident:
-				// addr := fmt.Sprintf("%s:%d", ...)
-				// ...
-				// net.Dial("tcp", addr)
-
-				// Search for decl of addrVar within common ancestor of addrVar and Dial call.
-				// TODO(adonovan): abstract "find RHS of statement that assigns var v".
-				// TODO(adonovan): reject if there are other assignments to var v.
-				if addrVar, ok := info.Uses[address].(*types.Var); ok {
-					if curId, ok := index.Def(addrVar); ok {
-						// curIdent is the declaring ast.Ident of addr.
-						switch parent := curId.Parent().Node().(type) {
-						case *ast.AssignStmt:
-							if len(parent.Rhs) == 1 {
-								// Have: addr := fmt.Sprintf("%s:%d", ...)
-								checkAddr(parent.Rhs[0], call)
-							}
-
-						case *ast.ValueSpec:
-							if len(parent.Values) == 1 {
-								// Have: var addr = fmt.Sprintf("%s:%d", ...)
-								checkAddr(parent.Values[0], call)
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-	return nil, nil
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go
index 2580a0ac21f1f9..64df1b106a1b86 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go
@@ -88,7 +88,7 @@ func run(pass *analysis.Pass) (any, error) {
 		//
 		// TODO: consider allowing the "last" go/defer/Go statement to be followed by
 		// N "trivial" statements, possibly under a recursive definition of "trivial"
-		// so that checker could, for example, conclude that a go statement is
+		// so that that checker could, for example, conclude that a go statement is
 		// followed by an if statement made of only trivial statements and trivial expressions,
 		// and hence the go statement could still be checked.
 		forEachLastStmt(body.List, func(last ast.Stmt) {
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go
index c0746789e9cb2a..a7fee18092569f 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go
@@ -17,7 +17,6 @@ import (
 	"golang.org/x/tools/go/ast/inspector"
 	"golang.org/x/tools/go/cfg"
 	"golang.org/x/tools/internal/analysisinternal"
-	"golang.org/x/tools/internal/astutil"
 )
 
 //go:embed doc.go
@@ -84,22 +83,30 @@ func runFunc(pass *analysis.Pass, node ast.Node) {
 	// {FuncDecl,FuncLit,CallExpr,SelectorExpr}.
 
 	// Find the set of cancel vars to analyze.
-	astutil.PreorderStack(node, nil, func(n ast.Node, stack []ast.Node) bool {
-		if _, ok := n.(*ast.FuncLit); ok && len(stack) > 0 {
-			return false // don't stray into nested functions
+	stack := make([]ast.Node, 0, 32)
+	ast.Inspect(node, func(n ast.Node) bool {
+		switch n.(type) {
+		case *ast.FuncLit:
+			if len(stack) > 0 {
+				return false // don't stray into nested functions
+			}
+		case nil:
+			stack = stack[:len(stack)-1] // pop
+			return true
 		}
+		stack = append(stack, n) // push
 
-		// Look for n=SelectorExpr beneath stack=[{AssignStmt,ValueSpec} CallExpr]:
+		// Look for [{AssignStmt,ValueSpec} CallExpr SelectorExpr]:
 		//
 		//   ctx, cancel    := context.WithCancel(...)
 		//   ctx, cancel     = context.WithCancel(...)
 		//   var ctx, cancel = context.WithCancel(...)
 		//
-		if !isContextWithCancel(pass.TypesInfo, n) || !isCall(stack[len(stack)-1]) {
+		if !isContextWithCancel(pass.TypesInfo, n) || !isCall(stack[len(stack)-2]) {
 			return true
 		}
 		var id *ast.Ident // id of cancel var
-		stmt := stack[len(stack)-2]
+		stmt := stack[len(stack)-3]
 		switch stmt := stmt.(type) {
 		case *ast.ValueSpec:
 			if len(stmt.Names) > 1 {
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go
index fa1883b0c3402c..3ac2dcd49076ce 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go
@@ -16,7 +16,7 @@ import (
 	"golang.org/x/tools/go/analysis/passes/inspect"
 	"golang.org/x/tools/go/analysis/passes/internal/analysisutil"
 	"golang.org/x/tools/go/ast/inspector"
-	"golang.org/x/tools/internal/typesinternal"
+	"golang.org/x/tools/internal/typeparams"
 )
 
 //go:embed doc.go
@@ -55,8 +55,24 @@ func run(pass *analysis.Pass) (any, error) {
 			return
 		}
 
+		// Only want identifiers or selector expressions.
+		var obj types.Object
+		switch v := e2.(type) {
+		case *ast.Ident:
+			obj = pass.TypesInfo.Uses[v]
+		case *ast.SelectorExpr:
+			obj = pass.TypesInfo.Uses[v.Sel]
+		case *ast.IndexExpr, *ast.IndexListExpr:
+			// Check generic functions such as "f[T1,T2]".
+			x, _, _, _ := typeparams.UnpackIndexExpr(v)
+			if id, ok := x.(*ast.Ident); ok {
+				obj = pass.TypesInfo.Uses[id]
+			}
+		default:
+			return
+		}
+
 		// Only want functions.
-		obj := pass.TypesInfo.Uses[typesinternal.UsedIdent(pass.TypesInfo, e2)]
 		if _, ok := obj.(*types.Func); !ok {
 			return
 		}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go
index 159a95ae7d7f8a..a28ed365d1ee46 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go
@@ -22,7 +22,6 @@ import (
 	"golang.org/x/tools/go/ast/inspector"
 	"golang.org/x/tools/go/types/typeutil"
 	"golang.org/x/tools/internal/analysisinternal"
-	"golang.org/x/tools/internal/astutil"
 	"golang.org/x/tools/internal/fmtstr"
 	"golang.org/x/tools/internal/typeparams"
 	"golang.org/x/tools/internal/versions"
@@ -541,7 +540,7 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C
 	firstArg := idx + 1 // Arguments are immediately after format string.
 	if !strings.Contains(format, "%") {
 		if len(call.Args) > firstArg {
-			pass.ReportRangef(call.Args[firstArg], "%s call has arguments but no formatting directives", name)
+			pass.Reportf(call.Lparen, "%s call has arguments but no formatting directives", name)
 		}
 		return
 	}
@@ -553,7 +552,7 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C
 	if err != nil {
 		// All error messages are in predicate form ("call has a problem")
 		// so that they may be affixed into a subject ("log.Printf ").
-		pass.ReportRangef(formatArg, "%s %s", name, err)
+		pass.ReportRangef(call.Args[idx], "%s %s", name, err)
 		return
 	}
 
@@ -561,21 +560,20 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C
 	maxArgIndex := firstArg - 1
 	anyIndex := false
 	// Check formats against args.
-	for _, op := range operations {
-		if op.Prec.Index != -1 ||
-			op.Width.Index != -1 ||
-			op.Verb.Index != -1 {
+	for _, operation := range operations {
+		if operation.Prec.Index != -1 ||
+			operation.Width.Index != -1 ||
+			operation.Verb.Index != -1 {
 			anyIndex = true
 		}
-		rng := opRange(formatArg, op)
-		if !okPrintfArg(pass, call, rng, &maxArgIndex, firstArg, name, op) {
+		if !okPrintfArg(pass, call, &maxArgIndex, firstArg, name, operation) {
 			// One error per format is enough.
 			return
 		}
-		if op.Verb.Verb == 'w' {
+		if operation.Verb.Verb == 'w' {
 			switch kind {
 			case KindNone, KindPrint, KindPrintf:
-				pass.ReportRangef(rng, "%s does not support error-wrapping directive %%w", name)
+				pass.Reportf(call.Pos(), "%s does not support error-wrapping directive %%w", name)
 				return
 			}
 		}
@@ -596,18 +594,6 @@ func checkPrintf(pass *analysis.Pass, fileVersion string, kind Kind, call *ast.C
 	}
 }
 
-// opRange returns the source range for the specified printf operation,
-// such as the position of the %v substring of "...%v...".
-func opRange(formatArg ast.Expr, op *fmtstr.Operation) analysis.Range {
-	if lit, ok := formatArg.(*ast.BasicLit); ok {
-		start, end, err := astutil.RangeInStringLiteral(lit, op.Range.Start, op.Range.End)
-		if err == nil {
-			return analysisinternal.Range(start, end) // position of "%v"
-		}
-	}
-	return formatArg // entire format string
-}
-
 // printfArgType encodes the types of expressions a printf verb accepts. It is a bitmask.
 type printfArgType int
 
@@ -671,7 +657,7 @@ var printVerbs = []printVerb{
 // okPrintfArg compares the operation to the arguments actually present,
 // reporting any discrepancies it can discern, maxArgIndex was the index of the highest used index.
 // If the final argument is ellipsissed, there's little it can do for that.
-func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, maxArgIndex *int, firstArg int, name string, operation *fmtstr.Operation) (ok bool) {
+func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, maxArgIndex *int, firstArg int, name string, operation *fmtstr.Operation) (ok bool) {
 	verb := operation.Verb.Verb
 	var v printVerb
 	found := false
@@ -694,7 +680,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 
 	if !formatter {
 		if !found {
-			pass.ReportRangef(rng, "%s format %s has unknown verb %c", name, operation.Text, verb)
+			pass.ReportRangef(call, "%s format %s has unknown verb %c", name, operation.Text, verb)
 			return false
 		}
 		for _, flag := range operation.Flags {
@@ -704,7 +690,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 				continue
 			}
 			if !strings.ContainsRune(v.flags, rune(flag)) {
-				pass.ReportRangef(rng, "%s format %s has unrecognized flag %c", name, operation.Text, flag)
+				pass.ReportRangef(call, "%s format %s has unrecognized flag %c", name, operation.Text, flag)
 				return false
 			}
 		}
@@ -721,7 +707,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 	// If len(argIndexes)>0, we have something like %.*s and all
 	// indexes in argIndexes must be an integer.
 	for _, argIndex := range argIndexes {
-		if !argCanBeChecked(pass, call, rng, argIndex, firstArg, operation, name) {
+		if !argCanBeChecked(pass, call, argIndex, firstArg, operation, name) {
 			return
 		}
 		arg := call.Args[argIndex]
@@ -730,7 +716,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 			if reason != "" {
 				details = " (" + reason + ")"
 			}
-			pass.ReportRangef(rng, "%s format %s uses non-int %s%s as argument of *", name, operation.Text, analysisinternal.Format(pass.Fset, arg), details)
+			pass.ReportRangef(call, "%s format %s uses non-int %s%s as argument of *", name, operation.Text, analysisinternal.Format(pass.Fset, arg), details)
 			return false
 		}
 	}
@@ -752,12 +738,12 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 
 	// Now check verb's type.
 	verbArgIndex := operation.Verb.ArgIndex
-	if !argCanBeChecked(pass, call, rng, verbArgIndex, firstArg, operation, name) {
+	if !argCanBeChecked(pass, call, verbArgIndex, firstArg, operation, name) {
 		return false
 	}
 	arg := call.Args[verbArgIndex]
 	if isFunctionValue(pass, arg) && verb != 'p' && verb != 'T' {
-		pass.ReportRangef(rng, "%s format %s arg %s is a func value, not called", name, operation.Text, analysisinternal.Format(pass.Fset, arg))
+		pass.ReportRangef(call, "%s format %s arg %s is a func value, not called", name, operation.Text, analysisinternal.Format(pass.Fset, arg))
 		return false
 	}
 	if reason, ok := matchArgType(pass, v.typ, arg); !ok {
@@ -769,14 +755,12 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, ma
 		if reason != "" {
 			details = " (" + reason + ")"
 		}
-		pass.ReportRangef(rng, "%s format %s has arg %s of wrong type %s%s", name, operation.Text, analysisinternal.Format(pass.Fset, arg), typeString, details)
+		pass.ReportRangef(call, "%s format %s has arg %s of wrong type %s%s", name, operation.Text, analysisinternal.Format(pass.Fset, arg), typeString, details)
 		return false
 	}
-	// Detect recursive formatting via value's String/Error methods.
-	// The '#' flag suppresses the methods, except with %x, %X, and %q.
-	if v.typ&argString != 0 && v.verb != 'T' && (!strings.Contains(operation.Flags, "#") || strings.ContainsRune("qxX", v.verb)) {
+	if v.typ&argString != 0 && v.verb != 'T' && !strings.Contains(operation.Flags, "#") {
 		if methodName, ok := recursiveStringer(pass, arg); ok {
-			pass.ReportRangef(rng, "%s format %s with arg %s causes recursive %s method call", name, operation.Text, analysisinternal.Format(pass.Fset, arg), methodName)
+			pass.ReportRangef(call, "%s format %s with arg %s causes recursive %s method call", name, operation.Text, analysisinternal.Format(pass.Fset, arg), methodName)
 			return false
 		}
 	}
@@ -860,7 +844,7 @@ func isFunctionValue(pass *analysis.Pass, e ast.Expr) bool {
 // argCanBeChecked reports whether the specified argument is statically present;
 // it may be beyond the list of arguments or in a terminal slice... argument, which
 // means we can't see it.
-func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range, argIndex, firstArg int, operation *fmtstr.Operation, name string) bool {
+func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, argIndex, firstArg int, operation *fmtstr.Operation, name string) bool {
 	if argIndex <= 0 {
 		// Shouldn't happen, so catch it with prejudice.
 		panic("negative argIndex")
@@ -877,7 +861,7 @@ func argCanBeChecked(pass *analysis.Pass, call *ast.CallExpr, rng analysis.Range
 	// There are bad indexes in the format or there are fewer arguments than the format needs.
 	// This is the argument number relative to the format: Printf("%s", "hi") will give 1 for the "hi".
 	arg := argIndex - firstArg + 1 // People think of arguments as 1-indexed.
-	pass.ReportRangef(rng, "%s format %s reads arg #%d, but call has %v", name, operation.Text, arg, count(len(call.Args)-firstArg, "arg"))
+	pass.ReportRangef(call, "%s format %s reads arg #%d, but call has %v", name, operation.Text, arg, count(len(call.Args)-firstArg, "arg"))
 	return false
 }
 
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go
index 7dbff1e4d8d4ee..a23721cd26f9ae 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go
@@ -17,7 +17,6 @@ import (
 	"golang.org/x/tools/go/ast/inspector"
 	"golang.org/x/tools/internal/analysisinternal"
 	"golang.org/x/tools/internal/typeparams"
-	"golang.org/x/tools/internal/typesinternal"
 )
 
 //go:embed doc.go
@@ -61,11 +60,12 @@ func describe(typ, inType types.Type, inName string) string {
 }
 
 func typeName(t types.Type) string {
-	if basic, ok := t.(*types.Basic); ok {
-		return basic.Name() // may be (e.g.) "untyped int", which has no TypeName
-	}
-	if tname := typesinternal.TypeNameFor(t); tname != nil {
-		return tname.Name()
+	type hasTypeName interface{ Obj() *types.TypeName } // Alias, Named, TypeParam
+	switch t := t.(type) {
+	case *types.Basic:
+		return t.Name()
+	case hasTypeName:
+		return t.Obj().Name()
 	}
 	return ""
 }
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
index cc90f7335eca56..d926503403ddc8 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
@@ -13,7 +13,6 @@ import (
 	"go/types"
 	"path/filepath"
 	"reflect"
-	"slices"
 	"strconv"
 	"strings"
 
@@ -89,7 +88,8 @@ var checkTagSpaces = map[string]bool{"json": true, "xml": true, "asn1": true}
 
 // checkCanonicalFieldTag checks a single struct field tag.
 func checkCanonicalFieldTag(pass *analysis.Pass, field *types.Var, tag string, seen *namesSeen) {
-	if strings.HasPrefix(pass.Pkg.Path(), "encoding/") {
+	switch pass.Pkg.Path() {
+	case "encoding/json", "encoding/json/v2", "encoding/xml":
 		// These packages know how to use their own APIs.
 		// Sometimes they are testing what happens to incorrect programs.
 		return
@@ -107,7 +107,7 @@ func checkCanonicalFieldTag(pass *analysis.Pass, field *types.Var, tag string, s
 
 	// Embedded struct. Nothing to do for now, but that
 	// may change, depending on what happens with issue 7363.
-	// TODO(adonovan): investigate, now that issue is fixed.
+	// TODO(adonovan): investigate, now that that issue is fixed.
 	if field.Anonymous() {
 		return
 	}
@@ -167,8 +167,11 @@ func checkTagDuplicates(pass *analysis.Pass, tag, key string, nearest, field *ty
 	if i := strings.Index(val, ","); i >= 0 {
 		if key == "xml" {
 			// Use a separate namespace for XML attributes.
-			if slices.Contains(strings.Split(val[i:], ","), "attr") {
-				key += " attribute" // Key is part of the error message.
+			for _, opt := range strings.Split(val[i:], ",") {
+				if opt == "attr" {
+					key += " attribute" // Key is part of the error message.
+					break
+				}
 			}
 		}
 		val = val[:i]
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go
index 360ba0e74d89d3..f49ac4eb1a0713 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go
@@ -17,7 +17,6 @@ import (
 	"golang.org/x/tools/go/ast/inspector"
 	"golang.org/x/tools/go/types/typeutil"
 	"golang.org/x/tools/internal/analysisinternal"
-	"golang.org/x/tools/internal/typesinternal"
 )
 
 //go:embed doc.go
@@ -187,7 +186,7 @@ func goAsyncCall(info *types.Info, goStmt *ast.GoStmt, toDecl func(*types.Func)
 	call := goStmt.Call
 
 	fun := ast.Unparen(call.Fun)
-	if id := typesinternal.UsedIdent(info, fun); id != nil {
+	if id := funcIdent(fun); id != nil {
 		if lit := funcLitInScope(id); lit != nil {
 			return &asyncCall{region: lit, async: goStmt, scope: nil, fun: fun}
 		}
@@ -218,7 +217,7 @@ func tRunAsyncCall(info *types.Info, call *ast.CallExpr) *asyncCall {
 		return &asyncCall{region: lit, async: call, scope: lit, fun: fun}
 	}
 
-	if id := typesinternal.UsedIdent(info, fun); id != nil {
+	if id := funcIdent(fun); id != nil {
 		if lit := funcLitInScope(id); lit != nil { // function lit in variable?
 			return &asyncCall{region: lit, async: call, scope: lit, fun: fun}
 		}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go
index db2e5f76d14e6e..027c99e6b0f931 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go
@@ -7,7 +7,8 @@ package testinggoroutine
 import (
 	"go/ast"
 	"go/types"
-	"slices"
+
+	"golang.org/x/tools/internal/typeparams"
 )
 
 // AST and types utilities that not specific to testinggoroutines.
@@ -47,7 +48,25 @@ func isMethodNamed(f *types.Func, pkgPath string, names ...string) bool {
 	if f.Type().(*types.Signature).Recv() == nil {
 		return false
 	}
-	return slices.Contains(names, f.Name())
+	for _, n := range names {
+		if f.Name() == n {
+			return true
+		}
+	}
+	return false
+}
+
+func funcIdent(fun ast.Expr) *ast.Ident {
+	switch fun := ast.Unparen(fun).(type) {
+	case *ast.IndexExpr, *ast.IndexListExpr:
+		x, _, _, _ := typeparams.UnpackIndexExpr(fun) // necessary?
+		id, _ := x.(*ast.Ident)
+		return id
+	case *ast.Ident:
+		return fun
+	default:
+		return nil
+	}
 }
 
 // funcLitInScope returns a FuncLit that id is at least initially assigned to.
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go
index d4e9b025324a18..9f59006ebb22ee 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go
@@ -447,6 +447,18 @@ func checkExampleName(pass *analysis.Pass, fn *ast.FuncDecl) {
 	}
 }
 
+type tokenRange struct {
+	p, e token.Pos
+}
+
+func (r tokenRange) Pos() token.Pos {
+	return r.p
+}
+
+func (r tokenRange) End() token.Pos {
+	return r.e
+}
+
 func checkTest(pass *analysis.Pass, fn *ast.FuncDecl, prefix string) {
 	// Want functions with 0 results and 1 parameter.
 	if fn.Type.Results != nil && len(fn.Type.Results.List) > 0 ||
@@ -464,9 +476,8 @@ func checkTest(pass *analysis.Pass, fn *ast.FuncDecl, prefix string) {
 	if tparams := fn.Type.TypeParams; tparams != nil && len(tparams.List) > 0 {
 		// Note: cmd/go/internal/load also errors about TestXXX and BenchmarkXXX functions with type parameters.
 		// We have currently decided to also warn before compilation/package loading. This can help users in IDEs.
-		pass.ReportRangef(analysisinternal.Range(tparams.Opening, tparams.Closing),
-			"%s has type parameters: it will not be run by go test as a %sXXX function",
-			fn.Name.Name, prefix)
+		at := tokenRange{tparams.Opening, tparams.Closing}
+		pass.ReportRangef(at, "%s has type parameters: it will not be run by go test as a %sXXX function", fn.Name.Name, prefix)
 	}
 
 	if !isTestSuffix(fn.Name.Name[len(prefix):]) {
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go
index 317f034992bb5d..fcf5fbd9060a50 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go
@@ -188,9 +188,6 @@ func (d *deadState) findDead(stmt ast.Stmt) {
 		case *ast.EmptyStmt:
 			// do not warn about unreachable empty statements
 		default:
-			// (This call to pass.Report is a frequent source
-			// of diagnostics beyond EOF in a truncated file;
-			// see #71659.)
 			d.pass.Report(analysis.Diagnostic{
 				Pos:     stmt.Pos(),
 				End:     stmt.End(),
diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go
index 556ffed7d99359..932f1347e56a0e 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go
@@ -26,7 +26,6 @@ import (
 	"golang.org/x/tools/go/analysis/passes/internal/analysisutil"
 	"golang.org/x/tools/go/ast/inspector"
 	"golang.org/x/tools/go/types/typeutil"
-	"golang.org/x/tools/internal/analysisinternal"
 )
 
 //go:embed doc.go
@@ -60,62 +59,23 @@ func init() {
 	// The context.With{Cancel,Deadline,Timeout} entries are
 	// effectively redundant wrt the lostcancel analyzer.
 	funcs = stringSetFlag{
-		"context.WithCancel":      true,
-		"context.WithDeadline":    true,
-		"context.WithTimeout":     true,
-		"context.WithValue":       true,
-		"errors.New":              true,
-		"fmt.Append":              true,
-		"fmt.Appendf":             true,
-		"fmt.Appendln":            true,
-		"fmt.Errorf":              true,
-		"fmt.Sprint":              true,
-		"fmt.Sprintf":             true,
-		"fmt.Sprintln":            true,
-		"maps.All":                true,
-		"maps.Clone":              true,
-		"maps.Collect":            true,
-		"maps.Equal":              true,
-		"maps.EqualFunc":          true,
-		"maps.Keys":               true,
-		"maps.Values":             true,
-		"slices.All":              true,
-		"slices.AppendSeq":        true,
-		"slices.Backward":         true,
-		"slices.BinarySearch":     true,
-		"slices.BinarySearchFunc": true,
-		"slices.Chunk":            true,
-		"slices.Clip":             true,
-		"slices.Clone":            true,
-		"slices.Collect":          true,
-		"slices.Compact":          true,
-		"slices.CompactFunc":      true,
-		"slices.Compare":          true,
-		"slices.CompareFunc":      true,
-		"slices.Concat":           true,
-		"slices.Contains":         true,
-		"slices.ContainsFunc":     true,
-		"slices.Delete":           true,
-		"slices.DeleteFunc":       true,
-		"slices.Equal":            true,
-		"slices.EqualFunc":        true,
-		"slices.Grow":             true,
-		"slices.Index":            true,
-		"slices.IndexFunc":        true,
-		"slices.Insert":           true,
-		"slices.IsSorted":         true,
-		"slices.IsSortedFunc":     true,
-		"slices.Max":              true,
-		"slices.MaxFunc":          true,
-		"slices.Min":              true,
-		"slices.MinFunc":          true,
-		"slices.Repeat":           true,
-		"slices.Replace":          true,
-		"slices.Sorted":           true,
-		"slices.SortedFunc":       true,
-		"slices.SortedStableFunc": true,
-		"slices.Values":           true,
-		"sort.Reverse":            true,
+		"context.WithCancel":   true,
+		"context.WithDeadline": true,
+		"context.WithTimeout":  true,
+		"context.WithValue":    true,
+		"errors.New":           true,
+		"fmt.Errorf":           true,
+		"fmt.Sprint":           true,
+		"fmt.Sprintf":          true,
+		"slices.Clip":          true,
+		"slices.Compact":       true,
+		"slices.CompactFunc":   true,
+		"slices.Delete":        true,
+		"slices.DeleteFunc":    true,
+		"slices.Grow":          true,
+		"slices.Insert":        true,
+		"slices.Replace":       true,
+		"sort.Reverse":         true,
 	}
 	Analyzer.Flags.Var(&funcs, "funcs",
 		"comma-separated list of functions whose results must be used")
@@ -154,16 +114,14 @@ func run(pass *analysis.Pass) (any, error) {
 			// method (e.g. foo.String())
 			if types.Identical(sig, sigNoArgsStringResult) {
 				if stringMethods[fn.Name()] {
-					pass.ReportRangef(analysisinternal.Range(call.Pos(), call.Lparen),
-						"result of (%s).%s call not used",
+					pass.Reportf(call.Lparen, "result of (%s).%s call not used",
 						sig.Recv().Type(), fn.Name())
 				}
 			}
 		} else {
 			// package-level function (e.g. fmt.Errorf)
 			if pkgFuncs[[2]string{fn.Pkg().Path(), fn.Name()}] {
-				pass.ReportRangef(analysisinternal.Range(call.Pos(), call.Lparen),
-					"result of %s.%s call not used",
+				pass.Reportf(call.Lparen, "result of %s.%s call not used",
 					fn.Pkg().Path(), fn.Name())
 			}
 		}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go
index bc44b2c8e7e47a..1da4a361f0b339 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go
@@ -13,19 +13,10 @@
 // This representation is sometimes called a "balanced parenthesis tree."
 //
 // Experiments suggest the inspector's traversals are about 2.5x faster
-// than [ast.Inspect], but it may take around 5 traversals for this
+// than ast.Inspect, but it may take around 5 traversals for this
 // benefit to amortize the inspector's construction cost.
 // If efficiency is the primary concern, do not use Inspector for
 // one-off traversals.
-//
-// The [Cursor] type provides a more flexible API for efficient
-// navigation of syntax trees in all four "cardinal directions". For
-// example, traversals may be nested, so you can find each node of
-// type A and then search within it for nodes of type B. Or you can
-// traverse from a node to its immediate neighbors: its parent, its
-// previous and next sibling, or its first and last child. We
-// recommend using methods of Cursor in preference to Inspector where
-// possible.
 package inspector
 
 // There are four orthogonal features in a traversal:
@@ -46,8 +37,9 @@ package inspector
 
 import (
 	"go/ast"
+	_ "unsafe"
 
-	"golang.org/x/tools/go/ast/edge"
+	"golang.org/x/tools/internal/astutil/edge"
 )
 
 // An Inspector provides methods for inspecting
@@ -56,12 +48,18 @@ type Inspector struct {
 	events []event
 }
 
+//go:linkname events
+func events(in *Inspector) []event { return in.events }
+
+//go:linkname packEdgeKindAndIndex
 func packEdgeKindAndIndex(ek edge.Kind, index int) int32 {
 	return int32(uint32(index+1)<<7 | uint32(ek))
 }
 
 // unpackEdgeKindAndIndex unpacks the edge kind and edge index (within
 // an []ast.Node slice) from the parent field of a pop event.
+//
+//go:linkname unpackEdgeKindAndIndex
 func unpackEdgeKindAndIndex(x int32) (edge.Kind, int) {
 	// The "parent" field of a pop node holds the
 	// edge Kind in the lower 7 bits and the index+1
@@ -90,15 +88,10 @@ type event struct {
 // depth-first order. It calls f(n) for each node n before it visits
 // n's children.
 //
-// The complete traversal sequence is determined by [ast.Inspect].
+// The complete traversal sequence is determined by ast.Inspect.
 // The types argument, if non-empty, enables type-based filtering of
 // events. The function f is called only for nodes whose type
 // matches an element of the types slice.
-//
-// The [Cursor.Preorder] method provides a richer alternative interface.
-// Example:
-//
-//	for c := range in.Root().Preorder(types) { ... }
 func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) {
 	// Because it avoids postorder calls to f, and the pruning
 	// check, Preorder is almost twice as fast as Nodes. The two
@@ -138,18 +131,10 @@ func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) {
 // of the non-nil children of the node, followed by a call of
 // f(n, false).
 //
-// The complete traversal sequence is determined by [ast.Inspect].
+// The complete traversal sequence is determined by ast.Inspect.
 // The types argument, if non-empty, enables type-based filtering of
 // events. The function f if is called only for nodes whose type
 // matches an element of the types slice.
-//
-// The [Cursor.Inspect] method provides a richer alternative interface.
-// Example:
-//
-//	in.Root().Inspect(types, func(c Cursor) bool {
-//		...
-//		return true
-//	}
 func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proceed bool)) {
 	mask := maskOf(types)
 	for i := int32(0); i < int32(len(in.events)); {
@@ -183,15 +168,6 @@ func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proc
 // supplies each call to f an additional argument, the current
 // traversal stack. The stack's first element is the outermost node,
 // an *ast.File; its last is the innermost, n.
-//
-// The [Cursor.Inspect] method provides a richer alternative interface.
-// Example:
-//
-//	in.Root().Inspect(types, func(c Cursor) bool {
-//		stack := slices.Collect(c.Enclosing())
-//		...
-//		return true
-//	})
 func (in *Inspector) WithStack(types []ast.Node, f func(n ast.Node, push bool, stack []ast.Node) (proceed bool)) {
 	mask := maskOf(types)
 	var stack []ast.Node
@@ -257,7 +233,7 @@ type visitor struct {
 type item struct {
 	index            int32  // index of current node's push event
 	parentIndex      int32  // index of parent node's push event
-	typAccum         uint64 // accumulated type bits of current node's descendants
+	typAccum         uint64 // accumulated type bits of current node's descendents
 	edgeKindAndIndex int32  // edge.Kind and index, bit packed
 }
 
diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go
index e936c67c985a0b..97784484578d50 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go
@@ -217,7 +217,7 @@ func typeOf(n ast.Node) uint64 {
 	return 0
 }
 
-//go:linkname maskOf golang.org/x/tools/go/ast/inspector.maskOf
+//go:linkname maskOf
 func maskOf(nodes []ast.Node) uint64 {
 	if len(nodes) == 0 {
 		return math.MaxUint64 // match all node types
diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/walk.go b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/walk.go
index 5f1c93c8a73c4a..5a42174a0a0077 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/walk.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/walk.go
@@ -13,7 +13,7 @@ import (
 	"fmt"
 	"go/ast"
 
-	"golang.org/x/tools/go/ast/edge"
+	"golang.org/x/tools/internal/astutil/edge"
 )
 
 func walkList[N ast.Node](v *visitor, ek edge.Kind, list []N) {
diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
index d3c2913bef336a..16ed3c1780bad7 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
@@ -603,7 +603,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) {
 	type hasTypeParams interface {
 		TypeParams() *types.TypeParamList
 	}
-	// abstraction of *types.{Alias,Named,TypeParam}
+	// abstraction of *types.{Named,TypeParam}
 	type hasObj interface {
 		Obj() *types.TypeName
 	}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go
index 5f10f56cbaf1d6..754380351e8650 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go
+++ b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go
@@ -7,23 +7,45 @@ package typeutil
 import (
 	"go/ast"
 	"go/types"
-	_ "unsafe" // for linkname
+
+	"golang.org/x/tools/internal/typeparams"
 )
 
 // Callee returns the named target of a function call, if any:
 // a function, method, builtin, or variable.
 //
 // Functions and methods may potentially have type parameters.
-//
-// Note: for calls of instantiated functions and methods, Callee returns
-// the corresponding generic function or method on the generic type.
 func Callee(info *types.Info, call *ast.CallExpr) types.Object {
-	obj := info.Uses[usedIdent(info, call.Fun)]
-	if obj == nil {
-		return nil
+	fun := ast.Unparen(call.Fun)
+
+	// Look through type instantiation if necessary.
+	isInstance := false
+	switch fun.(type) {
+	case *ast.IndexExpr, *ast.IndexListExpr:
+		// When extracting the callee from an *IndexExpr, we need to check that
+		// it is a *types.Func and not a *types.Var.
+		// Example: Don't match a slice m within the expression `m[0]()`.
+		isInstance = true
+		fun, _, _, _ = typeparams.UnpackIndexExpr(fun)
+	}
+
+	var obj types.Object
+	switch fun := fun.(type) {
+	case *ast.Ident:
+		obj = info.Uses[fun] // type, var, builtin, or declared func
+	case *ast.SelectorExpr:
+		if sel, ok := info.Selections[fun]; ok {
+			obj = sel.Obj() // method or field
+		} else {
+			obj = info.Uses[fun.Sel] // qualified identifier?
+		}
 	}
 	if _, ok := obj.(*types.TypeName); ok {
-		return nil
+		return nil // T(x) is a conversion, not a call
+	}
+	// A Func is required to match instantiations.
+	if _, ok := obj.(*types.Func); isInstance && !ok {
+		return nil // Was not a Func.
 	}
 	return obj
 }
@@ -34,52 +56,13 @@ func Callee(info *types.Info, call *ast.CallExpr) types.Object {
 // Note: for calls of instantiated functions and methods, StaticCallee returns
 // the corresponding generic function or method on the generic type.
 func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func {
-	obj := info.Uses[usedIdent(info, call.Fun)]
-	fn, _ := obj.(*types.Func)
-	if fn == nil || interfaceMethod(fn) {
-		return nil
-	}
-	return fn
-}
-
-// usedIdent is the implementation of [internal/typesinternal.UsedIdent].
-// It returns the identifier associated with e.
-// See typesinternal.UsedIdent for a fuller description.
-// This function should live in typesinternal, but cannot because it would
-// create an import cycle.
-//
-//go:linkname usedIdent golang.org/x/tools/go/types/typeutil.usedIdent
-func usedIdent(info *types.Info, e ast.Expr) *ast.Ident {
-	if info.Types == nil || info.Uses == nil {
-		panic("one of info.Types or info.Uses is nil; both must be populated")
-	}
-	// Look through type instantiation if necessary.
-	switch d := ast.Unparen(e).(type) {
-	case *ast.IndexExpr:
-		if info.Types[d.Index].IsType() {
-			e = d.X
-		}
-	case *ast.IndexListExpr:
-		e = d.X
-	}
-
-	switch e := ast.Unparen(e).(type) {
-	// info.Uses always has the object we want, even for selector expressions.
-	// We don't need info.Selections.
-	// See go/types/recording.go:recordSelection.
-	case *ast.Ident:
-		return e
-	case *ast.SelectorExpr:
-		return e.Sel
+	if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) {
+		return f
 	}
 	return nil
 }
 
-// interfaceMethod reports whether its argument is a method of an interface.
-// This function should live in typesinternal, but cannot because it would create an import cycle.
-//
-//go:linkname interfaceMethod golang.org/x/tools/go/types/typeutil.interfaceMethod
 func interfaceMethod(f *types.Func) bool {
-	recv := f.Signature().Recv()
+	recv := f.Type().(*types.Signature).Recv()
 	return recv != nil && types.IsInterface(recv.Type())
 }
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go
index e46aab02d6b506..b22e314cf45be7 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go
@@ -22,6 +22,7 @@ import (
 
 	"golang.org/x/tools/go/analysis"
 	"golang.org/x/tools/go/ast/inspector"
+	"golang.org/x/tools/internal/astutil/cursor"
 	"golang.org/x/tools/internal/typesinternal"
 )
 
@@ -279,15 +280,7 @@ func AddImport(info *types.Info, file *ast.File, preferredName, pkgpath, member
 	// If the first decl is an import group, add this new import at the end.
 	if gd, ok := before.(*ast.GenDecl); ok && gd.Tok == token.IMPORT && gd.Rparen.IsValid() {
 		pos = gd.Rparen
-		// if it's a std lib, we should append it at the beginning of import group.
-		// otherwise we may see the std package is put at the last behind a 3rd module which doesn't follow our convention.
-		// besides, gofmt doesn't help in this case.
-		if IsStdPackage(pkgpath) && len(gd.Specs) != 0 {
-			pos = gd.Specs[0].Pos()
-			newText += "\n\t"
-		} else {
-			newText = "\t" + newText + "\n"
-		}
+		newText = "\t" + newText + "\n"
 	} else {
 		pos = before.Pos()
 		newText = "import " + newText + "\n\n"
@@ -312,10 +305,10 @@ func FreshName(scope *types.Scope, pos token.Pos, preferred string) string {
 	return newName
 }
 
-// Format returns a string representation of the node n.
-func Format(fset *token.FileSet, n ast.Node) string {
+// Format returns a string representation of the expression e.
+func Format(fset *token.FileSet, e ast.Expr) string {
 	var buf strings.Builder
-	printer.Fprint(&buf, fset, n) // ignore errors
+	printer.Fprint(&buf, fset, e) // ignore errors
 	return buf.String()
 }
 
@@ -438,25 +431,11 @@ func validateFix(fset *token.FileSet, fix *analysis.SuggestedFix) error {
 		if file == nil {
 			return fmt.Errorf("no token.File for TextEdit.Pos (%v)", edit.Pos)
 		}
-		fileEnd := token.Pos(file.Base() + file.Size())
 		if end := edit.End; end.IsValid() {
 			if end < start {
 				return fmt.Errorf("TextEdit.Pos (%v) > TextEdit.End (%v)", edit.Pos, edit.End)
 			}
 			endFile := fset.File(end)
-			if endFile != file && end < fileEnd+10 {
-				// Relax the checks below in the special case when the end position
-				// is only slightly beyond EOF, as happens when End is computed
-				// (as in ast.{Struct,Interface}Type) rather than based on
-				// actual token positions. In such cases, truncate end to EOF.
-				//
-				// This is a workaround for #71659; see:
-				// https://github.com/golang/go/issues/71659#issuecomment-2651606031
-				// A better fix would be more faithful recording of token
-				// positions (or their absence) in the AST.
-				edit.End = fileEnd
-				continue
-			}
 			if endFile == nil {
 				return fmt.Errorf("no token.File for TextEdit.End (%v; File(start).FileEnd is %d)", end, file.Base()+file.Size())
 			}
@@ -467,7 +446,7 @@ func validateFix(fset *token.FileSet, fix *analysis.SuggestedFix) error {
 		} else {
 			edit.End = start // update the SuggestedFix
 		}
-		if eof := fileEnd; edit.End > eof {
+		if eof := token.Pos(file.Base() + file.Size()); edit.End > eof {
 			return fmt.Errorf("end is (%v) beyond end of file (%v)", edit.End, eof)
 		}
 
@@ -525,7 +504,7 @@ func CanImport(from, to string) bool {
 func DeleteStmt(fset *token.FileSet, astFile *ast.File, stmt ast.Stmt, report func(string, ...any)) []analysis.TextEdit {
 	// TODO: pass in the cursor to a ast.Stmt. callers should provide the Cursor
 	insp := inspector.New([]*ast.File{astFile})
-	root := insp.Root()
+	root := cursor.Root(insp)
 	cstmt, ok := root.FindNode(stmt)
 	if !ok {
 		report("%s not found in file", stmt.Pos())
@@ -619,8 +598,8 @@ Outer:
 	// otherwise remove the line
 	edit := analysis.TextEdit{Pos: stmt.Pos(), End: stmt.End()}
 	if from.IsValid() || to.IsValid() {
-		// remove just the statement.
-		// we can't tell if there is a ; or whitespace right after the statement
+		// remove just the statment.
+		// we can't tell if there is a ; or whitespace right after the statment
 		// ideally we'd like to remove the former and leave the latter
 		// (if gofmt has run, there likely won't be a ;)
 		// In type switches we know there's a semicolon somewhere after the statement,
@@ -658,26 +637,3 @@ func Comments(file *ast.File, start, end token.Pos) iter.Seq[*ast.Comment] {
 		}
 	}
 }
-
-// IsStdPackage reports whether the specified package path belongs to a
-// package in the standard library (including internal dependencies).
-func IsStdPackage(path string) bool {
-	// A standard package has no dot in its first segment.
-	// (It may yet have a dot, e.g. "vendor/golang.org/x/foo".)
-	slash := strings.IndexByte(path, '/')
-	if slash < 0 {
-		slash = len(path)
-	}
-	return !strings.Contains(path[:slash], ".") && path != "testdata"
-}
-
-// Range returns an [analysis.Range] for the specified start and end positions.
-func Range(pos, end token.Pos) analysis.Range {
-	return tokenRange{pos, end}
-}
-
-// tokenRange is an implementation of the [analysis.Range] interface.
-type tokenRange struct{ StartPos, EndPos token.Pos }
-
-func (r tokenRange) Pos() token.Pos { return r.StartPos }
-func (r tokenRange) End() token.Pos { return r.EndPos }
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/typeindex/typeindex.go b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/typeindex/typeindex.go
deleted file mode 100644
index bba21c6ea01e9d..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/typeindex/typeindex.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typeindex defines an analyzer that provides a
-// [golang.org/x/tools/internal/typesinternal/typeindex.Index].
-//
-// Like [golang.org/x/tools/go/analysis/passes/inspect], it is
-// intended to be used as a helper by other analyzers; it reports no
-// diagnostics of its own.
-package typeindex
-
-import (
-	"reflect"
-
-	"golang.org/x/tools/go/analysis"
-	"golang.org/x/tools/go/analysis/passes/inspect"
-	"golang.org/x/tools/go/ast/inspector"
-	"golang.org/x/tools/internal/typesinternal/typeindex"
-)
-
-var Analyzer = &analysis.Analyzer{
-	Name: "typeindex",
-	Doc:  "indexes of type information for later passes",
-	URL:  "https://pkg.go.dev/golang.org/x/tools/internal/analysisinternal/typeindex",
-	Run: func(pass *analysis.Pass) (any, error) {
-		inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
-		return typeindex.New(inspect, pass.Pkg, pass.TypesInfo), nil
-	},
-	RunDespiteErrors: true,
-	Requires:         []*analysis.Analyzer{inspect.Analyzer},
-	ResultType:       reflect.TypeOf(new(typeindex.Index)),
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/astutil/clone.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/clone.go
deleted file mode 100644
index 2c9b6bb4841710..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/astutil/clone.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import (
-	"go/ast"
-	"reflect"
-)
-
-// CloneNode returns a deep copy of a Node.
-// It omits pointers to ast.{Scope,Object} variables.
-func CloneNode[T ast.Node](n T) T {
-	return cloneNode(n).(T)
-}
-
-func cloneNode(n ast.Node) ast.Node {
-	var clone func(x reflect.Value) reflect.Value
-	set := func(dst, src reflect.Value) {
-		src = clone(src)
-		if src.IsValid() {
-			dst.Set(src)
-		}
-	}
-	clone = func(x reflect.Value) reflect.Value {
-		switch x.Kind() {
-		case reflect.Pointer:
-			if x.IsNil() {
-				return x
-			}
-			// Skip fields of types potentially involved in cycles.
-			switch x.Interface().(type) {
-			case *ast.Object, *ast.Scope:
-				return reflect.Zero(x.Type())
-			}
-			y := reflect.New(x.Type().Elem())
-			set(y.Elem(), x.Elem())
-			return y
-
-		case reflect.Struct:
-			y := reflect.New(x.Type()).Elem()
-			for i := 0; i < x.Type().NumField(); i++ {
-				set(y.Field(i), x.Field(i))
-			}
-			return y
-
-		case reflect.Slice:
-			if x.IsNil() {
-				return x
-			}
-			y := reflect.MakeSlice(x.Type(), x.Len(), x.Cap())
-			for i := 0; i < x.Len(); i++ {
-				set(y.Index(i), x.Index(i))
-			}
-			return y
-
-		case reflect.Interface:
-			y := reflect.New(x.Type()).Elem()
-			set(y, x.Elem())
-			return y
-
-		case reflect.Array, reflect.Chan, reflect.Func, reflect.Map, reflect.UnsafePointer:
-			panic(x) // unreachable in AST
-
-		default:
-			return x // bool, string, number
-		}
-	}
-	return clone(reflect.ValueOf(n)).Interface().(ast.Node)
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/astutil/comment.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/comment.go
deleted file mode 100644
index ee4be23f2261bf..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/astutil/comment.go
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import (
-	"go/ast"
-	"go/token"
-	"strings"
-)
-
-// Deprecation returns the paragraph of the doc comment that starts with the
-// conventional "Deprecation: " marker, as defined by
-// https://go.dev/wiki/Deprecated, or "" if the documented symbol is not
-// deprecated.
-func Deprecation(doc *ast.CommentGroup) string {
-	for _, p := range strings.Split(doc.Text(), "\n\n") {
-		// There is still some ambiguity for deprecation message. This function
-		// only returns the paragraph introduced by "Deprecated: ". More
-		// information related to the deprecation may follow in additional
-		// paragraphs, but the deprecation message should be able to stand on
-		// its own. See golang/go#38743.
-		if strings.HasPrefix(p, "Deprecated: ") {
-			return p
-		}
-	}
-	return ""
-}
-
-// -- plundered from the future (CL 605517, issue #68021) --
-
-// TODO(adonovan): replace with ast.Directive after go1.25 (#68021).
-// Beware of our local mods to handle analysistest
-// "want" comments on the same line.
-
-// A directive is a comment line with special meaning to the Go
-// toolchain or another tool. It has the form:
-//
-//	//tool:name args
-//
-// The "tool:" portion is missing for the three directives named
-// line, extern, and export.
-//
-// See https://go.dev/doc/comment#Syntax for details of Go comment
-// syntax and https://pkg.go.dev/cmd/compile#hdr-Compiler_Directives
-// for details of directives used by the Go compiler.
-type Directive struct {
-	Pos  token.Pos // of preceding "//"
-	Tool string
-	Name string
-	Args string // may contain internal spaces
-}
-
-// isDirective reports whether c is a comment directive.
-// This code is also in go/printer.
-func isDirective(c string) bool {
-	// "//line " is a line directive.
-	// "//extern " is for gccgo.
-	// "//export " is for cgo.
-	// (The // has been removed.)
-	if strings.HasPrefix(c, "line ") || strings.HasPrefix(c, "extern ") || strings.HasPrefix(c, "export ") {
-		return true
-	}
-
-	// "//[a-z0-9]+:[a-z0-9]"
-	// (The // has been removed.)
-	colon := strings.Index(c, ":")
-	if colon <= 0 || colon+1 >= len(c) {
-		return false
-	}
-	for i := 0; i <= colon+1; i++ {
-		if i == colon {
-			continue
-		}
-		b := c[i]
-		if !('a' <= b && b <= 'z' || '0' <= b && b <= '9') {
-			return false
-		}
-	}
-	return true
-}
-
-// Directives returns the directives within the comment.
-func Directives(g *ast.CommentGroup) (res []*Directive) {
-	if g != nil {
-		// Avoid (*ast.CommentGroup).Text() as it swallows directives.
-		for _, c := range g.List {
-			if len(c.Text) > 2 &&
-				c.Text[1] == '/' &&
-				c.Text[2] != ' ' &&
-				isDirective(c.Text[2:]) {
-
-				tool, nameargs, ok := strings.Cut(c.Text[2:], ":")
-				if !ok {
-					// Must be one of {line,extern,export}.
-					tool, nameargs = "", tool
-				}
-				name, args, _ := strings.Cut(nameargs, " ") // tab??
-				// Permit an additional line comment after the args, chiefly to support
-				// [golang.org/x/tools/go/analysis/analysistest].
-				args, _, _ = strings.Cut(args, "//")
-				res = append(res, &Directive{
-					Pos:  c.Slash,
-					Tool: tool,
-					Name: name,
-					Args: strings.TrimSpace(args),
-				})
-			}
-		}
-	}
-	return
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/cursor.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go
similarity index 82%
rename from src/cmd/vendor/golang.org/x/tools/go/ast/inspector/cursor.go
rename to src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go
index 31c8d2f24096df..3f015998c52831 100644
--- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/cursor.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/cursor.go
@@ -1,8 +1,18 @@
-// Copyright 2025 The Go Authors. All rights reserved.
+// Copyright 2024 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package inspector
+//go:build go1.23
+
+// Package cursor augments [inspector.Inspector] with [Cursor]
+// functionality allowing more flexibility and control during
+// inspection.
+//
+// This package is a temporary private extension of inspector until
+// proposal #70859 is accepted, and which point it will be moved into
+// the inspector package, and [Root] will become a method of
+// Inspector.
+package cursor
 
 import (
 	"fmt"
@@ -10,30 +20,19 @@ import (
 	"go/token"
 	"iter"
 	"reflect"
+	"slices"
 
-	"golang.org/x/tools/go/ast/edge"
+	"golang.org/x/tools/go/ast/inspector"
+	"golang.org/x/tools/internal/astutil/edge"
 )
 
 // A Cursor represents an [ast.Node]. It is immutable.
 //
 // Two Cursors compare equal if they represent the same node.
 //
-// Call [Inspector.Root] to obtain a valid cursor for the virtual root
-// node of the traversal.
-//
-// Use the following methods to navigate efficiently around the tree:
-//   - for ancestors, use [Cursor.Parent] and [Cursor.Enclosing];
-//   - for children, use [Cursor.Child], [Cursor.Children],
-//     [Cursor.FirstChild], and [Cursor.LastChild];
-//   - for siblings, use [Cursor.PrevSibling] and [Cursor.NextSibling];
-//   - for descendants, use [Cursor.FindByPos], [Cursor.FindNode],
-//     [Cursor.Inspect], and [Cursor.Preorder].
-//
-// Use the [Cursor.ChildAt] and [Cursor.ParentEdge] methods for
-// information about the edges in a tree: which field (and slice
-// element) of the parent node holds the child.
+// Call [Root] to obtain a valid cursor.
 type Cursor struct {
-	in    *Inspector
+	in    *inspector.Inspector
 	index int32 // index of push node; -1 for virtual root node
 }
 
@@ -41,29 +40,27 @@ type Cursor struct {
 // whose children are the files provided to [New].
 //
 // Its [Cursor.Node] and [Cursor.Stack] methods return nil.
-func (in *Inspector) Root() Cursor {
+func Root(in *inspector.Inspector) Cursor {
 	return Cursor{in, -1}
 }
 
 // At returns the cursor at the specified index in the traversal,
 // which must have been obtained from [Cursor.Index] on a Cursor
-// belonging to the same Inspector (see [Cursor.Inspector]).
-func (in *Inspector) At(index int32) Cursor {
+// belonging to the same Inspector.
+func At(in *inspector.Inspector, index int32) Cursor {
 	if index < 0 {
 		panic("negative index")
 	}
-	if int(index) >= len(in.events) {
+	events := events(in)
+	if int(index) >= len(events) {
 		panic("index out of range for this inspector")
 	}
-	if in.events[index].index < index {
+	if events[index].index < index {
 		panic("invalid index") // (a push, not a pop)
 	}
 	return Cursor{in, index}
 }
 
-// Inspector returns the cursor's Inspector.
-func (c Cursor) Inspector() *Inspector { return c.in }
-
 // Index returns the index of this cursor position within the package.
 //
 // Clients should not assume anything about the numeric Index value
@@ -84,7 +81,7 @@ func (c Cursor) Node() ast.Node {
 	if c.index < 0 {
 		return nil
 	}
-	return c.in.events[c.index].node
+	return c.events()[c.index].node
 }
 
 // String returns information about the cursor's node, if any.
@@ -101,9 +98,9 @@ func (c Cursor) String() string {
 // indices return the [start, end) half-open interval of event indices.
 func (c Cursor) indices() (int32, int32) {
 	if c.index < 0 {
-		return 0, int32(len(c.in.events)) // root: all events
+		return 0, int32(len(c.events())) // root: all events
 	} else {
-		return c.index, c.in.events[c.index].index + 1 // just one subtree
+		return c.index, c.events()[c.index].index + 1 // just one subtree
 	}
 }
 
@@ -124,7 +121,7 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] {
 	mask := maskOf(types)
 
 	return func(yield func(Cursor) bool) {
-		events := c.in.events
+		events := c.events()
 
 		for i, limit := c.indices(); i < limit; {
 			ev := events[i]
@@ -145,9 +142,10 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] {
 }
 
 // Inspect visits the nodes of the subtree represented by c in
-// depth-first order. It calls f(n) for each node n before it
+// depth-first order. It calls f(n, true) for each node n before it
 // visits n's children. If f returns true, Inspect invokes f
-// recursively for each of the non-nil children of the node.
+// recursively for each of the non-nil children of the node, followed
+// by a call of f(n, false).
 //
 // Each node is represented by a Cursor that allows access to the
 // Node, but may also be used to start a new traversal, or to obtain
@@ -157,27 +155,54 @@ func (c Cursor) Preorder(types ...ast.Node) iter.Seq[Cursor] {
 // The types argument, if non-empty, enables type-based filtering of
 // events. The function f if is called only for nodes whose type
 // matches an element of the types slice.
-func (c Cursor) Inspect(types []ast.Node, f func(c Cursor) (descend bool)) {
+func (c Cursor) Inspect(types []ast.Node, f func(c Cursor, push bool) (descend bool)) {
 	mask := maskOf(types)
-	events := c.in.events
+	events := c.events()
 	for i, limit := c.indices(); i < limit; {
 		ev := events[i]
 		if ev.index > i {
 			// push
 			pop := ev.index
-			if ev.typ&mask != 0 && !f(Cursor{c.in, i}) ||
-				events[pop].typ&mask == 0 {
-				// The user opted not to descend, or the
-				// subtree does not contain types:
-				// skip past the pop.
-				i = pop + 1
+			if ev.typ&mask != 0 && !f(Cursor{c.in, i}, true) {
+				i = pop + 1 // past the pop
+				continue
+			}
+			if events[pop].typ&mask == 0 {
+				// Subtree does not contain types: skip to pop.
+				i = pop
 				continue
 			}
+		} else {
+			// pop
+			push := ev.index
+			if events[push].typ&mask != 0 {
+				f(Cursor{c.in, push}, false)
+			}
 		}
 		i++
 	}
 }
 
+// Stack returns the stack of enclosing nodes, outermost first:
+// from the [ast.File] down to the current cursor's node.
+//
+// To amortize allocation, it appends to the provided slice, which
+// must be empty.
+//
+// Stack must not be called on the Root node.
+func (c Cursor) Stack(stack []Cursor) []Cursor {
+	if len(stack) > 0 {
+		panic("stack is non-empty")
+	}
+	if c.index < 0 {
+		panic("Cursor.Stack called on Root node")
+	}
+
+	stack = slices.AppendSeq(stack, c.Enclosing())
+	slices.Reverse(stack)
+	return stack
+}
+
 // Enclosing returns an iterator over the nodes enclosing the current
 // current node, starting with the Cursor itself.
 //
@@ -194,7 +219,7 @@ func (c Cursor) Enclosing(types ...ast.Node) iter.Seq[Cursor] {
 	mask := maskOf(types)
 
 	return func(yield func(Cursor) bool) {
-		events := c.in.events
+		events := c.events()
 		for i := c.index; i >= 0; i = events[i].parent {
 			if events[i].typ&mask != 0 && !yield(Cursor{c.in, i}) {
 				break
@@ -211,7 +236,7 @@ func (c Cursor) Parent() Cursor {
 		panic("Cursor.Parent called on Root node")
 	}
 
-	return Cursor{c.in, c.in.events[c.index].parent}
+	return Cursor{c.in, c.events()[c.index].parent}
 }
 
 // ParentEdge returns the identity of the field in the parent node
@@ -228,7 +253,7 @@ func (c Cursor) ParentEdge() (edge.Kind, int) {
 	if c.index < 0 {
 		panic("Cursor.ParentEdge called on Root node")
 	}
-	events := c.in.events
+	events := c.events()
 	pop := events[c.index].index
 	return unpackEdgeKindAndIndex(events[pop].parent)
 }
@@ -245,7 +270,7 @@ func (c Cursor) ChildAt(k edge.Kind, idx int) Cursor {
 	target := packEdgeKindAndIndex(k, idx)
 
 	// Unfortunately there's no shortcut to looping.
-	events := c.in.events
+	events := c.events()
 	i := c.index + 1
 	for {
 		pop := events[i].index
@@ -278,7 +303,7 @@ func (c Cursor) Child(n ast.Node) Cursor {
 
 	} else {
 		// optimized implementation
-		events := c.in.events
+		events := c.events()
 		for i := c.index + 1; events[i].index > i; i = events[i].index + 1 {
 			if events[i].node == n {
 				return Cursor{c.in, i}
@@ -301,7 +326,7 @@ func (c Cursor) NextSibling() (Cursor, bool) {
 		panic("Cursor.NextSibling called on Root node")
 	}
 
-	events := c.in.events
+	events := c.events()
 	i := events[c.index].index + 1 // after corresponding pop
 	if i < int32(len(events)) {
 		if events[i].index > i { // push?
@@ -324,7 +349,7 @@ func (c Cursor) PrevSibling() (Cursor, bool) {
 		panic("Cursor.PrevSibling called on Root node")
 	}
 
-	events := c.in.events
+	events := c.events()
 	i := c.index - 1
 	if i >= 0 {
 		if j := events[i].index; j < i { // pop?
@@ -337,7 +362,7 @@ func (c Cursor) PrevSibling() (Cursor, bool) {
 // FirstChild returns the first direct child of the current node,
 // or zero if it has no children.
 func (c Cursor) FirstChild() (Cursor, bool) {
-	events := c.in.events
+	events := c.events()
 	i := c.index + 1                                   // i=0 if c is root
 	if i < int32(len(events)) && events[i].index > i { // push?
 		return Cursor{c.in, i}, true
@@ -348,7 +373,7 @@ func (c Cursor) FirstChild() (Cursor, bool) {
 // LastChild returns the last direct child of the current node,
 // or zero if it has no children.
 func (c Cursor) LastChild() (Cursor, bool) {
-	events := c.in.events
+	events := c.events()
 	if c.index < 0 { // root?
 		if len(events) > 0 {
 			// return push of final event (a pop)
@@ -378,11 +403,11 @@ func (c Cursor) LastChild() (Cursor, bool) {
 // of expressions and statements. Other nodes that have "uncontained"
 // list fields include:
 //
-//   - [ast.ValueSpec] (Names, Values)
-//   - [ast.CompositeLit] (Type, Elts)
-//   - [ast.IndexListExpr] (X, Indices)
-//   - [ast.CallExpr] (Fun, Args)
-//   - [ast.AssignStmt] (Lhs, Rhs)
+// - [ast.ValueSpec] (Names, Values)
+// - [ast.CompositeLit] (Type, Elts)
+// - [ast.IndexListExpr] (X, Indices)
+// - [ast.CallExpr] (Fun, Args)
+// - [ast.AssignStmt] (Lhs, Rhs)
 //
 // So, do not assume that the previous sibling of an ast.Stmt is also
 // an ast.Stmt, or if it is, that they are executed sequentially,
@@ -407,7 +432,7 @@ func (c Cursor) Contains(c2 Cursor) bool {
 	if c.in != c2.in {
 		panic("different inspectors")
 	}
-	events := c.in.events
+	events := c.events()
 	return c.index <= c2.index && events[c2.index].index <= events[c.index].index
 }
 
@@ -428,10 +453,10 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) {
 
 	// TODO(adonovan): opt: should we assume Node.Pos is accurate
 	// and combine type-based filtering with position filtering
-	// like FindByPos?
+	// like FindPos?
 
 	mask := maskOf([]ast.Node{n})
-	events := c.in.events
+	events := c.events()
 
 	for i, limit := c.indices(); i < limit; i++ {
 		ev := events[i]
@@ -449,7 +474,7 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) {
 	return Cursor{}, false
 }
 
-// FindByPos returns the cursor for the innermost node n in the tree
+// FindPos returns the cursor for the innermost node n in the tree
 // rooted at c such that n.Pos() <= start && end <= n.End().
 // (For an *ast.File, it uses the bounds n.FileStart-n.FileEnd.)
 //
@@ -458,11 +483,11 @@ func (c Cursor) FindNode(n ast.Node) (Cursor, bool) {
 //
 // See also [astutil.PathEnclosingInterval], which
 // tolerates adjoining whitespace.
-func (c Cursor) FindByPos(start, end token.Pos) (Cursor, bool) {
+func (c Cursor) FindPos(start, end token.Pos) (Cursor, bool) {
 	if end < start {
 		panic("end < start")
 	}
-	events := c.in.events
+	events := c.events()
 
 	// This algorithm could be implemented using c.Inspect,
 	// but it is about 2.5x slower.
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go
new file mode 100644
index 00000000000000..0257d61d778a8a
--- /dev/null
+++ b/src/cmd/vendor/golang.org/x/tools/internal/astutil/cursor/hooks.go
@@ -0,0 +1,40 @@
+// Copyright 2024 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.
+
+//go:build go1.23
+
+package cursor
+
+import (
+	"go/ast"
+	_ "unsafe" // for go:linkname
+
+	"golang.org/x/tools/go/ast/inspector"
+	"golang.org/x/tools/internal/astutil/edge"
+)
+
+// This file defines backdoor access to inspector.
+
+// Copied from inspector.event; must remain in sync.
+// (Note that the linkname effects a type coercion too.)
+type event struct {
+	node   ast.Node
+	typ    uint64 // typeOf(node) on push event, or union of typ strictly between push and pop events on pop events
+	index  int32  // index of corresponding push or pop event (relative to this event's index, +ve=push, -ve=pop)
+	parent int32  // index of parent's push node (push nodes only); or edge and index, bit packed (pop nodes only)
+}
+
+//go:linkname maskOf golang.org/x/tools/go/ast/inspector.maskOf
+func maskOf(nodes []ast.Node) uint64
+
+//go:linkname events golang.org/x/tools/go/ast/inspector.events
+func events(in *inspector.Inspector) []event
+
+//go:linkname packEdgeKindAndIndex golang.org/x/tools/go/ast/inspector.packEdgeKindAndIndex
+func packEdgeKindAndIndex(edge.Kind, int) int32
+
+//go:linkname unpackEdgeKindAndIndex golang.org/x/tools/go/ast/inspector.unpackEdgeKindAndIndex
+func unpackEdgeKindAndIndex(int32) (edge.Kind, int)
+
+func (c Cursor) events() []event { return events(c.in) }
diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/edge/edge.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/edge/edge.go
similarity index 100%
rename from src/cmd/vendor/golang.org/x/tools/go/ast/edge/edge.go
rename to src/cmd/vendor/golang.org/x/tools/internal/astutil/edge/edge.go
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/astutil/util.go b/src/cmd/vendor/golang.org/x/tools/internal/astutil/util.go
deleted file mode 100644
index f06dbda3697111..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/astutil/util.go
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import (
-	"fmt"
-	"go/ast"
-	"go/token"
-	"strconv"
-	"unicode/utf8"
-)
-
-// RangeInStringLiteral calculates the positional range within a string literal
-// corresponding to the specified start and end byte offsets within the logical string.
-func RangeInStringLiteral(lit *ast.BasicLit, start, end int) (token.Pos, token.Pos, error) {
-	startPos, err := PosInStringLiteral(lit, start)
-	if err != nil {
-		return 0, 0, fmt.Errorf("start: %v", err)
-	}
-	endPos, err := PosInStringLiteral(lit, end)
-	if err != nil {
-		return 0, 0, fmt.Errorf("end: %v", err)
-	}
-	return startPos, endPos, nil
-}
-
-// PosInStringLiteral returns the position within a string literal
-// corresponding to the specified byte offset within the logical
-// string that it denotes.
-func PosInStringLiteral(lit *ast.BasicLit, offset int) (token.Pos, error) {
-	raw := lit.Value
-
-	value, err := strconv.Unquote(raw)
-	if err != nil {
-		return 0, err
-	}
-	if !(0 <= offset && offset <= len(value)) {
-		return 0, fmt.Errorf("invalid offset")
-	}
-
-	// remove quotes
-	quote := raw[0] // '"' or '`'
-	raw = raw[1 : len(raw)-1]
-
-	var (
-		i   = 0                // byte index within logical value
-		pos = lit.ValuePos + 1 // position within literal
-	)
-	for raw != "" && i < offset {
-		r, _, rest, _ := strconv.UnquoteChar(raw, quote) // can't fail
-		sz := len(raw) - len(rest)                       // length of literal char in raw bytes
-		pos += token.Pos(sz)
-		raw = raw[sz:]
-		i += utf8.RuneLen(r)
-	}
-	return pos, nil
-}
-
-// PreorderStack traverses the tree rooted at root,
-// calling f before visiting each node.
-//
-// Each call to f provides the current node and traversal stack,
-// consisting of the original value of stack appended with all nodes
-// from root to n, excluding n itself. (This design allows calls
-// to PreorderStack to be nested without double counting.)
-//
-// If f returns false, the traversal skips over that subtree. Unlike
-// [ast.Inspect], no second call to f is made after visiting node n.
-// In practice, the second call is nearly always used only to pop the
-// stack, and it is surprisingly tricky to do this correctly; see
-// https://go.dev/issue/73319.
-//
-// TODO(adonovan): replace with [ast.PreorderStack] when go1.25 is assured.
-func PreorderStack(root ast.Node, stack []ast.Node, f func(n ast.Node, stack []ast.Node) bool) {
-	before := len(stack)
-	ast.Inspect(root, func(n ast.Node) bool {
-		if n != nil {
-			if !f(n, stack) {
-				// Do not push, as there will be no corresponding pop.
-				return false
-			}
-			stack = append(stack, n) // push
-		} else {
-			stack = stack[:len(stack)-1] // pop
-		}
-		return true
-	})
-	if len(stack) != before {
-		panic("push/pop mismatch")
-	}
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go b/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go
index 7b1d112a7cd51b..5a7da4871a85b1 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go
@@ -320,7 +320,7 @@ func AppendMarker(dst []byte, id uint64) []byte {
 	const prefix = "[bisect-match 0x"
 	var buf [len(prefix) + 16 + 1]byte
 	copy(buf[:], prefix)
-	for i := range 16 {
+	for i := 0; i < 16; i++ {
 		buf[len(prefix)+i] = "0123456789abcdef"[id>>60]
 		id <<= 4
 	}
@@ -504,7 +504,7 @@ func fnvString(h uint64, x string) uint64 {
 }
 
 func fnvUint64(h uint64, x uint64) uint64 {
-	for range 8 {
+	for i := 0; i < 8; i++ {
 		h ^= uint64(x & 0xFF)
 		x >>= 8
 		h *= prime64
@@ -513,7 +513,7 @@ func fnvUint64(h uint64, x uint64) uint64 {
 }
 
 func fnvUint32(h uint64, x uint32) uint64 {
-	for range 4 {
+	for i := 0; i < 4; i++ {
 		h ^= uint64(x & 0xFF)
 		x >>= 8
 		h *= prime64
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go b/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go
index cc9383e8004c02..ed5ec5fa131de1 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go
@@ -52,7 +52,7 @@ func importMap(imports []*types.Package) map[string]*types.Package {
 			// nop
 		case typesinternal.NamedOrAlias: // *types.{Named,Alias}
 			// Add the type arguments if this is an instance.
-			if targs := T.TypeArgs(); targs.Len() > 0 {
+			if targs := typesinternal.TypeArgs(T); targs.Len() > 0 {
 				for i := 0; i < targs.Len(); i++ {
 					addType(targs.At(i))
 				}
@@ -69,7 +69,7 @@ func importMap(imports []*types.Package) map[string]*types.Package {
 
 				// common aspects
 				addObj(T.Obj())
-				if tparams := T.TypeParams(); tparams.Len() > 0 {
+				if tparams := typesinternal.TypeParams(T); tparams.Len() > 0 {
 					for i := 0; i < tparams.Len(); i++ {
 						addType(tparams.At(i))
 					}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/deps.go b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/deps.go
index 77cf8d2181ae46..7cca431cd65527 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/deps.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/deps.go
@@ -12,348 +12,348 @@ type pkginfo struct {
 }
 
 var deps = [...]pkginfo{
-	{"archive/tar", "\x03j\x03E5\x01\v\x01#\x01\x01\x02\x05\n\x02\x01\x02\x02\v"},
-	{"archive/zip", "\x02\x04`\a\x16\x0205\x01+\x05\x01\x11\x03\x02\r\x04"},
-	{"bufio", "\x03j}F\x13"},
-	{"bytes", "m+R\x03\fH\x02\x02"},
+	{"archive/tar", "\x03k\x03E5\x01\v\x01#\x01\x01\x02\x05\t\x02\x01\x02\x02\v"},
+	{"archive/zip", "\x02\x04a\a\x16\x0205\x01+\x05\x01\x10\x03\x02\r\x04"},
+	{"bufio", "\x03k}E\x13"},
+	{"bytes", "n+R\x03\fG\x02\x02"},
 	{"cmp", ""},
-	{"compress/bzip2", "\x02\x02\xe6\x01C"},
-	{"compress/flate", "\x02k\x03z\r\x025\x01\x03"},
-	{"compress/gzip", "\x02\x04`\a\x03\x15eU"},
-	{"compress/lzw", "\x02k\x03z"},
-	{"compress/zlib", "\x02\x04`\a\x03\x13\x01f"},
+	{"compress/bzip2", "\x02\x02\xe7\x01B"},
+	{"compress/flate", "\x02l\x03z\r\x024\x01\x03"},
+	{"compress/gzip", "\x02\x04a\a\x03\x15eT"},
+	{"compress/lzw", "\x02l\x03z"},
+	{"compress/zlib", "\x02\x04a\a\x03\x13\x01f"},
 	{"container/heap", "\xae\x02"},
 	{"container/list", ""},
 	{"container/ring", ""},
-	{"context", "m\\i\x01\f"},
-	{"crypto", "\x83\x01gE"},
+	{"context", "n\\h\x01\f"},
+	{"crypto", "\x84\x01gD"},
 	{"crypto/aes", "\x10\n\a\x8e\x02"},
-	{"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1c,Q"},
-	{"crypto/des", "\x10\x13\x1d-,\x96\x01\x03"},
-	{"crypto/dsa", "@\x04)}\x0e"},
-	{"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1c}"},
-	{"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1c}\x0e\x04L\x01"},
-	{"crypto/ed25519", "\x0e\x1c\x16\n\a\x1c}E"},
-	{"crypto/elliptic", "0=}\x0e:"},
-	{"crypto/fips140", " \x05\x90\x01"},
-	{"crypto/hkdf", "-\x12\x01-\x16"},
-	{"crypto/hmac", "\x1a\x14\x11\x01\x112"},
-	{"crypto/internal/boring", "\x0e\x02\rf"},
-	{"crypto/internal/boring/bbig", "\x1a\xde\x01M"},
+	{"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1d,Q"},
+	{"crypto/des", "\x10\x13\x1d.,\x95\x01\x03"},
+	{"crypto/dsa", "@\x04*}\x0e"},
+	{"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1d}"},
+	{"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1d}\x0e\x04K\x01"},
+	{"crypto/ed25519", "\x0e\x1c\x16\n\a\x1d}D"},
+	{"crypto/elliptic", "0>}\x0e9"},
+	{"crypto/fips140", " \x05\x91\x01"},
+	{"crypto/hkdf", "-\x12\x01.\x16"},
+	{"crypto/hmac", "\x1a\x14\x11\x01\x113"},
+	{"crypto/internal/boring", "\x0e\x02\rg"},
+	{"crypto/internal/boring/bbig", "\x1a\xdf\x01L"},
 	{"crypto/internal/boring/bcache", "\xb3\x02\x12"},
 	{"crypto/internal/boring/sig", ""},
-	{"crypto/internal/cryptotest", "\x03\r\n)\x0e\x19\x06\x13\x12#\a\t\x11\x11\x11\x1b\x01\f\r\x05\n"},
+	{"crypto/internal/cryptotest", "\x03\r\n)\x0e\x1a\x06\x13\x12#\a\t\x11\x11\x11\x1b\x01\f\f\x05\n"},
 	{"crypto/internal/entropy", "E"},
-	{"crypto/internal/fips140", ">/}9\r\x15"},
-	{"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05*\x8c\x016"},
-	{"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06*\x8a\x01"},
+	{"crypto/internal/fips140", ">0}9\f\x15"},
+	{"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05+\x8c\x015"},
+	{"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06+\x8a\x01"},
 	{"crypto/internal/fips140/alias", "\xc5\x02"},
-	{"crypto/internal/fips140/bigmod", "%\x17\x01\x06*\x8c\x01"},
-	{"crypto/internal/fips140/check", " \x0e\x06\b\x02\xac\x01["},
-	{"crypto/internal/fips140/check/checktest", "%\xfe\x01\""},
-	{"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01(}\x0f9"},
-	{"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f1}\x0f9"},
-	{"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x067}H"},
-	{"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v7\xc2\x01\x03"},
-	{"crypto/internal/fips140/edwards25519", "%\a\f\x041\x8c\x019"},
-	{"crypto/internal/fips140/edwards25519/field", "%\x13\x041\x8c\x01"},
-	{"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x069"},
-	{"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x017"},
-	{"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x041"},
-	{"crypto/internal/fips140/nistec", "%\f\a\x041\x8c\x01*\x0f\x13"},
-	{"crypto/internal/fips140/nistec/fiat", "%\x135\x8c\x01"},
-	{"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x069"},
-	{"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x025}H"},
-	{"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
-	{"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x010\x8c\x01L"},
-	{"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/bigmod", "%\x17\x01\x06+\x8c\x01"},
+	{"crypto/internal/fips140/check", " \x0e\x06\b\x02\xad\x01Z"},
+	{"crypto/internal/fips140/check/checktest", "%\xff\x01!"},
+	{"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01)}\x0f8"},
+	{"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f2}\x0f8"},
+	{"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x068}G"},
+	{"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v8\xc1\x01\x03"},
+	{"crypto/internal/fips140/edwards25519", "%\a\f\x042\x8c\x018"},
+	{"crypto/internal/fips140/edwards25519/field", "%\x13\x042\x8c\x01"},
+	{"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x06:"},
+	{"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x018"},
+	{"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x042"},
+	{"crypto/internal/fips140/nistec", "%\f\a\x042\x8c\x01*\x0e\x13"},
+	{"crypto/internal/fips140/nistec/fiat", "%\x136\x8c\x01"},
+	{"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x06:"},
+	{"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x026}G"},
+	{"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06+\x8c\x01"},
+	{"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x011\x8c\x01K"},
+	{"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06+\x8c\x01"},
 	{"crypto/internal/fips140/ssh", " \x05"},
-	{"crypto/internal/fips140/subtle", "#"},
-	{"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x027"},
-	{"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\b1"},
+	{"crypto/internal/fips140/subtle", "#\x19\xbe\x01"},
+	{"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x028"},
+	{"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\b2"},
 	{"crypto/internal/fips140deps", ""},
-	{"crypto/internal/fips140deps/byteorder", "\x99\x01"},
-	{"crypto/internal/fips140deps/cpu", "\xad\x01\a"},
-	{"crypto/internal/fips140deps/godebug", "\xb5\x01"},
-	{"crypto/internal/fips140hash", "5\x1a4\xc2\x01"},
-	{"crypto/internal/fips140only", "'\r\x01\x01M25"},
+	{"crypto/internal/fips140deps/byteorder", "\x9a\x01"},
+	{"crypto/internal/fips140deps/cpu", "\xae\x01\a"},
+	{"crypto/internal/fips140deps/godebug", "\xb6\x01"},
+	{"crypto/internal/fips140hash", "5\x1a5\xc1\x01"},
+	{"crypto/internal/fips140only", "'\r\x01\x01N25"},
 	{"crypto/internal/fips140test", ""},
-	{"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d#,`N"},
+	{"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d$,`M"},
 	{"crypto/internal/impl", "\xb0\x02"},
-	{"crypto/internal/randutil", "\xea\x01\x12"},
-	{"crypto/internal/sysrand", "mi!\x1f\r\x0f\x01\x01\v\x06"},
-	{"crypto/internal/sysrand/internal/seccomp", "m"},
-	{"crypto/md5", "\x0e2-\x16\x16`"},
+	{"crypto/internal/randutil", "\xeb\x01\x12"},
+	{"crypto/internal/sysrand", "\xd7\x01@\x1b\x01\f\x06"},
+	{"crypto/internal/sysrand/internal/seccomp", "n"},
+	{"crypto/md5", "\x0e2.\x16\x16`"},
 	{"crypto/mlkem", "/"},
-	{"crypto/pbkdf2", "2\r\x01-\x16"},
-	{"crypto/rand", "\x1a\x06\a\x19\x04\x01(}\x0eM"},
-	{"crypto/rc4", "#\x1d-\xc2\x01"},
-	{"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1c\x03\x1325\r\x01"},
-	{"crypto/sha1", "\x0e\f&-\x16\x16\x14L"},
-	{"crypto/sha256", "\x0e\f\x1aO"},
-	{"crypto/sha3", "\x0e'N\xc2\x01"},
-	{"crypto/sha512", "\x0e\f\x1cM"},
-	{"crypto/subtle", "8\x96\x01U"},
-	{"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x14\b5\x16\x16\r\n\x01\x01\x01\x02\x01\f\x06\x02\x01"},
+	{"crypto/pbkdf2", "2\r\x01.\x16"},
+	{"crypto/rand", "\x1a\x06\a\x19\x04\x01)}\x0eL"},
+	{"crypto/rc4", "#\x1d.\xc1\x01"},
+	{"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1d\x03\x1325\r\x01"},
+	{"crypto/sha1", "\x0e\f&.\x16\x16\x14L"},
+	{"crypto/sha256", "\x0e\f\x1aP"},
+	{"crypto/sha3", "\x0e'O\xc1\x01"},
+	{"crypto/sha512", "\x0e\f\x1cN"},
+	{"crypto/subtle", "8\x98\x01T"},
+	{"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x18\x02\x03\x13\x16\x14\b5\x16\x16\r\t\x01\x01\x01\x02\x01\f\x06\x02\x01"},
 	{"crypto/tls/internal/fips140tls", " \x93\x02"},
-	{"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x032\x01\x02\t\x01\x01\x01\a\x10\x05\x01\x06\x02\x05\f\x01\x02\r\x02\x01\x01\x02\x03\x01"},
-	{"crypto/x509/pkix", "c\x06\a\x88\x01G"},
-	{"database/sql", "\x03\nJ\x16\x03z\f\x06\"\x05\n\x02\x03\x01\f\x02\x02\x02"},
-	{"database/sql/driver", "\r`\x03\xae\x01\x11\x10"},
-	{"debug/buildinfo", "\x03W\x02\x01\x01\b\a\x03`\x18\x02\x01+\x0f "},
-	{"debug/dwarf", "\x03c\a\x03z1\x13\x01\x01"},
-	{"debug/elf", "\x03\x06P\r\a\x03`\x19\x01,\x19\x01\x15"},
-	{"debug/gosym", "\x03c\n\xbe\x01\x01\x01\x02"},
-	{"debug/macho", "\x03\x06P\r\n`\x1a,\x19\x01"},
-	{"debug/pe", "\x03\x06P\r\a\x03`\x1a,\x19\x01\x15"},
-	{"debug/plan9obj", "f\a\x03`\x1a,"},
-	{"embed", "m+:\x18\x01T"},
+	{"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x01\x0e\x06\x02\x02\x03E5\x03\t\x01\x01\x01\a\x10\x05\t\x05\v\x01\x02\r\x02\x01\x01\x02\x03\x01"},
+	{"crypto/x509/internal/macos", "\x03k'\x8f\x01\v\x10\x06"},
+	{"crypto/x509/pkix", "d\x06\a\x88\x01F"},
+	{"database/sql", "\x03\nK\x16\x03z\f\x06\"\x05\t\x02\x03\x01\f\x02\x02\x02"},
+	{"database/sql/driver", "\ra\x03\xae\x01\x10\x10"},
+	{"debug/buildinfo", "\x03X\x02\x01\x01\b\a\x03`\x18\x02\x01+\x10\x1e"},
+	{"debug/dwarf", "\x03d\a\x03z1\x12\x01\x01"},
+	{"debug/elf", "\x03\x06Q\r\a\x03`\x19\x01,\x18\x01\x15"},
+	{"debug/gosym", "\x03d\n\xbd\x01\x01\x01\x02"},
+	{"debug/macho", "\x03\x06Q\r\n`\x1a,\x18\x01"},
+	{"debug/pe", "\x03\x06Q\r\a\x03`\x1a,\x18\x01\x15"},
+	{"debug/plan9obj", "g\a\x03`\x1a,"},
+	{"embed", "n+:\x18\x01S"},
 	{"embed/internal/embedtest", ""},
 	{"encoding", ""},
-	{"encoding/ascii85", "\xea\x01E"},
-	{"encoding/asn1", "\x03j\x03\x87\x01\x01&\x0f\x02\x01\x0f\x03\x01"},
-	{"encoding/base32", "\xea\x01C\x02"},
-	{"encoding/base64", "\x99\x01QC\x02"},
-	{"encoding/binary", "m}\r'\x0f\x05"},
-	{"encoding/csv", "\x02\x01j\x03zF\x11\x02"},
-	{"encoding/gob", "\x02_\x05\a\x03`\x1a\f\x01\x02\x1d\b\x14\x01\x0e\x02"},
-	{"encoding/hex", "m\x03zC\x03"},
-	{"encoding/json", "\x03\x01]\x04\b\x03z\r'\x0f\x02\x01\x02\x0f\x01\x01\x02"},
-	{"encoding/pem", "\x03b\b}C\x03"},
-	{"encoding/xml", "\x02\x01^\f\x03z4\x05\f\x01\x02\x0f\x02"},
-	{"errors", "\xc9\x01|"},
-	{"expvar", "jK9\t\n\x15\r\n\x02\x03\x01\x10"},
-	{"flag", "a\f\x03z,\b\x05\n\x02\x01\x0f"},
-	{"fmt", "mE8\r\x1f\b\x0f\x02\x03\x11"},
-	{"go/ast", "\x03\x01l\x0f\x01j\x03)\b\x0f\x02\x01"},
+	{"encoding/ascii85", "\xeb\x01D"},
+	{"encoding/asn1", "\x03k\x03\x87\x01\x01&\x0e\x02\x01\x0f\x03\x01"},
+	{"encoding/base32", "\xeb\x01B\x02"},
+	{"encoding/base64", "\x9a\x01QB\x02"},
+	{"encoding/binary", "n}\r'\x0e\x05"},
+	{"encoding/csv", "\x02\x01k\x03zE\x11\x02"},
+	{"encoding/gob", "\x02`\x05\a\x03`\x1a\f\x01\x02\x1d\b\x13\x01\x0e\x02"},
+	{"encoding/hex", "n\x03zB\x03"},
+	{"encoding/json", "\x03\x01^\x04\b\x03z\r'\x0e\x02\x01\x02\x0f\x01\x01\x02"},
+	{"encoding/pem", "\x03c\b}B\x03"},
+	{"encoding/xml", "\x02\x01_\f\x03z4\x05\v\x01\x02\x0f\x02"},
+	{"errors", "\xca\x01{"},
+	{"expvar", "kK9\t\n\x15\r\t\x02\x03\x01\x10"},
+	{"flag", "b\f\x03z,\b\x05\t\x02\x01\x0f"},
+	{"fmt", "nE8\r\x1f\b\x0e\x02\x03\x11"},
+	{"go/ast", "\x03\x01m\x0f\x01j\x03)\b\x0e\x02\x01"},
 	{"go/ast/internal/tests", ""},
-	{"go/build", "\x02\x01j\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x12\x01+\x01\x04\x01\a\n\x02\x01\x11\x02\x02"},
-	{"go/build/constraint", "m\xc2\x01\x01\x11\x02"},
-	{"go/constant", "p\x10w\x01\x016\x01\x02\x11"},
-	{"go/doc", "\x04l\x01\x06\t=-1\x12\x02\x01\x11\x02"},
-	{"go/doc/comment", "\x03m\xbd\x01\x01\x01\x01\x11\x02"},
-	{"go/format", "\x03m\x01\f\x01\x02jF"},
-	{"go/importer", "s\a\x01\x01\x04\x01i9"},
-	{"go/internal/gccgoimporter", "\x02\x01W\x13\x03\x05\v\x01g\x02,\x01\x05\x13\x01\v\b"},
-	{"go/internal/gcimporter", "\x02n\x10\x01/\x05\x0e',\x17\x03\x02"},
-	{"go/internal/srcimporter", "p\x01\x02\n\x03\x01i,\x01\x05\x14\x02\x13"},
-	{"go/parser", "\x03j\x03\x01\x03\v\x01j\x01+\x06\x14"},
-	{"go/printer", "p\x01\x03\x03\tj\r\x1f\x17\x02\x01\x02\n\x05\x02"},
-	{"go/scanner", "\x03m\x10j2\x12\x01\x12\x02"},
-	{"go/token", "\x04l\xbd\x01\x02\x03\x01\x0e\x02"},
-	{"go/types", "\x03\x01\x06c\x03\x01\x04\b\x03\x02\x15\x1e\x06+\x04\x03\n%\a\n\x01\x01\x01\x02\x01\x0e\x02\x02"},
-	{"go/version", "\xba\x01v"},
-	{"hash", "\xea\x01"},
-	{"hash/adler32", "m\x16\x16"},
-	{"hash/crc32", "m\x16\x16\x14\x85\x01\x01\x12"},
-	{"hash/crc64", "m\x16\x16\x99\x01"},
-	{"hash/fnv", "m\x16\x16`"},
-	{"hash/maphash", "\x94\x01\x05\x1b\x03@N"},
+	{"go/build", "\x02\x01k\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x12\x01+\x01\x04\x01\a\t\x02\x01\x11\x02\x02"},
+	{"go/build/constraint", "n\xc1\x01\x01\x11\x02"},
+	{"go/constant", "q\x10w\x01\x015\x01\x02\x11"},
+	{"go/doc", "\x04m\x01\x06\t=-1\x11\x02\x01\x11\x02"},
+	{"go/doc/comment", "\x03n\xbc\x01\x01\x01\x01\x11\x02"},
+	{"go/format", "\x03n\x01\f\x01\x02jE"},
+	{"go/importer", "t\a\x01\x01\x04\x01i9"},
+	{"go/internal/gccgoimporter", "\x02\x01X\x13\x03\x05\v\x01g\x02,\x01\x05\x12\x01\v\b"},
+	{"go/internal/gcimporter", "\x02o\x10\x01/\x05\x0e',\x16\x03\x02"},
+	{"go/internal/srcimporter", "q\x01\x02\n\x03\x01i,\x01\x05\x13\x02\x13"},
+	{"go/parser", "\x03k\x03\x01\x03\v\x01j\x01+\x06\x13"},
+	{"go/printer", "q\x01\x03\x03\tj\r\x1f\x16\x02\x01\x02\n\x05\x02"},
+	{"go/scanner", "\x03n\x10j2\x11\x01\x12\x02"},
+	{"go/token", "\x04m\xbc\x01\x02\x03\x01\x0e\x02"},
+	{"go/types", "\x03\x01\x06d\x03\x01\x04\b\x03\x02\x15\x1e\x06+\x04\x03\n%\a\t\x01\x01\x01\x02\x01\x0e\x02\x02"},
+	{"go/version", "\xbb\x01u"},
+	{"hash", "\xeb\x01"},
+	{"hash/adler32", "n\x16\x16"},
+	{"hash/crc32", "n\x16\x16\x14\x84\x01\x01"},
+	{"hash/crc64", "n\x16\x16\x98\x01"},
+	{"hash/fnv", "n\x16\x16`"},
+	{"hash/maphash", "\x95\x01\x05\x1b\x03@M"},
 	{"html", "\xb0\x02\x02\x11"},
-	{"html/template", "\x03g\x06\x19,5\x01\v \x05\x01\x02\x03\x0e\x01\x02\v\x01\x03\x02"},
-	{"image", "\x02k\x1f^\x0f6\x03\x01"},
+	{"html/template", "\x03h\x06\x19,5\x01\v \x05\x01\x02\x03\r\x01\x02\v\x01\x03\x02"},
+	{"image", "\x02l\x1f^\x0f5\x03\x01"},
 	{"image/color", ""},
-	{"image/color/palette", "\x8c\x01"},
-	{"image/draw", "\x8b\x01\x01\x04"},
-	{"image/gif", "\x02\x01\x05e\x03\x1b\x01\x01\x01\vQ"},
-	{"image/internal/imageutil", "\x8b\x01"},
-	{"image/jpeg", "\x02k\x1e\x01\x04Z"},
-	{"image/png", "\x02\a]\n\x13\x02\x06\x01^E"},
-	{"index/suffixarray", "\x03c\a}\r*\f\x01"},
-	{"internal/abi", "\xb4\x01\x91\x01"},
+	{"image/color/palette", "\x8d\x01"},
+	{"image/draw", "\x8c\x01\x01\x04"},
+	{"image/gif", "\x02\x01\x05f\x03\x1b\x01\x01\x01\vQ"},
+	{"image/internal/imageutil", "\x8c\x01"},
+	{"image/jpeg", "\x02l\x1e\x01\x04Z"},
+	{"image/png", "\x02\a^\n\x13\x02\x06\x01^D"},
+	{"index/suffixarray", "\x03d\a}\r*\v\x01"},
+	{"internal/abi", "\xb5\x01\x90\x01"},
 	{"internal/asan", "\xc5\x02"},
-	{"internal/bisect", "\xa3\x02\x0f\x01"},
-	{"internal/buildcfg", "pG_\x06\x02\x05\f\x01"},
-	{"internal/bytealg", "\xad\x01\x98\x01"},
+	{"internal/bisect", "\xa4\x02\x0e\x01"},
+	{"internal/buildcfg", "qG_\x06\x02\x05\v\x01"},
+	{"internal/bytealg", "\xae\x01\x97\x01"},
 	{"internal/byteorder", ""},
 	{"internal/cfg", ""},
-	{"internal/chacha8rand", "\x99\x01\x1b\x91\x01"},
+	{"internal/chacha8rand", "\x9a\x01\x1b\x90\x01"},
 	{"internal/copyright", ""},
 	{"internal/coverage", ""},
 	{"internal/coverage/calloc", ""},
-	{"internal/coverage/cfile", "j\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x01\x1f,\x06\a\f\x01\x03\f\x06"},
-	{"internal/coverage/cformat", "\x04l-\x04I\f7\x01\x02\f"},
-	{"internal/coverage/cmerge", "p-Z"},
-	{"internal/coverage/decodecounter", "f\n-\v\x02@,\x19\x16"},
-	{"internal/coverage/decodemeta", "\x02d\n\x17\x16\v\x02@,"},
-	{"internal/coverage/encodecounter", "\x02d\n-\f\x01\x02>\f \x17"},
-	{"internal/coverage/encodemeta", "\x02\x01c\n\x13\x04\x16\r\x02>,/"},
-	{"internal/coverage/pods", "\x04l-y\x06\x05\f\x02\x01"},
+	{"internal/coverage/cfile", "k\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01$\x01\x1e,\x06\a\v\x01\x03\f\x06"},
+	{"internal/coverage/cformat", "\x04m-\x04I\f6\x01\x02\f"},
+	{"internal/coverage/cmerge", "q-Z"},
+	{"internal/coverage/decodecounter", "g\n-\v\x02@,\x18\x16"},
+	{"internal/coverage/decodemeta", "\x02e\n\x17\x16\v\x02@,"},
+	{"internal/coverage/encodecounter", "\x02e\n-\f\x01\x02>\f \x16"},
+	{"internal/coverage/encodemeta", "\x02\x01d\n\x13\x04\x16\r\x02>,."},
+	{"internal/coverage/pods", "\x04m-y\x06\x05\v\x02\x01"},
 	{"internal/coverage/rtcov", "\xc5\x02"},
-	{"internal/coverage/slicereader", "f\nz["},
-	{"internal/coverage/slicewriter", "pz"},
-	{"internal/coverage/stringtab", "p8\x04>"},
+	{"internal/coverage/slicereader", "g\nzZ"},
+	{"internal/coverage/slicewriter", "qz"},
+	{"internal/coverage/stringtab", "q8\x04>"},
 	{"internal/coverage/test", ""},
 	{"internal/coverage/uleb128", ""},
 	{"internal/cpu", "\xc5\x02"},
-	{"internal/dag", "\x04l\xbd\x01\x03"},
-	{"internal/diff", "\x03m\xbe\x01\x02"},
-	{"internal/exportdata", "\x02\x01j\x03\x03]\x1a,\x01\x05\x13\x01\x02"},
-	{"internal/filepathlite", "m+:\x19B"},
-	{"internal/fmtsort", "\x04\x9a\x02\x0f"},
-	{"internal/fuzz", "\x03\nA\x18\x04\x03\x03\x01\f\x0355\r\x02\x1d\x01\x05\x02\x05\f\x01\x02\x01\x01\v\x04\x02"},
+	{"internal/dag", "\x04m\xbc\x01\x03"},
+	{"internal/diff", "\x03n\xbd\x01\x02"},
+	{"internal/exportdata", "\x02\x01k\x03\x03]\x1a,\x01\x05\x12\x01\x02"},
+	{"internal/filepathlite", "n+:\x19A"},
+	{"internal/fmtsort", "\x04\x9b\x02\x0e"},
+	{"internal/fuzz", "\x03\nA\x19\x04\x03\x03\x01\f\x0355\r\x02\x1d\x01\x05\x02\x05\v\x01\x02\x01\x01\v\x04\x02"},
 	{"internal/goarch", ""},
-	{"internal/godebug", "\x96\x01 |\x01\x12"},
+	{"internal/godebug", "\x97\x01 {\x01\x12"},
 	{"internal/godebugs", ""},
 	{"internal/goexperiment", ""},
 	{"internal/goos", ""},
-	{"internal/goroot", "\x96\x02\x01\x05\x14\x02"},
+	{"internal/goroot", "\x97\x02\x01\x05\x13\x02"},
 	{"internal/gover", "\x04"},
 	{"internal/goversion", ""},
 	{"internal/itoa", ""},
-	{"internal/lazyregexp", "\x96\x02\v\x0f\x02"},
-	{"internal/lazytemplate", "\xea\x01,\x1a\x02\v"},
+	{"internal/lazyregexp", "\x97\x02\v\x0e\x02"},
+	{"internal/lazytemplate", "\xeb\x01,\x19\x02\v"},
 	{"internal/msan", "\xc5\x02"},
 	{"internal/nettrace", ""},
-	{"internal/obscuretestdata", "e\x85\x01,"},
-	{"internal/oserror", "m"},
-	{"internal/pkgbits", "\x03K\x18\a\x03\x05\vj\x0e\x1e\r\f\x01"},
+	{"internal/obscuretestdata", "f\x85\x01,"},
+	{"internal/oserror", "n"},
+	{"internal/pkgbits", "\x03K\x19\a\x03\x05\vj\x0e\x1e\r\v\x01"},
 	{"internal/platform", ""},
-	{"internal/poll", "mO\x1a\x149\x0f\x01\x01\v\x06"},
-	{"internal/profile", "\x03\x04f\x03z7\r\x01\x01\x0f"},
+	{"internal/poll", "nO\x1a\x149\x0e\x01\x01\v\x06"},
+	{"internal/profile", "\x03\x04g\x03z7\f\x01\x01\x0f"},
 	{"internal/profilerecord", ""},
-	{"internal/race", "\x94\x01\xb1\x01"},
-	{"internal/reflectlite", "\x94\x01 3<\""},
-	{"internal/runtime/atomic", "\xc5\x02"},
-	{"internal/runtime/exithook", "\xca\x01{"},
-	{"internal/runtime/maps", "\x94\x01\x01\x1f\v\t\x05\x01w"},
-	{"internal/runtime/math", "\xb4\x01"},
-	{"internal/runtime/sys", "\xb4\x01\x04"},
-	{"internal/runtime/syscall", "\xc5\x02"},
-	{"internal/saferio", "\xea\x01["},
+	{"internal/race", "\x95\x01\xb0\x01"},
+	{"internal/reflectlite", "\x95\x01 3\x01P\x0f\x13\x12"},
+	{"unique", "\x95\x01>\x01P\x0e\x13\x12"},
 	{"unsafe", ""},
-	{"vendor/golang.org/x/crypto/chacha20", "\x10V\a\x8c\x01*'"},
-	{"vendor/golang.org/x/crypto/chacha20poly1305", "\x10V\a\xd9\x01\x04\x01\a"},
-	{"vendor/golang.org/x/crypto/cryptobyte", "c\n\x03\x88\x01&!\n"},
+	{"vendor/golang.org/x/crypto/chacha20", "\x10W\a\x8c\x01*&"},
+	{"vendor/golang.org/x/crypto/chacha20poly1305", "\x10W\a\xd8\x01\x04\x01"},
+	{"vendor/golang.org/x/crypto/cryptobyte", "d\n\x03\x88\x01& \n"},
 	{"vendor/golang.org/x/crypto/cryptobyte/asn1", ""},
 	{"vendor/golang.org/x/crypto/internal/alias", "\xc5\x02"},
-	{"vendor/golang.org/x/crypto/internal/poly1305", "Q\x15\x93\x01"},
-	{"vendor/golang.org/x/net/dns/dnsmessage", "m"},
-	{"vendor/golang.org/x/net/http/httpguts", "\x80\x02\x14\x1c\x13\r"},
-	{"vendor/golang.org/x/net/http/httpproxy", "m\x03\x90\x01\x15\x01\x1a\x13\r"},
-	{"vendor/golang.org/x/net/http2/hpack", "\x03j\x03zH"},
-	{"vendor/golang.org/x/net/idna", "p\x87\x019\x13\x10\x02\x01"},
-	{"vendor/golang.org/x/net/nettest", "\x03c\a\x03z\x11\x05\x16\x01\f\f\x01\x02\x02\x01\n"},
-	{"vendor/golang.org/x/sys/cpu", "\x96\x02\r\f\x01\x15"},
-	{"vendor/golang.org/x/text/secure/bidirule", "m\xd6\x01\x11\x01"},
-	{"vendor/golang.org/x/text/transform", "\x03j}Y"},
-	{"vendor/golang.org/x/text/unicode/bidi", "\x03\be~@\x15"},
-	{"vendor/golang.org/x/text/unicode/norm", "f\nzH\x11\x11"},
-	{"weak", "\x94\x01\x8f\x01\""},
+	{"vendor/golang.org/x/crypto/internal/poly1305", "Q\x16\x93\x01"},
+	{"vendor/golang.org/x/net/dns/dnsmessage", "n"},
+	{"vendor/golang.org/x/net/http/httpguts", "\x81\x02\x14\x1b\x13\r"},
+	{"vendor/golang.org/x/net/http/httpproxy", "n\x03\x90\x01\x15\x01\x19\x13\r"},
+	{"vendor/golang.org/x/net/http2/hpack", "\x03k\x03zG"},
+	{"vendor/golang.org/x/net/idna", "q\x87\x018\x13\x10\x02\x01"},
+	{"vendor/golang.org/x/net/nettest", "\x03d\a\x03z\x11\x05\x16\x01\f\v\x01\x02\x02\x01\n"},
+	{"vendor/golang.org/x/sys/cpu", "\x97\x02\r\v\x01\x15"},
+	{"vendor/golang.org/x/text/secure/bidirule", "n\xd5\x01\x11\x01"},
+	{"vendor/golang.org/x/text/transform", "\x03k}X"},
+	{"vendor/golang.org/x/text/unicode/bidi", "\x03\bf~?\x15"},
+	{"vendor/golang.org/x/text/unicode/norm", "g\nzG\x11\x11"},
+	{"weak", "\x95\x01\x8f\x01!"},
 }
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/manifest.go
index 64f0326b644d99..00776a31b60916 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/manifest.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/manifest.go
@@ -8,17669 +8,17647 @@ package stdlib
 
 var PackageSymbols = map[string][]Symbol{
 	"archive/tar": {
-		{"(*Header).FileInfo", Method, 1, ""},
-		{"(*Reader).Next", Method, 0, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Writer).AddFS", Method, 22, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"(*Writer).WriteHeader", Method, 0, ""},
-		{"(Format).String", Method, 10, ""},
-		{"ErrFieldTooLong", Var, 0, ""},
-		{"ErrHeader", Var, 0, ""},
-		{"ErrInsecurePath", Var, 20, ""},
-		{"ErrWriteAfterClose", Var, 0, ""},
-		{"ErrWriteTooLong", Var, 0, ""},
-		{"FileInfoHeader", Func, 1, "func(fi fs.FileInfo, link string) (*Header, error)"},
-		{"FileInfoNames", Type, 23, ""},
-		{"Format", Type, 10, ""},
-		{"FormatGNU", Const, 10, ""},
-		{"FormatPAX", Const, 10, ""},
-		{"FormatUSTAR", Const, 10, ""},
-		{"FormatUnknown", Const, 10, ""},
-		{"Header", Type, 0, ""},
-		{"Header.AccessTime", Field, 0, ""},
-		{"Header.ChangeTime", Field, 0, ""},
-		{"Header.Devmajor", Field, 0, ""},
-		{"Header.Devminor", Field, 0, ""},
-		{"Header.Format", Field, 10, ""},
-		{"Header.Gid", Field, 0, ""},
-		{"Header.Gname", Field, 0, ""},
-		{"Header.Linkname", Field, 0, ""},
-		{"Header.ModTime", Field, 0, ""},
-		{"Header.Mode", Field, 0, ""},
-		{"Header.Name", Field, 0, ""},
-		{"Header.PAXRecords", Field, 10, ""},
-		{"Header.Size", Field, 0, ""},
-		{"Header.Typeflag", Field, 0, ""},
-		{"Header.Uid", Field, 0, ""},
-		{"Header.Uname", Field, 0, ""},
-		{"Header.Xattrs", Field, 3, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"Reader", Type, 0, ""},
-		{"TypeBlock", Const, 0, ""},
-		{"TypeChar", Const, 0, ""},
-		{"TypeCont", Const, 0, ""},
-		{"TypeDir", Const, 0, ""},
-		{"TypeFifo", Const, 0, ""},
-		{"TypeGNULongLink", Const, 1, ""},
-		{"TypeGNULongName", Const, 1, ""},
-		{"TypeGNUSparse", Const, 3, ""},
-		{"TypeLink", Const, 0, ""},
-		{"TypeReg", Const, 0, ""},
-		{"TypeRegA", Const, 0, ""},
-		{"TypeSymlink", Const, 0, ""},
-		{"TypeXGlobalHeader", Const, 0, ""},
-		{"TypeXHeader", Const, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*Header).FileInfo", Method, 1},
+		{"(*Reader).Next", Method, 0},
+		{"(*Reader).Read", Method, 0},
+		{"(*Writer).AddFS", Method, 22},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).Write", Method, 0},
+		{"(*Writer).WriteHeader", Method, 0},
+		{"(Format).String", Method, 10},
+		{"ErrFieldTooLong", Var, 0},
+		{"ErrHeader", Var, 0},
+		{"ErrInsecurePath", Var, 20},
+		{"ErrWriteAfterClose", Var, 0},
+		{"ErrWriteTooLong", Var, 0},
+		{"FileInfoHeader", Func, 1},
+		{"FileInfoNames", Type, 23},
+		{"Format", Type, 10},
+		{"FormatGNU", Const, 10},
+		{"FormatPAX", Const, 10},
+		{"FormatUSTAR", Const, 10},
+		{"FormatUnknown", Const, 10},
+		{"Header", Type, 0},
+		{"Header.AccessTime", Field, 0},
+		{"Header.ChangeTime", Field, 0},
+		{"Header.Devmajor", Field, 0},
+		{"Header.Devminor", Field, 0},
+		{"Header.Format", Field, 10},
+		{"Header.Gid", Field, 0},
+		{"Header.Gname", Field, 0},
+		{"Header.Linkname", Field, 0},
+		{"Header.ModTime", Field, 0},
+		{"Header.Mode", Field, 0},
+		{"Header.Name", Field, 0},
+		{"Header.PAXRecords", Field, 10},
+		{"Header.Size", Field, 0},
+		{"Header.Typeflag", Field, 0},
+		{"Header.Uid", Field, 0},
+		{"Header.Uname", Field, 0},
+		{"Header.Xattrs", Field, 3},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"Reader", Type, 0},
+		{"TypeBlock", Const, 0},
+		{"TypeChar", Const, 0},
+		{"TypeCont", Const, 0},
+		{"TypeDir", Const, 0},
+		{"TypeFifo", Const, 0},
+		{"TypeGNULongLink", Const, 1},
+		{"TypeGNULongName", Const, 1},
+		{"TypeGNUSparse", Const, 3},
+		{"TypeLink", Const, 0},
+		{"TypeReg", Const, 0},
+		{"TypeRegA", Const, 0},
+		{"TypeSymlink", Const, 0},
+		{"TypeXGlobalHeader", Const, 0},
+		{"TypeXHeader", Const, 0},
+		{"Writer", Type, 0},
 	},
 	"archive/zip": {
-		{"(*File).DataOffset", Method, 2, ""},
-		{"(*File).FileInfo", Method, 0, ""},
-		{"(*File).ModTime", Method, 0, ""},
-		{"(*File).Mode", Method, 0, ""},
-		{"(*File).Open", Method, 0, ""},
-		{"(*File).OpenRaw", Method, 17, ""},
-		{"(*File).SetModTime", Method, 0, ""},
-		{"(*File).SetMode", Method, 0, ""},
-		{"(*FileHeader).FileInfo", Method, 0, ""},
-		{"(*FileHeader).ModTime", Method, 0, ""},
-		{"(*FileHeader).Mode", Method, 0, ""},
-		{"(*FileHeader).SetModTime", Method, 0, ""},
-		{"(*FileHeader).SetMode", Method, 0, ""},
-		{"(*ReadCloser).Close", Method, 0, ""},
-		{"(*ReadCloser).Open", Method, 16, ""},
-		{"(*ReadCloser).RegisterDecompressor", Method, 6, ""},
-		{"(*Reader).Open", Method, 16, ""},
-		{"(*Reader).RegisterDecompressor", Method, 6, ""},
-		{"(*Writer).AddFS", Method, 22, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Copy", Method, 17, ""},
-		{"(*Writer).Create", Method, 0, ""},
-		{"(*Writer).CreateHeader", Method, 0, ""},
-		{"(*Writer).CreateRaw", Method, 17, ""},
-		{"(*Writer).Flush", Method, 4, ""},
-		{"(*Writer).RegisterCompressor", Method, 6, ""},
-		{"(*Writer).SetComment", Method, 10, ""},
-		{"(*Writer).SetOffset", Method, 5, ""},
-		{"Compressor", Type, 2, ""},
-		{"Decompressor", Type, 2, ""},
-		{"Deflate", Const, 0, ""},
-		{"ErrAlgorithm", Var, 0, ""},
-		{"ErrChecksum", Var, 0, ""},
-		{"ErrFormat", Var, 0, ""},
-		{"ErrInsecurePath", Var, 20, ""},
-		{"File", Type, 0, ""},
-		{"File.FileHeader", Field, 0, ""},
-		{"FileHeader", Type, 0, ""},
-		{"FileHeader.CRC32", Field, 0, ""},
-		{"FileHeader.Comment", Field, 0, ""},
-		{"FileHeader.CompressedSize", Field, 0, ""},
-		{"FileHeader.CompressedSize64", Field, 1, ""},
-		{"FileHeader.CreatorVersion", Field, 0, ""},
-		{"FileHeader.ExternalAttrs", Field, 0, ""},
-		{"FileHeader.Extra", Field, 0, ""},
-		{"FileHeader.Flags", Field, 0, ""},
-		{"FileHeader.Method", Field, 0, ""},
-		{"FileHeader.Modified", Field, 10, ""},
-		{"FileHeader.ModifiedDate", Field, 0, ""},
-		{"FileHeader.ModifiedTime", Field, 0, ""},
-		{"FileHeader.Name", Field, 0, ""},
-		{"FileHeader.NonUTF8", Field, 10, ""},
-		{"FileHeader.ReaderVersion", Field, 0, ""},
-		{"FileHeader.UncompressedSize", Field, 0, ""},
-		{"FileHeader.UncompressedSize64", Field, 1, ""},
-		{"FileInfoHeader", Func, 0, "func(fi fs.FileInfo) (*FileHeader, error)"},
-		{"NewReader", Func, 0, "func(r io.ReaderAt, size int64) (*Reader, error)"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"OpenReader", Func, 0, "func(name string) (*ReadCloser, error)"},
-		{"ReadCloser", Type, 0, ""},
-		{"ReadCloser.Reader", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"Reader.Comment", Field, 0, ""},
-		{"Reader.File", Field, 0, ""},
-		{"RegisterCompressor", Func, 2, "func(method uint16, comp Compressor)"},
-		{"RegisterDecompressor", Func, 2, "func(method uint16, dcomp Decompressor)"},
-		{"Store", Const, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*File).DataOffset", Method, 2},
+		{"(*File).FileInfo", Method, 0},
+		{"(*File).ModTime", Method, 0},
+		{"(*File).Mode", Method, 0},
+		{"(*File).Open", Method, 0},
+		{"(*File).OpenRaw", Method, 17},
+		{"(*File).SetModTime", Method, 0},
+		{"(*File).SetMode", Method, 0},
+		{"(*FileHeader).FileInfo", Method, 0},
+		{"(*FileHeader).ModTime", Method, 0},
+		{"(*FileHeader).Mode", Method, 0},
+		{"(*FileHeader).SetModTime", Method, 0},
+		{"(*FileHeader).SetMode", Method, 0},
+		{"(*ReadCloser).Close", Method, 0},
+		{"(*ReadCloser).Open", Method, 16},
+		{"(*ReadCloser).RegisterDecompressor", Method, 6},
+		{"(*Reader).Open", Method, 16},
+		{"(*Reader).RegisterDecompressor", Method, 6},
+		{"(*Writer).AddFS", Method, 22},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Copy", Method, 17},
+		{"(*Writer).Create", Method, 0},
+		{"(*Writer).CreateHeader", Method, 0},
+		{"(*Writer).CreateRaw", Method, 17},
+		{"(*Writer).Flush", Method, 4},
+		{"(*Writer).RegisterCompressor", Method, 6},
+		{"(*Writer).SetComment", Method, 10},
+		{"(*Writer).SetOffset", Method, 5},
+		{"Compressor", Type, 2},
+		{"Decompressor", Type, 2},
+		{"Deflate", Const, 0},
+		{"ErrAlgorithm", Var, 0},
+		{"ErrChecksum", Var, 0},
+		{"ErrFormat", Var, 0},
+		{"ErrInsecurePath", Var, 20},
+		{"File", Type, 0},
+		{"File.FileHeader", Field, 0},
+		{"FileHeader", Type, 0},
+		{"FileHeader.CRC32", Field, 0},
+		{"FileHeader.Comment", Field, 0},
+		{"FileHeader.CompressedSize", Field, 0},
+		{"FileHeader.CompressedSize64", Field, 1},
+		{"FileHeader.CreatorVersion", Field, 0},
+		{"FileHeader.ExternalAttrs", Field, 0},
+		{"FileHeader.Extra", Field, 0},
+		{"FileHeader.Flags", Field, 0},
+		{"FileHeader.Method", Field, 0},
+		{"FileHeader.Modified", Field, 10},
+		{"FileHeader.ModifiedDate", Field, 0},
+		{"FileHeader.ModifiedTime", Field, 0},
+		{"FileHeader.Name", Field, 0},
+		{"FileHeader.NonUTF8", Field, 10},
+		{"FileHeader.ReaderVersion", Field, 0},
+		{"FileHeader.UncompressedSize", Field, 0},
+		{"FileHeader.UncompressedSize64", Field, 1},
+		{"FileInfoHeader", Func, 0},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"OpenReader", Func, 0},
+		{"ReadCloser", Type, 0},
+		{"ReadCloser.Reader", Field, 0},
+		{"Reader", Type, 0},
+		{"Reader.Comment", Field, 0},
+		{"Reader.File", Field, 0},
+		{"RegisterCompressor", Func, 2},
+		{"RegisterDecompressor", Func, 2},
+		{"Store", Const, 0},
+		{"Writer", Type, 0},
 	},
 	"bufio": {
-		{"(*Reader).Buffered", Method, 0, ""},
-		{"(*Reader).Discard", Method, 5, ""},
-		{"(*Reader).Peek", Method, 0, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Reader).ReadByte", Method, 0, ""},
-		{"(*Reader).ReadBytes", Method, 0, ""},
-		{"(*Reader).ReadLine", Method, 0, ""},
-		{"(*Reader).ReadRune", Method, 0, ""},
-		{"(*Reader).ReadSlice", Method, 0, ""},
-		{"(*Reader).ReadString", Method, 0, ""},
-		{"(*Reader).Reset", Method, 2, ""},
-		{"(*Reader).Size", Method, 10, ""},
-		{"(*Reader).UnreadByte", Method, 0, ""},
-		{"(*Reader).UnreadRune", Method, 0, ""},
-		{"(*Reader).WriteTo", Method, 1, ""},
-		{"(*Scanner).Buffer", Method, 6, ""},
-		{"(*Scanner).Bytes", Method, 1, ""},
-		{"(*Scanner).Err", Method, 1, ""},
-		{"(*Scanner).Scan", Method, 1, ""},
-		{"(*Scanner).Split", Method, 1, ""},
-		{"(*Scanner).Text", Method, 1, ""},
-		{"(*Writer).Available", Method, 0, ""},
-		{"(*Writer).AvailableBuffer", Method, 18, ""},
-		{"(*Writer).Buffered", Method, 0, ""},
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).ReadFrom", Method, 1, ""},
-		{"(*Writer).Reset", Method, 2, ""},
-		{"(*Writer).Size", Method, 10, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"(*Writer).WriteByte", Method, 0, ""},
-		{"(*Writer).WriteRune", Method, 0, ""},
-		{"(*Writer).WriteString", Method, 0, ""},
-		{"(ReadWriter).Available", Method, 0, ""},
-		{"(ReadWriter).AvailableBuffer", Method, 18, ""},
-		{"(ReadWriter).Discard", Method, 5, ""},
-		{"(ReadWriter).Flush", Method, 0, ""},
-		{"(ReadWriter).Peek", Method, 0, ""},
-		{"(ReadWriter).Read", Method, 0, ""},
-		{"(ReadWriter).ReadByte", Method, 0, ""},
-		{"(ReadWriter).ReadBytes", Method, 0, ""},
-		{"(ReadWriter).ReadFrom", Method, 1, ""},
-		{"(ReadWriter).ReadLine", Method, 0, ""},
-		{"(ReadWriter).ReadRune", Method, 0, ""},
-		{"(ReadWriter).ReadSlice", Method, 0, ""},
-		{"(ReadWriter).ReadString", Method, 0, ""},
-		{"(ReadWriter).UnreadByte", Method, 0, ""},
-		{"(ReadWriter).UnreadRune", Method, 0, ""},
-		{"(ReadWriter).Write", Method, 0, ""},
-		{"(ReadWriter).WriteByte", Method, 0, ""},
-		{"(ReadWriter).WriteRune", Method, 0, ""},
-		{"(ReadWriter).WriteString", Method, 0, ""},
-		{"(ReadWriter).WriteTo", Method, 1, ""},
-		{"ErrAdvanceTooFar", Var, 1, ""},
-		{"ErrBadReadCount", Var, 15, ""},
-		{"ErrBufferFull", Var, 0, ""},
-		{"ErrFinalToken", Var, 6, ""},
-		{"ErrInvalidUnreadByte", Var, 0, ""},
-		{"ErrInvalidUnreadRune", Var, 0, ""},
-		{"ErrNegativeAdvance", Var, 1, ""},
-		{"ErrNegativeCount", Var, 0, ""},
-		{"ErrTooLong", Var, 1, ""},
-		{"MaxScanTokenSize", Const, 1, ""},
-		{"NewReadWriter", Func, 0, "func(r *Reader, w *Writer) *ReadWriter"},
-		{"NewReader", Func, 0, "func(rd io.Reader) *Reader"},
-		{"NewReaderSize", Func, 0, "func(rd io.Reader, size int) *Reader"},
-		{"NewScanner", Func, 1, "func(r io.Reader) *Scanner"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"NewWriterSize", Func, 0, "func(w io.Writer, size int) *Writer"},
-		{"ReadWriter", Type, 0, ""},
-		{"ReadWriter.Reader", Field, 0, ""},
-		{"ReadWriter.Writer", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"ScanBytes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
-		{"ScanLines", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
-		{"ScanRunes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
-		{"ScanWords", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
-		{"Scanner", Type, 1, ""},
-		{"SplitFunc", Type, 1, ""},
-		{"Writer", Type, 0, ""},
+		{"(*Reader).Buffered", Method, 0},
+		{"(*Reader).Discard", Method, 5},
+		{"(*Reader).Peek", Method, 0},
+		{"(*Reader).Read", Method, 0},
+		{"(*Reader).ReadByte", Method, 0},
+		{"(*Reader).ReadBytes", Method, 0},
+		{"(*Reader).ReadLine", Method, 0},
+		{"(*Reader).ReadRune", Method, 0},
+		{"(*Reader).ReadSlice", Method, 0},
+		{"(*Reader).ReadString", Method, 0},
+		{"(*Reader).Reset", Method, 2},
+		{"(*Reader).Size", Method, 10},
+		{"(*Reader).UnreadByte", Method, 0},
+		{"(*Reader).UnreadRune", Method, 0},
+		{"(*Reader).WriteTo", Method, 1},
+		{"(*Scanner).Buffer", Method, 6},
+		{"(*Scanner).Bytes", Method, 1},
+		{"(*Scanner).Err", Method, 1},
+		{"(*Scanner).Scan", Method, 1},
+		{"(*Scanner).Split", Method, 1},
+		{"(*Scanner).Text", Method, 1},
+		{"(*Writer).Available", Method, 0},
+		{"(*Writer).AvailableBuffer", Method, 18},
+		{"(*Writer).Buffered", Method, 0},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).ReadFrom", Method, 1},
+		{"(*Writer).Reset", Method, 2},
+		{"(*Writer).Size", Method, 10},
+		{"(*Writer).Write", Method, 0},
+		{"(*Writer).WriteByte", Method, 0},
+		{"(*Writer).WriteRune", Method, 0},
+		{"(*Writer).WriteString", Method, 0},
+		{"(ReadWriter).Available", Method, 0},
+		{"(ReadWriter).AvailableBuffer", Method, 18},
+		{"(ReadWriter).Discard", Method, 5},
+		{"(ReadWriter).Flush", Method, 0},
+		{"(ReadWriter).Peek", Method, 0},
+		{"(ReadWriter).Read", Method, 0},
+		{"(ReadWriter).ReadByte", Method, 0},
+		{"(ReadWriter).ReadBytes", Method, 0},
+		{"(ReadWriter).ReadFrom", Method, 1},
+		{"(ReadWriter).ReadLine", Method, 0},
+		{"(ReadWriter).ReadRune", Method, 0},
+		{"(ReadWriter).ReadSlice", Method, 0},
+		{"(ReadWriter).ReadString", Method, 0},
+		{"(ReadWriter).UnreadByte", Method, 0},
+		{"(ReadWriter).UnreadRune", Method, 0},
+		{"(ReadWriter).Write", Method, 0},
+		{"(ReadWriter).WriteByte", Method, 0},
+		{"(ReadWriter).WriteRune", Method, 0},
+		{"(ReadWriter).WriteString", Method, 0},
+		{"(ReadWriter).WriteTo", Method, 1},
+		{"ErrAdvanceTooFar", Var, 1},
+		{"ErrBadReadCount", Var, 15},
+		{"ErrBufferFull", Var, 0},
+		{"ErrFinalToken", Var, 6},
+		{"ErrInvalidUnreadByte", Var, 0},
+		{"ErrInvalidUnreadRune", Var, 0},
+		{"ErrNegativeAdvance", Var, 1},
+		{"ErrNegativeCount", Var, 0},
+		{"ErrTooLong", Var, 1},
+		{"MaxScanTokenSize", Const, 1},
+		{"NewReadWriter", Func, 0},
+		{"NewReader", Func, 0},
+		{"NewReaderSize", Func, 0},
+		{"NewScanner", Func, 1},
+		{"NewWriter", Func, 0},
+		{"NewWriterSize", Func, 0},
+		{"ReadWriter", Type, 0},
+		{"ReadWriter.Reader", Field, 0},
+		{"ReadWriter.Writer", Field, 0},
+		{"Reader", Type, 0},
+		{"ScanBytes", Func, 1},
+		{"ScanLines", Func, 1},
+		{"ScanRunes", Func, 1},
+		{"ScanWords", Func, 1},
+		{"Scanner", Type, 1},
+		{"SplitFunc", Type, 1},
+		{"Writer", Type, 0},
 	},
 	"bytes": {
-		{"(*Buffer).Available", Method, 21, ""},
-		{"(*Buffer).AvailableBuffer", Method, 21, ""},
-		{"(*Buffer).Bytes", Method, 0, ""},
-		{"(*Buffer).Cap", Method, 5, ""},
-		{"(*Buffer).Grow", Method, 1, ""},
-		{"(*Buffer).Len", Method, 0, ""},
-		{"(*Buffer).Next", Method, 0, ""},
-		{"(*Buffer).Read", Method, 0, ""},
-		{"(*Buffer).ReadByte", Method, 0, ""},
-		{"(*Buffer).ReadBytes", Method, 0, ""},
-		{"(*Buffer).ReadFrom", Method, 0, ""},
-		{"(*Buffer).ReadRune", Method, 0, ""},
-		{"(*Buffer).ReadString", Method, 0, ""},
-		{"(*Buffer).Reset", Method, 0, ""},
-		{"(*Buffer).String", Method, 0, ""},
-		{"(*Buffer).Truncate", Method, 0, ""},
-		{"(*Buffer).UnreadByte", Method, 0, ""},
-		{"(*Buffer).UnreadRune", Method, 0, ""},
-		{"(*Buffer).Write", Method, 0, ""},
-		{"(*Buffer).WriteByte", Method, 0, ""},
-		{"(*Buffer).WriteRune", Method, 0, ""},
-		{"(*Buffer).WriteString", Method, 0, ""},
-		{"(*Buffer).WriteTo", Method, 0, ""},
-		{"(*Reader).Len", Method, 0, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Reader).ReadAt", Method, 0, ""},
-		{"(*Reader).ReadByte", Method, 0, ""},
-		{"(*Reader).ReadRune", Method, 0, ""},
-		{"(*Reader).Reset", Method, 7, ""},
-		{"(*Reader).Seek", Method, 0, ""},
-		{"(*Reader).Size", Method, 5, ""},
-		{"(*Reader).UnreadByte", Method, 0, ""},
-		{"(*Reader).UnreadRune", Method, 0, ""},
-		{"(*Reader).WriteTo", Method, 1, ""},
-		{"Buffer", Type, 0, ""},
-		{"Clone", Func, 20, "func(b []byte) []byte"},
-		{"Compare", Func, 0, "func(a []byte, b []byte) int"},
-		{"Contains", Func, 0, "func(b []byte, subslice []byte) bool"},
-		{"ContainsAny", Func, 7, "func(b []byte, chars string) bool"},
-		{"ContainsFunc", Func, 21, "func(b []byte, f func(rune) bool) bool"},
-		{"ContainsRune", Func, 7, "func(b []byte, r rune) bool"},
-		{"Count", Func, 0, "func(s []byte, sep []byte) int"},
-		{"Cut", Func, 18, "func(s []byte, sep []byte) (before []byte, after []byte, found bool)"},
-		{"CutPrefix", Func, 20, "func(s []byte, prefix []byte) (after []byte, found bool)"},
-		{"CutSuffix", Func, 20, "func(s []byte, suffix []byte) (before []byte, found bool)"},
-		{"Equal", Func, 0, "func(a []byte, b []byte) bool"},
-		{"EqualFold", Func, 0, "func(s []byte, t []byte) bool"},
-		{"ErrTooLarge", Var, 0, ""},
-		{"Fields", Func, 0, "func(s []byte) [][]byte"},
-		{"FieldsFunc", Func, 0, "func(s []byte, f func(rune) bool) [][]byte"},
-		{"FieldsFuncSeq", Func, 24, "func(s []byte, f func(rune) bool) iter.Seq[[]byte]"},
-		{"FieldsSeq", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
-		{"HasPrefix", Func, 0, "func(s []byte, prefix []byte) bool"},
-		{"HasSuffix", Func, 0, "func(s []byte, suffix []byte) bool"},
-		{"Index", Func, 0, "func(s []byte, sep []byte) int"},
-		{"IndexAny", Func, 0, "func(s []byte, chars string) int"},
-		{"IndexByte", Func, 0, "func(b []byte, c byte) int"},
-		{"IndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
-		{"IndexRune", Func, 0, "func(s []byte, r rune) int"},
-		{"Join", Func, 0, "func(s [][]byte, sep []byte) []byte"},
-		{"LastIndex", Func, 0, "func(s []byte, sep []byte) int"},
-		{"LastIndexAny", Func, 0, "func(s []byte, chars string) int"},
-		{"LastIndexByte", Func, 5, "func(s []byte, c byte) int"},
-		{"LastIndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
-		{"Lines", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
-		{"Map", Func, 0, "func(mapping func(r rune) rune, s []byte) []byte"},
-		{"MinRead", Const, 0, ""},
-		{"NewBuffer", Func, 0, "func(buf []byte) *Buffer"},
-		{"NewBufferString", Func, 0, "func(s string) *Buffer"},
-		{"NewReader", Func, 0, "func(b []byte) *Reader"},
-		{"Reader", Type, 0, ""},
-		{"Repeat", Func, 0, "func(b []byte, count int) []byte"},
-		{"Replace", Func, 0, "func(s []byte, old []byte, new []byte, n int) []byte"},
-		{"ReplaceAll", Func, 12, "func(s []byte, old []byte, new []byte) []byte"},
-		{"Runes", Func, 0, "func(s []byte) []rune"},
-		{"Split", Func, 0, "func(s []byte, sep []byte) [][]byte"},
-		{"SplitAfter", Func, 0, "func(s []byte, sep []byte) [][]byte"},
-		{"SplitAfterN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
-		{"SplitAfterSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
-		{"SplitN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
-		{"SplitSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
-		{"Title", Func, 0, "func(s []byte) []byte"},
-		{"ToLower", Func, 0, "func(s []byte) []byte"},
-		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
-		{"ToTitle", Func, 0, "func(s []byte) []byte"},
-		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
-		{"ToUpper", Func, 0, "func(s []byte) []byte"},
-		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
-		{"ToValidUTF8", Func, 13, "func(s []byte, replacement []byte) []byte"},
-		{"Trim", Func, 0, "func(s []byte, cutset string) []byte"},
-		{"TrimFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
-		{"TrimLeft", Func, 0, "func(s []byte, cutset string) []byte"},
-		{"TrimLeftFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
-		{"TrimPrefix", Func, 1, "func(s []byte, prefix []byte) []byte"},
-		{"TrimRight", Func, 0, "func(s []byte, cutset string) []byte"},
-		{"TrimRightFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
-		{"TrimSpace", Func, 0, "func(s []byte) []byte"},
-		{"TrimSuffix", Func, 1, "func(s []byte, suffix []byte) []byte"},
+		{"(*Buffer).Available", Method, 21},
+		{"(*Buffer).AvailableBuffer", Method, 21},
+		{"(*Buffer).Bytes", Method, 0},
+		{"(*Buffer).Cap", Method, 5},
+		{"(*Buffer).Grow", Method, 1},
+		{"(*Buffer).Len", Method, 0},
+		{"(*Buffer).Next", Method, 0},
+		{"(*Buffer).Read", Method, 0},
+		{"(*Buffer).ReadByte", Method, 0},
+		{"(*Buffer).ReadBytes", Method, 0},
+		{"(*Buffer).ReadFrom", Method, 0},
+		{"(*Buffer).ReadRune", Method, 0},
+		{"(*Buffer).ReadString", Method, 0},
+		{"(*Buffer).Reset", Method, 0},
+		{"(*Buffer).String", Method, 0},
+		{"(*Buffer).Truncate", Method, 0},
+		{"(*Buffer).UnreadByte", Method, 0},
+		{"(*Buffer).UnreadRune", Method, 0},
+		{"(*Buffer).Write", Method, 0},
+		{"(*Buffer).WriteByte", Method, 0},
+		{"(*Buffer).WriteRune", Method, 0},
+		{"(*Buffer).WriteString", Method, 0},
+		{"(*Buffer).WriteTo", Method, 0},
+		{"(*Reader).Len", Method, 0},
+		{"(*Reader).Read", Method, 0},
+		{"(*Reader).ReadAt", Method, 0},
+		{"(*Reader).ReadByte", Method, 0},
+		{"(*Reader).ReadRune", Method, 0},
+		{"(*Reader).Reset", Method, 7},
+		{"(*Reader).Seek", Method, 0},
+		{"(*Reader).Size", Method, 5},
+		{"(*Reader).UnreadByte", Method, 0},
+		{"(*Reader).UnreadRune", Method, 0},
+		{"(*Reader).WriteTo", Method, 1},
+		{"Buffer", Type, 0},
+		{"Clone", Func, 20},
+		{"Compare", Func, 0},
+		{"Contains", Func, 0},
+		{"ContainsAny", Func, 7},
+		{"ContainsFunc", Func, 21},
+		{"ContainsRune", Func, 7},
+		{"Count", Func, 0},
+		{"Cut", Func, 18},
+		{"CutPrefix", Func, 20},
+		{"CutSuffix", Func, 20},
+		{"Equal", Func, 0},
+		{"EqualFold", Func, 0},
+		{"ErrTooLarge", Var, 0},
+		{"Fields", Func, 0},
+		{"FieldsFunc", Func, 0},
+		{"FieldsFuncSeq", Func, 24},
+		{"FieldsSeq", Func, 24},
+		{"HasPrefix", Func, 0},
+		{"HasSuffix", Func, 0},
+		{"Index", Func, 0},
+		{"IndexAny", Func, 0},
+		{"IndexByte", Func, 0},
+		{"IndexFunc", Func, 0},
+		{"IndexRune", Func, 0},
+		{"Join", Func, 0},
+		{"LastIndex", Func, 0},
+		{"LastIndexAny", Func, 0},
+		{"LastIndexByte", Func, 5},
+		{"LastIndexFunc", Func, 0},
+		{"Lines", Func, 24},
+		{"Map", Func, 0},
+		{"MinRead", Const, 0},
+		{"NewBuffer", Func, 0},
+		{"NewBufferString", Func, 0},
+		{"NewReader", Func, 0},
+		{"Reader", Type, 0},
+		{"Repeat", Func, 0},
+		{"Replace", Func, 0},
+		{"ReplaceAll", Func, 12},
+		{"Runes", Func, 0},
+		{"Split", Func, 0},
+		{"SplitAfter", Func, 0},
+		{"SplitAfterN", Func, 0},
+		{"SplitAfterSeq", Func, 24},
+		{"SplitN", Func, 0},
+		{"SplitSeq", Func, 24},
+		{"Title", Func, 0},
+		{"ToLower", Func, 0},
+		{"ToLowerSpecial", Func, 0},
+		{"ToTitle", Func, 0},
+		{"ToTitleSpecial", Func, 0},
+		{"ToUpper", Func, 0},
+		{"ToUpperSpecial", Func, 0},
+		{"ToValidUTF8", Func, 13},
+		{"Trim", Func, 0},
+		{"TrimFunc", Func, 0},
+		{"TrimLeft", Func, 0},
+		{"TrimLeftFunc", Func, 0},
+		{"TrimPrefix", Func, 1},
+		{"TrimRight", Func, 0},
+		{"TrimRightFunc", Func, 0},
+		{"TrimSpace", Func, 0},
+		{"TrimSuffix", Func, 1},
 	},
 	"cmp": {
-		{"Compare", Func, 21, "func[T Ordered](x T, y T) int"},
-		{"Less", Func, 21, "func[T Ordered](x T, y T) bool"},
-		{"Or", Func, 22, "func[T comparable](vals ...T) T"},
-		{"Ordered", Type, 21, ""},
+		{"Compare", Func, 21},
+		{"Less", Func, 21},
+		{"Or", Func, 22},
+		{"Ordered", Type, 21},
 	},
 	"compress/bzip2": {
-		{"(StructuralError).Error", Method, 0, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"StructuralError", Type, 0, ""},
+		{"(StructuralError).Error", Method, 0},
+		{"NewReader", Func, 0},
+		{"StructuralError", Type, 0},
 	},
 	"compress/flate": {
-		{"(*ReadError).Error", Method, 0, ""},
-		{"(*WriteError).Error", Method, 0, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).Reset", Method, 2, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"(CorruptInputError).Error", Method, 0, ""},
-		{"(InternalError).Error", Method, 0, ""},
-		{"BestCompression", Const, 0, ""},
-		{"BestSpeed", Const, 0, ""},
-		{"CorruptInputError", Type, 0, ""},
-		{"DefaultCompression", Const, 0, ""},
-		{"HuffmanOnly", Const, 7, ""},
-		{"InternalError", Type, 0, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) io.ReadCloser"},
-		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) io.ReadCloser"},
-		{"NewWriter", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
-		{"NewWriterDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
-		{"NoCompression", Const, 0, ""},
-		{"ReadError", Type, 0, ""},
-		{"ReadError.Err", Field, 0, ""},
-		{"ReadError.Offset", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"Resetter", Type, 4, ""},
-		{"WriteError", Type, 0, ""},
-		{"WriteError.Err", Field, 0, ""},
-		{"WriteError.Offset", Field, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*ReadError).Error", Method, 0},
+		{"(*WriteError).Error", Method, 0},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).Reset", Method, 2},
+		{"(*Writer).Write", Method, 0},
+		{"(CorruptInputError).Error", Method, 0},
+		{"(InternalError).Error", Method, 0},
+		{"BestCompression", Const, 0},
+		{"BestSpeed", Const, 0},
+		{"CorruptInputError", Type, 0},
+		{"DefaultCompression", Const, 0},
+		{"HuffmanOnly", Const, 7},
+		{"InternalError", Type, 0},
+		{"NewReader", Func, 0},
+		{"NewReaderDict", Func, 0},
+		{"NewWriter", Func, 0},
+		{"NewWriterDict", Func, 0},
+		{"NoCompression", Const, 0},
+		{"ReadError", Type, 0},
+		{"ReadError.Err", Field, 0},
+		{"ReadError.Offset", Field, 0},
+		{"Reader", Type, 0},
+		{"Resetter", Type, 4},
+		{"WriteError", Type, 0},
+		{"WriteError.Err", Field, 0},
+		{"WriteError.Offset", Field, 0},
+		{"Writer", Type, 0},
 	},
 	"compress/gzip": {
-		{"(*Reader).Close", Method, 0, ""},
-		{"(*Reader).Multistream", Method, 4, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Reader).Reset", Method, 3, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Flush", Method, 1, ""},
-		{"(*Writer).Reset", Method, 2, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"BestCompression", Const, 0, ""},
-		{"BestSpeed", Const, 0, ""},
-		{"DefaultCompression", Const, 0, ""},
-		{"ErrChecksum", Var, 0, ""},
-		{"ErrHeader", Var, 0, ""},
-		{"Header", Type, 0, ""},
-		{"Header.Comment", Field, 0, ""},
-		{"Header.Extra", Field, 0, ""},
-		{"Header.ModTime", Field, 0, ""},
-		{"Header.Name", Field, 0, ""},
-		{"Header.OS", Field, 0, ""},
-		{"HuffmanOnly", Const, 8, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) (*Reader, error)"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
-		{"NoCompression", Const, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"Reader.Header", Field, 0, ""},
-		{"Writer", Type, 0, ""},
-		{"Writer.Header", Field, 0, ""},
+		{"(*Reader).Close", Method, 0},
+		{"(*Reader).Multistream", Method, 4},
+		{"(*Reader).Read", Method, 0},
+		{"(*Reader).Reset", Method, 3},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Flush", Method, 1},
+		{"(*Writer).Reset", Method, 2},
+		{"(*Writer).Write", Method, 0},
+		{"BestCompression", Const, 0},
+		{"BestSpeed", Const, 0},
+		{"DefaultCompression", Const, 0},
+		{"ErrChecksum", Var, 0},
+		{"ErrHeader", Var, 0},
+		{"Header", Type, 0},
+		{"Header.Comment", Field, 0},
+		{"Header.Extra", Field, 0},
+		{"Header.ModTime", Field, 0},
+		{"Header.Name", Field, 0},
+		{"Header.OS", Field, 0},
+		{"HuffmanOnly", Const, 8},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"NewWriterLevel", Func, 0},
+		{"NoCompression", Const, 0},
+		{"Reader", Type, 0},
+		{"Reader.Header", Field, 0},
+		{"Writer", Type, 0},
+		{"Writer.Header", Field, 0},
 	},
 	"compress/lzw": {
-		{"(*Reader).Close", Method, 17, ""},
-		{"(*Reader).Read", Method, 17, ""},
-		{"(*Reader).Reset", Method, 17, ""},
-		{"(*Writer).Close", Method, 17, ""},
-		{"(*Writer).Reset", Method, 17, ""},
-		{"(*Writer).Write", Method, 17, ""},
-		{"LSB", Const, 0, ""},
-		{"MSB", Const, 0, ""},
-		{"NewReader", Func, 0, "func(r io.Reader, order Order, litWidth int) io.ReadCloser"},
-		{"NewWriter", Func, 0, "func(w io.Writer, order Order, litWidth int) io.WriteCloser"},
-		{"Order", Type, 0, ""},
-		{"Reader", Type, 17, ""},
-		{"Writer", Type, 17, ""},
+		{"(*Reader).Close", Method, 17},
+		{"(*Reader).Read", Method, 17},
+		{"(*Reader).Reset", Method, 17},
+		{"(*Writer).Close", Method, 17},
+		{"(*Writer).Reset", Method, 17},
+		{"(*Writer).Write", Method, 17},
+		{"LSB", Const, 0},
+		{"MSB", Const, 0},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"Order", Type, 0},
+		{"Reader", Type, 17},
+		{"Writer", Type, 17},
 	},
 	"compress/zlib": {
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).Reset", Method, 2, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"BestCompression", Const, 0, ""},
-		{"BestSpeed", Const, 0, ""},
-		{"DefaultCompression", Const, 0, ""},
-		{"ErrChecksum", Var, 0, ""},
-		{"ErrDictionary", Var, 0, ""},
-		{"ErrHeader", Var, 0, ""},
-		{"HuffmanOnly", Const, 8, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) (io.ReadCloser, error)"},
-		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) (io.ReadCloser, error)"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
-		{"NewWriterLevelDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
-		{"NoCompression", Const, 0, ""},
-		{"Resetter", Type, 4, ""},
-		{"Writer", Type, 0, ""},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).Reset", Method, 2},
+		{"(*Writer).Write", Method, 0},
+		{"BestCompression", Const, 0},
+		{"BestSpeed", Const, 0},
+		{"DefaultCompression", Const, 0},
+		{"ErrChecksum", Var, 0},
+		{"ErrDictionary", Var, 0},
+		{"ErrHeader", Var, 0},
+		{"HuffmanOnly", Const, 8},
+		{"NewReader", Func, 0},
+		{"NewReaderDict", Func, 0},
+		{"NewWriter", Func, 0},
+		{"NewWriterLevel", Func, 0},
+		{"NewWriterLevelDict", Func, 0},
+		{"NoCompression", Const, 0},
+		{"Resetter", Type, 4},
+		{"Writer", Type, 0},
 	},
 	"container/heap": {
-		{"Fix", Func, 2, "func(h Interface, i int)"},
-		{"Init", Func, 0, "func(h Interface)"},
-		{"Interface", Type, 0, ""},
-		{"Pop", Func, 0, "func(h Interface) any"},
-		{"Push", Func, 0, "func(h Interface, x any)"},
-		{"Remove", Func, 0, "func(h Interface, i int) any"},
+		{"Fix", Func, 2},
+		{"Init", Func, 0},
+		{"Interface", Type, 0},
+		{"Pop", Func, 0},
+		{"Push", Func, 0},
+		{"Remove", Func, 0},
 	},
 	"container/list": {
-		{"(*Element).Next", Method, 0, ""},
-		{"(*Element).Prev", Method, 0, ""},
-		{"(*List).Back", Method, 0, ""},
-		{"(*List).Front", Method, 0, ""},
-		{"(*List).Init", Method, 0, ""},
-		{"(*List).InsertAfter", Method, 0, ""},
-		{"(*List).InsertBefore", Method, 0, ""},
-		{"(*List).Len", Method, 0, ""},
-		{"(*List).MoveAfter", Method, 2, ""},
-		{"(*List).MoveBefore", Method, 2, ""},
-		{"(*List).MoveToBack", Method, 0, ""},
-		{"(*List).MoveToFront", Method, 0, ""},
-		{"(*List).PushBack", Method, 0, ""},
-		{"(*List).PushBackList", Method, 0, ""},
-		{"(*List).PushFront", Method, 0, ""},
-		{"(*List).PushFrontList", Method, 0, ""},
-		{"(*List).Remove", Method, 0, ""},
-		{"Element", Type, 0, ""},
-		{"Element.Value", Field, 0, ""},
-		{"List", Type, 0, ""},
-		{"New", Func, 0, "func() *List"},
+		{"(*Element).Next", Method, 0},
+		{"(*Element).Prev", Method, 0},
+		{"(*List).Back", Method, 0},
+		{"(*List).Front", Method, 0},
+		{"(*List).Init", Method, 0},
+		{"(*List).InsertAfter", Method, 0},
+		{"(*List).InsertBefore", Method, 0},
+		{"(*List).Len", Method, 0},
+		{"(*List).MoveAfter", Method, 2},
+		{"(*List).MoveBefore", Method, 2},
+		{"(*List).MoveToBack", Method, 0},
+		{"(*List).MoveToFront", Method, 0},
+		{"(*List).PushBack", Method, 0},
+		{"(*List).PushBackList", Method, 0},
+		{"(*List).PushFront", Method, 0},
+		{"(*List).PushFrontList", Method, 0},
+		{"(*List).Remove", Method, 0},
+		{"Element", Type, 0},
+		{"Element.Value", Field, 0},
+		{"List", Type, 0},
+		{"New", Func, 0},
 	},
 	"container/ring": {
-		{"(*Ring).Do", Method, 0, ""},
-		{"(*Ring).Len", Method, 0, ""},
-		{"(*Ring).Link", Method, 0, ""},
-		{"(*Ring).Move", Method, 0, ""},
-		{"(*Ring).Next", Method, 0, ""},
-		{"(*Ring).Prev", Method, 0, ""},
-		{"(*Ring).Unlink", Method, 0, ""},
-		{"New", Func, 0, "func(n int) *Ring"},
-		{"Ring", Type, 0, ""},
-		{"Ring.Value", Field, 0, ""},
+		{"(*Ring).Do", Method, 0},
+		{"(*Ring).Len", Method, 0},
+		{"(*Ring).Link", Method, 0},
+		{"(*Ring).Move", Method, 0},
+		{"(*Ring).Next", Method, 0},
+		{"(*Ring).Prev", Method, 0},
+		{"(*Ring).Unlink", Method, 0},
+		{"New", Func, 0},
+		{"Ring", Type, 0},
+		{"Ring.Value", Field, 0},
 	},
 	"context": {
-		{"AfterFunc", Func, 21, "func(ctx Context, f func()) (stop func() bool)"},
-		{"Background", Func, 7, "func() Context"},
-		{"CancelCauseFunc", Type, 20, ""},
-		{"CancelFunc", Type, 7, ""},
-		{"Canceled", Var, 7, ""},
-		{"Cause", Func, 20, "func(c Context) error"},
-		{"Context", Type, 7, ""},
-		{"DeadlineExceeded", Var, 7, ""},
-		{"TODO", Func, 7, "func() Context"},
-		{"WithCancel", Func, 7, "func(parent Context) (ctx Context, cancel CancelFunc)"},
-		{"WithCancelCause", Func, 20, "func(parent Context) (ctx Context, cancel CancelCauseFunc)"},
-		{"WithDeadline", Func, 7, "func(parent Context, d time.Time) (Context, CancelFunc)"},
-		{"WithDeadlineCause", Func, 21, "func(parent Context, d time.Time, cause error) (Context, CancelFunc)"},
-		{"WithTimeout", Func, 7, "func(parent Context, timeout time.Duration) (Context, CancelFunc)"},
-		{"WithTimeoutCause", Func, 21, "func(parent Context, timeout time.Duration, cause error) (Context, CancelFunc)"},
-		{"WithValue", Func, 7, "func(parent Context, key any, val any) Context"},
-		{"WithoutCancel", Func, 21, "func(parent Context) Context"},
+		{"AfterFunc", Func, 21},
+		{"Background", Func, 7},
+		{"CancelCauseFunc", Type, 20},
+		{"CancelFunc", Type, 7},
+		{"Canceled", Var, 7},
+		{"Cause", Func, 20},
+		{"Context", Type, 7},
+		{"DeadlineExceeded", Var, 7},
+		{"TODO", Func, 7},
+		{"WithCancel", Func, 7},
+		{"WithCancelCause", Func, 20},
+		{"WithDeadline", Func, 7},
+		{"WithDeadlineCause", Func, 21},
+		{"WithTimeout", Func, 7},
+		{"WithTimeoutCause", Func, 21},
+		{"WithValue", Func, 7},
+		{"WithoutCancel", Func, 21},
 	},
 	"crypto": {
-		{"(Hash).Available", Method, 0, ""},
-		{"(Hash).HashFunc", Method, 4, ""},
-		{"(Hash).New", Method, 0, ""},
-		{"(Hash).Size", Method, 0, ""},
-		{"(Hash).String", Method, 15, ""},
-		{"BLAKE2b_256", Const, 9, ""},
-		{"BLAKE2b_384", Const, 9, ""},
-		{"BLAKE2b_512", Const, 9, ""},
-		{"BLAKE2s_256", Const, 9, ""},
-		{"Decrypter", Type, 5, ""},
-		{"DecrypterOpts", Type, 5, ""},
-		{"Hash", Type, 0, ""},
-		{"MD4", Const, 0, ""},
-		{"MD5", Const, 0, ""},
-		{"MD5SHA1", Const, 0, ""},
-		{"PrivateKey", Type, 0, ""},
-		{"PublicKey", Type, 2, ""},
-		{"RIPEMD160", Const, 0, ""},
-		{"RegisterHash", Func, 0, "func(h Hash, f func() hash.Hash)"},
-		{"SHA1", Const, 0, ""},
-		{"SHA224", Const, 0, ""},
-		{"SHA256", Const, 0, ""},
-		{"SHA384", Const, 0, ""},
-		{"SHA3_224", Const, 4, ""},
-		{"SHA3_256", Const, 4, ""},
-		{"SHA3_384", Const, 4, ""},
-		{"SHA3_512", Const, 4, ""},
-		{"SHA512", Const, 0, ""},
-		{"SHA512_224", Const, 5, ""},
-		{"SHA512_256", Const, 5, ""},
-		{"Signer", Type, 4, ""},
-		{"SignerOpts", Type, 4, ""},
+		{"(Hash).Available", Method, 0},
+		{"(Hash).HashFunc", Method, 4},
+		{"(Hash).New", Method, 0},
+		{"(Hash).Size", Method, 0},
+		{"(Hash).String", Method, 15},
+		{"BLAKE2b_256", Const, 9},
+		{"BLAKE2b_384", Const, 9},
+		{"BLAKE2b_512", Const, 9},
+		{"BLAKE2s_256", Const, 9},
+		{"Decrypter", Type, 5},
+		{"DecrypterOpts", Type, 5},
+		{"Hash", Type, 0},
+		{"MD4", Const, 0},
+		{"MD5", Const, 0},
+		{"MD5SHA1", Const, 0},
+		{"PrivateKey", Type, 0},
+		{"PublicKey", Type, 2},
+		{"RIPEMD160", Const, 0},
+		{"RegisterHash", Func, 0},
+		{"SHA1", Const, 0},
+		{"SHA224", Const, 0},
+		{"SHA256", Const, 0},
+		{"SHA384", Const, 0},
+		{"SHA3_224", Const, 4},
+		{"SHA3_256", Const, 4},
+		{"SHA3_384", Const, 4},
+		{"SHA3_512", Const, 4},
+		{"SHA512", Const, 0},
+		{"SHA512_224", Const, 5},
+		{"SHA512_256", Const, 5},
+		{"Signer", Type, 4},
+		{"SignerOpts", Type, 4},
 	},
 	"crypto/aes": {
-		{"(KeySizeError).Error", Method, 0, ""},
-		{"BlockSize", Const, 0, ""},
-		{"KeySizeError", Type, 0, ""},
-		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+		{"(KeySizeError).Error", Method, 0},
+		{"BlockSize", Const, 0},
+		{"KeySizeError", Type, 0},
+		{"NewCipher", Func, 0},
 	},
 	"crypto/cipher": {
-		{"(StreamReader).Read", Method, 0, ""},
-		{"(StreamWriter).Close", Method, 0, ""},
-		{"(StreamWriter).Write", Method, 0, ""},
-		{"AEAD", Type, 2, ""},
-		{"Block", Type, 0, ""},
-		{"BlockMode", Type, 0, ""},
-		{"NewCBCDecrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
-		{"NewCBCEncrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
-		{"NewCFBDecrypter", Func, 0, "func(block Block, iv []byte) Stream"},
-		{"NewCFBEncrypter", Func, 0, "func(block Block, iv []byte) Stream"},
-		{"NewCTR", Func, 0, "func(block Block, iv []byte) Stream"},
-		{"NewGCM", Func, 2, "func(cipher Block) (AEAD, error)"},
-		{"NewGCMWithNonceSize", Func, 5, "func(cipher Block, size int) (AEAD, error)"},
-		{"NewGCMWithRandomNonce", Func, 24, "func(cipher Block) (AEAD, error)"},
-		{"NewGCMWithTagSize", Func, 11, "func(cipher Block, tagSize int) (AEAD, error)"},
-		{"NewOFB", Func, 0, "func(b Block, iv []byte) Stream"},
-		{"Stream", Type, 0, ""},
-		{"StreamReader", Type, 0, ""},
-		{"StreamReader.R", Field, 0, ""},
-		{"StreamReader.S", Field, 0, ""},
-		{"StreamWriter", Type, 0, ""},
-		{"StreamWriter.Err", Field, 0, ""},
-		{"StreamWriter.S", Field, 0, ""},
-		{"StreamWriter.W", Field, 0, ""},
+		{"(StreamReader).Read", Method, 0},
+		{"(StreamWriter).Close", Method, 0},
+		{"(StreamWriter).Write", Method, 0},
+		{"AEAD", Type, 2},
+		{"Block", Type, 0},
+		{"BlockMode", Type, 0},
+		{"NewCBCDecrypter", Func, 0},
+		{"NewCBCEncrypter", Func, 0},
+		{"NewCFBDecrypter", Func, 0},
+		{"NewCFBEncrypter", Func, 0},
+		{"NewCTR", Func, 0},
+		{"NewGCM", Func, 2},
+		{"NewGCMWithNonceSize", Func, 5},
+		{"NewGCMWithRandomNonce", Func, 24},
+		{"NewGCMWithTagSize", Func, 11},
+		{"NewOFB", Func, 0},
+		{"Stream", Type, 0},
+		{"StreamReader", Type, 0},
+		{"StreamReader.R", Field, 0},
+		{"StreamReader.S", Field, 0},
+		{"StreamWriter", Type, 0},
+		{"StreamWriter.Err", Field, 0},
+		{"StreamWriter.S", Field, 0},
+		{"StreamWriter.W", Field, 0},
 	},
 	"crypto/des": {
-		{"(KeySizeError).Error", Method, 0, ""},
-		{"BlockSize", Const, 0, ""},
-		{"KeySizeError", Type, 0, ""},
-		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
-		{"NewTripleDESCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+		{"(KeySizeError).Error", Method, 0},
+		{"BlockSize", Const, 0},
+		{"KeySizeError", Type, 0},
+		{"NewCipher", Func, 0},
+		{"NewTripleDESCipher", Func, 0},
 	},
 	"crypto/dsa": {
-		{"ErrInvalidPublicKey", Var, 0, ""},
-		{"GenerateKey", Func, 0, "func(priv *PrivateKey, rand io.Reader) error"},
-		{"GenerateParameters", Func, 0, "func(params *Parameters, rand io.Reader, sizes ParameterSizes) error"},
-		{"L1024N160", Const, 0, ""},
-		{"L2048N224", Const, 0, ""},
-		{"L2048N256", Const, 0, ""},
-		{"L3072N256", Const, 0, ""},
-		{"ParameterSizes", Type, 0, ""},
-		{"Parameters", Type, 0, ""},
-		{"Parameters.G", Field, 0, ""},
-		{"Parameters.P", Field, 0, ""},
-		{"Parameters.Q", Field, 0, ""},
-		{"PrivateKey", Type, 0, ""},
-		{"PrivateKey.PublicKey", Field, 0, ""},
-		{"PrivateKey.X", Field, 0, ""},
-		{"PublicKey", Type, 0, ""},
-		{"PublicKey.Parameters", Field, 0, ""},
-		{"PublicKey.Y", Field, 0, ""},
-		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
-		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
+		{"ErrInvalidPublicKey", Var, 0},
+		{"GenerateKey", Func, 0},
+		{"GenerateParameters", Func, 0},
+		{"L1024N160", Const, 0},
+		{"L2048N224", Const, 0},
+		{"L2048N256", Const, 0},
+		{"L3072N256", Const, 0},
+		{"ParameterSizes", Type, 0},
+		{"Parameters", Type, 0},
+		{"Parameters.G", Field, 0},
+		{"Parameters.P", Field, 0},
+		{"Parameters.Q", Field, 0},
+		{"PrivateKey", Type, 0},
+		{"PrivateKey.PublicKey", Field, 0},
+		{"PrivateKey.X", Field, 0},
+		{"PublicKey", Type, 0},
+		{"PublicKey.Parameters", Field, 0},
+		{"PublicKey.Y", Field, 0},
+		{"Sign", Func, 0},
+		{"Verify", Func, 0},
 	},
 	"crypto/ecdh": {
-		{"(*PrivateKey).Bytes", Method, 20, ""},
-		{"(*PrivateKey).Curve", Method, 20, ""},
-		{"(*PrivateKey).ECDH", Method, 20, ""},
-		{"(*PrivateKey).Equal", Method, 20, ""},
-		{"(*PrivateKey).Public", Method, 20, ""},
-		{"(*PrivateKey).PublicKey", Method, 20, ""},
-		{"(*PublicKey).Bytes", Method, 20, ""},
-		{"(*PublicKey).Curve", Method, 20, ""},
-		{"(*PublicKey).Equal", Method, 20, ""},
-		{"Curve", Type, 20, ""},
-		{"P256", Func, 20, "func() Curve"},
-		{"P384", Func, 20, "func() Curve"},
-		{"P521", Func, 20, "func() Curve"},
-		{"PrivateKey", Type, 20, ""},
-		{"PublicKey", Type, 20, ""},
-		{"X25519", Func, 20, "func() Curve"},
+		{"(*PrivateKey).Bytes", Method, 20},
+		{"(*PrivateKey).Curve", Method, 20},
+		{"(*PrivateKey).ECDH", Method, 20},
+		{"(*PrivateKey).Equal", Method, 20},
+		{"(*PrivateKey).Public", Method, 20},
+		{"(*PrivateKey).PublicKey", Method, 20},
+		{"(*PublicKey).Bytes", Method, 20},
+		{"(*PublicKey).Curve", Method, 20},
+		{"(*PublicKey).Equal", Method, 20},
+		{"Curve", Type, 20},
+		{"P256", Func, 20},
+		{"P384", Func, 20},
+		{"P521", Func, 20},
+		{"PrivateKey", Type, 20},
+		{"PublicKey", Type, 20},
+		{"X25519", Func, 20},
 	},
 	"crypto/ecdsa": {
-		{"(*PrivateKey).ECDH", Method, 20, ""},
-		{"(*PrivateKey).Equal", Method, 15, ""},
-		{"(*PrivateKey).Public", Method, 4, ""},
-		{"(*PrivateKey).Sign", Method, 4, ""},
-		{"(*PublicKey).ECDH", Method, 20, ""},
-		{"(*PublicKey).Equal", Method, 15, ""},
-		{"(PrivateKey).Add", Method, 0, ""},
-		{"(PrivateKey).Double", Method, 0, ""},
-		{"(PrivateKey).IsOnCurve", Method, 0, ""},
-		{"(PrivateKey).Params", Method, 0, ""},
-		{"(PrivateKey).ScalarBaseMult", Method, 0, ""},
-		{"(PrivateKey).ScalarMult", Method, 0, ""},
-		{"(PublicKey).Add", Method, 0, ""},
-		{"(PublicKey).Double", Method, 0, ""},
-		{"(PublicKey).IsOnCurve", Method, 0, ""},
-		{"(PublicKey).Params", Method, 0, ""},
-		{"(PublicKey).ScalarBaseMult", Method, 0, ""},
-		{"(PublicKey).ScalarMult", Method, 0, ""},
-		{"GenerateKey", Func, 0, "func(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)"},
-		{"PrivateKey", Type, 0, ""},
-		{"PrivateKey.D", Field, 0, ""},
-		{"PrivateKey.PublicKey", Field, 0, ""},
-		{"PublicKey", Type, 0, ""},
-		{"PublicKey.Curve", Field, 0, ""},
-		{"PublicKey.X", Field, 0, ""},
-		{"PublicKey.Y", Field, 0, ""},
-		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
-		{"SignASN1", Func, 15, "func(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)"},
-		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
-		{"VerifyASN1", Func, 15, "func(pub *PublicKey, hash []byte, sig []byte) bool"},
+		{"(*PrivateKey).ECDH", Method, 20},
+		{"(*PrivateKey).Equal", Method, 15},
+		{"(*PrivateKey).Public", Method, 4},
+		{"(*PrivateKey).Sign", Method, 4},
+		{"(*PublicKey).ECDH", Method, 20},
+		{"(*PublicKey).Equal", Method, 15},
+		{"(PrivateKey).Add", Method, 0},
+		{"(PrivateKey).Double", Method, 0},
+		{"(PrivateKey).IsOnCurve", Method, 0},
+		{"(PrivateKey).Params", Method, 0},
+		{"(PrivateKey).ScalarBaseMult", Method, 0},
+		{"(PrivateKey).ScalarMult", Method, 0},
+		{"(PublicKey).Add", Method, 0},
+		{"(PublicKey).Double", Method, 0},
+		{"(PublicKey).IsOnCurve", Method, 0},
+		{"(PublicKey).Params", Method, 0},
+		{"(PublicKey).ScalarBaseMult", Method, 0},
+		{"(PublicKey).ScalarMult", Method, 0},
+		{"GenerateKey", Func, 0},
+		{"PrivateKey", Type, 0},
+		{"PrivateKey.D", Field, 0},
+		{"PrivateKey.PublicKey", Field, 0},
+		{"PublicKey", Type, 0},
+		{"PublicKey.Curve", Field, 0},
+		{"PublicKey.X", Field, 0},
+		{"PublicKey.Y", Field, 0},
+		{"Sign", Func, 0},
+		{"SignASN1", Func, 15},
+		{"Verify", Func, 0},
+		{"VerifyASN1", Func, 15},
 	},
 	"crypto/ed25519": {
-		{"(*Options).HashFunc", Method, 20, ""},
-		{"(PrivateKey).Equal", Method, 15, ""},
-		{"(PrivateKey).Public", Method, 13, ""},
-		{"(PrivateKey).Seed", Method, 13, ""},
-		{"(PrivateKey).Sign", Method, 13, ""},
-		{"(PublicKey).Equal", Method, 15, ""},
-		{"GenerateKey", Func, 13, "func(rand io.Reader) (PublicKey, PrivateKey, error)"},
-		{"NewKeyFromSeed", Func, 13, "func(seed []byte) PrivateKey"},
-		{"Options", Type, 20, ""},
-		{"Options.Context", Field, 20, ""},
-		{"Options.Hash", Field, 20, ""},
-		{"PrivateKey", Type, 13, ""},
-		{"PrivateKeySize", Const, 13, ""},
-		{"PublicKey", Type, 13, ""},
-		{"PublicKeySize", Const, 13, ""},
-		{"SeedSize", Const, 13, ""},
-		{"Sign", Func, 13, "func(privateKey PrivateKey, message []byte) []byte"},
-		{"SignatureSize", Const, 13, ""},
-		{"Verify", Func, 13, "func(publicKey PublicKey, message []byte, sig []byte) bool"},
-		{"VerifyWithOptions", Func, 20, "func(publicKey PublicKey, message []byte, sig []byte, opts *Options) error"},
+		{"(*Options).HashFunc", Method, 20},
+		{"(PrivateKey).Equal", Method, 15},
+		{"(PrivateKey).Public", Method, 13},
+		{"(PrivateKey).Seed", Method, 13},
+		{"(PrivateKey).Sign", Method, 13},
+		{"(PublicKey).Equal", Method, 15},
+		{"GenerateKey", Func, 13},
+		{"NewKeyFromSeed", Func, 13},
+		{"Options", Type, 20},
+		{"Options.Context", Field, 20},
+		{"Options.Hash", Field, 20},
+		{"PrivateKey", Type, 13},
+		{"PrivateKeySize", Const, 13},
+		{"PublicKey", Type, 13},
+		{"PublicKeySize", Const, 13},
+		{"SeedSize", Const, 13},
+		{"Sign", Func, 13},
+		{"SignatureSize", Const, 13},
+		{"Verify", Func, 13},
+		{"VerifyWithOptions", Func, 20},
 	},
 	"crypto/elliptic": {
-		{"(*CurveParams).Add", Method, 0, ""},
-		{"(*CurveParams).Double", Method, 0, ""},
-		{"(*CurveParams).IsOnCurve", Method, 0, ""},
-		{"(*CurveParams).Params", Method, 0, ""},
-		{"(*CurveParams).ScalarBaseMult", Method, 0, ""},
-		{"(*CurveParams).ScalarMult", Method, 0, ""},
-		{"Curve", Type, 0, ""},
-		{"CurveParams", Type, 0, ""},
-		{"CurveParams.B", Field, 0, ""},
-		{"CurveParams.BitSize", Field, 0, ""},
-		{"CurveParams.Gx", Field, 0, ""},
-		{"CurveParams.Gy", Field, 0, ""},
-		{"CurveParams.N", Field, 0, ""},
-		{"CurveParams.Name", Field, 5, ""},
-		{"CurveParams.P", Field, 0, ""},
-		{"GenerateKey", Func, 0, "func(curve Curve, rand io.Reader) (priv []byte, x *big.Int, y *big.Int, err error)"},
-		{"Marshal", Func, 0, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
-		{"MarshalCompressed", Func, 15, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
-		{"P224", Func, 0, "func() Curve"},
-		{"P256", Func, 0, "func() Curve"},
-		{"P384", Func, 0, "func() Curve"},
-		{"P521", Func, 0, "func() Curve"},
-		{"Unmarshal", Func, 0, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
-		{"UnmarshalCompressed", Func, 15, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
+		{"(*CurveParams).Add", Method, 0},
+		{"(*CurveParams).Double", Method, 0},
+		{"(*CurveParams).IsOnCurve", Method, 0},
+		{"(*CurveParams).Params", Method, 0},
+		{"(*CurveParams).ScalarBaseMult", Method, 0},
+		{"(*CurveParams).ScalarMult", Method, 0},
+		{"Curve", Type, 0},
+		{"CurveParams", Type, 0},
+		{"CurveParams.B", Field, 0},
+		{"CurveParams.BitSize", Field, 0},
+		{"CurveParams.Gx", Field, 0},
+		{"CurveParams.Gy", Field, 0},
+		{"CurveParams.N", Field, 0},
+		{"CurveParams.Name", Field, 5},
+		{"CurveParams.P", Field, 0},
+		{"GenerateKey", Func, 0},
+		{"Marshal", Func, 0},
+		{"MarshalCompressed", Func, 15},
+		{"P224", Func, 0},
+		{"P256", Func, 0},
+		{"P384", Func, 0},
+		{"P521", Func, 0},
+		{"Unmarshal", Func, 0},
+		{"UnmarshalCompressed", Func, 15},
 	},
 	"crypto/fips140": {
-		{"Enabled", Func, 24, "func() bool"},
+		{"Enabled", Func, 24},
 	},
 	"crypto/hkdf": {
-		{"Expand", Func, 24, "func[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLength int) ([]byte, error)"},
-		{"Extract", Func, 24, "func[H hash.Hash](h func() H, secret []byte, salt []byte) ([]byte, error)"},
-		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, secret []byte, salt []byte, info string, keyLength int) ([]byte, error)"},
+		{"Expand", Func, 24},
+		{"Extract", Func, 24},
+		{"Key", Func, 24},
 	},
 	"crypto/hmac": {
-		{"Equal", Func, 1, "func(mac1 []byte, mac2 []byte) bool"},
-		{"New", Func, 0, "func(h func() hash.Hash, key []byte) hash.Hash"},
+		{"Equal", Func, 1},
+		{"New", Func, 0},
 	},
 	"crypto/md5": {
-		{"BlockSize", Const, 0, ""},
-		{"New", Func, 0, "func() hash.Hash"},
-		{"Size", Const, 0, ""},
-		{"Sum", Func, 2, "func(data []byte) [16]byte"},
+		{"BlockSize", Const, 0},
+		{"New", Func, 0},
+		{"Size", Const, 0},
+		{"Sum", Func, 2},
 	},
 	"crypto/mlkem": {
-		{"(*DecapsulationKey1024).Bytes", Method, 24, ""},
-		{"(*DecapsulationKey1024).Decapsulate", Method, 24, ""},
-		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24, ""},
-		{"(*DecapsulationKey768).Bytes", Method, 24, ""},
-		{"(*DecapsulationKey768).Decapsulate", Method, 24, ""},
-		{"(*DecapsulationKey768).EncapsulationKey", Method, 24, ""},
-		{"(*EncapsulationKey1024).Bytes", Method, 24, ""},
-		{"(*EncapsulationKey1024).Encapsulate", Method, 24, ""},
-		{"(*EncapsulationKey768).Bytes", Method, 24, ""},
-		{"(*EncapsulationKey768).Encapsulate", Method, 24, ""},
-		{"CiphertextSize1024", Const, 24, ""},
-		{"CiphertextSize768", Const, 24, ""},
-		{"DecapsulationKey1024", Type, 24, ""},
-		{"DecapsulationKey768", Type, 24, ""},
-		{"EncapsulationKey1024", Type, 24, ""},
-		{"EncapsulationKey768", Type, 24, ""},
-		{"EncapsulationKeySize1024", Const, 24, ""},
-		{"EncapsulationKeySize768", Const, 24, ""},
-		{"GenerateKey1024", Func, 24, "func() (*DecapsulationKey1024, error)"},
-		{"GenerateKey768", Func, 24, "func() (*DecapsulationKey768, error)"},
-		{"NewDecapsulationKey1024", Func, 24, "func(seed []byte) (*DecapsulationKey1024, error)"},
-		{"NewDecapsulationKey768", Func, 24, "func(seed []byte) (*DecapsulationKey768, error)"},
-		{"NewEncapsulationKey1024", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey1024, error)"},
-		{"NewEncapsulationKey768", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey768, error)"},
-		{"SeedSize", Const, 24, ""},
-		{"SharedKeySize", Const, 24, ""},
+		{"(*DecapsulationKey1024).Bytes", Method, 24},
+		{"(*DecapsulationKey1024).Decapsulate", Method, 24},
+		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24},
+		{"(*DecapsulationKey768).Bytes", Method, 24},
+		{"(*DecapsulationKey768).Decapsulate", Method, 24},
+		{"(*DecapsulationKey768).EncapsulationKey", Method, 24},
+		{"(*EncapsulationKey1024).Bytes", Method, 24},
+		{"(*EncapsulationKey1024).Encapsulate", Method, 24},
+		{"(*EncapsulationKey768).Bytes", Method, 24},
+		{"(*EncapsulationKey768).Encapsulate", Method, 24},
+		{"CiphertextSize1024", Const, 24},
+		{"CiphertextSize768", Const, 24},
+		{"DecapsulationKey1024", Type, 24},
+		{"DecapsulationKey768", Type, 24},
+		{"EncapsulationKey1024", Type, 24},
+		{"EncapsulationKey768", Type, 24},
+		{"EncapsulationKeySize1024", Const, 24},
+		{"EncapsulationKeySize768", Const, 24},
+		{"GenerateKey1024", Func, 24},
+		{"GenerateKey768", Func, 24},
+		{"NewDecapsulationKey1024", Func, 24},
+		{"NewDecapsulationKey768", Func, 24},
+		{"NewEncapsulationKey1024", Func, 24},
+		{"NewEncapsulationKey768", Func, 24},
+		{"SeedSize", Const, 24},
+		{"SharedKeySize", Const, 24},
 	},
 	"crypto/pbkdf2": {
-		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, password string, salt []byte, iter int, keyLength int) ([]byte, error)"},
+		{"Key", Func, 24},
 	},
 	"crypto/rand": {
-		{"Int", Func, 0, "func(rand io.Reader, max *big.Int) (n *big.Int, err error)"},
-		{"Prime", Func, 0, "func(rand io.Reader, bits int) (*big.Int, error)"},
-		{"Read", Func, 0, "func(b []byte) (n int, err error)"},
-		{"Reader", Var, 0, ""},
-		{"Text", Func, 24, "func() string"},
+		{"Int", Func, 0},
+		{"Prime", Func, 0},
+		{"Read", Func, 0},
+		{"Reader", Var, 0},
+		{"Text", Func, 24},
 	},
 	"crypto/rc4": {
-		{"(*Cipher).Reset", Method, 0, ""},
-		{"(*Cipher).XORKeyStream", Method, 0, ""},
-		{"(KeySizeError).Error", Method, 0, ""},
-		{"Cipher", Type, 0, ""},
-		{"KeySizeError", Type, 0, ""},
-		{"NewCipher", Func, 0, "func(key []byte) (*Cipher, error)"},
+		{"(*Cipher).Reset", Method, 0},
+		{"(*Cipher).XORKeyStream", Method, 0},
+		{"(KeySizeError).Error", Method, 0},
+		{"Cipher", Type, 0},
+		{"KeySizeError", Type, 0},
+		{"NewCipher", Func, 0},
 	},
 	"crypto/rsa": {
-		{"(*PSSOptions).HashFunc", Method, 4, ""},
-		{"(*PrivateKey).Decrypt", Method, 5, ""},
-		{"(*PrivateKey).Equal", Method, 15, ""},
-		{"(*PrivateKey).Precompute", Method, 0, ""},
-		{"(*PrivateKey).Public", Method, 4, ""},
-		{"(*PrivateKey).Sign", Method, 4, ""},
-		{"(*PrivateKey).Size", Method, 11, ""},
-		{"(*PrivateKey).Validate", Method, 0, ""},
-		{"(*PublicKey).Equal", Method, 15, ""},
-		{"(*PublicKey).Size", Method, 11, ""},
-		{"CRTValue", Type, 0, ""},
-		{"CRTValue.Coeff", Field, 0, ""},
-		{"CRTValue.Exp", Field, 0, ""},
-		{"CRTValue.R", Field, 0, ""},
-		{"DecryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)"},
-		{"DecryptPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)"},
-		{"DecryptPKCS1v15SessionKey", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error"},
-		{"EncryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)"},
-		{"EncryptPKCS1v15", Func, 0, "func(random io.Reader, pub *PublicKey, msg []byte) ([]byte, error)"},
-		{"ErrDecryption", Var, 0, ""},
-		{"ErrMessageTooLong", Var, 0, ""},
-		{"ErrVerification", Var, 0, ""},
-		{"GenerateKey", Func, 0, "func(random io.Reader, bits int) (*PrivateKey, error)"},
-		{"GenerateMultiPrimeKey", Func, 0, "func(random io.Reader, nprimes int, bits int) (*PrivateKey, error)"},
-		{"OAEPOptions", Type, 5, ""},
-		{"OAEPOptions.Hash", Field, 5, ""},
-		{"OAEPOptions.Label", Field, 5, ""},
-		{"OAEPOptions.MGFHash", Field, 20, ""},
-		{"PKCS1v15DecryptOptions", Type, 5, ""},
-		{"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5, ""},
-		{"PSSOptions", Type, 2, ""},
-		{"PSSOptions.Hash", Field, 4, ""},
-		{"PSSOptions.SaltLength", Field, 2, ""},
-		{"PSSSaltLengthAuto", Const, 2, ""},
-		{"PSSSaltLengthEqualsHash", Const, 2, ""},
-		{"PrecomputedValues", Type, 0, ""},
-		{"PrecomputedValues.CRTValues", Field, 0, ""},
-		{"PrecomputedValues.Dp", Field, 0, ""},
-		{"PrecomputedValues.Dq", Field, 0, ""},
-		{"PrecomputedValues.Qinv", Field, 0, ""},
-		{"PrivateKey", Type, 0, ""},
-		{"PrivateKey.D", Field, 0, ""},
-		{"PrivateKey.Precomputed", Field, 0, ""},
-		{"PrivateKey.Primes", Field, 0, ""},
-		{"PrivateKey.PublicKey", Field, 0, ""},
-		{"PublicKey", Type, 0, ""},
-		{"PublicKey.E", Field, 0, ""},
-		{"PublicKey.N", Field, 0, ""},
-		{"SignPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)"},
-		{"SignPSS", Func, 2, "func(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)"},
-		{"VerifyPKCS1v15", Func, 0, "func(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error"},
-		{"VerifyPSS", Func, 2, "func(pub *PublicKey, hash crypto.Hash, digest []byte, sig []byte, opts *PSSOptions) error"},
+		{"(*PSSOptions).HashFunc", Method, 4},
+		{"(*PrivateKey).Decrypt", Method, 5},
+		{"(*PrivateKey).Equal", Method, 15},
+		{"(*PrivateKey).Precompute", Method, 0},
+		{"(*PrivateKey).Public", Method, 4},
+		{"(*PrivateKey).Sign", Method, 4},
+		{"(*PrivateKey).Size", Method, 11},
+		{"(*PrivateKey).Validate", Method, 0},
+		{"(*PublicKey).Equal", Method, 15},
+		{"(*PublicKey).Size", Method, 11},
+		{"CRTValue", Type, 0},
+		{"CRTValue.Coeff", Field, 0},
+		{"CRTValue.Exp", Field, 0},
+		{"CRTValue.R", Field, 0},
+		{"DecryptOAEP", Func, 0},
+		{"DecryptPKCS1v15", Func, 0},
+		{"DecryptPKCS1v15SessionKey", Func, 0},
+		{"EncryptOAEP", Func, 0},
+		{"EncryptPKCS1v15", Func, 0},
+		{"ErrDecryption", Var, 0},
+		{"ErrMessageTooLong", Var, 0},
+		{"ErrVerification", Var, 0},
+		{"GenerateKey", Func, 0},
+		{"GenerateMultiPrimeKey", Func, 0},
+		{"OAEPOptions", Type, 5},
+		{"OAEPOptions.Hash", Field, 5},
+		{"OAEPOptions.Label", Field, 5},
+		{"OAEPOptions.MGFHash", Field, 20},
+		{"PKCS1v15DecryptOptions", Type, 5},
+		{"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5},
+		{"PSSOptions", Type, 2},
+		{"PSSOptions.Hash", Field, 4},
+		{"PSSOptions.SaltLength", Field, 2},
+		{"PSSSaltLengthAuto", Const, 2},
+		{"PSSSaltLengthEqualsHash", Const, 2},
+		{"PrecomputedValues", Type, 0},
+		{"PrecomputedValues.CRTValues", Field, 0},
+		{"PrecomputedValues.Dp", Field, 0},
+		{"PrecomputedValues.Dq", Field, 0},
+		{"PrecomputedValues.Qinv", Field, 0},
+		{"PrivateKey", Type, 0},
+		{"PrivateKey.D", Field, 0},
+		{"PrivateKey.Precomputed", Field, 0},
+		{"PrivateKey.Primes", Field, 0},
+		{"PrivateKey.PublicKey", Field, 0},
+		{"PublicKey", Type, 0},
+		{"PublicKey.E", Field, 0},
+		{"PublicKey.N", Field, 0},
+		{"SignPKCS1v15", Func, 0},
+		{"SignPSS", Func, 2},
+		{"VerifyPKCS1v15", Func, 0},
+		{"VerifyPSS", Func, 2},
 	},
 	"crypto/sha1": {
-		{"BlockSize", Const, 0, ""},
-		{"New", Func, 0, "func() hash.Hash"},
-		{"Size", Const, 0, ""},
-		{"Sum", Func, 2, "func(data []byte) [20]byte"},
+		{"BlockSize", Const, 0},
+		{"New", Func, 0},
+		{"Size", Const, 0},
+		{"Sum", Func, 2},
 	},
 	"crypto/sha256": {
-		{"BlockSize", Const, 0, ""},
-		{"New", Func, 0, "func() hash.Hash"},
-		{"New224", Func, 0, "func() hash.Hash"},
-		{"Size", Const, 0, ""},
-		{"Size224", Const, 0, ""},
-		{"Sum224", Func, 2, "func(data []byte) [28]byte"},
-		{"Sum256", Func, 2, "func(data []byte) [32]byte"},
+		{"BlockSize", Const, 0},
+		{"New", Func, 0},
+		{"New224", Func, 0},
+		{"Size", Const, 0},
+		{"Size224", Const, 0},
+		{"Sum224", Func, 2},
+		{"Sum256", Func, 2},
 	},
 	"crypto/sha3": {
-		{"(*SHA3).AppendBinary", Method, 24, ""},
-		{"(*SHA3).BlockSize", Method, 24, ""},
-		{"(*SHA3).MarshalBinary", Method, 24, ""},
-		{"(*SHA3).Reset", Method, 24, ""},
-		{"(*SHA3).Size", Method, 24, ""},
-		{"(*SHA3).Sum", Method, 24, ""},
-		{"(*SHA3).UnmarshalBinary", Method, 24, ""},
-		{"(*SHA3).Write", Method, 24, ""},
-		{"(*SHAKE).AppendBinary", Method, 24, ""},
-		{"(*SHAKE).BlockSize", Method, 24, ""},
-		{"(*SHAKE).MarshalBinary", Method, 24, ""},
-		{"(*SHAKE).Read", Method, 24, ""},
-		{"(*SHAKE).Reset", Method, 24, ""},
-		{"(*SHAKE).UnmarshalBinary", Method, 24, ""},
-		{"(*SHAKE).Write", Method, 24, ""},
-		{"New224", Func, 24, "func() *SHA3"},
-		{"New256", Func, 24, "func() *SHA3"},
-		{"New384", Func, 24, "func() *SHA3"},
-		{"New512", Func, 24, "func() *SHA3"},
-		{"NewCSHAKE128", Func, 24, "func(N []byte, S []byte) *SHAKE"},
-		{"NewCSHAKE256", Func, 24, "func(N []byte, S []byte) *SHAKE"},
-		{"NewSHAKE128", Func, 24, "func() *SHAKE"},
-		{"NewSHAKE256", Func, 24, "func() *SHAKE"},
-		{"SHA3", Type, 24, ""},
-		{"SHAKE", Type, 24, ""},
-		{"Sum224", Func, 24, "func(data []byte) [28]byte"},
-		{"Sum256", Func, 24, "func(data []byte) [32]byte"},
-		{"Sum384", Func, 24, "func(data []byte) [48]byte"},
-		{"Sum512", Func, 24, "func(data []byte) [64]byte"},
-		{"SumSHAKE128", Func, 24, "func(data []byte, length int) []byte"},
-		{"SumSHAKE256", Func, 24, "func(data []byte, length int) []byte"},
+		{"(*SHA3).AppendBinary", Method, 24},
+		{"(*SHA3).BlockSize", Method, 24},
+		{"(*SHA3).MarshalBinary", Method, 24},
+		{"(*SHA3).Reset", Method, 24},
+		{"(*SHA3).Size", Method, 24},
+		{"(*SHA3).Sum", Method, 24},
+		{"(*SHA3).UnmarshalBinary", Method, 24},
+		{"(*SHA3).Write", Method, 24},
+		{"(*SHAKE).AppendBinary", Method, 24},
+		{"(*SHAKE).BlockSize", Method, 24},
+		{"(*SHAKE).MarshalBinary", Method, 24},
+		{"(*SHAKE).Read", Method, 24},
+		{"(*SHAKE).Reset", Method, 24},
+		{"(*SHAKE).UnmarshalBinary", Method, 24},
+		{"(*SHAKE).Write", Method, 24},
+		{"New224", Func, 24},
+		{"New256", Func, 24},
+		{"New384", Func, 24},
+		{"New512", Func, 24},
+		{"NewCSHAKE128", Func, 24},
+		{"NewCSHAKE256", Func, 24},
+		{"NewSHAKE128", Func, 24},
+		{"NewSHAKE256", Func, 24},
+		{"SHA3", Type, 24},
+		{"SHAKE", Type, 24},
+		{"Sum224", Func, 24},
+		{"Sum256", Func, 24},
+		{"Sum384", Func, 24},
+		{"Sum512", Func, 24},
+		{"SumSHAKE128", Func, 24},
+		{"SumSHAKE256", Func, 24},
 	},
 	"crypto/sha512": {
-		{"BlockSize", Const, 0, ""},
-		{"New", Func, 0, "func() hash.Hash"},
-		{"New384", Func, 0, "func() hash.Hash"},
-		{"New512_224", Func, 5, "func() hash.Hash"},
-		{"New512_256", Func, 5, "func() hash.Hash"},
-		{"Size", Const, 0, ""},
-		{"Size224", Const, 5, ""},
-		{"Size256", Const, 5, ""},
-		{"Size384", Const, 0, ""},
-		{"Sum384", Func, 2, "func(data []byte) [48]byte"},
-		{"Sum512", Func, 2, "func(data []byte) [64]byte"},
-		{"Sum512_224", Func, 5, "func(data []byte) [28]byte"},
-		{"Sum512_256", Func, 5, "func(data []byte) [32]byte"},
+		{"BlockSize", Const, 0},
+		{"New", Func, 0},
+		{"New384", Func, 0},
+		{"New512_224", Func, 5},
+		{"New512_256", Func, 5},
+		{"Size", Const, 0},
+		{"Size224", Const, 5},
+		{"Size256", Const, 5},
+		{"Size384", Const, 0},
+		{"Sum384", Func, 2},
+		{"Sum512", Func, 2},
+		{"Sum512_224", Func, 5},
+		{"Sum512_256", Func, 5},
 	},
 	"crypto/subtle": {
-		{"ConstantTimeByteEq", Func, 0, "func(x uint8, y uint8) int"},
-		{"ConstantTimeCompare", Func, 0, "func(x []byte, y []byte) int"},
-		{"ConstantTimeCopy", Func, 0, "func(v int, x []byte, y []byte)"},
-		{"ConstantTimeEq", Func, 0, "func(x int32, y int32) int"},
-		{"ConstantTimeLessOrEq", Func, 2, "func(x int, y int) int"},
-		{"ConstantTimeSelect", Func, 0, "func(v int, x int, y int) int"},
-		{"WithDataIndependentTiming", Func, 24, "func(f func())"},
-		{"XORBytes", Func, 20, "func(dst []byte, x []byte, y []byte) int"},
+		{"ConstantTimeByteEq", Func, 0},
+		{"ConstantTimeCompare", Func, 0},
+		{"ConstantTimeCopy", Func, 0},
+		{"ConstantTimeEq", Func, 0},
+		{"ConstantTimeLessOrEq", Func, 2},
+		{"ConstantTimeSelect", Func, 0},
+		{"WithDataIndependentTiming", Func, 24},
+		{"XORBytes", Func, 20},
 	},
 	"crypto/tls": {
-		{"(*CertificateRequestInfo).Context", Method, 17, ""},
-		{"(*CertificateRequestInfo).SupportsCertificate", Method, 14, ""},
-		{"(*CertificateVerificationError).Error", Method, 20, ""},
-		{"(*CertificateVerificationError).Unwrap", Method, 20, ""},
-		{"(*ClientHelloInfo).Context", Method, 17, ""},
-		{"(*ClientHelloInfo).SupportsCertificate", Method, 14, ""},
-		{"(*ClientSessionState).ResumptionState", Method, 21, ""},
-		{"(*Config).BuildNameToCertificate", Method, 0, ""},
-		{"(*Config).Clone", Method, 8, ""},
-		{"(*Config).DecryptTicket", Method, 21, ""},
-		{"(*Config).EncryptTicket", Method, 21, ""},
-		{"(*Config).SetSessionTicketKeys", Method, 5, ""},
-		{"(*Conn).Close", Method, 0, ""},
-		{"(*Conn).CloseWrite", Method, 8, ""},
-		{"(*Conn).ConnectionState", Method, 0, ""},
-		{"(*Conn).Handshake", Method, 0, ""},
-		{"(*Conn).HandshakeContext", Method, 17, ""},
-		{"(*Conn).LocalAddr", Method, 0, ""},
-		{"(*Conn).NetConn", Method, 18, ""},
-		{"(*Conn).OCSPResponse", Method, 0, ""},
-		{"(*Conn).Read", Method, 0, ""},
-		{"(*Conn).RemoteAddr", Method, 0, ""},
-		{"(*Conn).SetDeadline", Method, 0, ""},
-		{"(*Conn).SetReadDeadline", Method, 0, ""},
-		{"(*Conn).SetWriteDeadline", Method, 0, ""},
-		{"(*Conn).VerifyHostname", Method, 0, ""},
-		{"(*Conn).Write", Method, 0, ""},
-		{"(*ConnectionState).ExportKeyingMaterial", Method, 11, ""},
-		{"(*Dialer).Dial", Method, 15, ""},
-		{"(*Dialer).DialContext", Method, 15, ""},
-		{"(*ECHRejectionError).Error", Method, 23, ""},
-		{"(*QUICConn).Close", Method, 21, ""},
-		{"(*QUICConn).ConnectionState", Method, 21, ""},
-		{"(*QUICConn).HandleData", Method, 21, ""},
-		{"(*QUICConn).NextEvent", Method, 21, ""},
-		{"(*QUICConn).SendSessionTicket", Method, 21, ""},
-		{"(*QUICConn).SetTransportParameters", Method, 21, ""},
-		{"(*QUICConn).Start", Method, 21, ""},
-		{"(*QUICConn).StoreSession", Method, 23, ""},
-		{"(*SessionState).Bytes", Method, 21, ""},
-		{"(AlertError).Error", Method, 21, ""},
-		{"(ClientAuthType).String", Method, 15, ""},
-		{"(CurveID).String", Method, 15, ""},
-		{"(QUICEncryptionLevel).String", Method, 21, ""},
-		{"(RecordHeaderError).Error", Method, 6, ""},
-		{"(SignatureScheme).String", Method, 15, ""},
-		{"AlertError", Type, 21, ""},
-		{"Certificate", Type, 0, ""},
-		{"Certificate.Certificate", Field, 0, ""},
-		{"Certificate.Leaf", Field, 0, ""},
-		{"Certificate.OCSPStaple", Field, 0, ""},
-		{"Certificate.PrivateKey", Field, 0, ""},
-		{"Certificate.SignedCertificateTimestamps", Field, 5, ""},
-		{"Certificate.SupportedSignatureAlgorithms", Field, 14, ""},
-		{"CertificateRequestInfo", Type, 8, ""},
-		{"CertificateRequestInfo.AcceptableCAs", Field, 8, ""},
-		{"CertificateRequestInfo.SignatureSchemes", Field, 8, ""},
-		{"CertificateRequestInfo.Version", Field, 14, ""},
-		{"CertificateVerificationError", Type, 20, ""},
-		{"CertificateVerificationError.Err", Field, 20, ""},
-		{"CertificateVerificationError.UnverifiedCertificates", Field, 20, ""},
-		{"CipherSuite", Type, 14, ""},
-		{"CipherSuite.ID", Field, 14, ""},
-		{"CipherSuite.Insecure", Field, 14, ""},
-		{"CipherSuite.Name", Field, 14, ""},
-		{"CipherSuite.SupportedVersions", Field, 14, ""},
-		{"CipherSuiteName", Func, 14, "func(id uint16) string"},
-		{"CipherSuites", Func, 14, "func() []*CipherSuite"},
-		{"Client", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
-		{"ClientAuthType", Type, 0, ""},
-		{"ClientHelloInfo", Type, 4, ""},
-		{"ClientHelloInfo.CipherSuites", Field, 4, ""},
-		{"ClientHelloInfo.Conn", Field, 8, ""},
-		{"ClientHelloInfo.Extensions", Field, 24, ""},
-		{"ClientHelloInfo.ServerName", Field, 4, ""},
-		{"ClientHelloInfo.SignatureSchemes", Field, 8, ""},
-		{"ClientHelloInfo.SupportedCurves", Field, 4, ""},
-		{"ClientHelloInfo.SupportedPoints", Field, 4, ""},
-		{"ClientHelloInfo.SupportedProtos", Field, 8, ""},
-		{"ClientHelloInfo.SupportedVersions", Field, 8, ""},
-		{"ClientSessionCache", Type, 3, ""},
-		{"ClientSessionState", Type, 3, ""},
-		{"Config", Type, 0, ""},
-		{"Config.Certificates", Field, 0, ""},
-		{"Config.CipherSuites", Field, 0, ""},
-		{"Config.ClientAuth", Field, 0, ""},
-		{"Config.ClientCAs", Field, 0, ""},
-		{"Config.ClientSessionCache", Field, 3, ""},
-		{"Config.CurvePreferences", Field, 3, ""},
-		{"Config.DynamicRecordSizingDisabled", Field, 7, ""},
-		{"Config.EncryptedClientHelloConfigList", Field, 23, ""},
-		{"Config.EncryptedClientHelloKeys", Field, 24, ""},
-		{"Config.EncryptedClientHelloRejectionVerify", Field, 23, ""},
-		{"Config.GetCertificate", Field, 4, ""},
-		{"Config.GetClientCertificate", Field, 8, ""},
-		{"Config.GetConfigForClient", Field, 8, ""},
-		{"Config.InsecureSkipVerify", Field, 0, ""},
-		{"Config.KeyLogWriter", Field, 8, ""},
-		{"Config.MaxVersion", Field, 2, ""},
-		{"Config.MinVersion", Field, 2, ""},
-		{"Config.NameToCertificate", Field, 0, ""},
-		{"Config.NextProtos", Field, 0, ""},
-		{"Config.PreferServerCipherSuites", Field, 1, ""},
-		{"Config.Rand", Field, 0, ""},
-		{"Config.Renegotiation", Field, 7, ""},
-		{"Config.RootCAs", Field, 0, ""},
-		{"Config.ServerName", Field, 0, ""},
-		{"Config.SessionTicketKey", Field, 1, ""},
-		{"Config.SessionTicketsDisabled", Field, 1, ""},
-		{"Config.Time", Field, 0, ""},
-		{"Config.UnwrapSession", Field, 21, ""},
-		{"Config.VerifyConnection", Field, 15, ""},
-		{"Config.VerifyPeerCertificate", Field, 8, ""},
-		{"Config.WrapSession", Field, 21, ""},
-		{"Conn", Type, 0, ""},
-		{"ConnectionState", Type, 0, ""},
-		{"ConnectionState.CipherSuite", Field, 0, ""},
-		{"ConnectionState.CurveID", Field, 25, ""},
-		{"ConnectionState.DidResume", Field, 1, ""},
-		{"ConnectionState.ECHAccepted", Field, 23, ""},
-		{"ConnectionState.HandshakeComplete", Field, 0, ""},
-		{"ConnectionState.NegotiatedProtocol", Field, 0, ""},
-		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0, ""},
-		{"ConnectionState.OCSPResponse", Field, 5, ""},
-		{"ConnectionState.PeerCertificates", Field, 0, ""},
-		{"ConnectionState.ServerName", Field, 0, ""},
-		{"ConnectionState.SignedCertificateTimestamps", Field, 5, ""},
-		{"ConnectionState.TLSUnique", Field, 4, ""},
-		{"ConnectionState.VerifiedChains", Field, 0, ""},
-		{"ConnectionState.Version", Field, 3, ""},
-		{"CurveID", Type, 3, ""},
-		{"CurveP256", Const, 3, ""},
-		{"CurveP384", Const, 3, ""},
-		{"CurveP521", Const, 3, ""},
-		{"Dial", Func, 0, "func(network string, addr string, config *Config) (*Conn, error)"},
-		{"DialWithDialer", Func, 3, "func(dialer *net.Dialer, network string, addr string, config *Config) (*Conn, error)"},
-		{"Dialer", Type, 15, ""},
-		{"Dialer.Config", Field, 15, ""},
-		{"Dialer.NetDialer", Field, 15, ""},
-		{"ECDSAWithP256AndSHA256", Const, 8, ""},
-		{"ECDSAWithP384AndSHA384", Const, 8, ""},
-		{"ECDSAWithP521AndSHA512", Const, 8, ""},
-		{"ECDSAWithSHA1", Const, 10, ""},
-		{"ECHRejectionError", Type, 23, ""},
-		{"ECHRejectionError.RetryConfigList", Field, 23, ""},
-		{"Ed25519", Const, 13, ""},
-		{"EncryptedClientHelloKey", Type, 24, ""},
-		{"EncryptedClientHelloKey.Config", Field, 24, ""},
-		{"EncryptedClientHelloKey.PrivateKey", Field, 24, ""},
-		{"EncryptedClientHelloKey.SendAsRetry", Field, 24, ""},
-		{"InsecureCipherSuites", Func, 14, "func() []*CipherSuite"},
-		{"Listen", Func, 0, "func(network string, laddr string, config *Config) (net.Listener, error)"},
-		{"LoadX509KeyPair", Func, 0, "func(certFile string, keyFile string) (Certificate, error)"},
-		{"NewLRUClientSessionCache", Func, 3, "func(capacity int) ClientSessionCache"},
-		{"NewListener", Func, 0, "func(inner net.Listener, config *Config) net.Listener"},
-		{"NewResumptionState", Func, 21, "func(ticket []byte, state *SessionState) (*ClientSessionState, error)"},
-		{"NoClientCert", Const, 0, ""},
-		{"PKCS1WithSHA1", Const, 8, ""},
-		{"PKCS1WithSHA256", Const, 8, ""},
-		{"PKCS1WithSHA384", Const, 8, ""},
-		{"PKCS1WithSHA512", Const, 8, ""},
-		{"PSSWithSHA256", Const, 8, ""},
-		{"PSSWithSHA384", Const, 8, ""},
-		{"PSSWithSHA512", Const, 8, ""},
-		{"ParseSessionState", Func, 21, "func(data []byte) (*SessionState, error)"},
-		{"QUICClient", Func, 21, "func(config *QUICConfig) *QUICConn"},
-		{"QUICConfig", Type, 21, ""},
-		{"QUICConfig.EnableSessionEvents", Field, 23, ""},
-		{"QUICConfig.TLSConfig", Field, 21, ""},
-		{"QUICConn", Type, 21, ""},
-		{"QUICEncryptionLevel", Type, 21, ""},
-		{"QUICEncryptionLevelApplication", Const, 21, ""},
-		{"QUICEncryptionLevelEarly", Const, 21, ""},
-		{"QUICEncryptionLevelHandshake", Const, 21, ""},
-		{"QUICEncryptionLevelInitial", Const, 21, ""},
-		{"QUICEvent", Type, 21, ""},
-		{"QUICEvent.Data", Field, 21, ""},
-		{"QUICEvent.Kind", Field, 21, ""},
-		{"QUICEvent.Level", Field, 21, ""},
-		{"QUICEvent.SessionState", Field, 23, ""},
-		{"QUICEvent.Suite", Field, 21, ""},
-		{"QUICEventKind", Type, 21, ""},
-		{"QUICHandshakeDone", Const, 21, ""},
-		{"QUICNoEvent", Const, 21, ""},
-		{"QUICRejectedEarlyData", Const, 21, ""},
-		{"QUICResumeSession", Const, 23, ""},
-		{"QUICServer", Func, 21, "func(config *QUICConfig) *QUICConn"},
-		{"QUICSessionTicketOptions", Type, 21, ""},
-		{"QUICSessionTicketOptions.EarlyData", Field, 21, ""},
-		{"QUICSessionTicketOptions.Extra", Field, 23, ""},
-		{"QUICSetReadSecret", Const, 21, ""},
-		{"QUICSetWriteSecret", Const, 21, ""},
-		{"QUICStoreSession", Const, 23, ""},
-		{"QUICTransportParameters", Const, 21, ""},
-		{"QUICTransportParametersRequired", Const, 21, ""},
-		{"QUICWriteData", Const, 21, ""},
-		{"RecordHeaderError", Type, 6, ""},
-		{"RecordHeaderError.Conn", Field, 12, ""},
-		{"RecordHeaderError.Msg", Field, 6, ""},
-		{"RecordHeaderError.RecordHeader", Field, 6, ""},
-		{"RenegotiateFreelyAsClient", Const, 7, ""},
-		{"RenegotiateNever", Const, 7, ""},
-		{"RenegotiateOnceAsClient", Const, 7, ""},
-		{"RenegotiationSupport", Type, 7, ""},
-		{"RequestClientCert", Const, 0, ""},
-		{"RequireAndVerifyClientCert", Const, 0, ""},
-		{"RequireAnyClientCert", Const, 0, ""},
-		{"Server", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
-		{"SessionState", Type, 21, ""},
-		{"SessionState.EarlyData", Field, 21, ""},
-		{"SessionState.Extra", Field, 21, ""},
-		{"SignatureScheme", Type, 8, ""},
-		{"TLS_AES_128_GCM_SHA256", Const, 12, ""},
-		{"TLS_AES_256_GCM_SHA384", Const, 12, ""},
-		{"TLS_CHACHA20_POLY1305_SHA256", Const, 12, ""},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2, ""},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
-		{"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
-		{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2, ""},
-		{"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
-		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
-		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
-		{"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2, ""},
-		{"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
-		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
-		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
-		{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
-		{"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
-		{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
-		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
-		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
-		{"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0, ""},
-		{"TLS_FALLBACK_SCSV", Const, 4, ""},
-		{"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
-		{"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
-		{"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
-		{"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6, ""},
-		{"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
-		{"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6, ""},
-		{"TLS_RSA_WITH_RC4_128_SHA", Const, 0, ""},
-		{"VerifyClientCertIfGiven", Const, 0, ""},
-		{"VersionName", Func, 21, "func(version uint16) string"},
-		{"VersionSSL30", Const, 2, ""},
-		{"VersionTLS10", Const, 2, ""},
-		{"VersionTLS11", Const, 2, ""},
-		{"VersionTLS12", Const, 2, ""},
-		{"VersionTLS13", Const, 12, ""},
-		{"X25519", Const, 8, ""},
-		{"X25519MLKEM768", Const, 24, ""},
-		{"X509KeyPair", Func, 0, "func(certPEMBlock []byte, keyPEMBlock []byte) (Certificate, error)"},
+		{"(*CertificateRequestInfo).Context", Method, 17},
+		{"(*CertificateRequestInfo).SupportsCertificate", Method, 14},
+		{"(*CertificateVerificationError).Error", Method, 20},
+		{"(*CertificateVerificationError).Unwrap", Method, 20},
+		{"(*ClientHelloInfo).Context", Method, 17},
+		{"(*ClientHelloInfo).SupportsCertificate", Method, 14},
+		{"(*ClientSessionState).ResumptionState", Method, 21},
+		{"(*Config).BuildNameToCertificate", Method, 0},
+		{"(*Config).Clone", Method, 8},
+		{"(*Config).DecryptTicket", Method, 21},
+		{"(*Config).EncryptTicket", Method, 21},
+		{"(*Config).SetSessionTicketKeys", Method, 5},
+		{"(*Conn).Close", Method, 0},
+		{"(*Conn).CloseWrite", Method, 8},
+		{"(*Conn).ConnectionState", Method, 0},
+		{"(*Conn).Handshake", Method, 0},
+		{"(*Conn).HandshakeContext", Method, 17},
+		{"(*Conn).LocalAddr", Method, 0},
+		{"(*Conn).NetConn", Method, 18},
+		{"(*Conn).OCSPResponse", Method, 0},
+		{"(*Conn).Read", Method, 0},
+		{"(*Conn).RemoteAddr", Method, 0},
+		{"(*Conn).SetDeadline", Method, 0},
+		{"(*Conn).SetReadDeadline", Method, 0},
+		{"(*Conn).SetWriteDeadline", Method, 0},
+		{"(*Conn).VerifyHostname", Method, 0},
+		{"(*Conn).Write", Method, 0},
+		{"(*ConnectionState).ExportKeyingMaterial", Method, 11},
+		{"(*Dialer).Dial", Method, 15},
+		{"(*Dialer).DialContext", Method, 15},
+		{"(*ECHRejectionError).Error", Method, 23},
+		{"(*QUICConn).Close", Method, 21},
+		{"(*QUICConn).ConnectionState", Method, 21},
+		{"(*QUICConn).HandleData", Method, 21},
+		{"(*QUICConn).NextEvent", Method, 21},
+		{"(*QUICConn).SendSessionTicket", Method, 21},
+		{"(*QUICConn).SetTransportParameters", Method, 21},
+		{"(*QUICConn).Start", Method, 21},
+		{"(*QUICConn).StoreSession", Method, 23},
+		{"(*SessionState).Bytes", Method, 21},
+		{"(AlertError).Error", Method, 21},
+		{"(ClientAuthType).String", Method, 15},
+		{"(CurveID).String", Method, 15},
+		{"(QUICEncryptionLevel).String", Method, 21},
+		{"(RecordHeaderError).Error", Method, 6},
+		{"(SignatureScheme).String", Method, 15},
+		{"AlertError", Type, 21},
+		{"Certificate", Type, 0},
+		{"Certificate.Certificate", Field, 0},
+		{"Certificate.Leaf", Field, 0},
+		{"Certificate.OCSPStaple", Field, 0},
+		{"Certificate.PrivateKey", Field, 0},
+		{"Certificate.SignedCertificateTimestamps", Field, 5},
+		{"Certificate.SupportedSignatureAlgorithms", Field, 14},
+		{"CertificateRequestInfo", Type, 8},
+		{"CertificateRequestInfo.AcceptableCAs", Field, 8},
+		{"CertificateRequestInfo.SignatureSchemes", Field, 8},
+		{"CertificateRequestInfo.Version", Field, 14},
+		{"CertificateVerificationError", Type, 20},
+		{"CertificateVerificationError.Err", Field, 20},
+		{"CertificateVerificationError.UnverifiedCertificates", Field, 20},
+		{"CipherSuite", Type, 14},
+		{"CipherSuite.ID", Field, 14},
+		{"CipherSuite.Insecure", Field, 14},
+		{"CipherSuite.Name", Field, 14},
+		{"CipherSuite.SupportedVersions", Field, 14},
+		{"CipherSuiteName", Func, 14},
+		{"CipherSuites", Func, 14},
+		{"Client", Func, 0},
+		{"ClientAuthType", Type, 0},
+		{"ClientHelloInfo", Type, 4},
+		{"ClientHelloInfo.CipherSuites", Field, 4},
+		{"ClientHelloInfo.Conn", Field, 8},
+		{"ClientHelloInfo.Extensions", Field, 24},
+		{"ClientHelloInfo.ServerName", Field, 4},
+		{"ClientHelloInfo.SignatureSchemes", Field, 8},
+		{"ClientHelloInfo.SupportedCurves", Field, 4},
+		{"ClientHelloInfo.SupportedPoints", Field, 4},
+		{"ClientHelloInfo.SupportedProtos", Field, 8},
+		{"ClientHelloInfo.SupportedVersions", Field, 8},
+		{"ClientSessionCache", Type, 3},
+		{"ClientSessionState", Type, 3},
+		{"Config", Type, 0},
+		{"Config.Certificates", Field, 0},
+		{"Config.CipherSuites", Field, 0},
+		{"Config.ClientAuth", Field, 0},
+		{"Config.ClientCAs", Field, 0},
+		{"Config.ClientSessionCache", Field, 3},
+		{"Config.CurvePreferences", Field, 3},
+		{"Config.DynamicRecordSizingDisabled", Field, 7},
+		{"Config.EncryptedClientHelloConfigList", Field, 23},
+		{"Config.EncryptedClientHelloKeys", Field, 24},
+		{"Config.EncryptedClientHelloRejectionVerify", Field, 23},
+		{"Config.GetCertificate", Field, 4},
+		{"Config.GetClientCertificate", Field, 8},
+		{"Config.GetConfigForClient", Field, 8},
+		{"Config.InsecureSkipVerify", Field, 0},
+		{"Config.KeyLogWriter", Field, 8},
+		{"Config.MaxVersion", Field, 2},
+		{"Config.MinVersion", Field, 2},
+		{"Config.NameToCertificate", Field, 0},
+		{"Config.NextProtos", Field, 0},
+		{"Config.PreferServerCipherSuites", Field, 1},
+		{"Config.Rand", Field, 0},
+		{"Config.Renegotiation", Field, 7},
+		{"Config.RootCAs", Field, 0},
+		{"Config.ServerName", Field, 0},
+		{"Config.SessionTicketKey", Field, 1},
+		{"Config.SessionTicketsDisabled", Field, 1},
+		{"Config.Time", Field, 0},
+		{"Config.UnwrapSession", Field, 21},
+		{"Config.VerifyConnection", Field, 15},
+		{"Config.VerifyPeerCertificate", Field, 8},
+		{"Config.WrapSession", Field, 21},
+		{"Conn", Type, 0},
+		{"ConnectionState", Type, 0},
+		{"ConnectionState.CipherSuite", Field, 0},
+		{"ConnectionState.DidResume", Field, 1},
+		{"ConnectionState.ECHAccepted", Field, 23},
+		{"ConnectionState.HandshakeComplete", Field, 0},
+		{"ConnectionState.NegotiatedProtocol", Field, 0},
+		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
+		{"ConnectionState.OCSPResponse", Field, 5},
+		{"ConnectionState.PeerCertificates", Field, 0},
+		{"ConnectionState.ServerName", Field, 0},
+		{"ConnectionState.SignedCertificateTimestamps", Field, 5},
+		{"ConnectionState.TLSUnique", Field, 4},
+		{"ConnectionState.VerifiedChains", Field, 0},
+		{"ConnectionState.Version", Field, 3},
+		{"CurveID", Type, 3},
+		{"CurveP256", Const, 3},
+		{"CurveP384", Const, 3},
+		{"CurveP521", Const, 3},
+		{"Dial", Func, 0},
+		{"DialWithDialer", Func, 3},
+		{"Dialer", Type, 15},
+		{"Dialer.Config", Field, 15},
+		{"Dialer.NetDialer", Field, 15},
+		{"ECDSAWithP256AndSHA256", Const, 8},
+		{"ECDSAWithP384AndSHA384", Const, 8},
+		{"ECDSAWithP521AndSHA512", Const, 8},
+		{"ECDSAWithSHA1", Const, 10},
+		{"ECHRejectionError", Type, 23},
+		{"ECHRejectionError.RetryConfigList", Field, 23},
+		{"Ed25519", Const, 13},
+		{"EncryptedClientHelloKey", Type, 24},
+		{"EncryptedClientHelloKey.Config", Field, 24},
+		{"EncryptedClientHelloKey.PrivateKey", Field, 24},
+		{"EncryptedClientHelloKey.SendAsRetry", Field, 24},
+		{"InsecureCipherSuites", Func, 14},
+		{"Listen", Func, 0},
+		{"LoadX509KeyPair", Func, 0},
+		{"NewLRUClientSessionCache", Func, 3},
+		{"NewListener", Func, 0},
+		{"NewResumptionState", Func, 21},
+		{"NoClientCert", Const, 0},
+		{"PKCS1WithSHA1", Const, 8},
+		{"PKCS1WithSHA256", Const, 8},
+		{"PKCS1WithSHA384", Const, 8},
+		{"PKCS1WithSHA512", Const, 8},
+		{"PSSWithSHA256", Const, 8},
+		{"PSSWithSHA384", Const, 8},
+		{"PSSWithSHA512", Const, 8},
+		{"ParseSessionState", Func, 21},
+		{"QUICClient", Func, 21},
+		{"QUICConfig", Type, 21},
+		{"QUICConfig.EnableSessionEvents", Field, 23},
+		{"QUICConfig.TLSConfig", Field, 21},
+		{"QUICConn", Type, 21},
+		{"QUICEncryptionLevel", Type, 21},
+		{"QUICEncryptionLevelApplication", Const, 21},
+		{"QUICEncryptionLevelEarly", Const, 21},
+		{"QUICEncryptionLevelHandshake", Const, 21},
+		{"QUICEncryptionLevelInitial", Const, 21},
+		{"QUICEvent", Type, 21},
+		{"QUICEvent.Data", Field, 21},
+		{"QUICEvent.Kind", Field, 21},
+		{"QUICEvent.Level", Field, 21},
+		{"QUICEvent.SessionState", Field, 23},
+		{"QUICEvent.Suite", Field, 21},
+		{"QUICEventKind", Type, 21},
+		{"QUICHandshakeDone", Const, 21},
+		{"QUICNoEvent", Const, 21},
+		{"QUICRejectedEarlyData", Const, 21},
+		{"QUICResumeSession", Const, 23},
+		{"QUICServer", Func, 21},
+		{"QUICSessionTicketOptions", Type, 21},
+		{"QUICSessionTicketOptions.EarlyData", Field, 21},
+		{"QUICSessionTicketOptions.Extra", Field, 23},
+		{"QUICSetReadSecret", Const, 21},
+		{"QUICSetWriteSecret", Const, 21},
+		{"QUICStoreSession", Const, 23},
+		{"QUICTransportParameters", Const, 21},
+		{"QUICTransportParametersRequired", Const, 21},
+		{"QUICWriteData", Const, 21},
+		{"RecordHeaderError", Type, 6},
+		{"RecordHeaderError.Conn", Field, 12},
+		{"RecordHeaderError.Msg", Field, 6},
+		{"RecordHeaderError.RecordHeader", Field, 6},
+		{"RenegotiateFreelyAsClient", Const, 7},
+		{"RenegotiateNever", Const, 7},
+		{"RenegotiateOnceAsClient", Const, 7},
+		{"RenegotiationSupport", Type, 7},
+		{"RequestClientCert", Const, 0},
+		{"RequireAndVerifyClientCert", Const, 0},
+		{"RequireAnyClientCert", Const, 0},
+		{"Server", Func, 0},
+		{"SessionState", Type, 21},
+		{"SessionState.EarlyData", Field, 21},
+		{"SessionState.Extra", Field, 21},
+		{"SignatureScheme", Type, 8},
+		{"TLS_AES_128_GCM_SHA256", Const, 12},
+		{"TLS_AES_256_GCM_SHA384", Const, 12},
+		{"TLS_CHACHA20_POLY1305_SHA256", Const, 12},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
+		{"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2},
+		{"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
+		{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2},
+		{"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1},
+		{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14},
+		{"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0},
+		{"TLS_FALLBACK_SCSV", Const, 4},
+		{"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8},
+		{"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6},
+		{"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1},
+		{"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6},
+		{"TLS_RSA_WITH_RC4_128_SHA", Const, 0},
+		{"VerifyClientCertIfGiven", Const, 0},
+		{"VersionName", Func, 21},
+		{"VersionSSL30", Const, 2},
+		{"VersionTLS10", Const, 2},
+		{"VersionTLS11", Const, 2},
+		{"VersionTLS12", Const, 2},
+		{"VersionTLS13", Const, 12},
+		{"X25519", Const, 8},
+		{"X25519MLKEM768", Const, 24},
+		{"X509KeyPair", Func, 0},
 	},
 	"crypto/x509": {
-		{"(*CertPool).AddCert", Method, 0, ""},
-		{"(*CertPool).AddCertWithConstraint", Method, 22, ""},
-		{"(*CertPool).AppendCertsFromPEM", Method, 0, ""},
-		{"(*CertPool).Clone", Method, 19, ""},
-		{"(*CertPool).Equal", Method, 19, ""},
-		{"(*CertPool).Subjects", Method, 0, ""},
-		{"(*Certificate).CheckCRLSignature", Method, 0, ""},
-		{"(*Certificate).CheckSignature", Method, 0, ""},
-		{"(*Certificate).CheckSignatureFrom", Method, 0, ""},
-		{"(*Certificate).CreateCRL", Method, 0, ""},
-		{"(*Certificate).Equal", Method, 0, ""},
-		{"(*Certificate).Verify", Method, 0, ""},
-		{"(*Certificate).VerifyHostname", Method, 0, ""},
-		{"(*CertificateRequest).CheckSignature", Method, 5, ""},
-		{"(*OID).UnmarshalBinary", Method, 23, ""},
-		{"(*OID).UnmarshalText", Method, 23, ""},
-		{"(*RevocationList).CheckSignatureFrom", Method, 19, ""},
-		{"(CertificateInvalidError).Error", Method, 0, ""},
-		{"(ConstraintViolationError).Error", Method, 0, ""},
-		{"(HostnameError).Error", Method, 0, ""},
-		{"(InsecureAlgorithmError).Error", Method, 6, ""},
-		{"(OID).AppendBinary", Method, 24, ""},
-		{"(OID).AppendText", Method, 24, ""},
-		{"(OID).Equal", Method, 22, ""},
-		{"(OID).EqualASN1OID", Method, 22, ""},
-		{"(OID).MarshalBinary", Method, 23, ""},
-		{"(OID).MarshalText", Method, 23, ""},
-		{"(OID).String", Method, 22, ""},
-		{"(PublicKeyAlgorithm).String", Method, 10, ""},
-		{"(SignatureAlgorithm).String", Method, 6, ""},
-		{"(SystemRootsError).Error", Method, 1, ""},
-		{"(SystemRootsError).Unwrap", Method, 16, ""},
-		{"(UnhandledCriticalExtension).Error", Method, 0, ""},
-		{"(UnknownAuthorityError).Error", Method, 0, ""},
-		{"CANotAuthorizedForExtKeyUsage", Const, 10, ""},
-		{"CANotAuthorizedForThisName", Const, 0, ""},
-		{"CertPool", Type, 0, ""},
-		{"Certificate", Type, 0, ""},
-		{"Certificate.AuthorityKeyId", Field, 0, ""},
-		{"Certificate.BasicConstraintsValid", Field, 0, ""},
-		{"Certificate.CRLDistributionPoints", Field, 2, ""},
-		{"Certificate.DNSNames", Field, 0, ""},
-		{"Certificate.EmailAddresses", Field, 0, ""},
-		{"Certificate.ExcludedDNSDomains", Field, 9, ""},
-		{"Certificate.ExcludedEmailAddresses", Field, 10, ""},
-		{"Certificate.ExcludedIPRanges", Field, 10, ""},
-		{"Certificate.ExcludedURIDomains", Field, 10, ""},
-		{"Certificate.ExtKeyUsage", Field, 0, ""},
-		{"Certificate.Extensions", Field, 2, ""},
-		{"Certificate.ExtraExtensions", Field, 2, ""},
-		{"Certificate.IPAddresses", Field, 1, ""},
-		{"Certificate.InhibitAnyPolicy", Field, 24, ""},
-		{"Certificate.InhibitAnyPolicyZero", Field, 24, ""},
-		{"Certificate.InhibitPolicyMapping", Field, 24, ""},
-		{"Certificate.InhibitPolicyMappingZero", Field, 24, ""},
-		{"Certificate.IsCA", Field, 0, ""},
-		{"Certificate.Issuer", Field, 0, ""},
-		{"Certificate.IssuingCertificateURL", Field, 2, ""},
-		{"Certificate.KeyUsage", Field, 0, ""},
-		{"Certificate.MaxPathLen", Field, 0, ""},
-		{"Certificate.MaxPathLenZero", Field, 4, ""},
-		{"Certificate.NotAfter", Field, 0, ""},
-		{"Certificate.NotBefore", Field, 0, ""},
-		{"Certificate.OCSPServer", Field, 2, ""},
-		{"Certificate.PermittedDNSDomains", Field, 0, ""},
-		{"Certificate.PermittedDNSDomainsCritical", Field, 0, ""},
-		{"Certificate.PermittedEmailAddresses", Field, 10, ""},
-		{"Certificate.PermittedIPRanges", Field, 10, ""},
-		{"Certificate.PermittedURIDomains", Field, 10, ""},
-		{"Certificate.Policies", Field, 22, ""},
-		{"Certificate.PolicyIdentifiers", Field, 0, ""},
-		{"Certificate.PolicyMappings", Field, 24, ""},
-		{"Certificate.PublicKey", Field, 0, ""},
-		{"Certificate.PublicKeyAlgorithm", Field, 0, ""},
-		{"Certificate.Raw", Field, 0, ""},
-		{"Certificate.RawIssuer", Field, 0, ""},
-		{"Certificate.RawSubject", Field, 0, ""},
-		{"Certificate.RawSubjectPublicKeyInfo", Field, 0, ""},
-		{"Certificate.RawTBSCertificate", Field, 0, ""},
-		{"Certificate.RequireExplicitPolicy", Field, 24, ""},
-		{"Certificate.RequireExplicitPolicyZero", Field, 24, ""},
-		{"Certificate.SerialNumber", Field, 0, ""},
-		{"Certificate.Signature", Field, 0, ""},
-		{"Certificate.SignatureAlgorithm", Field, 0, ""},
-		{"Certificate.Subject", Field, 0, ""},
-		{"Certificate.SubjectKeyId", Field, 0, ""},
-		{"Certificate.URIs", Field, 10, ""},
-		{"Certificate.UnhandledCriticalExtensions", Field, 5, ""},
-		{"Certificate.UnknownExtKeyUsage", Field, 0, ""},
-		{"Certificate.Version", Field, 0, ""},
-		{"CertificateInvalidError", Type, 0, ""},
-		{"CertificateInvalidError.Cert", Field, 0, ""},
-		{"CertificateInvalidError.Detail", Field, 10, ""},
-		{"CertificateInvalidError.Reason", Field, 0, ""},
-		{"CertificateRequest", Type, 3, ""},
-		{"CertificateRequest.Attributes", Field, 3, ""},
-		{"CertificateRequest.DNSNames", Field, 3, ""},
-		{"CertificateRequest.EmailAddresses", Field, 3, ""},
-		{"CertificateRequest.Extensions", Field, 3, ""},
-		{"CertificateRequest.ExtraExtensions", Field, 3, ""},
-		{"CertificateRequest.IPAddresses", Field, 3, ""},
-		{"CertificateRequest.PublicKey", Field, 3, ""},
-		{"CertificateRequest.PublicKeyAlgorithm", Field, 3, ""},
-		{"CertificateRequest.Raw", Field, 3, ""},
-		{"CertificateRequest.RawSubject", Field, 3, ""},
-		{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3, ""},
-		{"CertificateRequest.RawTBSCertificateRequest", Field, 3, ""},
-		{"CertificateRequest.Signature", Field, 3, ""},
-		{"CertificateRequest.SignatureAlgorithm", Field, 3, ""},
-		{"CertificateRequest.Subject", Field, 3, ""},
-		{"CertificateRequest.URIs", Field, 10, ""},
-		{"CertificateRequest.Version", Field, 3, ""},
-		{"ConstraintViolationError", Type, 0, ""},
-		{"CreateCertificate", Func, 0, "func(rand io.Reader, template *Certificate, parent *Certificate, pub any, priv any) ([]byte, error)"},
-		{"CreateCertificateRequest", Func, 3, "func(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)"},
-		{"CreateRevocationList", Func, 15, "func(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)"},
-		{"DSA", Const, 0, ""},
-		{"DSAWithSHA1", Const, 0, ""},
-		{"DSAWithSHA256", Const, 0, ""},
-		{"DecryptPEMBlock", Func, 1, "func(b *pem.Block, password []byte) ([]byte, error)"},
-		{"ECDSA", Const, 1, ""},
-		{"ECDSAWithSHA1", Const, 1, ""},
-		{"ECDSAWithSHA256", Const, 1, ""},
-		{"ECDSAWithSHA384", Const, 1, ""},
-		{"ECDSAWithSHA512", Const, 1, ""},
-		{"Ed25519", Const, 13, ""},
-		{"EncryptPEMBlock", Func, 1, "func(rand io.Reader, blockType string, data []byte, password []byte, alg PEMCipher) (*pem.Block, error)"},
-		{"ErrUnsupportedAlgorithm", Var, 0, ""},
-		{"Expired", Const, 0, ""},
-		{"ExtKeyUsage", Type, 0, ""},
-		{"ExtKeyUsageAny", Const, 0, ""},
-		{"ExtKeyUsageClientAuth", Const, 0, ""},
-		{"ExtKeyUsageCodeSigning", Const, 0, ""},
-		{"ExtKeyUsageEmailProtection", Const, 0, ""},
-		{"ExtKeyUsageIPSECEndSystem", Const, 1, ""},
-		{"ExtKeyUsageIPSECTunnel", Const, 1, ""},
-		{"ExtKeyUsageIPSECUser", Const, 1, ""},
-		{"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10, ""},
-		{"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10, ""},
-		{"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1, ""},
-		{"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1, ""},
-		{"ExtKeyUsageOCSPSigning", Const, 0, ""},
-		{"ExtKeyUsageServerAuth", Const, 0, ""},
-		{"ExtKeyUsageTimeStamping", Const, 0, ""},
-		{"HostnameError", Type, 0, ""},
-		{"HostnameError.Certificate", Field, 0, ""},
-		{"HostnameError.Host", Field, 0, ""},
-		{"IncompatibleUsage", Const, 1, ""},
-		{"IncorrectPasswordError", Var, 1, ""},
-		{"InsecureAlgorithmError", Type, 6, ""},
-		{"InvalidReason", Type, 0, ""},
-		{"IsEncryptedPEMBlock", Func, 1, "func(b *pem.Block) bool"},
-		{"KeyUsage", Type, 0, ""},
-		{"KeyUsageCRLSign", Const, 0, ""},
-		{"KeyUsageCertSign", Const, 0, ""},
-		{"KeyUsageContentCommitment", Const, 0, ""},
-		{"KeyUsageDataEncipherment", Const, 0, ""},
-		{"KeyUsageDecipherOnly", Const, 0, ""},
-		{"KeyUsageDigitalSignature", Const, 0, ""},
-		{"KeyUsageEncipherOnly", Const, 0, ""},
-		{"KeyUsageKeyAgreement", Const, 0, ""},
-		{"KeyUsageKeyEncipherment", Const, 0, ""},
-		{"MD2WithRSA", Const, 0, ""},
-		{"MD5WithRSA", Const, 0, ""},
-		{"MarshalECPrivateKey", Func, 2, "func(key *ecdsa.PrivateKey) ([]byte, error)"},
-		{"MarshalPKCS1PrivateKey", Func, 0, "func(key *rsa.PrivateKey) []byte"},
-		{"MarshalPKCS1PublicKey", Func, 10, "func(key *rsa.PublicKey) []byte"},
-		{"MarshalPKCS8PrivateKey", Func, 10, "func(key any) ([]byte, error)"},
-		{"MarshalPKIXPublicKey", Func, 0, "func(pub any) ([]byte, error)"},
-		{"NameConstraintsWithoutSANs", Const, 10, ""},
-		{"NameMismatch", Const, 8, ""},
-		{"NewCertPool", Func, 0, "func() *CertPool"},
-		{"NoValidChains", Const, 24, ""},
-		{"NotAuthorizedToSign", Const, 0, ""},
-		{"OID", Type, 22, ""},
-		{"OIDFromInts", Func, 22, "func(oid []uint64) (OID, error)"},
-		{"PEMCipher", Type, 1, ""},
-		{"PEMCipher3DES", Const, 1, ""},
-		{"PEMCipherAES128", Const, 1, ""},
-		{"PEMCipherAES192", Const, 1, ""},
-		{"PEMCipherAES256", Const, 1, ""},
-		{"PEMCipherDES", Const, 1, ""},
-		{"ParseCRL", Func, 0, "func(crlBytes []byte) (*pkix.CertificateList, error)"},
-		{"ParseCertificate", Func, 0, "func(der []byte) (*Certificate, error)"},
-		{"ParseCertificateRequest", Func, 3, "func(asn1Data []byte) (*CertificateRequest, error)"},
-		{"ParseCertificates", Func, 0, "func(der []byte) ([]*Certificate, error)"},
-		{"ParseDERCRL", Func, 0, "func(derBytes []byte) (*pkix.CertificateList, error)"},
-		{"ParseECPrivateKey", Func, 1, "func(der []byte) (*ecdsa.PrivateKey, error)"},
-		{"ParseOID", Func, 23, "func(oid string) (OID, error)"},
-		{"ParsePKCS1PrivateKey", Func, 0, "func(der []byte) (*rsa.PrivateKey, error)"},
-		{"ParsePKCS1PublicKey", Func, 10, "func(der []byte) (*rsa.PublicKey, error)"},
-		{"ParsePKCS8PrivateKey", Func, 0, "func(der []byte) (key any, err error)"},
-		{"ParsePKIXPublicKey", Func, 0, "func(derBytes []byte) (pub any, err error)"},
-		{"ParseRevocationList", Func, 19, "func(der []byte) (*RevocationList, error)"},
-		{"PolicyMapping", Type, 24, ""},
-		{"PolicyMapping.IssuerDomainPolicy", Field, 24, ""},
-		{"PolicyMapping.SubjectDomainPolicy", Field, 24, ""},
-		{"PublicKeyAlgorithm", Type, 0, ""},
-		{"PureEd25519", Const, 13, ""},
-		{"RSA", Const, 0, ""},
-		{"RevocationList", Type, 15, ""},
-		{"RevocationList.AuthorityKeyId", Field, 19, ""},
-		{"RevocationList.Extensions", Field, 19, ""},
-		{"RevocationList.ExtraExtensions", Field, 15, ""},
-		{"RevocationList.Issuer", Field, 19, ""},
-		{"RevocationList.NextUpdate", Field, 15, ""},
-		{"RevocationList.Number", Field, 15, ""},
-		{"RevocationList.Raw", Field, 19, ""},
-		{"RevocationList.RawIssuer", Field, 19, ""},
-		{"RevocationList.RawTBSRevocationList", Field, 19, ""},
-		{"RevocationList.RevokedCertificateEntries", Field, 21, ""},
-		{"RevocationList.RevokedCertificates", Field, 15, ""},
-		{"RevocationList.Signature", Field, 19, ""},
-		{"RevocationList.SignatureAlgorithm", Field, 15, ""},
-		{"RevocationList.ThisUpdate", Field, 15, ""},
-		{"RevocationListEntry", Type, 21, ""},
-		{"RevocationListEntry.Extensions", Field, 21, ""},
-		{"RevocationListEntry.ExtraExtensions", Field, 21, ""},
-		{"RevocationListEntry.Raw", Field, 21, ""},
-		{"RevocationListEntry.ReasonCode", Field, 21, ""},
-		{"RevocationListEntry.RevocationTime", Field, 21, ""},
-		{"RevocationListEntry.SerialNumber", Field, 21, ""},
-		{"SHA1WithRSA", Const, 0, ""},
-		{"SHA256WithRSA", Const, 0, ""},
-		{"SHA256WithRSAPSS", Const, 8, ""},
-		{"SHA384WithRSA", Const, 0, ""},
-		{"SHA384WithRSAPSS", Const, 8, ""},
-		{"SHA512WithRSA", Const, 0, ""},
-		{"SHA512WithRSAPSS", Const, 8, ""},
-		{"SetFallbackRoots", Func, 20, "func(roots *CertPool)"},
-		{"SignatureAlgorithm", Type, 0, ""},
-		{"SystemCertPool", Func, 7, "func() (*CertPool, error)"},
-		{"SystemRootsError", Type, 1, ""},
-		{"SystemRootsError.Err", Field, 7, ""},
-		{"TooManyConstraints", Const, 10, ""},
-		{"TooManyIntermediates", Const, 0, ""},
-		{"UnconstrainedName", Const, 10, ""},
-		{"UnhandledCriticalExtension", Type, 0, ""},
-		{"UnknownAuthorityError", Type, 0, ""},
-		{"UnknownAuthorityError.Cert", Field, 8, ""},
-		{"UnknownPublicKeyAlgorithm", Const, 0, ""},
-		{"UnknownSignatureAlgorithm", Const, 0, ""},
-		{"VerifyOptions", Type, 0, ""},
-		{"VerifyOptions.CertificatePolicies", Field, 24, ""},
-		{"VerifyOptions.CurrentTime", Field, 0, ""},
-		{"VerifyOptions.DNSName", Field, 0, ""},
-		{"VerifyOptions.Intermediates", Field, 0, ""},
-		{"VerifyOptions.KeyUsages", Field, 1, ""},
-		{"VerifyOptions.MaxConstraintComparisions", Field, 10, ""},
-		{"VerifyOptions.Roots", Field, 0, ""},
+		{"(*CertPool).AddCert", Method, 0},
+		{"(*CertPool).AddCertWithConstraint", Method, 22},
+		{"(*CertPool).AppendCertsFromPEM", Method, 0},
+		{"(*CertPool).Clone", Method, 19},
+		{"(*CertPool).Equal", Method, 19},
+		{"(*CertPool).Subjects", Method, 0},
+		{"(*Certificate).CheckCRLSignature", Method, 0},
+		{"(*Certificate).CheckSignature", Method, 0},
+		{"(*Certificate).CheckSignatureFrom", Method, 0},
+		{"(*Certificate).CreateCRL", Method, 0},
+		{"(*Certificate).Equal", Method, 0},
+		{"(*Certificate).Verify", Method, 0},
+		{"(*Certificate).VerifyHostname", Method, 0},
+		{"(*CertificateRequest).CheckSignature", Method, 5},
+		{"(*OID).UnmarshalBinary", Method, 23},
+		{"(*OID).UnmarshalText", Method, 23},
+		{"(*RevocationList).CheckSignatureFrom", Method, 19},
+		{"(CertificateInvalidError).Error", Method, 0},
+		{"(ConstraintViolationError).Error", Method, 0},
+		{"(HostnameError).Error", Method, 0},
+		{"(InsecureAlgorithmError).Error", Method, 6},
+		{"(OID).AppendBinary", Method, 24},
+		{"(OID).AppendText", Method, 24},
+		{"(OID).Equal", Method, 22},
+		{"(OID).EqualASN1OID", Method, 22},
+		{"(OID).MarshalBinary", Method, 23},
+		{"(OID).MarshalText", Method, 23},
+		{"(OID).String", Method, 22},
+		{"(PublicKeyAlgorithm).String", Method, 10},
+		{"(SignatureAlgorithm).String", Method, 6},
+		{"(SystemRootsError).Error", Method, 1},
+		{"(SystemRootsError).Unwrap", Method, 16},
+		{"(UnhandledCriticalExtension).Error", Method, 0},
+		{"(UnknownAuthorityError).Error", Method, 0},
+		{"CANotAuthorizedForExtKeyUsage", Const, 10},
+		{"CANotAuthorizedForThisName", Const, 0},
+		{"CertPool", Type, 0},
+		{"Certificate", Type, 0},
+		{"Certificate.AuthorityKeyId", Field, 0},
+		{"Certificate.BasicConstraintsValid", Field, 0},
+		{"Certificate.CRLDistributionPoints", Field, 2},
+		{"Certificate.DNSNames", Field, 0},
+		{"Certificate.EmailAddresses", Field, 0},
+		{"Certificate.ExcludedDNSDomains", Field, 9},
+		{"Certificate.ExcludedEmailAddresses", Field, 10},
+		{"Certificate.ExcludedIPRanges", Field, 10},
+		{"Certificate.ExcludedURIDomains", Field, 10},
+		{"Certificate.ExtKeyUsage", Field, 0},
+		{"Certificate.Extensions", Field, 2},
+		{"Certificate.ExtraExtensions", Field, 2},
+		{"Certificate.IPAddresses", Field, 1},
+		{"Certificate.InhibitAnyPolicy", Field, 24},
+		{"Certificate.InhibitAnyPolicyZero", Field, 24},
+		{"Certificate.InhibitPolicyMapping", Field, 24},
+		{"Certificate.InhibitPolicyMappingZero", Field, 24},
+		{"Certificate.IsCA", Field, 0},
+		{"Certificate.Issuer", Field, 0},
+		{"Certificate.IssuingCertificateURL", Field, 2},
+		{"Certificate.KeyUsage", Field, 0},
+		{"Certificate.MaxPathLen", Field, 0},
+		{"Certificate.MaxPathLenZero", Field, 4},
+		{"Certificate.NotAfter", Field, 0},
+		{"Certificate.NotBefore", Field, 0},
+		{"Certificate.OCSPServer", Field, 2},
+		{"Certificate.PermittedDNSDomains", Field, 0},
+		{"Certificate.PermittedDNSDomainsCritical", Field, 0},
+		{"Certificate.PermittedEmailAddresses", Field, 10},
+		{"Certificate.PermittedIPRanges", Field, 10},
+		{"Certificate.PermittedURIDomains", Field, 10},
+		{"Certificate.Policies", Field, 22},
+		{"Certificate.PolicyIdentifiers", Field, 0},
+		{"Certificate.PolicyMappings", Field, 24},
+		{"Certificate.PublicKey", Field, 0},
+		{"Certificate.PublicKeyAlgorithm", Field, 0},
+		{"Certificate.Raw", Field, 0},
+		{"Certificate.RawIssuer", Field, 0},
+		{"Certificate.RawSubject", Field, 0},
+		{"Certificate.RawSubjectPublicKeyInfo", Field, 0},
+		{"Certificate.RawTBSCertificate", Field, 0},
+		{"Certificate.RequireExplicitPolicy", Field, 24},
+		{"Certificate.RequireExplicitPolicyZero", Field, 24},
+		{"Certificate.SerialNumber", Field, 0},
+		{"Certificate.Signature", Field, 0},
+		{"Certificate.SignatureAlgorithm", Field, 0},
+		{"Certificate.Subject", Field, 0},
+		{"Certificate.SubjectKeyId", Field, 0},
+		{"Certificate.URIs", Field, 10},
+		{"Certificate.UnhandledCriticalExtensions", Field, 5},
+		{"Certificate.UnknownExtKeyUsage", Field, 0},
+		{"Certificate.Version", Field, 0},
+		{"CertificateInvalidError", Type, 0},
+		{"CertificateInvalidError.Cert", Field, 0},
+		{"CertificateInvalidError.Detail", Field, 10},
+		{"CertificateInvalidError.Reason", Field, 0},
+		{"CertificateRequest", Type, 3},
+		{"CertificateRequest.Attributes", Field, 3},
+		{"CertificateRequest.DNSNames", Field, 3},
+		{"CertificateRequest.EmailAddresses", Field, 3},
+		{"CertificateRequest.Extensions", Field, 3},
+		{"CertificateRequest.ExtraExtensions", Field, 3},
+		{"CertificateRequest.IPAddresses", Field, 3},
+		{"CertificateRequest.PublicKey", Field, 3},
+		{"CertificateRequest.PublicKeyAlgorithm", Field, 3},
+		{"CertificateRequest.Raw", Field, 3},
+		{"CertificateRequest.RawSubject", Field, 3},
+		{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3},
+		{"CertificateRequest.RawTBSCertificateRequest", Field, 3},
+		{"CertificateRequest.Signature", Field, 3},
+		{"CertificateRequest.SignatureAlgorithm", Field, 3},
+		{"CertificateRequest.Subject", Field, 3},
+		{"CertificateRequest.URIs", Field, 10},
+		{"CertificateRequest.Version", Field, 3},
+		{"ConstraintViolationError", Type, 0},
+		{"CreateCertificate", Func, 0},
+		{"CreateCertificateRequest", Func, 3},
+		{"CreateRevocationList", Func, 15},
+		{"DSA", Const, 0},
+		{"DSAWithSHA1", Const, 0},
+		{"DSAWithSHA256", Const, 0},
+		{"DecryptPEMBlock", Func, 1},
+		{"ECDSA", Const, 1},
+		{"ECDSAWithSHA1", Const, 1},
+		{"ECDSAWithSHA256", Const, 1},
+		{"ECDSAWithSHA384", Const, 1},
+		{"ECDSAWithSHA512", Const, 1},
+		{"Ed25519", Const, 13},
+		{"EncryptPEMBlock", Func, 1},
+		{"ErrUnsupportedAlgorithm", Var, 0},
+		{"Expired", Const, 0},
+		{"ExtKeyUsage", Type, 0},
+		{"ExtKeyUsageAny", Const, 0},
+		{"ExtKeyUsageClientAuth", Const, 0},
+		{"ExtKeyUsageCodeSigning", Const, 0},
+		{"ExtKeyUsageEmailProtection", Const, 0},
+		{"ExtKeyUsageIPSECEndSystem", Const, 1},
+		{"ExtKeyUsageIPSECTunnel", Const, 1},
+		{"ExtKeyUsageIPSECUser", Const, 1},
+		{"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10},
+		{"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10},
+		{"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1},
+		{"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1},
+		{"ExtKeyUsageOCSPSigning", Const, 0},
+		{"ExtKeyUsageServerAuth", Const, 0},
+		{"ExtKeyUsageTimeStamping", Const, 0},
+		{"HostnameError", Type, 0},
+		{"HostnameError.Certificate", Field, 0},
+		{"HostnameError.Host", Field, 0},
+		{"IncompatibleUsage", Const, 1},
+		{"IncorrectPasswordError", Var, 1},
+		{"InsecureAlgorithmError", Type, 6},
+		{"InvalidReason", Type, 0},
+		{"IsEncryptedPEMBlock", Func, 1},
+		{"KeyUsage", Type, 0},
+		{"KeyUsageCRLSign", Const, 0},
+		{"KeyUsageCertSign", Const, 0},
+		{"KeyUsageContentCommitment", Const, 0},
+		{"KeyUsageDataEncipherment", Const, 0},
+		{"KeyUsageDecipherOnly", Const, 0},
+		{"KeyUsageDigitalSignature", Const, 0},
+		{"KeyUsageEncipherOnly", Const, 0},
+		{"KeyUsageKeyAgreement", Const, 0},
+		{"KeyUsageKeyEncipherment", Const, 0},
+		{"MD2WithRSA", Const, 0},
+		{"MD5WithRSA", Const, 0},
+		{"MarshalECPrivateKey", Func, 2},
+		{"MarshalPKCS1PrivateKey", Func, 0},
+		{"MarshalPKCS1PublicKey", Func, 10},
+		{"MarshalPKCS8PrivateKey", Func, 10},
+		{"MarshalPKIXPublicKey", Func, 0},
+		{"NameConstraintsWithoutSANs", Const, 10},
+		{"NameMismatch", Const, 8},
+		{"NewCertPool", Func, 0},
+		{"NoValidChains", Const, 24},
+		{"NotAuthorizedToSign", Const, 0},
+		{"OID", Type, 22},
+		{"OIDFromInts", Func, 22},
+		{"PEMCipher", Type, 1},
+		{"PEMCipher3DES", Const, 1},
+		{"PEMCipherAES128", Const, 1},
+		{"PEMCipherAES192", Const, 1},
+		{"PEMCipherAES256", Const, 1},
+		{"PEMCipherDES", Const, 1},
+		{"ParseCRL", Func, 0},
+		{"ParseCertificate", Func, 0},
+		{"ParseCertificateRequest", Func, 3},
+		{"ParseCertificates", Func, 0},
+		{"ParseDERCRL", Func, 0},
+		{"ParseECPrivateKey", Func, 1},
+		{"ParseOID", Func, 23},
+		{"ParsePKCS1PrivateKey", Func, 0},
+		{"ParsePKCS1PublicKey", Func, 10},
+		{"ParsePKCS8PrivateKey", Func, 0},
+		{"ParsePKIXPublicKey", Func, 0},
+		{"ParseRevocationList", Func, 19},
+		{"PolicyMapping", Type, 24},
+		{"PolicyMapping.IssuerDomainPolicy", Field, 24},
+		{"PolicyMapping.SubjectDomainPolicy", Field, 24},
+		{"PublicKeyAlgorithm", Type, 0},
+		{"PureEd25519", Const, 13},
+		{"RSA", Const, 0},
+		{"RevocationList", Type, 15},
+		{"RevocationList.AuthorityKeyId", Field, 19},
+		{"RevocationList.Extensions", Field, 19},
+		{"RevocationList.ExtraExtensions", Field, 15},
+		{"RevocationList.Issuer", Field, 19},
+		{"RevocationList.NextUpdate", Field, 15},
+		{"RevocationList.Number", Field, 15},
+		{"RevocationList.Raw", Field, 19},
+		{"RevocationList.RawIssuer", Field, 19},
+		{"RevocationList.RawTBSRevocationList", Field, 19},
+		{"RevocationList.RevokedCertificateEntries", Field, 21},
+		{"RevocationList.RevokedCertificates", Field, 15},
+		{"RevocationList.Signature", Field, 19},
+		{"RevocationList.SignatureAlgorithm", Field, 15},
+		{"RevocationList.ThisUpdate", Field, 15},
+		{"RevocationListEntry", Type, 21},
+		{"RevocationListEntry.Extensions", Field, 21},
+		{"RevocationListEntry.ExtraExtensions", Field, 21},
+		{"RevocationListEntry.Raw", Field, 21},
+		{"RevocationListEntry.ReasonCode", Field, 21},
+		{"RevocationListEntry.RevocationTime", Field, 21},
+		{"RevocationListEntry.SerialNumber", Field, 21},
+		{"SHA1WithRSA", Const, 0},
+		{"SHA256WithRSA", Const, 0},
+		{"SHA256WithRSAPSS", Const, 8},
+		{"SHA384WithRSA", Const, 0},
+		{"SHA384WithRSAPSS", Const, 8},
+		{"SHA512WithRSA", Const, 0},
+		{"SHA512WithRSAPSS", Const, 8},
+		{"SetFallbackRoots", Func, 20},
+		{"SignatureAlgorithm", Type, 0},
+		{"SystemCertPool", Func, 7},
+		{"SystemRootsError", Type, 1},
+		{"SystemRootsError.Err", Field, 7},
+		{"TooManyConstraints", Const, 10},
+		{"TooManyIntermediates", Const, 0},
+		{"UnconstrainedName", Const, 10},
+		{"UnhandledCriticalExtension", Type, 0},
+		{"UnknownAuthorityError", Type, 0},
+		{"UnknownAuthorityError.Cert", Field, 8},
+		{"UnknownPublicKeyAlgorithm", Const, 0},
+		{"UnknownSignatureAlgorithm", Const, 0},
+		{"VerifyOptions", Type, 0},
+		{"VerifyOptions.CertificatePolicies", Field, 24},
+		{"VerifyOptions.CurrentTime", Field, 0},
+		{"VerifyOptions.DNSName", Field, 0},
+		{"VerifyOptions.Intermediates", Field, 0},
+		{"VerifyOptions.KeyUsages", Field, 1},
+		{"VerifyOptions.MaxConstraintComparisions", Field, 10},
+		{"VerifyOptions.Roots", Field, 0},
 	},
 	"crypto/x509/pkix": {
-		{"(*CertificateList).HasExpired", Method, 0, ""},
-		{"(*Name).FillFromRDNSequence", Method, 0, ""},
-		{"(Name).String", Method, 10, ""},
-		{"(Name).ToRDNSequence", Method, 0, ""},
-		{"(RDNSequence).String", Method, 10, ""},
-		{"AlgorithmIdentifier", Type, 0, ""},
-		{"AlgorithmIdentifier.Algorithm", Field, 0, ""},
-		{"AlgorithmIdentifier.Parameters", Field, 0, ""},
-		{"AttributeTypeAndValue", Type, 0, ""},
-		{"AttributeTypeAndValue.Type", Field, 0, ""},
-		{"AttributeTypeAndValue.Value", Field, 0, ""},
-		{"AttributeTypeAndValueSET", Type, 3, ""},
-		{"AttributeTypeAndValueSET.Type", Field, 3, ""},
-		{"AttributeTypeAndValueSET.Value", Field, 3, ""},
-		{"CertificateList", Type, 0, ""},
-		{"CertificateList.SignatureAlgorithm", Field, 0, ""},
-		{"CertificateList.SignatureValue", Field, 0, ""},
-		{"CertificateList.TBSCertList", Field, 0, ""},
-		{"Extension", Type, 0, ""},
-		{"Extension.Critical", Field, 0, ""},
-		{"Extension.Id", Field, 0, ""},
-		{"Extension.Value", Field, 0, ""},
-		{"Name", Type, 0, ""},
-		{"Name.CommonName", Field, 0, ""},
-		{"Name.Country", Field, 0, ""},
-		{"Name.ExtraNames", Field, 5, ""},
-		{"Name.Locality", Field, 0, ""},
-		{"Name.Names", Field, 0, ""},
-		{"Name.Organization", Field, 0, ""},
-		{"Name.OrganizationalUnit", Field, 0, ""},
-		{"Name.PostalCode", Field, 0, ""},
-		{"Name.Province", Field, 0, ""},
-		{"Name.SerialNumber", Field, 0, ""},
-		{"Name.StreetAddress", Field, 0, ""},
-		{"RDNSequence", Type, 0, ""},
-		{"RelativeDistinguishedNameSET", Type, 0, ""},
-		{"RevokedCertificate", Type, 0, ""},
-		{"RevokedCertificate.Extensions", Field, 0, ""},
-		{"RevokedCertificate.RevocationTime", Field, 0, ""},
-		{"RevokedCertificate.SerialNumber", Field, 0, ""},
-		{"TBSCertificateList", Type, 0, ""},
-		{"TBSCertificateList.Extensions", Field, 0, ""},
-		{"TBSCertificateList.Issuer", Field, 0, ""},
-		{"TBSCertificateList.NextUpdate", Field, 0, ""},
-		{"TBSCertificateList.Raw", Field, 0, ""},
-		{"TBSCertificateList.RevokedCertificates", Field, 0, ""},
-		{"TBSCertificateList.Signature", Field, 0, ""},
-		{"TBSCertificateList.ThisUpdate", Field, 0, ""},
-		{"TBSCertificateList.Version", Field, 0, ""},
+		{"(*CertificateList).HasExpired", Method, 0},
+		{"(*Name).FillFromRDNSequence", Method, 0},
+		{"(Name).String", Method, 10},
+		{"(Name).ToRDNSequence", Method, 0},
+		{"(RDNSequence).String", Method, 10},
+		{"AlgorithmIdentifier", Type, 0},
+		{"AlgorithmIdentifier.Algorithm", Field, 0},
+		{"AlgorithmIdentifier.Parameters", Field, 0},
+		{"AttributeTypeAndValue", Type, 0},
+		{"AttributeTypeAndValue.Type", Field, 0},
+		{"AttributeTypeAndValue.Value", Field, 0},
+		{"AttributeTypeAndValueSET", Type, 3},
+		{"AttributeTypeAndValueSET.Type", Field, 3},
+		{"AttributeTypeAndValueSET.Value", Field, 3},
+		{"CertificateList", Type, 0},
+		{"CertificateList.SignatureAlgorithm", Field, 0},
+		{"CertificateList.SignatureValue", Field, 0},
+		{"CertificateList.TBSCertList", Field, 0},
+		{"Extension", Type, 0},
+		{"Extension.Critical", Field, 0},
+		{"Extension.Id", Field, 0},
+		{"Extension.Value", Field, 0},
+		{"Name", Type, 0},
+		{"Name.CommonName", Field, 0},
+		{"Name.Country", Field, 0},
+		{"Name.ExtraNames", Field, 5},
+		{"Name.Locality", Field, 0},
+		{"Name.Names", Field, 0},
+		{"Name.Organization", Field, 0},
+		{"Name.OrganizationalUnit", Field, 0},
+		{"Name.PostalCode", Field, 0},
+		{"Name.Province", Field, 0},
+		{"Name.SerialNumber", Field, 0},
+		{"Name.StreetAddress", Field, 0},
+		{"RDNSequence", Type, 0},
+		{"RelativeDistinguishedNameSET", Type, 0},
+		{"RevokedCertificate", Type, 0},
+		{"RevokedCertificate.Extensions", Field, 0},
+		{"RevokedCertificate.RevocationTime", Field, 0},
+		{"RevokedCertificate.SerialNumber", Field, 0},
+		{"TBSCertificateList", Type, 0},
+		{"TBSCertificateList.Extensions", Field, 0},
+		{"TBSCertificateList.Issuer", Field, 0},
+		{"TBSCertificateList.NextUpdate", Field, 0},
+		{"TBSCertificateList.Raw", Field, 0},
+		{"TBSCertificateList.RevokedCertificates", Field, 0},
+		{"TBSCertificateList.Signature", Field, 0},
+		{"TBSCertificateList.ThisUpdate", Field, 0},
+		{"TBSCertificateList.Version", Field, 0},
 	},
 	"database/sql": {
-		{"(*ColumnType).DatabaseTypeName", Method, 8, ""},
-		{"(*ColumnType).DecimalSize", Method, 8, ""},
-		{"(*ColumnType).Length", Method, 8, ""},
-		{"(*ColumnType).Name", Method, 8, ""},
-		{"(*ColumnType).Nullable", Method, 8, ""},
-		{"(*ColumnType).ScanType", Method, 8, ""},
-		{"(*Conn).BeginTx", Method, 9, ""},
-		{"(*Conn).Close", Method, 9, ""},
-		{"(*Conn).ExecContext", Method, 9, ""},
-		{"(*Conn).PingContext", Method, 9, ""},
-		{"(*Conn).PrepareContext", Method, 9, ""},
-		{"(*Conn).QueryContext", Method, 9, ""},
-		{"(*Conn).QueryRowContext", Method, 9, ""},
-		{"(*Conn).Raw", Method, 13, ""},
-		{"(*DB).Begin", Method, 0, ""},
-		{"(*DB).BeginTx", Method, 8, ""},
-		{"(*DB).Close", Method, 0, ""},
-		{"(*DB).Conn", Method, 9, ""},
-		{"(*DB).Driver", Method, 0, ""},
-		{"(*DB).Exec", Method, 0, ""},
-		{"(*DB).ExecContext", Method, 8, ""},
-		{"(*DB).Ping", Method, 1, ""},
-		{"(*DB).PingContext", Method, 8, ""},
-		{"(*DB).Prepare", Method, 0, ""},
-		{"(*DB).PrepareContext", Method, 8, ""},
-		{"(*DB).Query", Method, 0, ""},
-		{"(*DB).QueryContext", Method, 8, ""},
-		{"(*DB).QueryRow", Method, 0, ""},
-		{"(*DB).QueryRowContext", Method, 8, ""},
-		{"(*DB).SetConnMaxIdleTime", Method, 15, ""},
-		{"(*DB).SetConnMaxLifetime", Method, 6, ""},
-		{"(*DB).SetMaxIdleConns", Method, 1, ""},
-		{"(*DB).SetMaxOpenConns", Method, 2, ""},
-		{"(*DB).Stats", Method, 5, ""},
-		{"(*Null).Scan", Method, 22, ""},
-		{"(*NullBool).Scan", Method, 0, ""},
-		{"(*NullByte).Scan", Method, 17, ""},
-		{"(*NullFloat64).Scan", Method, 0, ""},
-		{"(*NullInt16).Scan", Method, 17, ""},
-		{"(*NullInt32).Scan", Method, 13, ""},
-		{"(*NullInt64).Scan", Method, 0, ""},
-		{"(*NullString).Scan", Method, 0, ""},
-		{"(*NullTime).Scan", Method, 13, ""},
-		{"(*Row).Err", Method, 15, ""},
-		{"(*Row).Scan", Method, 0, ""},
-		{"(*Rows).Close", Method, 0, ""},
-		{"(*Rows).ColumnTypes", Method, 8, ""},
-		{"(*Rows).Columns", Method, 0, ""},
-		{"(*Rows).Err", Method, 0, ""},
-		{"(*Rows).Next", Method, 0, ""},
-		{"(*Rows).NextResultSet", Method, 8, ""},
-		{"(*Rows).Scan", Method, 0, ""},
-		{"(*Stmt).Close", Method, 0, ""},
-		{"(*Stmt).Exec", Method, 0, ""},
-		{"(*Stmt).ExecContext", Method, 8, ""},
-		{"(*Stmt).Query", Method, 0, ""},
-		{"(*Stmt).QueryContext", Method, 8, ""},
-		{"(*Stmt).QueryRow", Method, 0, ""},
-		{"(*Stmt).QueryRowContext", Method, 8, ""},
-		{"(*Tx).Commit", Method, 0, ""},
-		{"(*Tx).Exec", Method, 0, ""},
-		{"(*Tx).ExecContext", Method, 8, ""},
-		{"(*Tx).Prepare", Method, 0, ""},
-		{"(*Tx).PrepareContext", Method, 8, ""},
-		{"(*Tx).Query", Method, 0, ""},
-		{"(*Tx).QueryContext", Method, 8, ""},
-		{"(*Tx).QueryRow", Method, 0, ""},
-		{"(*Tx).QueryRowContext", Method, 8, ""},
-		{"(*Tx).Rollback", Method, 0, ""},
-		{"(*Tx).Stmt", Method, 0, ""},
-		{"(*Tx).StmtContext", Method, 8, ""},
-		{"(IsolationLevel).String", Method, 11, ""},
-		{"(Null).Value", Method, 22, ""},
-		{"(NullBool).Value", Method, 0, ""},
-		{"(NullByte).Value", Method, 17, ""},
-		{"(NullFloat64).Value", Method, 0, ""},
-		{"(NullInt16).Value", Method, 17, ""},
-		{"(NullInt32).Value", Method, 13, ""},
-		{"(NullInt64).Value", Method, 0, ""},
-		{"(NullString).Value", Method, 0, ""},
-		{"(NullTime).Value", Method, 13, ""},
-		{"ColumnType", Type, 8, ""},
-		{"Conn", Type, 9, ""},
-		{"DB", Type, 0, ""},
-		{"DBStats", Type, 5, ""},
-		{"DBStats.Idle", Field, 11, ""},
-		{"DBStats.InUse", Field, 11, ""},
-		{"DBStats.MaxIdleClosed", Field, 11, ""},
-		{"DBStats.MaxIdleTimeClosed", Field, 15, ""},
-		{"DBStats.MaxLifetimeClosed", Field, 11, ""},
-		{"DBStats.MaxOpenConnections", Field, 11, ""},
-		{"DBStats.OpenConnections", Field, 5, ""},
-		{"DBStats.WaitCount", Field, 11, ""},
-		{"DBStats.WaitDuration", Field, 11, ""},
-		{"Drivers", Func, 4, "func() []string"},
-		{"ErrConnDone", Var, 9, ""},
-		{"ErrNoRows", Var, 0, ""},
-		{"ErrTxDone", Var, 0, ""},
-		{"IsolationLevel", Type, 8, ""},
-		{"LevelDefault", Const, 8, ""},
-		{"LevelLinearizable", Const, 8, ""},
-		{"LevelReadCommitted", Const, 8, ""},
-		{"LevelReadUncommitted", Const, 8, ""},
-		{"LevelRepeatableRead", Const, 8, ""},
-		{"LevelSerializable", Const, 8, ""},
-		{"LevelSnapshot", Const, 8, ""},
-		{"LevelWriteCommitted", Const, 8, ""},
-		{"Named", Func, 8, "func(name string, value any) NamedArg"},
-		{"NamedArg", Type, 8, ""},
-		{"NamedArg.Name", Field, 8, ""},
-		{"NamedArg.Value", Field, 8, ""},
-		{"Null", Type, 22, ""},
-		{"Null.V", Field, 22, ""},
-		{"Null.Valid", Field, 22, ""},
-		{"NullBool", Type, 0, ""},
-		{"NullBool.Bool", Field, 0, ""},
-		{"NullBool.Valid", Field, 0, ""},
-		{"NullByte", Type, 17, ""},
-		{"NullByte.Byte", Field, 17, ""},
-		{"NullByte.Valid", Field, 17, ""},
-		{"NullFloat64", Type, 0, ""},
-		{"NullFloat64.Float64", Field, 0, ""},
-		{"NullFloat64.Valid", Field, 0, ""},
-		{"NullInt16", Type, 17, ""},
-		{"NullInt16.Int16", Field, 17, ""},
-		{"NullInt16.Valid", Field, 17, ""},
-		{"NullInt32", Type, 13, ""},
-		{"NullInt32.Int32", Field, 13, ""},
-		{"NullInt32.Valid", Field, 13, ""},
-		{"NullInt64", Type, 0, ""},
-		{"NullInt64.Int64", Field, 0, ""},
-		{"NullInt64.Valid", Field, 0, ""},
-		{"NullString", Type, 0, ""},
-		{"NullString.String", Field, 0, ""},
-		{"NullString.Valid", Field, 0, ""},
-		{"NullTime", Type, 13, ""},
-		{"NullTime.Time", Field, 13, ""},
-		{"NullTime.Valid", Field, 13, ""},
-		{"Open", Func, 0, "func(driverName string, dataSourceName string) (*DB, error)"},
-		{"OpenDB", Func, 10, "func(c driver.Connector) *DB"},
-		{"Out", Type, 9, ""},
-		{"Out.Dest", Field, 9, ""},
-		{"Out.In", Field, 9, ""},
-		{"RawBytes", Type, 0, ""},
-		{"Register", Func, 0, "func(name string, driver driver.Driver)"},
-		{"Result", Type, 0, ""},
-		{"Row", Type, 0, ""},
-		{"Rows", Type, 0, ""},
-		{"Scanner", Type, 0, ""},
-		{"Stmt", Type, 0, ""},
-		{"Tx", Type, 0, ""},
-		{"TxOptions", Type, 8, ""},
-		{"TxOptions.Isolation", Field, 8, ""},
-		{"TxOptions.ReadOnly", Field, 8, ""},
+		{"(*ColumnType).DatabaseTypeName", Method, 8},
+		{"(*ColumnType).DecimalSize", Method, 8},
+		{"(*ColumnType).Length", Method, 8},
+		{"(*ColumnType).Name", Method, 8},
+		{"(*ColumnType).Nullable", Method, 8},
+		{"(*ColumnType).ScanType", Method, 8},
+		{"(*Conn).BeginTx", Method, 9},
+		{"(*Conn).Close", Method, 9},
+		{"(*Conn).ExecContext", Method, 9},
+		{"(*Conn).PingContext", Method, 9},
+		{"(*Conn).PrepareContext", Method, 9},
+		{"(*Conn).QueryContext", Method, 9},
+		{"(*Conn).QueryRowContext", Method, 9},
+		{"(*Conn).Raw", Method, 13},
+		{"(*DB).Begin", Method, 0},
+		{"(*DB).BeginTx", Method, 8},
+		{"(*DB).Close", Method, 0},
+		{"(*DB).Conn", Method, 9},
+		{"(*DB).Driver", Method, 0},
+		{"(*DB).Exec", Method, 0},
+		{"(*DB).ExecContext", Method, 8},
+		{"(*DB).Ping", Method, 1},
+		{"(*DB).PingContext", Method, 8},
+		{"(*DB).Prepare", Method, 0},
+		{"(*DB).PrepareContext", Method, 8},
+		{"(*DB).Query", Method, 0},
+		{"(*DB).QueryContext", Method, 8},
+		{"(*DB).QueryRow", Method, 0},
+		{"(*DB).QueryRowContext", Method, 8},
+		{"(*DB).SetConnMaxIdleTime", Method, 15},
+		{"(*DB).SetConnMaxLifetime", Method, 6},
+		{"(*DB).SetMaxIdleConns", Method, 1},
+		{"(*DB).SetMaxOpenConns", Method, 2},
+		{"(*DB).Stats", Method, 5},
+		{"(*Null).Scan", Method, 22},
+		{"(*NullBool).Scan", Method, 0},
+		{"(*NullByte).Scan", Method, 17},
+		{"(*NullFloat64).Scan", Method, 0},
+		{"(*NullInt16).Scan", Method, 17},
+		{"(*NullInt32).Scan", Method, 13},
+		{"(*NullInt64).Scan", Method, 0},
+		{"(*NullString).Scan", Method, 0},
+		{"(*NullTime).Scan", Method, 13},
+		{"(*Row).Err", Method, 15},
+		{"(*Row).Scan", Method, 0},
+		{"(*Rows).Close", Method, 0},
+		{"(*Rows).ColumnTypes", Method, 8},
+		{"(*Rows).Columns", Method, 0},
+		{"(*Rows).Err", Method, 0},
+		{"(*Rows).Next", Method, 0},
+		{"(*Rows).NextResultSet", Method, 8},
+		{"(*Rows).Scan", Method, 0},
+		{"(*Stmt).Close", Method, 0},
+		{"(*Stmt).Exec", Method, 0},
+		{"(*Stmt).ExecContext", Method, 8},
+		{"(*Stmt).Query", Method, 0},
+		{"(*Stmt).QueryContext", Method, 8},
+		{"(*Stmt).QueryRow", Method, 0},
+		{"(*Stmt).QueryRowContext", Method, 8},
+		{"(*Tx).Commit", Method, 0},
+		{"(*Tx).Exec", Method, 0},
+		{"(*Tx).ExecContext", Method, 8},
+		{"(*Tx).Prepare", Method, 0},
+		{"(*Tx).PrepareContext", Method, 8},
+		{"(*Tx).Query", Method, 0},
+		{"(*Tx).QueryContext", Method, 8},
+		{"(*Tx).QueryRow", Method, 0},
+		{"(*Tx).QueryRowContext", Method, 8},
+		{"(*Tx).Rollback", Method, 0},
+		{"(*Tx).Stmt", Method, 0},
+		{"(*Tx).StmtContext", Method, 8},
+		{"(IsolationLevel).String", Method, 11},
+		{"(Null).Value", Method, 22},
+		{"(NullBool).Value", Method, 0},
+		{"(NullByte).Value", Method, 17},
+		{"(NullFloat64).Value", Method, 0},
+		{"(NullInt16).Value", Method, 17},
+		{"(NullInt32).Value", Method, 13},
+		{"(NullInt64).Value", Method, 0},
+		{"(NullString).Value", Method, 0},
+		{"(NullTime).Value", Method, 13},
+		{"ColumnType", Type, 8},
+		{"Conn", Type, 9},
+		{"DB", Type, 0},
+		{"DBStats", Type, 5},
+		{"DBStats.Idle", Field, 11},
+		{"DBStats.InUse", Field, 11},
+		{"DBStats.MaxIdleClosed", Field, 11},
+		{"DBStats.MaxIdleTimeClosed", Field, 15},
+		{"DBStats.MaxLifetimeClosed", Field, 11},
+		{"DBStats.MaxOpenConnections", Field, 11},
+		{"DBStats.OpenConnections", Field, 5},
+		{"DBStats.WaitCount", Field, 11},
+		{"DBStats.WaitDuration", Field, 11},
+		{"Drivers", Func, 4},
+		{"ErrConnDone", Var, 9},
+		{"ErrNoRows", Var, 0},
+		{"ErrTxDone", Var, 0},
+		{"IsolationLevel", Type, 8},
+		{"LevelDefault", Const, 8},
+		{"LevelLinearizable", Const, 8},
+		{"LevelReadCommitted", Const, 8},
+		{"LevelReadUncommitted", Const, 8},
+		{"LevelRepeatableRead", Const, 8},
+		{"LevelSerializable", Const, 8},
+		{"LevelSnapshot", Const, 8},
+		{"LevelWriteCommitted", Const, 8},
+		{"Named", Func, 8},
+		{"NamedArg", Type, 8},
+		{"NamedArg.Name", Field, 8},
+		{"NamedArg.Value", Field, 8},
+		{"Null", Type, 22},
+		{"Null.V", Field, 22},
+		{"Null.Valid", Field, 22},
+		{"NullBool", Type, 0},
+		{"NullBool.Bool", Field, 0},
+		{"NullBool.Valid", Field, 0},
+		{"NullByte", Type, 17},
+		{"NullByte.Byte", Field, 17},
+		{"NullByte.Valid", Field, 17},
+		{"NullFloat64", Type, 0},
+		{"NullFloat64.Float64", Field, 0},
+		{"NullFloat64.Valid", Field, 0},
+		{"NullInt16", Type, 17},
+		{"NullInt16.Int16", Field, 17},
+		{"NullInt16.Valid", Field, 17},
+		{"NullInt32", Type, 13},
+		{"NullInt32.Int32", Field, 13},
+		{"NullInt32.Valid", Field, 13},
+		{"NullInt64", Type, 0},
+		{"NullInt64.Int64", Field, 0},
+		{"NullInt64.Valid", Field, 0},
+		{"NullString", Type, 0},
+		{"NullString.String", Field, 0},
+		{"NullString.Valid", Field, 0},
+		{"NullTime", Type, 13},
+		{"NullTime.Time", Field, 13},
+		{"NullTime.Valid", Field, 13},
+		{"Open", Func, 0},
+		{"OpenDB", Func, 10},
+		{"Out", Type, 9},
+		{"Out.Dest", Field, 9},
+		{"Out.In", Field, 9},
+		{"RawBytes", Type, 0},
+		{"Register", Func, 0},
+		{"Result", Type, 0},
+		{"Row", Type, 0},
+		{"Rows", Type, 0},
+		{"Scanner", Type, 0},
+		{"Stmt", Type, 0},
+		{"Tx", Type, 0},
+		{"TxOptions", Type, 8},
+		{"TxOptions.Isolation", Field, 8},
+		{"TxOptions.ReadOnly", Field, 8},
 	},
 	"database/sql/driver": {
-		{"(NotNull).ConvertValue", Method, 0, ""},
-		{"(Null).ConvertValue", Method, 0, ""},
-		{"(RowsAffected).LastInsertId", Method, 0, ""},
-		{"(RowsAffected).RowsAffected", Method, 0, ""},
-		{"Bool", Var, 0, ""},
-		{"ColumnConverter", Type, 0, ""},
-		{"Conn", Type, 0, ""},
-		{"ConnBeginTx", Type, 8, ""},
-		{"ConnPrepareContext", Type, 8, ""},
-		{"Connector", Type, 10, ""},
-		{"DefaultParameterConverter", Var, 0, ""},
-		{"Driver", Type, 0, ""},
-		{"DriverContext", Type, 10, ""},
-		{"ErrBadConn", Var, 0, ""},
-		{"ErrRemoveArgument", Var, 9, ""},
-		{"ErrSkip", Var, 0, ""},
-		{"Execer", Type, 0, ""},
-		{"ExecerContext", Type, 8, ""},
-		{"Int32", Var, 0, ""},
-		{"IsScanValue", Func, 0, "func(v any) bool"},
-		{"IsValue", Func, 0, "func(v any) bool"},
-		{"IsolationLevel", Type, 8, ""},
-		{"NamedValue", Type, 8, ""},
-		{"NamedValue.Name", Field, 8, ""},
-		{"NamedValue.Ordinal", Field, 8, ""},
-		{"NamedValue.Value", Field, 8, ""},
-		{"NamedValueChecker", Type, 9, ""},
-		{"NotNull", Type, 0, ""},
-		{"NotNull.Converter", Field, 0, ""},
-		{"Null", Type, 0, ""},
-		{"Null.Converter", Field, 0, ""},
-		{"Pinger", Type, 8, ""},
-		{"Queryer", Type, 1, ""},
-		{"QueryerContext", Type, 8, ""},
-		{"Result", Type, 0, ""},
-		{"ResultNoRows", Var, 0, ""},
-		{"Rows", Type, 0, ""},
-		{"RowsAffected", Type, 0, ""},
-		{"RowsColumnTypeDatabaseTypeName", Type, 8, ""},
-		{"RowsColumnTypeLength", Type, 8, ""},
-		{"RowsColumnTypeNullable", Type, 8, ""},
-		{"RowsColumnTypePrecisionScale", Type, 8, ""},
-		{"RowsColumnTypeScanType", Type, 8, ""},
-		{"RowsNextResultSet", Type, 8, ""},
-		{"SessionResetter", Type, 10, ""},
-		{"Stmt", Type, 0, ""},
-		{"StmtExecContext", Type, 8, ""},
-		{"StmtQueryContext", Type, 8, ""},
-		{"String", Var, 0, ""},
-		{"Tx", Type, 0, ""},
-		{"TxOptions", Type, 8, ""},
-		{"TxOptions.Isolation", Field, 8, ""},
-		{"TxOptions.ReadOnly", Field, 8, ""},
-		{"Validator", Type, 15, ""},
-		{"Value", Type, 0, ""},
-		{"ValueConverter", Type, 0, ""},
-		{"Valuer", Type, 0, ""},
+		{"(NotNull).ConvertValue", Method, 0},
+		{"(Null).ConvertValue", Method, 0},
+		{"(RowsAffected).LastInsertId", Method, 0},
+		{"(RowsAffected).RowsAffected", Method, 0},
+		{"Bool", Var, 0},
+		{"ColumnConverter", Type, 0},
+		{"Conn", Type, 0},
+		{"ConnBeginTx", Type, 8},
+		{"ConnPrepareContext", Type, 8},
+		{"Connector", Type, 10},
+		{"DefaultParameterConverter", Var, 0},
+		{"Driver", Type, 0},
+		{"DriverContext", Type, 10},
+		{"ErrBadConn", Var, 0},
+		{"ErrRemoveArgument", Var, 9},
+		{"ErrSkip", Var, 0},
+		{"Execer", Type, 0},
+		{"ExecerContext", Type, 8},
+		{"Int32", Var, 0},
+		{"IsScanValue", Func, 0},
+		{"IsValue", Func, 0},
+		{"IsolationLevel", Type, 8},
+		{"NamedValue", Type, 8},
+		{"NamedValue.Name", Field, 8},
+		{"NamedValue.Ordinal", Field, 8},
+		{"NamedValue.Value", Field, 8},
+		{"NamedValueChecker", Type, 9},
+		{"NotNull", Type, 0},
+		{"NotNull.Converter", Field, 0},
+		{"Null", Type, 0},
+		{"Null.Converter", Field, 0},
+		{"Pinger", Type, 8},
+		{"Queryer", Type, 1},
+		{"QueryerContext", Type, 8},
+		{"Result", Type, 0},
+		{"ResultNoRows", Var, 0},
+		{"Rows", Type, 0},
+		{"RowsAffected", Type, 0},
+		{"RowsColumnTypeDatabaseTypeName", Type, 8},
+		{"RowsColumnTypeLength", Type, 8},
+		{"RowsColumnTypeNullable", Type, 8},
+		{"RowsColumnTypePrecisionScale", Type, 8},
+		{"RowsColumnTypeScanType", Type, 8},
+		{"RowsNextResultSet", Type, 8},
+		{"SessionResetter", Type, 10},
+		{"Stmt", Type, 0},
+		{"StmtExecContext", Type, 8},
+		{"StmtQueryContext", Type, 8},
+		{"String", Var, 0},
+		{"Tx", Type, 0},
+		{"TxOptions", Type, 8},
+		{"TxOptions.Isolation", Field, 8},
+		{"TxOptions.ReadOnly", Field, 8},
+		{"Validator", Type, 15},
+		{"Value", Type, 0},
+		{"ValueConverter", Type, 0},
+		{"Valuer", Type, 0},
 	},
 	"debug/buildinfo": {
-		{"BuildInfo", Type, 18, ""},
-		{"Read", Func, 18, "func(r io.ReaderAt) (*BuildInfo, error)"},
-		{"ReadFile", Func, 18, "func(name string) (info *BuildInfo, err error)"},
+		{"BuildInfo", Type, 18},
+		{"Read", Func, 18},
+		{"ReadFile", Func, 18},
 	},
 	"debug/dwarf": {
-		{"(*AddrType).Basic", Method, 0, ""},
-		{"(*AddrType).Common", Method, 0, ""},
-		{"(*AddrType).Size", Method, 0, ""},
-		{"(*AddrType).String", Method, 0, ""},
-		{"(*ArrayType).Common", Method, 0, ""},
-		{"(*ArrayType).Size", Method, 0, ""},
-		{"(*ArrayType).String", Method, 0, ""},
-		{"(*BasicType).Basic", Method, 0, ""},
-		{"(*BasicType).Common", Method, 0, ""},
-		{"(*BasicType).Size", Method, 0, ""},
-		{"(*BasicType).String", Method, 0, ""},
-		{"(*BoolType).Basic", Method, 0, ""},
-		{"(*BoolType).Common", Method, 0, ""},
-		{"(*BoolType).Size", Method, 0, ""},
-		{"(*BoolType).String", Method, 0, ""},
-		{"(*CharType).Basic", Method, 0, ""},
-		{"(*CharType).Common", Method, 0, ""},
-		{"(*CharType).Size", Method, 0, ""},
-		{"(*CharType).String", Method, 0, ""},
-		{"(*CommonType).Common", Method, 0, ""},
-		{"(*CommonType).Size", Method, 0, ""},
-		{"(*ComplexType).Basic", Method, 0, ""},
-		{"(*ComplexType).Common", Method, 0, ""},
-		{"(*ComplexType).Size", Method, 0, ""},
-		{"(*ComplexType).String", Method, 0, ""},
-		{"(*Data).AddSection", Method, 14, ""},
-		{"(*Data).AddTypes", Method, 3, ""},
-		{"(*Data).LineReader", Method, 5, ""},
-		{"(*Data).Ranges", Method, 7, ""},
-		{"(*Data).Reader", Method, 0, ""},
-		{"(*Data).Type", Method, 0, ""},
-		{"(*DotDotDotType).Common", Method, 0, ""},
-		{"(*DotDotDotType).Size", Method, 0, ""},
-		{"(*DotDotDotType).String", Method, 0, ""},
-		{"(*Entry).AttrField", Method, 5, ""},
-		{"(*Entry).Val", Method, 0, ""},
-		{"(*EnumType).Common", Method, 0, ""},
-		{"(*EnumType).Size", Method, 0, ""},
-		{"(*EnumType).String", Method, 0, ""},
-		{"(*FloatType).Basic", Method, 0, ""},
-		{"(*FloatType).Common", Method, 0, ""},
-		{"(*FloatType).Size", Method, 0, ""},
-		{"(*FloatType).String", Method, 0, ""},
-		{"(*FuncType).Common", Method, 0, ""},
-		{"(*FuncType).Size", Method, 0, ""},
-		{"(*FuncType).String", Method, 0, ""},
-		{"(*IntType).Basic", Method, 0, ""},
-		{"(*IntType).Common", Method, 0, ""},
-		{"(*IntType).Size", Method, 0, ""},
-		{"(*IntType).String", Method, 0, ""},
-		{"(*LineReader).Files", Method, 14, ""},
-		{"(*LineReader).Next", Method, 5, ""},
-		{"(*LineReader).Reset", Method, 5, ""},
-		{"(*LineReader).Seek", Method, 5, ""},
-		{"(*LineReader).SeekPC", Method, 5, ""},
-		{"(*LineReader).Tell", Method, 5, ""},
-		{"(*PtrType).Common", Method, 0, ""},
-		{"(*PtrType).Size", Method, 0, ""},
-		{"(*PtrType).String", Method, 0, ""},
-		{"(*QualType).Common", Method, 0, ""},
-		{"(*QualType).Size", Method, 0, ""},
-		{"(*QualType).String", Method, 0, ""},
-		{"(*Reader).AddressSize", Method, 5, ""},
-		{"(*Reader).ByteOrder", Method, 14, ""},
-		{"(*Reader).Next", Method, 0, ""},
-		{"(*Reader).Seek", Method, 0, ""},
-		{"(*Reader).SeekPC", Method, 7, ""},
-		{"(*Reader).SkipChildren", Method, 0, ""},
-		{"(*StructType).Common", Method, 0, ""},
-		{"(*StructType).Defn", Method, 0, ""},
-		{"(*StructType).Size", Method, 0, ""},
-		{"(*StructType).String", Method, 0, ""},
-		{"(*TypedefType).Common", Method, 0, ""},
-		{"(*TypedefType).Size", Method, 0, ""},
-		{"(*TypedefType).String", Method, 0, ""},
-		{"(*UcharType).Basic", Method, 0, ""},
-		{"(*UcharType).Common", Method, 0, ""},
-		{"(*UcharType).Size", Method, 0, ""},
-		{"(*UcharType).String", Method, 0, ""},
-		{"(*UintType).Basic", Method, 0, ""},
-		{"(*UintType).Common", Method, 0, ""},
-		{"(*UintType).Size", Method, 0, ""},
-		{"(*UintType).String", Method, 0, ""},
-		{"(*UnspecifiedType).Basic", Method, 4, ""},
-		{"(*UnspecifiedType).Common", Method, 4, ""},
-		{"(*UnspecifiedType).Size", Method, 4, ""},
-		{"(*UnspecifiedType).String", Method, 4, ""},
-		{"(*UnsupportedType).Common", Method, 13, ""},
-		{"(*UnsupportedType).Size", Method, 13, ""},
-		{"(*UnsupportedType).String", Method, 13, ""},
-		{"(*VoidType).Common", Method, 0, ""},
-		{"(*VoidType).Size", Method, 0, ""},
-		{"(*VoidType).String", Method, 0, ""},
-		{"(Attr).GoString", Method, 0, ""},
-		{"(Attr).String", Method, 0, ""},
-		{"(Class).GoString", Method, 5, ""},
-		{"(Class).String", Method, 5, ""},
-		{"(DecodeError).Error", Method, 0, ""},
-		{"(Tag).GoString", Method, 0, ""},
-		{"(Tag).String", Method, 0, ""},
-		{"AddrType", Type, 0, ""},
-		{"AddrType.BasicType", Field, 0, ""},
-		{"ArrayType", Type, 0, ""},
-		{"ArrayType.CommonType", Field, 0, ""},
-		{"ArrayType.Count", Field, 0, ""},
-		{"ArrayType.StrideBitSize", Field, 0, ""},
-		{"ArrayType.Type", Field, 0, ""},
-		{"Attr", Type, 0, ""},
-		{"AttrAbstractOrigin", Const, 0, ""},
-		{"AttrAccessibility", Const, 0, ""},
-		{"AttrAddrBase", Const, 14, ""},
-		{"AttrAddrClass", Const, 0, ""},
-		{"AttrAlignment", Const, 14, ""},
-		{"AttrAllocated", Const, 0, ""},
-		{"AttrArtificial", Const, 0, ""},
-		{"AttrAssociated", Const, 0, ""},
-		{"AttrBaseTypes", Const, 0, ""},
-		{"AttrBinaryScale", Const, 14, ""},
-		{"AttrBitOffset", Const, 0, ""},
-		{"AttrBitSize", Const, 0, ""},
-		{"AttrByteSize", Const, 0, ""},
-		{"AttrCallAllCalls", Const, 14, ""},
-		{"AttrCallAllSourceCalls", Const, 14, ""},
-		{"AttrCallAllTailCalls", Const, 14, ""},
-		{"AttrCallColumn", Const, 0, ""},
-		{"AttrCallDataLocation", Const, 14, ""},
-		{"AttrCallDataValue", Const, 14, ""},
-		{"AttrCallFile", Const, 0, ""},
-		{"AttrCallLine", Const, 0, ""},
-		{"AttrCallOrigin", Const, 14, ""},
-		{"AttrCallPC", Const, 14, ""},
-		{"AttrCallParameter", Const, 14, ""},
-		{"AttrCallReturnPC", Const, 14, ""},
-		{"AttrCallTailCall", Const, 14, ""},
-		{"AttrCallTarget", Const, 14, ""},
-		{"AttrCallTargetClobbered", Const, 14, ""},
-		{"AttrCallValue", Const, 14, ""},
-		{"AttrCalling", Const, 0, ""},
-		{"AttrCommonRef", Const, 0, ""},
-		{"AttrCompDir", Const, 0, ""},
-		{"AttrConstExpr", Const, 14, ""},
-		{"AttrConstValue", Const, 0, ""},
-		{"AttrContainingType", Const, 0, ""},
-		{"AttrCount", Const, 0, ""},
-		{"AttrDataBitOffset", Const, 14, ""},
-		{"AttrDataLocation", Const, 0, ""},
-		{"AttrDataMemberLoc", Const, 0, ""},
-		{"AttrDecimalScale", Const, 14, ""},
-		{"AttrDecimalSign", Const, 14, ""},
-		{"AttrDeclColumn", Const, 0, ""},
-		{"AttrDeclFile", Const, 0, ""},
-		{"AttrDeclLine", Const, 0, ""},
-		{"AttrDeclaration", Const, 0, ""},
-		{"AttrDefaultValue", Const, 0, ""},
-		{"AttrDefaulted", Const, 14, ""},
-		{"AttrDeleted", Const, 14, ""},
-		{"AttrDescription", Const, 0, ""},
-		{"AttrDigitCount", Const, 14, ""},
-		{"AttrDiscr", Const, 0, ""},
-		{"AttrDiscrList", Const, 0, ""},
-		{"AttrDiscrValue", Const, 0, ""},
-		{"AttrDwoName", Const, 14, ""},
-		{"AttrElemental", Const, 14, ""},
-		{"AttrEncoding", Const, 0, ""},
-		{"AttrEndianity", Const, 14, ""},
-		{"AttrEntrypc", Const, 0, ""},
-		{"AttrEnumClass", Const, 14, ""},
-		{"AttrExplicit", Const, 14, ""},
-		{"AttrExportSymbols", Const, 14, ""},
-		{"AttrExtension", Const, 0, ""},
-		{"AttrExternal", Const, 0, ""},
-		{"AttrFrameBase", Const, 0, ""},
-		{"AttrFriend", Const, 0, ""},
-		{"AttrHighpc", Const, 0, ""},
-		{"AttrIdentifierCase", Const, 0, ""},
-		{"AttrImport", Const, 0, ""},
-		{"AttrInline", Const, 0, ""},
-		{"AttrIsOptional", Const, 0, ""},
-		{"AttrLanguage", Const, 0, ""},
-		{"AttrLinkageName", Const, 14, ""},
-		{"AttrLocation", Const, 0, ""},
-		{"AttrLoclistsBase", Const, 14, ""},
-		{"AttrLowerBound", Const, 0, ""},
-		{"AttrLowpc", Const, 0, ""},
-		{"AttrMacroInfo", Const, 0, ""},
-		{"AttrMacros", Const, 14, ""},
-		{"AttrMainSubprogram", Const, 14, ""},
-		{"AttrMutable", Const, 14, ""},
-		{"AttrName", Const, 0, ""},
-		{"AttrNamelistItem", Const, 0, ""},
-		{"AttrNoreturn", Const, 14, ""},
-		{"AttrObjectPointer", Const, 14, ""},
-		{"AttrOrdering", Const, 0, ""},
-		{"AttrPictureString", Const, 14, ""},
-		{"AttrPriority", Const, 0, ""},
-		{"AttrProducer", Const, 0, ""},
-		{"AttrPrototyped", Const, 0, ""},
-		{"AttrPure", Const, 14, ""},
-		{"AttrRanges", Const, 0, ""},
-		{"AttrRank", Const, 14, ""},
-		{"AttrRecursive", Const, 14, ""},
-		{"AttrReference", Const, 14, ""},
-		{"AttrReturnAddr", Const, 0, ""},
-		{"AttrRnglistsBase", Const, 14, ""},
-		{"AttrRvalueReference", Const, 14, ""},
-		{"AttrSegment", Const, 0, ""},
-		{"AttrSibling", Const, 0, ""},
-		{"AttrSignature", Const, 14, ""},
-		{"AttrSmall", Const, 14, ""},
-		{"AttrSpecification", Const, 0, ""},
-		{"AttrStartScope", Const, 0, ""},
-		{"AttrStaticLink", Const, 0, ""},
-		{"AttrStmtList", Const, 0, ""},
-		{"AttrStrOffsetsBase", Const, 14, ""},
-		{"AttrStride", Const, 0, ""},
-		{"AttrStrideSize", Const, 0, ""},
-		{"AttrStringLength", Const, 0, ""},
-		{"AttrStringLengthBitSize", Const, 14, ""},
-		{"AttrStringLengthByteSize", Const, 14, ""},
-		{"AttrThreadsScaled", Const, 14, ""},
-		{"AttrTrampoline", Const, 0, ""},
-		{"AttrType", Const, 0, ""},
-		{"AttrUpperBound", Const, 0, ""},
-		{"AttrUseLocation", Const, 0, ""},
-		{"AttrUseUTF8", Const, 0, ""},
-		{"AttrVarParam", Const, 0, ""},
-		{"AttrVirtuality", Const, 0, ""},
-		{"AttrVisibility", Const, 0, ""},
-		{"AttrVtableElemLoc", Const, 0, ""},
-		{"BasicType", Type, 0, ""},
-		{"BasicType.BitOffset", Field, 0, ""},
-		{"BasicType.BitSize", Field, 0, ""},
-		{"BasicType.CommonType", Field, 0, ""},
-		{"BasicType.DataBitOffset", Field, 18, ""},
-		{"BoolType", Type, 0, ""},
-		{"BoolType.BasicType", Field, 0, ""},
-		{"CharType", Type, 0, ""},
-		{"CharType.BasicType", Field, 0, ""},
-		{"Class", Type, 5, ""},
-		{"ClassAddrPtr", Const, 14, ""},
-		{"ClassAddress", Const, 5, ""},
-		{"ClassBlock", Const, 5, ""},
-		{"ClassConstant", Const, 5, ""},
-		{"ClassExprLoc", Const, 5, ""},
-		{"ClassFlag", Const, 5, ""},
-		{"ClassLinePtr", Const, 5, ""},
-		{"ClassLocList", Const, 14, ""},
-		{"ClassLocListPtr", Const, 5, ""},
-		{"ClassMacPtr", Const, 5, ""},
-		{"ClassRangeListPtr", Const, 5, ""},
-		{"ClassReference", Const, 5, ""},
-		{"ClassReferenceAlt", Const, 5, ""},
-		{"ClassReferenceSig", Const, 5, ""},
-		{"ClassRngList", Const, 14, ""},
-		{"ClassRngListsPtr", Const, 14, ""},
-		{"ClassStrOffsetsPtr", Const, 14, ""},
-		{"ClassString", Const, 5, ""},
-		{"ClassStringAlt", Const, 5, ""},
-		{"ClassUnknown", Const, 6, ""},
-		{"CommonType", Type, 0, ""},
-		{"CommonType.ByteSize", Field, 0, ""},
-		{"CommonType.Name", Field, 0, ""},
-		{"ComplexType", Type, 0, ""},
-		{"ComplexType.BasicType", Field, 0, ""},
-		{"Data", Type, 0, ""},
-		{"DecodeError", Type, 0, ""},
-		{"DecodeError.Err", Field, 0, ""},
-		{"DecodeError.Name", Field, 0, ""},
-		{"DecodeError.Offset", Field, 0, ""},
-		{"DotDotDotType", Type, 0, ""},
-		{"DotDotDotType.CommonType", Field, 0, ""},
-		{"Entry", Type, 0, ""},
-		{"Entry.Children", Field, 0, ""},
-		{"Entry.Field", Field, 0, ""},
-		{"Entry.Offset", Field, 0, ""},
-		{"Entry.Tag", Field, 0, ""},
-		{"EnumType", Type, 0, ""},
-		{"EnumType.CommonType", Field, 0, ""},
-		{"EnumType.EnumName", Field, 0, ""},
-		{"EnumType.Val", Field, 0, ""},
-		{"EnumValue", Type, 0, ""},
-		{"EnumValue.Name", Field, 0, ""},
-		{"EnumValue.Val", Field, 0, ""},
-		{"ErrUnknownPC", Var, 5, ""},
-		{"Field", Type, 0, ""},
-		{"Field.Attr", Field, 0, ""},
-		{"Field.Class", Field, 5, ""},
-		{"Field.Val", Field, 0, ""},
-		{"FloatType", Type, 0, ""},
-		{"FloatType.BasicType", Field, 0, ""},
-		{"FuncType", Type, 0, ""},
-		{"FuncType.CommonType", Field, 0, ""},
-		{"FuncType.ParamType", Field, 0, ""},
-		{"FuncType.ReturnType", Field, 0, ""},
-		{"IntType", Type, 0, ""},
-		{"IntType.BasicType", Field, 0, ""},
-		{"LineEntry", Type, 5, ""},
-		{"LineEntry.Address", Field, 5, ""},
-		{"LineEntry.BasicBlock", Field, 5, ""},
-		{"LineEntry.Column", Field, 5, ""},
-		{"LineEntry.Discriminator", Field, 5, ""},
-		{"LineEntry.EndSequence", Field, 5, ""},
-		{"LineEntry.EpilogueBegin", Field, 5, ""},
-		{"LineEntry.File", Field, 5, ""},
-		{"LineEntry.ISA", Field, 5, ""},
-		{"LineEntry.IsStmt", Field, 5, ""},
-		{"LineEntry.Line", Field, 5, ""},
-		{"LineEntry.OpIndex", Field, 5, ""},
-		{"LineEntry.PrologueEnd", Field, 5, ""},
-		{"LineFile", Type, 5, ""},
-		{"LineFile.Length", Field, 5, ""},
-		{"LineFile.Mtime", Field, 5, ""},
-		{"LineFile.Name", Field, 5, ""},
-		{"LineReader", Type, 5, ""},
-		{"LineReaderPos", Type, 5, ""},
-		{"New", Func, 0, "func(abbrev []byte, aranges []byte, frame []byte, info []byte, line []byte, pubnames []byte, ranges []byte, str []byte) (*Data, error)"},
-		{"Offset", Type, 0, ""},
-		{"PtrType", Type, 0, ""},
-		{"PtrType.CommonType", Field, 0, ""},
-		{"PtrType.Type", Field, 0, ""},
-		{"QualType", Type, 0, ""},
-		{"QualType.CommonType", Field, 0, ""},
-		{"QualType.Qual", Field, 0, ""},
-		{"QualType.Type", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"StructField", Type, 0, ""},
-		{"StructField.BitOffset", Field, 0, ""},
-		{"StructField.BitSize", Field, 0, ""},
-		{"StructField.ByteOffset", Field, 0, ""},
-		{"StructField.ByteSize", Field, 0, ""},
-		{"StructField.DataBitOffset", Field, 18, ""},
-		{"StructField.Name", Field, 0, ""},
-		{"StructField.Type", Field, 0, ""},
-		{"StructType", Type, 0, ""},
-		{"StructType.CommonType", Field, 0, ""},
-		{"StructType.Field", Field, 0, ""},
-		{"StructType.Incomplete", Field, 0, ""},
-		{"StructType.Kind", Field, 0, ""},
-		{"StructType.StructName", Field, 0, ""},
-		{"Tag", Type, 0, ""},
-		{"TagAccessDeclaration", Const, 0, ""},
-		{"TagArrayType", Const, 0, ""},
-		{"TagAtomicType", Const, 14, ""},
-		{"TagBaseType", Const, 0, ""},
-		{"TagCallSite", Const, 14, ""},
-		{"TagCallSiteParameter", Const, 14, ""},
-		{"TagCatchDwarfBlock", Const, 0, ""},
-		{"TagClassType", Const, 0, ""},
-		{"TagCoarrayType", Const, 14, ""},
-		{"TagCommonDwarfBlock", Const, 0, ""},
-		{"TagCommonInclusion", Const, 0, ""},
-		{"TagCompileUnit", Const, 0, ""},
-		{"TagCondition", Const, 3, ""},
-		{"TagConstType", Const, 0, ""},
-		{"TagConstant", Const, 0, ""},
-		{"TagDwarfProcedure", Const, 0, ""},
-		{"TagDynamicType", Const, 14, ""},
-		{"TagEntryPoint", Const, 0, ""},
-		{"TagEnumerationType", Const, 0, ""},
-		{"TagEnumerator", Const, 0, ""},
-		{"TagFileType", Const, 0, ""},
-		{"TagFormalParameter", Const, 0, ""},
-		{"TagFriend", Const, 0, ""},
-		{"TagGenericSubrange", Const, 14, ""},
-		{"TagImmutableType", Const, 14, ""},
-		{"TagImportedDeclaration", Const, 0, ""},
-		{"TagImportedModule", Const, 0, ""},
-		{"TagImportedUnit", Const, 0, ""},
-		{"TagInheritance", Const, 0, ""},
-		{"TagInlinedSubroutine", Const, 0, ""},
-		{"TagInterfaceType", Const, 0, ""},
-		{"TagLabel", Const, 0, ""},
-		{"TagLexDwarfBlock", Const, 0, ""},
-		{"TagMember", Const, 0, ""},
-		{"TagModule", Const, 0, ""},
-		{"TagMutableType", Const, 0, ""},
-		{"TagNamelist", Const, 0, ""},
-		{"TagNamelistItem", Const, 0, ""},
-		{"TagNamespace", Const, 0, ""},
-		{"TagPackedType", Const, 0, ""},
-		{"TagPartialUnit", Const, 0, ""},
-		{"TagPointerType", Const, 0, ""},
-		{"TagPtrToMemberType", Const, 0, ""},
-		{"TagReferenceType", Const, 0, ""},
-		{"TagRestrictType", Const, 0, ""},
-		{"TagRvalueReferenceType", Const, 3, ""},
-		{"TagSetType", Const, 0, ""},
-		{"TagSharedType", Const, 3, ""},
-		{"TagSkeletonUnit", Const, 14, ""},
-		{"TagStringType", Const, 0, ""},
-		{"TagStructType", Const, 0, ""},
-		{"TagSubprogram", Const, 0, ""},
-		{"TagSubrangeType", Const, 0, ""},
-		{"TagSubroutineType", Const, 0, ""},
-		{"TagTemplateAlias", Const, 3, ""},
-		{"TagTemplateTypeParameter", Const, 0, ""},
-		{"TagTemplateValueParameter", Const, 0, ""},
-		{"TagThrownType", Const, 0, ""},
-		{"TagTryDwarfBlock", Const, 0, ""},
-		{"TagTypeUnit", Const, 3, ""},
-		{"TagTypedef", Const, 0, ""},
-		{"TagUnionType", Const, 0, ""},
-		{"TagUnspecifiedParameters", Const, 0, ""},
-		{"TagUnspecifiedType", Const, 0, ""},
-		{"TagVariable", Const, 0, ""},
-		{"TagVariant", Const, 0, ""},
-		{"TagVariantPart", Const, 0, ""},
-		{"TagVolatileType", Const, 0, ""},
-		{"TagWithStmt", Const, 0, ""},
-		{"Type", Type, 0, ""},
-		{"TypedefType", Type, 0, ""},
-		{"TypedefType.CommonType", Field, 0, ""},
-		{"TypedefType.Type", Field, 0, ""},
-		{"UcharType", Type, 0, ""},
-		{"UcharType.BasicType", Field, 0, ""},
-		{"UintType", Type, 0, ""},
-		{"UintType.BasicType", Field, 0, ""},
-		{"UnspecifiedType", Type, 4, ""},
-		{"UnspecifiedType.BasicType", Field, 4, ""},
-		{"UnsupportedType", Type, 13, ""},
-		{"UnsupportedType.CommonType", Field, 13, ""},
-		{"UnsupportedType.Tag", Field, 13, ""},
-		{"VoidType", Type, 0, ""},
-		{"VoidType.CommonType", Field, 0, ""},
+		{"(*AddrType).Basic", Method, 0},
+		{"(*AddrType).Common", Method, 0},
+		{"(*AddrType).Size", Method, 0},
+		{"(*AddrType).String", Method, 0},
+		{"(*ArrayType).Common", Method, 0},
+		{"(*ArrayType).Size", Method, 0},
+		{"(*ArrayType).String", Method, 0},
+		{"(*BasicType).Basic", Method, 0},
+		{"(*BasicType).Common", Method, 0},
+		{"(*BasicType).Size", Method, 0},
+		{"(*BasicType).String", Method, 0},
+		{"(*BoolType).Basic", Method, 0},
+		{"(*BoolType).Common", Method, 0},
+		{"(*BoolType).Size", Method, 0},
+		{"(*BoolType).String", Method, 0},
+		{"(*CharType).Basic", Method, 0},
+		{"(*CharType).Common", Method, 0},
+		{"(*CharType).Size", Method, 0},
+		{"(*CharType).String", Method, 0},
+		{"(*CommonType).Common", Method, 0},
+		{"(*CommonType).Size", Method, 0},
+		{"(*ComplexType).Basic", Method, 0},
+		{"(*ComplexType).Common", Method, 0},
+		{"(*ComplexType).Size", Method, 0},
+		{"(*ComplexType).String", Method, 0},
+		{"(*Data).AddSection", Method, 14},
+		{"(*Data).AddTypes", Method, 3},
+		{"(*Data).LineReader", Method, 5},
+		{"(*Data).Ranges", Method, 7},
+		{"(*Data).Reader", Method, 0},
+		{"(*Data).Type", Method, 0},
+		{"(*DotDotDotType).Common", Method, 0},
+		{"(*DotDotDotType).Size", Method, 0},
+		{"(*DotDotDotType).String", Method, 0},
+		{"(*Entry).AttrField", Method, 5},
+		{"(*Entry).Val", Method, 0},
+		{"(*EnumType).Common", Method, 0},
+		{"(*EnumType).Size", Method, 0},
+		{"(*EnumType).String", Method, 0},
+		{"(*FloatType).Basic", Method, 0},
+		{"(*FloatType).Common", Method, 0},
+		{"(*FloatType).Size", Method, 0},
+		{"(*FloatType).String", Method, 0},
+		{"(*FuncType).Common", Method, 0},
+		{"(*FuncType).Size", Method, 0},
+		{"(*FuncType).String", Method, 0},
+		{"(*IntType).Basic", Method, 0},
+		{"(*IntType).Common", Method, 0},
+		{"(*IntType).Size", Method, 0},
+		{"(*IntType).String", Method, 0},
+		{"(*LineReader).Files", Method, 14},
+		{"(*LineReader).Next", Method, 5},
+		{"(*LineReader).Reset", Method, 5},
+		{"(*LineReader).Seek", Method, 5},
+		{"(*LineReader).SeekPC", Method, 5},
+		{"(*LineReader).Tell", Method, 5},
+		{"(*PtrType).Common", Method, 0},
+		{"(*PtrType).Size", Method, 0},
+		{"(*PtrType).String", Method, 0},
+		{"(*QualType).Common", Method, 0},
+		{"(*QualType).Size", Method, 0},
+		{"(*QualType).String", Method, 0},
+		{"(*Reader).AddressSize", Method, 5},
+		{"(*Reader).ByteOrder", Method, 14},
+		{"(*Reader).Next", Method, 0},
+		{"(*Reader).Seek", Method, 0},
+		{"(*Reader).SeekPC", Method, 7},
+		{"(*Reader).SkipChildren", Method, 0},
+		{"(*StructType).Common", Method, 0},
+		{"(*StructType).Defn", Method, 0},
+		{"(*StructType).Size", Method, 0},
+		{"(*StructType).String", Method, 0},
+		{"(*TypedefType).Common", Method, 0},
+		{"(*TypedefType).Size", Method, 0},
+		{"(*TypedefType).String", Method, 0},
+		{"(*UcharType).Basic", Method, 0},
+		{"(*UcharType).Common", Method, 0},
+		{"(*UcharType).Size", Method, 0},
+		{"(*UcharType).String", Method, 0},
+		{"(*UintType).Basic", Method, 0},
+		{"(*UintType).Common", Method, 0},
+		{"(*UintType).Size", Method, 0},
+		{"(*UintType).String", Method, 0},
+		{"(*UnspecifiedType).Basic", Method, 4},
+		{"(*UnspecifiedType).Common", Method, 4},
+		{"(*UnspecifiedType).Size", Method, 4},
+		{"(*UnspecifiedType).String", Method, 4},
+		{"(*UnsupportedType).Common", Method, 13},
+		{"(*UnsupportedType).Size", Method, 13},
+		{"(*UnsupportedType).String", Method, 13},
+		{"(*VoidType).Common", Method, 0},
+		{"(*VoidType).Size", Method, 0},
+		{"(*VoidType).String", Method, 0},
+		{"(Attr).GoString", Method, 0},
+		{"(Attr).String", Method, 0},
+		{"(Class).GoString", Method, 5},
+		{"(Class).String", Method, 5},
+		{"(DecodeError).Error", Method, 0},
+		{"(Tag).GoString", Method, 0},
+		{"(Tag).String", Method, 0},
+		{"AddrType", Type, 0},
+		{"AddrType.BasicType", Field, 0},
+		{"ArrayType", Type, 0},
+		{"ArrayType.CommonType", Field, 0},
+		{"ArrayType.Count", Field, 0},
+		{"ArrayType.StrideBitSize", Field, 0},
+		{"ArrayType.Type", Field, 0},
+		{"Attr", Type, 0},
+		{"AttrAbstractOrigin", Const, 0},
+		{"AttrAccessibility", Const, 0},
+		{"AttrAddrBase", Const, 14},
+		{"AttrAddrClass", Const, 0},
+		{"AttrAlignment", Const, 14},
+		{"AttrAllocated", Const, 0},
+		{"AttrArtificial", Const, 0},
+		{"AttrAssociated", Const, 0},
+		{"AttrBaseTypes", Const, 0},
+		{"AttrBinaryScale", Const, 14},
+		{"AttrBitOffset", Const, 0},
+		{"AttrBitSize", Const, 0},
+		{"AttrByteSize", Const, 0},
+		{"AttrCallAllCalls", Const, 14},
+		{"AttrCallAllSourceCalls", Const, 14},
+		{"AttrCallAllTailCalls", Const, 14},
+		{"AttrCallColumn", Const, 0},
+		{"AttrCallDataLocation", Const, 14},
+		{"AttrCallDataValue", Const, 14},
+		{"AttrCallFile", Const, 0},
+		{"AttrCallLine", Const, 0},
+		{"AttrCallOrigin", Const, 14},
+		{"AttrCallPC", Const, 14},
+		{"AttrCallParameter", Const, 14},
+		{"AttrCallReturnPC", Const, 14},
+		{"AttrCallTailCall", Const, 14},
+		{"AttrCallTarget", Const, 14},
+		{"AttrCallTargetClobbered", Const, 14},
+		{"AttrCallValue", Const, 14},
+		{"AttrCalling", Const, 0},
+		{"AttrCommonRef", Const, 0},
+		{"AttrCompDir", Const, 0},
+		{"AttrConstExpr", Const, 14},
+		{"AttrConstValue", Const, 0},
+		{"AttrContainingType", Const, 0},
+		{"AttrCount", Const, 0},
+		{"AttrDataBitOffset", Const, 14},
+		{"AttrDataLocation", Const, 0},
+		{"AttrDataMemberLoc", Const, 0},
+		{"AttrDecimalScale", Const, 14},
+		{"AttrDecimalSign", Const, 14},
+		{"AttrDeclColumn", Const, 0},
+		{"AttrDeclFile", Const, 0},
+		{"AttrDeclLine", Const, 0},
+		{"AttrDeclaration", Const, 0},
+		{"AttrDefaultValue", Const, 0},
+		{"AttrDefaulted", Const, 14},
+		{"AttrDeleted", Const, 14},
+		{"AttrDescription", Const, 0},
+		{"AttrDigitCount", Const, 14},
+		{"AttrDiscr", Const, 0},
+		{"AttrDiscrList", Const, 0},
+		{"AttrDiscrValue", Const, 0},
+		{"AttrDwoName", Const, 14},
+		{"AttrElemental", Const, 14},
+		{"AttrEncoding", Const, 0},
+		{"AttrEndianity", Const, 14},
+		{"AttrEntrypc", Const, 0},
+		{"AttrEnumClass", Const, 14},
+		{"AttrExplicit", Const, 14},
+		{"AttrExportSymbols", Const, 14},
+		{"AttrExtension", Const, 0},
+		{"AttrExternal", Const, 0},
+		{"AttrFrameBase", Const, 0},
+		{"AttrFriend", Const, 0},
+		{"AttrHighpc", Const, 0},
+		{"AttrIdentifierCase", Const, 0},
+		{"AttrImport", Const, 0},
+		{"AttrInline", Const, 0},
+		{"AttrIsOptional", Const, 0},
+		{"AttrLanguage", Const, 0},
+		{"AttrLinkageName", Const, 14},
+		{"AttrLocation", Const, 0},
+		{"AttrLoclistsBase", Const, 14},
+		{"AttrLowerBound", Const, 0},
+		{"AttrLowpc", Const, 0},
+		{"AttrMacroInfo", Const, 0},
+		{"AttrMacros", Const, 14},
+		{"AttrMainSubprogram", Const, 14},
+		{"AttrMutable", Const, 14},
+		{"AttrName", Const, 0},
+		{"AttrNamelistItem", Const, 0},
+		{"AttrNoreturn", Const, 14},
+		{"AttrObjectPointer", Const, 14},
+		{"AttrOrdering", Const, 0},
+		{"AttrPictureString", Const, 14},
+		{"AttrPriority", Const, 0},
+		{"AttrProducer", Const, 0},
+		{"AttrPrototyped", Const, 0},
+		{"AttrPure", Const, 14},
+		{"AttrRanges", Const, 0},
+		{"AttrRank", Const, 14},
+		{"AttrRecursive", Const, 14},
+		{"AttrReference", Const, 14},
+		{"AttrReturnAddr", Const, 0},
+		{"AttrRnglistsBase", Const, 14},
+		{"AttrRvalueReference", Const, 14},
+		{"AttrSegment", Const, 0},
+		{"AttrSibling", Const, 0},
+		{"AttrSignature", Const, 14},
+		{"AttrSmall", Const, 14},
+		{"AttrSpecification", Const, 0},
+		{"AttrStartScope", Const, 0},
+		{"AttrStaticLink", Const, 0},
+		{"AttrStmtList", Const, 0},
+		{"AttrStrOffsetsBase", Const, 14},
+		{"AttrStride", Const, 0},
+		{"AttrStrideSize", Const, 0},
+		{"AttrStringLength", Const, 0},
+		{"AttrStringLengthBitSize", Const, 14},
+		{"AttrStringLengthByteSize", Const, 14},
+		{"AttrThreadsScaled", Const, 14},
+		{"AttrTrampoline", Const, 0},
+		{"AttrType", Const, 0},
+		{"AttrUpperBound", Const, 0},
+		{"AttrUseLocation", Const, 0},
+		{"AttrUseUTF8", Const, 0},
+		{"AttrVarParam", Const, 0},
+		{"AttrVirtuality", Const, 0},
+		{"AttrVisibility", Const, 0},
+		{"AttrVtableElemLoc", Const, 0},
+		{"BasicType", Type, 0},
+		{"BasicType.BitOffset", Field, 0},
+		{"BasicType.BitSize", Field, 0},
+		{"BasicType.CommonType", Field, 0},
+		{"BasicType.DataBitOffset", Field, 18},
+		{"BoolType", Type, 0},
+		{"BoolType.BasicType", Field, 0},
+		{"CharType", Type, 0},
+		{"CharType.BasicType", Field, 0},
+		{"Class", Type, 5},
+		{"ClassAddrPtr", Const, 14},
+		{"ClassAddress", Const, 5},
+		{"ClassBlock", Const, 5},
+		{"ClassConstant", Const, 5},
+		{"ClassExprLoc", Const, 5},
+		{"ClassFlag", Const, 5},
+		{"ClassLinePtr", Const, 5},
+		{"ClassLocList", Const, 14},
+		{"ClassLocListPtr", Const, 5},
+		{"ClassMacPtr", Const, 5},
+		{"ClassRangeListPtr", Const, 5},
+		{"ClassReference", Const, 5},
+		{"ClassReferenceAlt", Const, 5},
+		{"ClassReferenceSig", Const, 5},
+		{"ClassRngList", Const, 14},
+		{"ClassRngListsPtr", Const, 14},
+		{"ClassStrOffsetsPtr", Const, 14},
+		{"ClassString", Const, 5},
+		{"ClassStringAlt", Const, 5},
+		{"ClassUnknown", Const, 6},
+		{"CommonType", Type, 0},
+		{"CommonType.ByteSize", Field, 0},
+		{"CommonType.Name", Field, 0},
+		{"ComplexType", Type, 0},
+		{"ComplexType.BasicType", Field, 0},
+		{"Data", Type, 0},
+		{"DecodeError", Type, 0},
+		{"DecodeError.Err", Field, 0},
+		{"DecodeError.Name", Field, 0},
+		{"DecodeError.Offset", Field, 0},
+		{"DotDotDotType", Type, 0},
+		{"DotDotDotType.CommonType", Field, 0},
+		{"Entry", Type, 0},
+		{"Entry.Children", Field, 0},
+		{"Entry.Field", Field, 0},
+		{"Entry.Offset", Field, 0},
+		{"Entry.Tag", Field, 0},
+		{"EnumType", Type, 0},
+		{"EnumType.CommonType", Field, 0},
+		{"EnumType.EnumName", Field, 0},
+		{"EnumType.Val", Field, 0},
+		{"EnumValue", Type, 0},
+		{"EnumValue.Name", Field, 0},
+		{"EnumValue.Val", Field, 0},
+		{"ErrUnknownPC", Var, 5},
+		{"Field", Type, 0},
+		{"Field.Attr", Field, 0},
+		{"Field.Class", Field, 5},
+		{"Field.Val", Field, 0},
+		{"FloatType", Type, 0},
+		{"FloatType.BasicType", Field, 0},
+		{"FuncType", Type, 0},
+		{"FuncType.CommonType", Field, 0},
+		{"FuncType.ParamType", Field, 0},
+		{"FuncType.ReturnType", Field, 0},
+		{"IntType", Type, 0},
+		{"IntType.BasicType", Field, 0},
+		{"LineEntry", Type, 5},
+		{"LineEntry.Address", Field, 5},
+		{"LineEntry.BasicBlock", Field, 5},
+		{"LineEntry.Column", Field, 5},
+		{"LineEntry.Discriminator", Field, 5},
+		{"LineEntry.EndSequence", Field, 5},
+		{"LineEntry.EpilogueBegin", Field, 5},
+		{"LineEntry.File", Field, 5},
+		{"LineEntry.ISA", Field, 5},
+		{"LineEntry.IsStmt", Field, 5},
+		{"LineEntry.Line", Field, 5},
+		{"LineEntry.OpIndex", Field, 5},
+		{"LineEntry.PrologueEnd", Field, 5},
+		{"LineFile", Type, 5},
+		{"LineFile.Length", Field, 5},
+		{"LineFile.Mtime", Field, 5},
+		{"LineFile.Name", Field, 5},
+		{"LineReader", Type, 5},
+		{"LineReaderPos", Type, 5},
+		{"New", Func, 0},
+		{"Offset", Type, 0},
+		{"PtrType", Type, 0},
+		{"PtrType.CommonType", Field, 0},
+		{"PtrType.Type", Field, 0},
+		{"QualType", Type, 0},
+		{"QualType.CommonType", Field, 0},
+		{"QualType.Qual", Field, 0},
+		{"QualType.Type", Field, 0},
+		{"Reader", Type, 0},
+		{"StructField", Type, 0},
+		{"StructField.BitOffset", Field, 0},
+		{"StructField.BitSize", Field, 0},
+		{"StructField.ByteOffset", Field, 0},
+		{"StructField.ByteSize", Field, 0},
+		{"StructField.DataBitOffset", Field, 18},
+		{"StructField.Name", Field, 0},
+		{"StructField.Type", Field, 0},
+		{"StructType", Type, 0},
+		{"StructType.CommonType", Field, 0},
+		{"StructType.Field", Field, 0},
+		{"StructType.Incomplete", Field, 0},
+		{"StructType.Kind", Field, 0},
+		{"StructType.StructName", Field, 0},
+		{"Tag", Type, 0},
+		{"TagAccessDeclaration", Const, 0},
+		{"TagArrayType", Const, 0},
+		{"TagAtomicType", Const, 14},
+		{"TagBaseType", Const, 0},
+		{"TagCallSite", Const, 14},
+		{"TagCallSiteParameter", Const, 14},
+		{"TagCatchDwarfBlock", Const, 0},
+		{"TagClassType", Const, 0},
+		{"TagCoarrayType", Const, 14},
+		{"TagCommonDwarfBlock", Const, 0},
+		{"TagCommonInclusion", Const, 0},
+		{"TagCompileUnit", Const, 0},
+		{"TagCondition", Const, 3},
+		{"TagConstType", Const, 0},
+		{"TagConstant", Const, 0},
+		{"TagDwarfProcedure", Const, 0},
+		{"TagDynamicType", Const, 14},
+		{"TagEntryPoint", Const, 0},
+		{"TagEnumerationType", Const, 0},
+		{"TagEnumerator", Const, 0},
+		{"TagFileType", Const, 0},
+		{"TagFormalParameter", Const, 0},
+		{"TagFriend", Const, 0},
+		{"TagGenericSubrange", Const, 14},
+		{"TagImmutableType", Const, 14},
+		{"TagImportedDeclaration", Const, 0},
+		{"TagImportedModule", Const, 0},
+		{"TagImportedUnit", Const, 0},
+		{"TagInheritance", Const, 0},
+		{"TagInlinedSubroutine", Const, 0},
+		{"TagInterfaceType", Const, 0},
+		{"TagLabel", Const, 0},
+		{"TagLexDwarfBlock", Const, 0},
+		{"TagMember", Const, 0},
+		{"TagModule", Const, 0},
+		{"TagMutableType", Const, 0},
+		{"TagNamelist", Const, 0},
+		{"TagNamelistItem", Const, 0},
+		{"TagNamespace", Const, 0},
+		{"TagPackedType", Const, 0},
+		{"TagPartialUnit", Const, 0},
+		{"TagPointerType", Const, 0},
+		{"TagPtrToMemberType", Const, 0},
+		{"TagReferenceType", Const, 0},
+		{"TagRestrictType", Const, 0},
+		{"TagRvalueReferenceType", Const, 3},
+		{"TagSetType", Const, 0},
+		{"TagSharedType", Const, 3},
+		{"TagSkeletonUnit", Const, 14},
+		{"TagStringType", Const, 0},
+		{"TagStructType", Const, 0},
+		{"TagSubprogram", Const, 0},
+		{"TagSubrangeType", Const, 0},
+		{"TagSubroutineType", Const, 0},
+		{"TagTemplateAlias", Const, 3},
+		{"TagTemplateTypeParameter", Const, 0},
+		{"TagTemplateValueParameter", Const, 0},
+		{"TagThrownType", Const, 0},
+		{"TagTryDwarfBlock", Const, 0},
+		{"TagTypeUnit", Const, 3},
+		{"TagTypedef", Const, 0},
+		{"TagUnionType", Const, 0},
+		{"TagUnspecifiedParameters", Const, 0},
+		{"TagUnspecifiedType", Const, 0},
+		{"TagVariable", Const, 0},
+		{"TagVariant", Const, 0},
+		{"TagVariantPart", Const, 0},
+		{"TagVolatileType", Const, 0},
+		{"TagWithStmt", Const, 0},
+		{"Type", Type, 0},
+		{"TypedefType", Type, 0},
+		{"TypedefType.CommonType", Field, 0},
+		{"TypedefType.Type", Field, 0},
+		{"UcharType", Type, 0},
+		{"UcharType.BasicType", Field, 0},
+		{"UintType", Type, 0},
+		{"UintType.BasicType", Field, 0},
+		{"UnspecifiedType", Type, 4},
+		{"UnspecifiedType.BasicType", Field, 4},
+		{"UnsupportedType", Type, 13},
+		{"UnsupportedType.CommonType", Field, 13},
+		{"UnsupportedType.Tag", Field, 13},
+		{"VoidType", Type, 0},
+		{"VoidType.CommonType", Field, 0},
 	},
 	"debug/elf": {
-		{"(*File).Close", Method, 0, ""},
-		{"(*File).DWARF", Method, 0, ""},
-		{"(*File).DynString", Method, 1, ""},
-		{"(*File).DynValue", Method, 21, ""},
-		{"(*File).DynamicSymbols", Method, 4, ""},
-		{"(*File).DynamicVersionNeeds", Method, 24, ""},
-		{"(*File).DynamicVersions", Method, 24, ""},
-		{"(*File).ImportedLibraries", Method, 0, ""},
-		{"(*File).ImportedSymbols", Method, 0, ""},
-		{"(*File).Section", Method, 0, ""},
-		{"(*File).SectionByType", Method, 0, ""},
-		{"(*File).Symbols", Method, 0, ""},
-		{"(*FormatError).Error", Method, 0, ""},
-		{"(*Prog).Open", Method, 0, ""},
-		{"(*Section).Data", Method, 0, ""},
-		{"(*Section).Open", Method, 0, ""},
-		{"(Class).GoString", Method, 0, ""},
-		{"(Class).String", Method, 0, ""},
-		{"(CompressionType).GoString", Method, 6, ""},
-		{"(CompressionType).String", Method, 6, ""},
-		{"(Data).GoString", Method, 0, ""},
-		{"(Data).String", Method, 0, ""},
-		{"(DynFlag).GoString", Method, 0, ""},
-		{"(DynFlag).String", Method, 0, ""},
-		{"(DynFlag1).GoString", Method, 21, ""},
-		{"(DynFlag1).String", Method, 21, ""},
-		{"(DynTag).GoString", Method, 0, ""},
-		{"(DynTag).String", Method, 0, ""},
-		{"(Machine).GoString", Method, 0, ""},
-		{"(Machine).String", Method, 0, ""},
-		{"(NType).GoString", Method, 0, ""},
-		{"(NType).String", Method, 0, ""},
-		{"(OSABI).GoString", Method, 0, ""},
-		{"(OSABI).String", Method, 0, ""},
-		{"(Prog).ReadAt", Method, 0, ""},
-		{"(ProgFlag).GoString", Method, 0, ""},
-		{"(ProgFlag).String", Method, 0, ""},
-		{"(ProgType).GoString", Method, 0, ""},
-		{"(ProgType).String", Method, 0, ""},
-		{"(R_386).GoString", Method, 0, ""},
-		{"(R_386).String", Method, 0, ""},
-		{"(R_390).GoString", Method, 7, ""},
-		{"(R_390).String", Method, 7, ""},
-		{"(R_AARCH64).GoString", Method, 4, ""},
-		{"(R_AARCH64).String", Method, 4, ""},
-		{"(R_ALPHA).GoString", Method, 0, ""},
-		{"(R_ALPHA).String", Method, 0, ""},
-		{"(R_ARM).GoString", Method, 0, ""},
-		{"(R_ARM).String", Method, 0, ""},
-		{"(R_LARCH).GoString", Method, 19, ""},
-		{"(R_LARCH).String", Method, 19, ""},
-		{"(R_MIPS).GoString", Method, 6, ""},
-		{"(R_MIPS).String", Method, 6, ""},
-		{"(R_PPC).GoString", Method, 0, ""},
-		{"(R_PPC).String", Method, 0, ""},
-		{"(R_PPC64).GoString", Method, 5, ""},
-		{"(R_PPC64).String", Method, 5, ""},
-		{"(R_RISCV).GoString", Method, 11, ""},
-		{"(R_RISCV).String", Method, 11, ""},
-		{"(R_SPARC).GoString", Method, 0, ""},
-		{"(R_SPARC).String", Method, 0, ""},
-		{"(R_X86_64).GoString", Method, 0, ""},
-		{"(R_X86_64).String", Method, 0, ""},
-		{"(Section).ReadAt", Method, 0, ""},
-		{"(SectionFlag).GoString", Method, 0, ""},
-		{"(SectionFlag).String", Method, 0, ""},
-		{"(SectionIndex).GoString", Method, 0, ""},
-		{"(SectionIndex).String", Method, 0, ""},
-		{"(SectionType).GoString", Method, 0, ""},
-		{"(SectionType).String", Method, 0, ""},
-		{"(SymBind).GoString", Method, 0, ""},
-		{"(SymBind).String", Method, 0, ""},
-		{"(SymType).GoString", Method, 0, ""},
-		{"(SymType).String", Method, 0, ""},
-		{"(SymVis).GoString", Method, 0, ""},
-		{"(SymVis).String", Method, 0, ""},
-		{"(Type).GoString", Method, 0, ""},
-		{"(Type).String", Method, 0, ""},
-		{"(Version).GoString", Method, 0, ""},
-		{"(Version).String", Method, 0, ""},
-		{"(VersionIndex).Index", Method, 24, ""},
-		{"(VersionIndex).IsHidden", Method, 24, ""},
-		{"ARM_MAGIC_TRAMP_NUMBER", Const, 0, ""},
-		{"COMPRESS_HIOS", Const, 6, ""},
-		{"COMPRESS_HIPROC", Const, 6, ""},
-		{"COMPRESS_LOOS", Const, 6, ""},
-		{"COMPRESS_LOPROC", Const, 6, ""},
-		{"COMPRESS_ZLIB", Const, 6, ""},
-		{"COMPRESS_ZSTD", Const, 21, ""},
-		{"Chdr32", Type, 6, ""},
-		{"Chdr32.Addralign", Field, 6, ""},
-		{"Chdr32.Size", Field, 6, ""},
-		{"Chdr32.Type", Field, 6, ""},
-		{"Chdr64", Type, 6, ""},
-		{"Chdr64.Addralign", Field, 6, ""},
-		{"Chdr64.Size", Field, 6, ""},
-		{"Chdr64.Type", Field, 6, ""},
-		{"Class", Type, 0, ""},
-		{"CompressionType", Type, 6, ""},
-		{"DF_1_CONFALT", Const, 21, ""},
-		{"DF_1_DIRECT", Const, 21, ""},
-		{"DF_1_DISPRELDNE", Const, 21, ""},
-		{"DF_1_DISPRELPND", Const, 21, ""},
-		{"DF_1_EDITED", Const, 21, ""},
-		{"DF_1_ENDFILTEE", Const, 21, ""},
-		{"DF_1_GLOBAL", Const, 21, ""},
-		{"DF_1_GLOBAUDIT", Const, 21, ""},
-		{"DF_1_GROUP", Const, 21, ""},
-		{"DF_1_IGNMULDEF", Const, 21, ""},
-		{"DF_1_INITFIRST", Const, 21, ""},
-		{"DF_1_INTERPOSE", Const, 21, ""},
-		{"DF_1_KMOD", Const, 21, ""},
-		{"DF_1_LOADFLTR", Const, 21, ""},
-		{"DF_1_NOCOMMON", Const, 21, ""},
-		{"DF_1_NODEFLIB", Const, 21, ""},
-		{"DF_1_NODELETE", Const, 21, ""},
-		{"DF_1_NODIRECT", Const, 21, ""},
-		{"DF_1_NODUMP", Const, 21, ""},
-		{"DF_1_NOHDR", Const, 21, ""},
-		{"DF_1_NOKSYMS", Const, 21, ""},
-		{"DF_1_NOOPEN", Const, 21, ""},
-		{"DF_1_NORELOC", Const, 21, ""},
-		{"DF_1_NOW", Const, 21, ""},
-		{"DF_1_ORIGIN", Const, 21, ""},
-		{"DF_1_PIE", Const, 21, ""},
-		{"DF_1_SINGLETON", Const, 21, ""},
-		{"DF_1_STUB", Const, 21, ""},
-		{"DF_1_SYMINTPOSE", Const, 21, ""},
-		{"DF_1_TRANS", Const, 21, ""},
-		{"DF_1_WEAKFILTER", Const, 21, ""},
-		{"DF_BIND_NOW", Const, 0, ""},
-		{"DF_ORIGIN", Const, 0, ""},
-		{"DF_STATIC_TLS", Const, 0, ""},
-		{"DF_SYMBOLIC", Const, 0, ""},
-		{"DF_TEXTREL", Const, 0, ""},
-		{"DT_ADDRRNGHI", Const, 16, ""},
-		{"DT_ADDRRNGLO", Const, 16, ""},
-		{"DT_AUDIT", Const, 16, ""},
-		{"DT_AUXILIARY", Const, 16, ""},
-		{"DT_BIND_NOW", Const, 0, ""},
-		{"DT_CHECKSUM", Const, 16, ""},
-		{"DT_CONFIG", Const, 16, ""},
-		{"DT_DEBUG", Const, 0, ""},
-		{"DT_DEPAUDIT", Const, 16, ""},
-		{"DT_ENCODING", Const, 0, ""},
-		{"DT_FEATURE", Const, 16, ""},
-		{"DT_FILTER", Const, 16, ""},
-		{"DT_FINI", Const, 0, ""},
-		{"DT_FINI_ARRAY", Const, 0, ""},
-		{"DT_FINI_ARRAYSZ", Const, 0, ""},
-		{"DT_FLAGS", Const, 0, ""},
-		{"DT_FLAGS_1", Const, 16, ""},
-		{"DT_GNU_CONFLICT", Const, 16, ""},
-		{"DT_GNU_CONFLICTSZ", Const, 16, ""},
-		{"DT_GNU_HASH", Const, 16, ""},
-		{"DT_GNU_LIBLIST", Const, 16, ""},
-		{"DT_GNU_LIBLISTSZ", Const, 16, ""},
-		{"DT_GNU_PRELINKED", Const, 16, ""},
-		{"DT_HASH", Const, 0, ""},
-		{"DT_HIOS", Const, 0, ""},
-		{"DT_HIPROC", Const, 0, ""},
-		{"DT_INIT", Const, 0, ""},
-		{"DT_INIT_ARRAY", Const, 0, ""},
-		{"DT_INIT_ARRAYSZ", Const, 0, ""},
-		{"DT_JMPREL", Const, 0, ""},
-		{"DT_LOOS", Const, 0, ""},
-		{"DT_LOPROC", Const, 0, ""},
-		{"DT_MIPS_AUX_DYNAMIC", Const, 16, ""},
-		{"DT_MIPS_BASE_ADDRESS", Const, 16, ""},
-		{"DT_MIPS_COMPACT_SIZE", Const, 16, ""},
-		{"DT_MIPS_CONFLICT", Const, 16, ""},
-		{"DT_MIPS_CONFLICTNO", Const, 16, ""},
-		{"DT_MIPS_CXX_FLAGS", Const, 16, ""},
-		{"DT_MIPS_DELTA_CLASS", Const, 16, ""},
-		{"DT_MIPS_DELTA_CLASSSYM", Const, 16, ""},
-		{"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16, ""},
-		{"DT_MIPS_DELTA_CLASS_NO", Const, 16, ""},
-		{"DT_MIPS_DELTA_INSTANCE", Const, 16, ""},
-		{"DT_MIPS_DELTA_INSTANCE_NO", Const, 16, ""},
-		{"DT_MIPS_DELTA_RELOC", Const, 16, ""},
-		{"DT_MIPS_DELTA_RELOC_NO", Const, 16, ""},
-		{"DT_MIPS_DELTA_SYM", Const, 16, ""},
-		{"DT_MIPS_DELTA_SYM_NO", Const, 16, ""},
-		{"DT_MIPS_DYNSTR_ALIGN", Const, 16, ""},
-		{"DT_MIPS_FLAGS", Const, 16, ""},
-		{"DT_MIPS_GOTSYM", Const, 16, ""},
-		{"DT_MIPS_GP_VALUE", Const, 16, ""},
-		{"DT_MIPS_HIDDEN_GOTIDX", Const, 16, ""},
-		{"DT_MIPS_HIPAGENO", Const, 16, ""},
-		{"DT_MIPS_ICHECKSUM", Const, 16, ""},
-		{"DT_MIPS_INTERFACE", Const, 16, ""},
-		{"DT_MIPS_INTERFACE_SIZE", Const, 16, ""},
-		{"DT_MIPS_IVERSION", Const, 16, ""},
-		{"DT_MIPS_LIBLIST", Const, 16, ""},
-		{"DT_MIPS_LIBLISTNO", Const, 16, ""},
-		{"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16, ""},
-		{"DT_MIPS_LOCAL_GOTIDX", Const, 16, ""},
-		{"DT_MIPS_LOCAL_GOTNO", Const, 16, ""},
-		{"DT_MIPS_MSYM", Const, 16, ""},
-		{"DT_MIPS_OPTIONS", Const, 16, ""},
-		{"DT_MIPS_PERF_SUFFIX", Const, 16, ""},
-		{"DT_MIPS_PIXIE_INIT", Const, 16, ""},
-		{"DT_MIPS_PLTGOT", Const, 16, ""},
-		{"DT_MIPS_PROTECTED_GOTIDX", Const, 16, ""},
-		{"DT_MIPS_RLD_MAP", Const, 16, ""},
-		{"DT_MIPS_RLD_MAP_REL", Const, 16, ""},
-		{"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16, ""},
-		{"DT_MIPS_RLD_VERSION", Const, 16, ""},
-		{"DT_MIPS_RWPLT", Const, 16, ""},
-		{"DT_MIPS_SYMBOL_LIB", Const, 16, ""},
-		{"DT_MIPS_SYMTABNO", Const, 16, ""},
-		{"DT_MIPS_TIME_STAMP", Const, 16, ""},
-		{"DT_MIPS_UNREFEXTNO", Const, 16, ""},
-		{"DT_MOVEENT", Const, 16, ""},
-		{"DT_MOVESZ", Const, 16, ""},
-		{"DT_MOVETAB", Const, 16, ""},
-		{"DT_NEEDED", Const, 0, ""},
-		{"DT_NULL", Const, 0, ""},
-		{"DT_PLTGOT", Const, 0, ""},
-		{"DT_PLTPAD", Const, 16, ""},
-		{"DT_PLTPADSZ", Const, 16, ""},
-		{"DT_PLTREL", Const, 0, ""},
-		{"DT_PLTRELSZ", Const, 0, ""},
-		{"DT_POSFLAG_1", Const, 16, ""},
-		{"DT_PPC64_GLINK", Const, 16, ""},
-		{"DT_PPC64_OPD", Const, 16, ""},
-		{"DT_PPC64_OPDSZ", Const, 16, ""},
-		{"DT_PPC64_OPT", Const, 16, ""},
-		{"DT_PPC_GOT", Const, 16, ""},
-		{"DT_PPC_OPT", Const, 16, ""},
-		{"DT_PREINIT_ARRAY", Const, 0, ""},
-		{"DT_PREINIT_ARRAYSZ", Const, 0, ""},
-		{"DT_REL", Const, 0, ""},
-		{"DT_RELA", Const, 0, ""},
-		{"DT_RELACOUNT", Const, 16, ""},
-		{"DT_RELAENT", Const, 0, ""},
-		{"DT_RELASZ", Const, 0, ""},
-		{"DT_RELCOUNT", Const, 16, ""},
-		{"DT_RELENT", Const, 0, ""},
-		{"DT_RELSZ", Const, 0, ""},
-		{"DT_RPATH", Const, 0, ""},
-		{"DT_RUNPATH", Const, 0, ""},
-		{"DT_SONAME", Const, 0, ""},
-		{"DT_SPARC_REGISTER", Const, 16, ""},
-		{"DT_STRSZ", Const, 0, ""},
-		{"DT_STRTAB", Const, 0, ""},
-		{"DT_SYMBOLIC", Const, 0, ""},
-		{"DT_SYMENT", Const, 0, ""},
-		{"DT_SYMINENT", Const, 16, ""},
-		{"DT_SYMINFO", Const, 16, ""},
-		{"DT_SYMINSZ", Const, 16, ""},
-		{"DT_SYMTAB", Const, 0, ""},
-		{"DT_SYMTAB_SHNDX", Const, 16, ""},
-		{"DT_TEXTREL", Const, 0, ""},
-		{"DT_TLSDESC_GOT", Const, 16, ""},
-		{"DT_TLSDESC_PLT", Const, 16, ""},
-		{"DT_USED", Const, 16, ""},
-		{"DT_VALRNGHI", Const, 16, ""},
-		{"DT_VALRNGLO", Const, 16, ""},
-		{"DT_VERDEF", Const, 16, ""},
-		{"DT_VERDEFNUM", Const, 16, ""},
-		{"DT_VERNEED", Const, 0, ""},
-		{"DT_VERNEEDNUM", Const, 0, ""},
-		{"DT_VERSYM", Const, 0, ""},
-		{"Data", Type, 0, ""},
-		{"Dyn32", Type, 0, ""},
-		{"Dyn32.Tag", Field, 0, ""},
-		{"Dyn32.Val", Field, 0, ""},
-		{"Dyn64", Type, 0, ""},
-		{"Dyn64.Tag", Field, 0, ""},
-		{"Dyn64.Val", Field, 0, ""},
-		{"DynFlag", Type, 0, ""},
-		{"DynFlag1", Type, 21, ""},
-		{"DynTag", Type, 0, ""},
-		{"DynamicVersion", Type, 24, ""},
-		{"DynamicVersion.Deps", Field, 24, ""},
-		{"DynamicVersion.Flags", Field, 24, ""},
-		{"DynamicVersion.Index", Field, 24, ""},
-		{"DynamicVersion.Name", Field, 24, ""},
-		{"DynamicVersionDep", Type, 24, ""},
-		{"DynamicVersionDep.Dep", Field, 24, ""},
-		{"DynamicVersionDep.Flags", Field, 24, ""},
-		{"DynamicVersionDep.Index", Field, 24, ""},
-		{"DynamicVersionFlag", Type, 24, ""},
-		{"DynamicVersionNeed", Type, 24, ""},
-		{"DynamicVersionNeed.Name", Field, 24, ""},
-		{"DynamicVersionNeed.Needs", Field, 24, ""},
-		{"EI_ABIVERSION", Const, 0, ""},
-		{"EI_CLASS", Const, 0, ""},
-		{"EI_DATA", Const, 0, ""},
-		{"EI_NIDENT", Const, 0, ""},
-		{"EI_OSABI", Const, 0, ""},
-		{"EI_PAD", Const, 0, ""},
-		{"EI_VERSION", Const, 0, ""},
-		{"ELFCLASS32", Const, 0, ""},
-		{"ELFCLASS64", Const, 0, ""},
-		{"ELFCLASSNONE", Const, 0, ""},
-		{"ELFDATA2LSB", Const, 0, ""},
-		{"ELFDATA2MSB", Const, 0, ""},
-		{"ELFDATANONE", Const, 0, ""},
-		{"ELFMAG", Const, 0, ""},
-		{"ELFOSABI_86OPEN", Const, 0, ""},
-		{"ELFOSABI_AIX", Const, 0, ""},
-		{"ELFOSABI_ARM", Const, 0, ""},
-		{"ELFOSABI_AROS", Const, 11, ""},
-		{"ELFOSABI_CLOUDABI", Const, 11, ""},
-		{"ELFOSABI_FENIXOS", Const, 11, ""},
-		{"ELFOSABI_FREEBSD", Const, 0, ""},
-		{"ELFOSABI_HPUX", Const, 0, ""},
-		{"ELFOSABI_HURD", Const, 0, ""},
-		{"ELFOSABI_IRIX", Const, 0, ""},
-		{"ELFOSABI_LINUX", Const, 0, ""},
-		{"ELFOSABI_MODESTO", Const, 0, ""},
-		{"ELFOSABI_NETBSD", Const, 0, ""},
-		{"ELFOSABI_NONE", Const, 0, ""},
-		{"ELFOSABI_NSK", Const, 0, ""},
-		{"ELFOSABI_OPENBSD", Const, 0, ""},
-		{"ELFOSABI_OPENVMS", Const, 0, ""},
-		{"ELFOSABI_SOLARIS", Const, 0, ""},
-		{"ELFOSABI_STANDALONE", Const, 0, ""},
-		{"ELFOSABI_TRU64", Const, 0, ""},
-		{"EM_386", Const, 0, ""},
-		{"EM_486", Const, 0, ""},
-		{"EM_56800EX", Const, 11, ""},
-		{"EM_68HC05", Const, 11, ""},
-		{"EM_68HC08", Const, 11, ""},
-		{"EM_68HC11", Const, 11, ""},
-		{"EM_68HC12", Const, 0, ""},
-		{"EM_68HC16", Const, 11, ""},
-		{"EM_68K", Const, 0, ""},
-		{"EM_78KOR", Const, 11, ""},
-		{"EM_8051", Const, 11, ""},
-		{"EM_860", Const, 0, ""},
-		{"EM_88K", Const, 0, ""},
-		{"EM_960", Const, 0, ""},
-		{"EM_AARCH64", Const, 4, ""},
-		{"EM_ALPHA", Const, 0, ""},
-		{"EM_ALPHA_STD", Const, 0, ""},
-		{"EM_ALTERA_NIOS2", Const, 11, ""},
-		{"EM_AMDGPU", Const, 11, ""},
-		{"EM_ARC", Const, 0, ""},
-		{"EM_ARCA", Const, 11, ""},
-		{"EM_ARC_COMPACT", Const, 11, ""},
-		{"EM_ARC_COMPACT2", Const, 11, ""},
-		{"EM_ARM", Const, 0, ""},
-		{"EM_AVR", Const, 11, ""},
-		{"EM_AVR32", Const, 11, ""},
-		{"EM_BA1", Const, 11, ""},
-		{"EM_BA2", Const, 11, ""},
-		{"EM_BLACKFIN", Const, 11, ""},
-		{"EM_BPF", Const, 11, ""},
-		{"EM_C166", Const, 11, ""},
-		{"EM_CDP", Const, 11, ""},
-		{"EM_CE", Const, 11, ""},
-		{"EM_CLOUDSHIELD", Const, 11, ""},
-		{"EM_COGE", Const, 11, ""},
-		{"EM_COLDFIRE", Const, 0, ""},
-		{"EM_COOL", Const, 11, ""},
-		{"EM_COREA_1ST", Const, 11, ""},
-		{"EM_COREA_2ND", Const, 11, ""},
-		{"EM_CR", Const, 11, ""},
-		{"EM_CR16", Const, 11, ""},
-		{"EM_CRAYNV2", Const, 11, ""},
-		{"EM_CRIS", Const, 11, ""},
-		{"EM_CRX", Const, 11, ""},
-		{"EM_CSR_KALIMBA", Const, 11, ""},
-		{"EM_CUDA", Const, 11, ""},
-		{"EM_CYPRESS_M8C", Const, 11, ""},
-		{"EM_D10V", Const, 11, ""},
-		{"EM_D30V", Const, 11, ""},
-		{"EM_DSP24", Const, 11, ""},
-		{"EM_DSPIC30F", Const, 11, ""},
-		{"EM_DXP", Const, 11, ""},
-		{"EM_ECOG1", Const, 11, ""},
-		{"EM_ECOG16", Const, 11, ""},
-		{"EM_ECOG1X", Const, 11, ""},
-		{"EM_ECOG2", Const, 11, ""},
-		{"EM_ETPU", Const, 11, ""},
-		{"EM_EXCESS", Const, 11, ""},
-		{"EM_F2MC16", Const, 11, ""},
-		{"EM_FIREPATH", Const, 11, ""},
-		{"EM_FR20", Const, 0, ""},
-		{"EM_FR30", Const, 11, ""},
-		{"EM_FT32", Const, 11, ""},
-		{"EM_FX66", Const, 11, ""},
-		{"EM_H8S", Const, 0, ""},
-		{"EM_H8_300", Const, 0, ""},
-		{"EM_H8_300H", Const, 0, ""},
-		{"EM_H8_500", Const, 0, ""},
-		{"EM_HUANY", Const, 11, ""},
-		{"EM_IA_64", Const, 0, ""},
-		{"EM_INTEL205", Const, 11, ""},
-		{"EM_INTEL206", Const, 11, ""},
-		{"EM_INTEL207", Const, 11, ""},
-		{"EM_INTEL208", Const, 11, ""},
-		{"EM_INTEL209", Const, 11, ""},
-		{"EM_IP2K", Const, 11, ""},
-		{"EM_JAVELIN", Const, 11, ""},
-		{"EM_K10M", Const, 11, ""},
-		{"EM_KM32", Const, 11, ""},
-		{"EM_KMX16", Const, 11, ""},
-		{"EM_KMX32", Const, 11, ""},
-		{"EM_KMX8", Const, 11, ""},
-		{"EM_KVARC", Const, 11, ""},
-		{"EM_L10M", Const, 11, ""},
-		{"EM_LANAI", Const, 11, ""},
-		{"EM_LATTICEMICO32", Const, 11, ""},
-		{"EM_LOONGARCH", Const, 19, ""},
-		{"EM_M16C", Const, 11, ""},
-		{"EM_M32", Const, 0, ""},
-		{"EM_M32C", Const, 11, ""},
-		{"EM_M32R", Const, 11, ""},
-		{"EM_MANIK", Const, 11, ""},
-		{"EM_MAX", Const, 11, ""},
-		{"EM_MAXQ30", Const, 11, ""},
-		{"EM_MCHP_PIC", Const, 11, ""},
-		{"EM_MCST_ELBRUS", Const, 11, ""},
-		{"EM_ME16", Const, 0, ""},
-		{"EM_METAG", Const, 11, ""},
-		{"EM_MICROBLAZE", Const, 11, ""},
-		{"EM_MIPS", Const, 0, ""},
-		{"EM_MIPS_RS3_LE", Const, 0, ""},
-		{"EM_MIPS_RS4_BE", Const, 0, ""},
-		{"EM_MIPS_X", Const, 0, ""},
-		{"EM_MMA", Const, 0, ""},
-		{"EM_MMDSP_PLUS", Const, 11, ""},
-		{"EM_MMIX", Const, 11, ""},
-		{"EM_MN10200", Const, 11, ""},
-		{"EM_MN10300", Const, 11, ""},
-		{"EM_MOXIE", Const, 11, ""},
-		{"EM_MSP430", Const, 11, ""},
-		{"EM_NCPU", Const, 0, ""},
-		{"EM_NDR1", Const, 0, ""},
-		{"EM_NDS32", Const, 11, ""},
-		{"EM_NONE", Const, 0, ""},
-		{"EM_NORC", Const, 11, ""},
-		{"EM_NS32K", Const, 11, ""},
-		{"EM_OPEN8", Const, 11, ""},
-		{"EM_OPENRISC", Const, 11, ""},
-		{"EM_PARISC", Const, 0, ""},
-		{"EM_PCP", Const, 0, ""},
-		{"EM_PDP10", Const, 11, ""},
-		{"EM_PDP11", Const, 11, ""},
-		{"EM_PDSP", Const, 11, ""},
-		{"EM_PJ", Const, 11, ""},
-		{"EM_PPC", Const, 0, ""},
-		{"EM_PPC64", Const, 0, ""},
-		{"EM_PRISM", Const, 11, ""},
-		{"EM_QDSP6", Const, 11, ""},
-		{"EM_R32C", Const, 11, ""},
-		{"EM_RCE", Const, 0, ""},
-		{"EM_RH32", Const, 0, ""},
-		{"EM_RISCV", Const, 11, ""},
-		{"EM_RL78", Const, 11, ""},
-		{"EM_RS08", Const, 11, ""},
-		{"EM_RX", Const, 11, ""},
-		{"EM_S370", Const, 0, ""},
-		{"EM_S390", Const, 0, ""},
-		{"EM_SCORE7", Const, 11, ""},
-		{"EM_SEP", Const, 11, ""},
-		{"EM_SE_C17", Const, 11, ""},
-		{"EM_SE_C33", Const, 11, ""},
-		{"EM_SH", Const, 0, ""},
-		{"EM_SHARC", Const, 11, ""},
-		{"EM_SLE9X", Const, 11, ""},
-		{"EM_SNP1K", Const, 11, ""},
-		{"EM_SPARC", Const, 0, ""},
-		{"EM_SPARC32PLUS", Const, 0, ""},
-		{"EM_SPARCV9", Const, 0, ""},
-		{"EM_ST100", Const, 0, ""},
-		{"EM_ST19", Const, 11, ""},
-		{"EM_ST200", Const, 11, ""},
-		{"EM_ST7", Const, 11, ""},
-		{"EM_ST9PLUS", Const, 11, ""},
-		{"EM_STARCORE", Const, 0, ""},
-		{"EM_STM8", Const, 11, ""},
-		{"EM_STXP7X", Const, 11, ""},
-		{"EM_SVX", Const, 11, ""},
-		{"EM_TILE64", Const, 11, ""},
-		{"EM_TILEGX", Const, 11, ""},
-		{"EM_TILEPRO", Const, 11, ""},
-		{"EM_TINYJ", Const, 0, ""},
-		{"EM_TI_ARP32", Const, 11, ""},
-		{"EM_TI_C2000", Const, 11, ""},
-		{"EM_TI_C5500", Const, 11, ""},
-		{"EM_TI_C6000", Const, 11, ""},
-		{"EM_TI_PRU", Const, 11, ""},
-		{"EM_TMM_GPP", Const, 11, ""},
-		{"EM_TPC", Const, 11, ""},
-		{"EM_TRICORE", Const, 0, ""},
-		{"EM_TRIMEDIA", Const, 11, ""},
-		{"EM_TSK3000", Const, 11, ""},
-		{"EM_UNICORE", Const, 11, ""},
-		{"EM_V800", Const, 0, ""},
-		{"EM_V850", Const, 11, ""},
-		{"EM_VAX", Const, 11, ""},
-		{"EM_VIDEOCORE", Const, 11, ""},
-		{"EM_VIDEOCORE3", Const, 11, ""},
-		{"EM_VIDEOCORE5", Const, 11, ""},
-		{"EM_VISIUM", Const, 11, ""},
-		{"EM_VPP500", Const, 0, ""},
-		{"EM_X86_64", Const, 0, ""},
-		{"EM_XCORE", Const, 11, ""},
-		{"EM_XGATE", Const, 11, ""},
-		{"EM_XIMO16", Const, 11, ""},
-		{"EM_XTENSA", Const, 11, ""},
-		{"EM_Z80", Const, 11, ""},
-		{"EM_ZSP", Const, 11, ""},
-		{"ET_CORE", Const, 0, ""},
-		{"ET_DYN", Const, 0, ""},
-		{"ET_EXEC", Const, 0, ""},
-		{"ET_HIOS", Const, 0, ""},
-		{"ET_HIPROC", Const, 0, ""},
-		{"ET_LOOS", Const, 0, ""},
-		{"ET_LOPROC", Const, 0, ""},
-		{"ET_NONE", Const, 0, ""},
-		{"ET_REL", Const, 0, ""},
-		{"EV_CURRENT", Const, 0, ""},
-		{"EV_NONE", Const, 0, ""},
-		{"ErrNoSymbols", Var, 4, ""},
-		{"File", Type, 0, ""},
-		{"File.FileHeader", Field, 0, ""},
-		{"File.Progs", Field, 0, ""},
-		{"File.Sections", Field, 0, ""},
-		{"FileHeader", Type, 0, ""},
-		{"FileHeader.ABIVersion", Field, 0, ""},
-		{"FileHeader.ByteOrder", Field, 0, ""},
-		{"FileHeader.Class", Field, 0, ""},
-		{"FileHeader.Data", Field, 0, ""},
-		{"FileHeader.Entry", Field, 1, ""},
-		{"FileHeader.Machine", Field, 0, ""},
-		{"FileHeader.OSABI", Field, 0, ""},
-		{"FileHeader.Type", Field, 0, ""},
-		{"FileHeader.Version", Field, 0, ""},
-		{"FormatError", Type, 0, ""},
-		{"Header32", Type, 0, ""},
-		{"Header32.Ehsize", Field, 0, ""},
-		{"Header32.Entry", Field, 0, ""},
-		{"Header32.Flags", Field, 0, ""},
-		{"Header32.Ident", Field, 0, ""},
-		{"Header32.Machine", Field, 0, ""},
-		{"Header32.Phentsize", Field, 0, ""},
-		{"Header32.Phnum", Field, 0, ""},
-		{"Header32.Phoff", Field, 0, ""},
-		{"Header32.Shentsize", Field, 0, ""},
-		{"Header32.Shnum", Field, 0, ""},
-		{"Header32.Shoff", Field, 0, ""},
-		{"Header32.Shstrndx", Field, 0, ""},
-		{"Header32.Type", Field, 0, ""},
-		{"Header32.Version", Field, 0, ""},
-		{"Header64", Type, 0, ""},
-		{"Header64.Ehsize", Field, 0, ""},
-		{"Header64.Entry", Field, 0, ""},
-		{"Header64.Flags", Field, 0, ""},
-		{"Header64.Ident", Field, 0, ""},
-		{"Header64.Machine", Field, 0, ""},
-		{"Header64.Phentsize", Field, 0, ""},
-		{"Header64.Phnum", Field, 0, ""},
-		{"Header64.Phoff", Field, 0, ""},
-		{"Header64.Shentsize", Field, 0, ""},
-		{"Header64.Shnum", Field, 0, ""},
-		{"Header64.Shoff", Field, 0, ""},
-		{"Header64.Shstrndx", Field, 0, ""},
-		{"Header64.Type", Field, 0, ""},
-		{"Header64.Version", Field, 0, ""},
-		{"ImportedSymbol", Type, 0, ""},
-		{"ImportedSymbol.Library", Field, 0, ""},
-		{"ImportedSymbol.Name", Field, 0, ""},
-		{"ImportedSymbol.Version", Field, 0, ""},
-		{"Machine", Type, 0, ""},
-		{"NT_FPREGSET", Const, 0, ""},
-		{"NT_PRPSINFO", Const, 0, ""},
-		{"NT_PRSTATUS", Const, 0, ""},
-		{"NType", Type, 0, ""},
-		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
-		{"OSABI", Type, 0, ""},
-		{"Open", Func, 0, "func(name string) (*File, error)"},
-		{"PF_MASKOS", Const, 0, ""},
-		{"PF_MASKPROC", Const, 0, ""},
-		{"PF_R", Const, 0, ""},
-		{"PF_W", Const, 0, ""},
-		{"PF_X", Const, 0, ""},
-		{"PT_AARCH64_ARCHEXT", Const, 16, ""},
-		{"PT_AARCH64_UNWIND", Const, 16, ""},
-		{"PT_ARM_ARCHEXT", Const, 16, ""},
-		{"PT_ARM_EXIDX", Const, 16, ""},
-		{"PT_DYNAMIC", Const, 0, ""},
-		{"PT_GNU_EH_FRAME", Const, 16, ""},
-		{"PT_GNU_MBIND_HI", Const, 16, ""},
-		{"PT_GNU_MBIND_LO", Const, 16, ""},
-		{"PT_GNU_PROPERTY", Const, 16, ""},
-		{"PT_GNU_RELRO", Const, 16, ""},
-		{"PT_GNU_STACK", Const, 16, ""},
-		{"PT_HIOS", Const, 0, ""},
-		{"PT_HIPROC", Const, 0, ""},
-		{"PT_INTERP", Const, 0, ""},
-		{"PT_LOAD", Const, 0, ""},
-		{"PT_LOOS", Const, 0, ""},
-		{"PT_LOPROC", Const, 0, ""},
-		{"PT_MIPS_ABIFLAGS", Const, 16, ""},
-		{"PT_MIPS_OPTIONS", Const, 16, ""},
-		{"PT_MIPS_REGINFO", Const, 16, ""},
-		{"PT_MIPS_RTPROC", Const, 16, ""},
-		{"PT_NOTE", Const, 0, ""},
-		{"PT_NULL", Const, 0, ""},
-		{"PT_OPENBSD_BOOTDATA", Const, 16, ""},
-		{"PT_OPENBSD_NOBTCFI", Const, 23, ""},
-		{"PT_OPENBSD_RANDOMIZE", Const, 16, ""},
-		{"PT_OPENBSD_WXNEEDED", Const, 16, ""},
-		{"PT_PAX_FLAGS", Const, 16, ""},
-		{"PT_PHDR", Const, 0, ""},
-		{"PT_RISCV_ATTRIBUTES", Const, 25, ""},
-		{"PT_S390_PGSTE", Const, 16, ""},
-		{"PT_SHLIB", Const, 0, ""},
-		{"PT_SUNWSTACK", Const, 16, ""},
-		{"PT_SUNW_EH_FRAME", Const, 16, ""},
-		{"PT_TLS", Const, 0, ""},
-		{"Prog", Type, 0, ""},
-		{"Prog.ProgHeader", Field, 0, ""},
-		{"Prog.ReaderAt", Field, 0, ""},
-		{"Prog32", Type, 0, ""},
-		{"Prog32.Align", Field, 0, ""},
-		{"Prog32.Filesz", Field, 0, ""},
-		{"Prog32.Flags", Field, 0, ""},
-		{"Prog32.Memsz", Field, 0, ""},
-		{"Prog32.Off", Field, 0, ""},
-		{"Prog32.Paddr", Field, 0, ""},
-		{"Prog32.Type", Field, 0, ""},
-		{"Prog32.Vaddr", Field, 0, ""},
-		{"Prog64", Type, 0, ""},
-		{"Prog64.Align", Field, 0, ""},
-		{"Prog64.Filesz", Field, 0, ""},
-		{"Prog64.Flags", Field, 0, ""},
-		{"Prog64.Memsz", Field, 0, ""},
-		{"Prog64.Off", Field, 0, ""},
-		{"Prog64.Paddr", Field, 0, ""},
-		{"Prog64.Type", Field, 0, ""},
-		{"Prog64.Vaddr", Field, 0, ""},
-		{"ProgFlag", Type, 0, ""},
-		{"ProgHeader", Type, 0, ""},
-		{"ProgHeader.Align", Field, 0, ""},
-		{"ProgHeader.Filesz", Field, 0, ""},
-		{"ProgHeader.Flags", Field, 0, ""},
-		{"ProgHeader.Memsz", Field, 0, ""},
-		{"ProgHeader.Off", Field, 0, ""},
-		{"ProgHeader.Paddr", Field, 0, ""},
-		{"ProgHeader.Type", Field, 0, ""},
-		{"ProgHeader.Vaddr", Field, 0, ""},
-		{"ProgType", Type, 0, ""},
-		{"R_386", Type, 0, ""},
-		{"R_386_16", Const, 10, ""},
-		{"R_386_32", Const, 0, ""},
-		{"R_386_32PLT", Const, 10, ""},
-		{"R_386_8", Const, 10, ""},
-		{"R_386_COPY", Const, 0, ""},
-		{"R_386_GLOB_DAT", Const, 0, ""},
-		{"R_386_GOT32", Const, 0, ""},
-		{"R_386_GOT32X", Const, 10, ""},
-		{"R_386_GOTOFF", Const, 0, ""},
-		{"R_386_GOTPC", Const, 0, ""},
-		{"R_386_IRELATIVE", Const, 10, ""},
-		{"R_386_JMP_SLOT", Const, 0, ""},
-		{"R_386_NONE", Const, 0, ""},
-		{"R_386_PC16", Const, 10, ""},
-		{"R_386_PC32", Const, 0, ""},
-		{"R_386_PC8", Const, 10, ""},
-		{"R_386_PLT32", Const, 0, ""},
-		{"R_386_RELATIVE", Const, 0, ""},
-		{"R_386_SIZE32", Const, 10, ""},
-		{"R_386_TLS_DESC", Const, 10, ""},
-		{"R_386_TLS_DESC_CALL", Const, 10, ""},
-		{"R_386_TLS_DTPMOD32", Const, 0, ""},
-		{"R_386_TLS_DTPOFF32", Const, 0, ""},
-		{"R_386_TLS_GD", Const, 0, ""},
-		{"R_386_TLS_GD_32", Const, 0, ""},
-		{"R_386_TLS_GD_CALL", Const, 0, ""},
-		{"R_386_TLS_GD_POP", Const, 0, ""},
-		{"R_386_TLS_GD_PUSH", Const, 0, ""},
-		{"R_386_TLS_GOTDESC", Const, 10, ""},
-		{"R_386_TLS_GOTIE", Const, 0, ""},
-		{"R_386_TLS_IE", Const, 0, ""},
-		{"R_386_TLS_IE_32", Const, 0, ""},
-		{"R_386_TLS_LDM", Const, 0, ""},
-		{"R_386_TLS_LDM_32", Const, 0, ""},
-		{"R_386_TLS_LDM_CALL", Const, 0, ""},
-		{"R_386_TLS_LDM_POP", Const, 0, ""},
-		{"R_386_TLS_LDM_PUSH", Const, 0, ""},
-		{"R_386_TLS_LDO_32", Const, 0, ""},
-		{"R_386_TLS_LE", Const, 0, ""},
-		{"R_386_TLS_LE_32", Const, 0, ""},
-		{"R_386_TLS_TPOFF", Const, 0, ""},
-		{"R_386_TLS_TPOFF32", Const, 0, ""},
-		{"R_390", Type, 7, ""},
-		{"R_390_12", Const, 7, ""},
-		{"R_390_16", Const, 7, ""},
-		{"R_390_20", Const, 7, ""},
-		{"R_390_32", Const, 7, ""},
-		{"R_390_64", Const, 7, ""},
-		{"R_390_8", Const, 7, ""},
-		{"R_390_COPY", Const, 7, ""},
-		{"R_390_GLOB_DAT", Const, 7, ""},
-		{"R_390_GOT12", Const, 7, ""},
-		{"R_390_GOT16", Const, 7, ""},
-		{"R_390_GOT20", Const, 7, ""},
-		{"R_390_GOT32", Const, 7, ""},
-		{"R_390_GOT64", Const, 7, ""},
-		{"R_390_GOTENT", Const, 7, ""},
-		{"R_390_GOTOFF", Const, 7, ""},
-		{"R_390_GOTOFF16", Const, 7, ""},
-		{"R_390_GOTOFF64", Const, 7, ""},
-		{"R_390_GOTPC", Const, 7, ""},
-		{"R_390_GOTPCDBL", Const, 7, ""},
-		{"R_390_GOTPLT12", Const, 7, ""},
-		{"R_390_GOTPLT16", Const, 7, ""},
-		{"R_390_GOTPLT20", Const, 7, ""},
-		{"R_390_GOTPLT32", Const, 7, ""},
-		{"R_390_GOTPLT64", Const, 7, ""},
-		{"R_390_GOTPLTENT", Const, 7, ""},
-		{"R_390_GOTPLTOFF16", Const, 7, ""},
-		{"R_390_GOTPLTOFF32", Const, 7, ""},
-		{"R_390_GOTPLTOFF64", Const, 7, ""},
-		{"R_390_JMP_SLOT", Const, 7, ""},
-		{"R_390_NONE", Const, 7, ""},
-		{"R_390_PC16", Const, 7, ""},
-		{"R_390_PC16DBL", Const, 7, ""},
-		{"R_390_PC32", Const, 7, ""},
-		{"R_390_PC32DBL", Const, 7, ""},
-		{"R_390_PC64", Const, 7, ""},
-		{"R_390_PLT16DBL", Const, 7, ""},
-		{"R_390_PLT32", Const, 7, ""},
-		{"R_390_PLT32DBL", Const, 7, ""},
-		{"R_390_PLT64", Const, 7, ""},
-		{"R_390_RELATIVE", Const, 7, ""},
-		{"R_390_TLS_DTPMOD", Const, 7, ""},
-		{"R_390_TLS_DTPOFF", Const, 7, ""},
-		{"R_390_TLS_GD32", Const, 7, ""},
-		{"R_390_TLS_GD64", Const, 7, ""},
-		{"R_390_TLS_GDCALL", Const, 7, ""},
-		{"R_390_TLS_GOTIE12", Const, 7, ""},
-		{"R_390_TLS_GOTIE20", Const, 7, ""},
-		{"R_390_TLS_GOTIE32", Const, 7, ""},
-		{"R_390_TLS_GOTIE64", Const, 7, ""},
-		{"R_390_TLS_IE32", Const, 7, ""},
-		{"R_390_TLS_IE64", Const, 7, ""},
-		{"R_390_TLS_IEENT", Const, 7, ""},
-		{"R_390_TLS_LDCALL", Const, 7, ""},
-		{"R_390_TLS_LDM32", Const, 7, ""},
-		{"R_390_TLS_LDM64", Const, 7, ""},
-		{"R_390_TLS_LDO32", Const, 7, ""},
-		{"R_390_TLS_LDO64", Const, 7, ""},
-		{"R_390_TLS_LE32", Const, 7, ""},
-		{"R_390_TLS_LE64", Const, 7, ""},
-		{"R_390_TLS_LOAD", Const, 7, ""},
-		{"R_390_TLS_TPOFF", Const, 7, ""},
-		{"R_AARCH64", Type, 4, ""},
-		{"R_AARCH64_ABS16", Const, 4, ""},
-		{"R_AARCH64_ABS32", Const, 4, ""},
-		{"R_AARCH64_ABS64", Const, 4, ""},
-		{"R_AARCH64_ADD_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_ADR_GOT_PAGE", Const, 4, ""},
-		{"R_AARCH64_ADR_PREL_LO21", Const, 4, ""},
-		{"R_AARCH64_ADR_PREL_PG_HI21", Const, 4, ""},
-		{"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4, ""},
-		{"R_AARCH64_CALL26", Const, 4, ""},
-		{"R_AARCH64_CONDBR19", Const, 4, ""},
-		{"R_AARCH64_COPY", Const, 4, ""},
-		{"R_AARCH64_GLOB_DAT", Const, 4, ""},
-		{"R_AARCH64_GOT_LD_PREL19", Const, 4, ""},
-		{"R_AARCH64_IRELATIVE", Const, 4, ""},
-		{"R_AARCH64_JUMP26", Const, 4, ""},
-		{"R_AARCH64_JUMP_SLOT", Const, 4, ""},
-		{"R_AARCH64_LD64_GOTOFF_LO15", Const, 10, ""},
-		{"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10, ""},
-		{"R_AARCH64_LD64_GOT_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_LD_PREL_LO19", Const, 4, ""},
-		{"R_AARCH64_MOVW_SABS_G0", Const, 4, ""},
-		{"R_AARCH64_MOVW_SABS_G1", Const, 4, ""},
-		{"R_AARCH64_MOVW_SABS_G2", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G0", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G0_NC", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G1", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G1_NC", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G2", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G2_NC", Const, 4, ""},
-		{"R_AARCH64_MOVW_UABS_G3", Const, 4, ""},
-		{"R_AARCH64_NONE", Const, 4, ""},
-		{"R_AARCH64_NULL", Const, 4, ""},
-		{"R_AARCH64_P32_ABS16", Const, 4, ""},
-		{"R_AARCH64_P32_ABS32", Const, 4, ""},
-		{"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4, ""},
-		{"R_AARCH64_P32_ADR_PREL_LO21", Const, 4, ""},
-		{"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4, ""},
-		{"R_AARCH64_P32_CALL26", Const, 4, ""},
-		{"R_AARCH64_P32_CONDBR19", Const, 4, ""},
-		{"R_AARCH64_P32_COPY", Const, 4, ""},
-		{"R_AARCH64_P32_GLOB_DAT", Const, 4, ""},
-		{"R_AARCH64_P32_GOT_LD_PREL19", Const, 4, ""},
-		{"R_AARCH64_P32_IRELATIVE", Const, 4, ""},
-		{"R_AARCH64_P32_JUMP26", Const, 4, ""},
-		{"R_AARCH64_P32_JUMP_SLOT", Const, 4, ""},
-		{"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_LD_PREL_LO19", Const, 4, ""},
-		{"R_AARCH64_P32_MOVW_SABS_G0", Const, 4, ""},
-		{"R_AARCH64_P32_MOVW_UABS_G0", Const, 4, ""},
-		{"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4, ""},
-		{"R_AARCH64_P32_MOVW_UABS_G1", Const, 4, ""},
-		{"R_AARCH64_P32_PREL16", Const, 4, ""},
-		{"R_AARCH64_P32_PREL32", Const, 4, ""},
-		{"R_AARCH64_P32_RELATIVE", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_CALL", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4, ""},
-		{"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4, ""},
-		{"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
-		{"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
-		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
-		{"R_AARCH64_P32_TLS_DTPMOD", Const, 4, ""},
-		{"R_AARCH64_P32_TLS_DTPREL", Const, 4, ""},
-		{"R_AARCH64_P32_TLS_TPREL", Const, 4, ""},
-		{"R_AARCH64_P32_TSTBR14", Const, 4, ""},
-		{"R_AARCH64_PREL16", Const, 4, ""},
-		{"R_AARCH64_PREL32", Const, 4, ""},
-		{"R_AARCH64_PREL64", Const, 4, ""},
-		{"R_AARCH64_RELATIVE", Const, 4, ""},
-		{"R_AARCH64_TLSDESC", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_ADD", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_CALL", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_LDR", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_LD_PREL19", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4, ""},
-		{"R_AARCH64_TLSDESC_OFF_G1", Const, 4, ""},
-		{"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4, ""},
-		{"R_AARCH64_TLSGD_ADR_PREL21", Const, 10, ""},
-		{"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10, ""},
-		{"R_AARCH64_TLSGD_MOVW_G1", Const, 10, ""},
-		{"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
-		{"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
-		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4, ""},
-		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4, ""},
-		{"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10, ""},
-		{"R_AARCH64_TLSLD_ADR_PREL21", Const, 10, ""},
-		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10, ""},
-		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10, ""},
-		{"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
-		{"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
-		{"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
-		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10, ""},
-		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10, ""},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4, ""},
-		{"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4, ""},
-		{"R_AARCH64_TLS_DTPMOD64", Const, 4, ""},
-		{"R_AARCH64_TLS_DTPREL64", Const, 4, ""},
-		{"R_AARCH64_TLS_TPREL64", Const, 4, ""},
-		{"R_AARCH64_TSTBR14", Const, 4, ""},
-		{"R_ALPHA", Type, 0, ""},
-		{"R_ALPHA_BRADDR", Const, 0, ""},
-		{"R_ALPHA_COPY", Const, 0, ""},
-		{"R_ALPHA_GLOB_DAT", Const, 0, ""},
-		{"R_ALPHA_GPDISP", Const, 0, ""},
-		{"R_ALPHA_GPREL32", Const, 0, ""},
-		{"R_ALPHA_GPRELHIGH", Const, 0, ""},
-		{"R_ALPHA_GPRELLOW", Const, 0, ""},
-		{"R_ALPHA_GPVALUE", Const, 0, ""},
-		{"R_ALPHA_HINT", Const, 0, ""},
-		{"R_ALPHA_IMMED_BR_HI32", Const, 0, ""},
-		{"R_ALPHA_IMMED_GP_16", Const, 0, ""},
-		{"R_ALPHA_IMMED_GP_HI32", Const, 0, ""},
-		{"R_ALPHA_IMMED_LO32", Const, 0, ""},
-		{"R_ALPHA_IMMED_SCN_HI32", Const, 0, ""},
-		{"R_ALPHA_JMP_SLOT", Const, 0, ""},
-		{"R_ALPHA_LITERAL", Const, 0, ""},
-		{"R_ALPHA_LITUSE", Const, 0, ""},
-		{"R_ALPHA_NONE", Const, 0, ""},
-		{"R_ALPHA_OP_PRSHIFT", Const, 0, ""},
-		{"R_ALPHA_OP_PSUB", Const, 0, ""},
-		{"R_ALPHA_OP_PUSH", Const, 0, ""},
-		{"R_ALPHA_OP_STORE", Const, 0, ""},
-		{"R_ALPHA_REFLONG", Const, 0, ""},
-		{"R_ALPHA_REFQUAD", Const, 0, ""},
-		{"R_ALPHA_RELATIVE", Const, 0, ""},
-		{"R_ALPHA_SREL16", Const, 0, ""},
-		{"R_ALPHA_SREL32", Const, 0, ""},
-		{"R_ALPHA_SREL64", Const, 0, ""},
-		{"R_ARM", Type, 0, ""},
-		{"R_ARM_ABS12", Const, 0, ""},
-		{"R_ARM_ABS16", Const, 0, ""},
-		{"R_ARM_ABS32", Const, 0, ""},
-		{"R_ARM_ABS32_NOI", Const, 10, ""},
-		{"R_ARM_ABS8", Const, 0, ""},
-		{"R_ARM_ALU_PCREL_15_8", Const, 10, ""},
-		{"R_ARM_ALU_PCREL_23_15", Const, 10, ""},
-		{"R_ARM_ALU_PCREL_7_0", Const, 10, ""},
-		{"R_ARM_ALU_PC_G0", Const, 10, ""},
-		{"R_ARM_ALU_PC_G0_NC", Const, 10, ""},
-		{"R_ARM_ALU_PC_G1", Const, 10, ""},
-		{"R_ARM_ALU_PC_G1_NC", Const, 10, ""},
-		{"R_ARM_ALU_PC_G2", Const, 10, ""},
-		{"R_ARM_ALU_SBREL_19_12_NC", Const, 10, ""},
-		{"R_ARM_ALU_SBREL_27_20_CK", Const, 10, ""},
-		{"R_ARM_ALU_SB_G0", Const, 10, ""},
-		{"R_ARM_ALU_SB_G0_NC", Const, 10, ""},
-		{"R_ARM_ALU_SB_G1", Const, 10, ""},
-		{"R_ARM_ALU_SB_G1_NC", Const, 10, ""},
-		{"R_ARM_ALU_SB_G2", Const, 10, ""},
-		{"R_ARM_AMP_VCALL9", Const, 0, ""},
-		{"R_ARM_BASE_ABS", Const, 10, ""},
-		{"R_ARM_CALL", Const, 10, ""},
-		{"R_ARM_COPY", Const, 0, ""},
-		{"R_ARM_GLOB_DAT", Const, 0, ""},
-		{"R_ARM_GNU_VTENTRY", Const, 0, ""},
-		{"R_ARM_GNU_VTINHERIT", Const, 0, ""},
-		{"R_ARM_GOT32", Const, 0, ""},
-		{"R_ARM_GOTOFF", Const, 0, ""},
-		{"R_ARM_GOTOFF12", Const, 10, ""},
-		{"R_ARM_GOTPC", Const, 0, ""},
-		{"R_ARM_GOTRELAX", Const, 10, ""},
-		{"R_ARM_GOT_ABS", Const, 10, ""},
-		{"R_ARM_GOT_BREL12", Const, 10, ""},
-		{"R_ARM_GOT_PREL", Const, 10, ""},
-		{"R_ARM_IRELATIVE", Const, 10, ""},
-		{"R_ARM_JUMP24", Const, 10, ""},
-		{"R_ARM_JUMP_SLOT", Const, 0, ""},
-		{"R_ARM_LDC_PC_G0", Const, 10, ""},
-		{"R_ARM_LDC_PC_G1", Const, 10, ""},
-		{"R_ARM_LDC_PC_G2", Const, 10, ""},
-		{"R_ARM_LDC_SB_G0", Const, 10, ""},
-		{"R_ARM_LDC_SB_G1", Const, 10, ""},
-		{"R_ARM_LDC_SB_G2", Const, 10, ""},
-		{"R_ARM_LDRS_PC_G0", Const, 10, ""},
-		{"R_ARM_LDRS_PC_G1", Const, 10, ""},
-		{"R_ARM_LDRS_PC_G2", Const, 10, ""},
-		{"R_ARM_LDRS_SB_G0", Const, 10, ""},
-		{"R_ARM_LDRS_SB_G1", Const, 10, ""},
-		{"R_ARM_LDRS_SB_G2", Const, 10, ""},
-		{"R_ARM_LDR_PC_G1", Const, 10, ""},
-		{"R_ARM_LDR_PC_G2", Const, 10, ""},
-		{"R_ARM_LDR_SBREL_11_10_NC", Const, 10, ""},
-		{"R_ARM_LDR_SB_G0", Const, 10, ""},
-		{"R_ARM_LDR_SB_G1", Const, 10, ""},
-		{"R_ARM_LDR_SB_G2", Const, 10, ""},
-		{"R_ARM_ME_TOO", Const, 10, ""},
-		{"R_ARM_MOVT_ABS", Const, 10, ""},
-		{"R_ARM_MOVT_BREL", Const, 10, ""},
-		{"R_ARM_MOVT_PREL", Const, 10, ""},
-		{"R_ARM_MOVW_ABS_NC", Const, 10, ""},
-		{"R_ARM_MOVW_BREL", Const, 10, ""},
-		{"R_ARM_MOVW_BREL_NC", Const, 10, ""},
-		{"R_ARM_MOVW_PREL_NC", Const, 10, ""},
-		{"R_ARM_NONE", Const, 0, ""},
-		{"R_ARM_PC13", Const, 0, ""},
-		{"R_ARM_PC24", Const, 0, ""},
-		{"R_ARM_PLT32", Const, 0, ""},
-		{"R_ARM_PLT32_ABS", Const, 10, ""},
-		{"R_ARM_PREL31", Const, 10, ""},
-		{"R_ARM_PRIVATE_0", Const, 10, ""},
-		{"R_ARM_PRIVATE_1", Const, 10, ""},
-		{"R_ARM_PRIVATE_10", Const, 10, ""},
-		{"R_ARM_PRIVATE_11", Const, 10, ""},
-		{"R_ARM_PRIVATE_12", Const, 10, ""},
-		{"R_ARM_PRIVATE_13", Const, 10, ""},
-		{"R_ARM_PRIVATE_14", Const, 10, ""},
-		{"R_ARM_PRIVATE_15", Const, 10, ""},
-		{"R_ARM_PRIVATE_2", Const, 10, ""},
-		{"R_ARM_PRIVATE_3", Const, 10, ""},
-		{"R_ARM_PRIVATE_4", Const, 10, ""},
-		{"R_ARM_PRIVATE_5", Const, 10, ""},
-		{"R_ARM_PRIVATE_6", Const, 10, ""},
-		{"R_ARM_PRIVATE_7", Const, 10, ""},
-		{"R_ARM_PRIVATE_8", Const, 10, ""},
-		{"R_ARM_PRIVATE_9", Const, 10, ""},
-		{"R_ARM_RABS32", Const, 0, ""},
-		{"R_ARM_RBASE", Const, 0, ""},
-		{"R_ARM_REL32", Const, 0, ""},
-		{"R_ARM_REL32_NOI", Const, 10, ""},
-		{"R_ARM_RELATIVE", Const, 0, ""},
-		{"R_ARM_RPC24", Const, 0, ""},
-		{"R_ARM_RREL32", Const, 0, ""},
-		{"R_ARM_RSBREL32", Const, 0, ""},
-		{"R_ARM_RXPC25", Const, 10, ""},
-		{"R_ARM_SBREL31", Const, 10, ""},
-		{"R_ARM_SBREL32", Const, 0, ""},
-		{"R_ARM_SWI24", Const, 0, ""},
-		{"R_ARM_TARGET1", Const, 10, ""},
-		{"R_ARM_TARGET2", Const, 10, ""},
-		{"R_ARM_THM_ABS5", Const, 0, ""},
-		{"R_ARM_THM_ALU_ABS_G0_NC", Const, 10, ""},
-		{"R_ARM_THM_ALU_ABS_G1_NC", Const, 10, ""},
-		{"R_ARM_THM_ALU_ABS_G2_NC", Const, 10, ""},
-		{"R_ARM_THM_ALU_ABS_G3", Const, 10, ""},
-		{"R_ARM_THM_ALU_PREL_11_0", Const, 10, ""},
-		{"R_ARM_THM_GOT_BREL12", Const, 10, ""},
-		{"R_ARM_THM_JUMP11", Const, 10, ""},
-		{"R_ARM_THM_JUMP19", Const, 10, ""},
-		{"R_ARM_THM_JUMP24", Const, 10, ""},
-		{"R_ARM_THM_JUMP6", Const, 10, ""},
-		{"R_ARM_THM_JUMP8", Const, 10, ""},
-		{"R_ARM_THM_MOVT_ABS", Const, 10, ""},
-		{"R_ARM_THM_MOVT_BREL", Const, 10, ""},
-		{"R_ARM_THM_MOVT_PREL", Const, 10, ""},
-		{"R_ARM_THM_MOVW_ABS_NC", Const, 10, ""},
-		{"R_ARM_THM_MOVW_BREL", Const, 10, ""},
-		{"R_ARM_THM_MOVW_BREL_NC", Const, 10, ""},
-		{"R_ARM_THM_MOVW_PREL_NC", Const, 10, ""},
-		{"R_ARM_THM_PC12", Const, 10, ""},
-		{"R_ARM_THM_PC22", Const, 0, ""},
-		{"R_ARM_THM_PC8", Const, 0, ""},
-		{"R_ARM_THM_RPC22", Const, 0, ""},
-		{"R_ARM_THM_SWI8", Const, 0, ""},
-		{"R_ARM_THM_TLS_CALL", Const, 10, ""},
-		{"R_ARM_THM_TLS_DESCSEQ16", Const, 10, ""},
-		{"R_ARM_THM_TLS_DESCSEQ32", Const, 10, ""},
-		{"R_ARM_THM_XPC22", Const, 0, ""},
-		{"R_ARM_TLS_CALL", Const, 10, ""},
-		{"R_ARM_TLS_DESCSEQ", Const, 10, ""},
-		{"R_ARM_TLS_DTPMOD32", Const, 10, ""},
-		{"R_ARM_TLS_DTPOFF32", Const, 10, ""},
-		{"R_ARM_TLS_GD32", Const, 10, ""},
-		{"R_ARM_TLS_GOTDESC", Const, 10, ""},
-		{"R_ARM_TLS_IE12GP", Const, 10, ""},
-		{"R_ARM_TLS_IE32", Const, 10, ""},
-		{"R_ARM_TLS_LDM32", Const, 10, ""},
-		{"R_ARM_TLS_LDO12", Const, 10, ""},
-		{"R_ARM_TLS_LDO32", Const, 10, ""},
-		{"R_ARM_TLS_LE12", Const, 10, ""},
-		{"R_ARM_TLS_LE32", Const, 10, ""},
-		{"R_ARM_TLS_TPOFF32", Const, 10, ""},
-		{"R_ARM_V4BX", Const, 10, ""},
-		{"R_ARM_XPC25", Const, 0, ""},
-		{"R_INFO", Func, 0, "func(sym uint32, typ uint32) uint64"},
-		{"R_INFO32", Func, 0, "func(sym uint32, typ uint32) uint32"},
-		{"R_LARCH", Type, 19, ""},
-		{"R_LARCH_32", Const, 19, ""},
-		{"R_LARCH_32_PCREL", Const, 20, ""},
-		{"R_LARCH_64", Const, 19, ""},
-		{"R_LARCH_64_PCREL", Const, 22, ""},
-		{"R_LARCH_ABS64_HI12", Const, 20, ""},
-		{"R_LARCH_ABS64_LO20", Const, 20, ""},
-		{"R_LARCH_ABS_HI20", Const, 20, ""},
-		{"R_LARCH_ABS_LO12", Const, 20, ""},
-		{"R_LARCH_ADD16", Const, 19, ""},
-		{"R_LARCH_ADD24", Const, 19, ""},
-		{"R_LARCH_ADD32", Const, 19, ""},
-		{"R_LARCH_ADD6", Const, 22, ""},
-		{"R_LARCH_ADD64", Const, 19, ""},
-		{"R_LARCH_ADD8", Const, 19, ""},
-		{"R_LARCH_ADD_ULEB128", Const, 22, ""},
-		{"R_LARCH_ALIGN", Const, 22, ""},
-		{"R_LARCH_B16", Const, 20, ""},
-		{"R_LARCH_B21", Const, 20, ""},
-		{"R_LARCH_B26", Const, 20, ""},
-		{"R_LARCH_CFA", Const, 22, ""},
-		{"R_LARCH_COPY", Const, 19, ""},
-		{"R_LARCH_DELETE", Const, 22, ""},
-		{"R_LARCH_GNU_VTENTRY", Const, 20, ""},
-		{"R_LARCH_GNU_VTINHERIT", Const, 20, ""},
-		{"R_LARCH_GOT64_HI12", Const, 20, ""},
-		{"R_LARCH_GOT64_LO20", Const, 20, ""},
-		{"R_LARCH_GOT64_PC_HI12", Const, 20, ""},
-		{"R_LARCH_GOT64_PC_LO20", Const, 20, ""},
-		{"R_LARCH_GOT_HI20", Const, 20, ""},
-		{"R_LARCH_GOT_LO12", Const, 20, ""},
-		{"R_LARCH_GOT_PC_HI20", Const, 20, ""},
-		{"R_LARCH_GOT_PC_LO12", Const, 20, ""},
-		{"R_LARCH_IRELATIVE", Const, 19, ""},
-		{"R_LARCH_JUMP_SLOT", Const, 19, ""},
-		{"R_LARCH_MARK_LA", Const, 19, ""},
-		{"R_LARCH_MARK_PCREL", Const, 19, ""},
-		{"R_LARCH_NONE", Const, 19, ""},
-		{"R_LARCH_PCALA64_HI12", Const, 20, ""},
-		{"R_LARCH_PCALA64_LO20", Const, 20, ""},
-		{"R_LARCH_PCALA_HI20", Const, 20, ""},
-		{"R_LARCH_PCALA_LO12", Const, 20, ""},
-		{"R_LARCH_PCREL20_S2", Const, 22, ""},
-		{"R_LARCH_RELATIVE", Const, 19, ""},
-		{"R_LARCH_RELAX", Const, 20, ""},
-		{"R_LARCH_SOP_ADD", Const, 19, ""},
-		{"R_LARCH_SOP_AND", Const, 19, ""},
-		{"R_LARCH_SOP_ASSERT", Const, 19, ""},
-		{"R_LARCH_SOP_IF_ELSE", Const, 19, ""},
-		{"R_LARCH_SOP_NOT", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_10_12", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_10_16", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_10_5", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_S_5_20", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_U", Const, 19, ""},
-		{"R_LARCH_SOP_POP_32_U_10_12", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_DUP", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_GPREL", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_PCREL", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_TLS_GD", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19, ""},
-		{"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19, ""},
-		{"R_LARCH_SOP_SL", Const, 19, ""},
-		{"R_LARCH_SOP_SR", Const, 19, ""},
-		{"R_LARCH_SOP_SUB", Const, 19, ""},
-		{"R_LARCH_SUB16", Const, 19, ""},
-		{"R_LARCH_SUB24", Const, 19, ""},
-		{"R_LARCH_SUB32", Const, 19, ""},
-		{"R_LARCH_SUB6", Const, 22, ""},
-		{"R_LARCH_SUB64", Const, 19, ""},
-		{"R_LARCH_SUB8", Const, 19, ""},
-		{"R_LARCH_SUB_ULEB128", Const, 22, ""},
-		{"R_LARCH_TLS_DTPMOD32", Const, 19, ""},
-		{"R_LARCH_TLS_DTPMOD64", Const, 19, ""},
-		{"R_LARCH_TLS_DTPREL32", Const, 19, ""},
-		{"R_LARCH_TLS_DTPREL64", Const, 19, ""},
-		{"R_LARCH_TLS_GD_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_GD_PC_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_IE64_HI12", Const, 20, ""},
-		{"R_LARCH_TLS_IE64_LO20", Const, 20, ""},
-		{"R_LARCH_TLS_IE64_PC_HI12", Const, 20, ""},
-		{"R_LARCH_TLS_IE64_PC_LO20", Const, 20, ""},
-		{"R_LARCH_TLS_IE_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_IE_LO12", Const, 20, ""},
-		{"R_LARCH_TLS_IE_PC_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_IE_PC_LO12", Const, 20, ""},
-		{"R_LARCH_TLS_LD_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_LD_PC_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_LE64_HI12", Const, 20, ""},
-		{"R_LARCH_TLS_LE64_LO20", Const, 20, ""},
-		{"R_LARCH_TLS_LE_HI20", Const, 20, ""},
-		{"R_LARCH_TLS_LE_LO12", Const, 20, ""},
-		{"R_LARCH_TLS_TPREL32", Const, 19, ""},
-		{"R_LARCH_TLS_TPREL64", Const, 19, ""},
-		{"R_MIPS", Type, 6, ""},
-		{"R_MIPS_16", Const, 6, ""},
-		{"R_MIPS_26", Const, 6, ""},
-		{"R_MIPS_32", Const, 6, ""},
-		{"R_MIPS_64", Const, 6, ""},
-		{"R_MIPS_ADD_IMMEDIATE", Const, 6, ""},
-		{"R_MIPS_CALL16", Const, 6, ""},
-		{"R_MIPS_CALL_HI16", Const, 6, ""},
-		{"R_MIPS_CALL_LO16", Const, 6, ""},
-		{"R_MIPS_DELETE", Const, 6, ""},
-		{"R_MIPS_GOT16", Const, 6, ""},
-		{"R_MIPS_GOT_DISP", Const, 6, ""},
-		{"R_MIPS_GOT_HI16", Const, 6, ""},
-		{"R_MIPS_GOT_LO16", Const, 6, ""},
-		{"R_MIPS_GOT_OFST", Const, 6, ""},
-		{"R_MIPS_GOT_PAGE", Const, 6, ""},
-		{"R_MIPS_GPREL16", Const, 6, ""},
-		{"R_MIPS_GPREL32", Const, 6, ""},
-		{"R_MIPS_HI16", Const, 6, ""},
-		{"R_MIPS_HIGHER", Const, 6, ""},
-		{"R_MIPS_HIGHEST", Const, 6, ""},
-		{"R_MIPS_INSERT_A", Const, 6, ""},
-		{"R_MIPS_INSERT_B", Const, 6, ""},
-		{"R_MIPS_JALR", Const, 6, ""},
-		{"R_MIPS_LITERAL", Const, 6, ""},
-		{"R_MIPS_LO16", Const, 6, ""},
-		{"R_MIPS_NONE", Const, 6, ""},
-		{"R_MIPS_PC16", Const, 6, ""},
-		{"R_MIPS_PC32", Const, 22, ""},
-		{"R_MIPS_PJUMP", Const, 6, ""},
-		{"R_MIPS_REL16", Const, 6, ""},
-		{"R_MIPS_REL32", Const, 6, ""},
-		{"R_MIPS_RELGOT", Const, 6, ""},
-		{"R_MIPS_SCN_DISP", Const, 6, ""},
-		{"R_MIPS_SHIFT5", Const, 6, ""},
-		{"R_MIPS_SHIFT6", Const, 6, ""},
-		{"R_MIPS_SUB", Const, 6, ""},
-		{"R_MIPS_TLS_DTPMOD32", Const, 6, ""},
-		{"R_MIPS_TLS_DTPMOD64", Const, 6, ""},
-		{"R_MIPS_TLS_DTPREL32", Const, 6, ""},
-		{"R_MIPS_TLS_DTPREL64", Const, 6, ""},
-		{"R_MIPS_TLS_DTPREL_HI16", Const, 6, ""},
-		{"R_MIPS_TLS_DTPREL_LO16", Const, 6, ""},
-		{"R_MIPS_TLS_GD", Const, 6, ""},
-		{"R_MIPS_TLS_GOTTPREL", Const, 6, ""},
-		{"R_MIPS_TLS_LDM", Const, 6, ""},
-		{"R_MIPS_TLS_TPREL32", Const, 6, ""},
-		{"R_MIPS_TLS_TPREL64", Const, 6, ""},
-		{"R_MIPS_TLS_TPREL_HI16", Const, 6, ""},
-		{"R_MIPS_TLS_TPREL_LO16", Const, 6, ""},
-		{"R_PPC", Type, 0, ""},
-		{"R_PPC64", Type, 5, ""},
-		{"R_PPC64_ADDR14", Const, 5, ""},
-		{"R_PPC64_ADDR14_BRNTAKEN", Const, 5, ""},
-		{"R_PPC64_ADDR14_BRTAKEN", Const, 5, ""},
-		{"R_PPC64_ADDR16", Const, 5, ""},
-		{"R_PPC64_ADDR16_DS", Const, 5, ""},
-		{"R_PPC64_ADDR16_HA", Const, 5, ""},
-		{"R_PPC64_ADDR16_HI", Const, 5, ""},
-		{"R_PPC64_ADDR16_HIGH", Const, 10, ""},
-		{"R_PPC64_ADDR16_HIGHA", Const, 10, ""},
-		{"R_PPC64_ADDR16_HIGHER", Const, 5, ""},
-		{"R_PPC64_ADDR16_HIGHER34", Const, 20, ""},
-		{"R_PPC64_ADDR16_HIGHERA", Const, 5, ""},
-		{"R_PPC64_ADDR16_HIGHERA34", Const, 20, ""},
-		{"R_PPC64_ADDR16_HIGHEST", Const, 5, ""},
-		{"R_PPC64_ADDR16_HIGHEST34", Const, 20, ""},
-		{"R_PPC64_ADDR16_HIGHESTA", Const, 5, ""},
-		{"R_PPC64_ADDR16_HIGHESTA34", Const, 20, ""},
-		{"R_PPC64_ADDR16_LO", Const, 5, ""},
-		{"R_PPC64_ADDR16_LO_DS", Const, 5, ""},
-		{"R_PPC64_ADDR24", Const, 5, ""},
-		{"R_PPC64_ADDR32", Const, 5, ""},
-		{"R_PPC64_ADDR64", Const, 5, ""},
-		{"R_PPC64_ADDR64_LOCAL", Const, 10, ""},
-		{"R_PPC64_COPY", Const, 20, ""},
-		{"R_PPC64_D28", Const, 20, ""},
-		{"R_PPC64_D34", Const, 20, ""},
-		{"R_PPC64_D34_HA30", Const, 20, ""},
-		{"R_PPC64_D34_HI30", Const, 20, ""},
-		{"R_PPC64_D34_LO", Const, 20, ""},
-		{"R_PPC64_DTPMOD64", Const, 5, ""},
-		{"R_PPC64_DTPREL16", Const, 5, ""},
-		{"R_PPC64_DTPREL16_DS", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HA", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HI", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HIGH", Const, 10, ""},
-		{"R_PPC64_DTPREL16_HIGHA", Const, 10, ""},
-		{"R_PPC64_DTPREL16_HIGHER", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HIGHERA", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HIGHEST", Const, 5, ""},
-		{"R_PPC64_DTPREL16_HIGHESTA", Const, 5, ""},
-		{"R_PPC64_DTPREL16_LO", Const, 5, ""},
-		{"R_PPC64_DTPREL16_LO_DS", Const, 5, ""},
-		{"R_PPC64_DTPREL34", Const, 20, ""},
-		{"R_PPC64_DTPREL64", Const, 5, ""},
-		{"R_PPC64_ENTRY", Const, 10, ""},
-		{"R_PPC64_GLOB_DAT", Const, 20, ""},
-		{"R_PPC64_GNU_VTENTRY", Const, 20, ""},
-		{"R_PPC64_GNU_VTINHERIT", Const, 20, ""},
-		{"R_PPC64_GOT16", Const, 5, ""},
-		{"R_PPC64_GOT16_DS", Const, 5, ""},
-		{"R_PPC64_GOT16_HA", Const, 5, ""},
-		{"R_PPC64_GOT16_HI", Const, 5, ""},
-		{"R_PPC64_GOT16_LO", Const, 5, ""},
-		{"R_PPC64_GOT16_LO_DS", Const, 5, ""},
-		{"R_PPC64_GOT_DTPREL16_DS", Const, 5, ""},
-		{"R_PPC64_GOT_DTPREL16_HA", Const, 5, ""},
-		{"R_PPC64_GOT_DTPREL16_HI", Const, 5, ""},
-		{"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5, ""},
-		{"R_PPC64_GOT_DTPREL_PCREL34", Const, 20, ""},
-		{"R_PPC64_GOT_PCREL34", Const, 20, ""},
-		{"R_PPC64_GOT_TLSGD16", Const, 5, ""},
-		{"R_PPC64_GOT_TLSGD16_HA", Const, 5, ""},
-		{"R_PPC64_GOT_TLSGD16_HI", Const, 5, ""},
-		{"R_PPC64_GOT_TLSGD16_LO", Const, 5, ""},
-		{"R_PPC64_GOT_TLSGD_PCREL34", Const, 20, ""},
-		{"R_PPC64_GOT_TLSLD16", Const, 5, ""},
-		{"R_PPC64_GOT_TLSLD16_HA", Const, 5, ""},
-		{"R_PPC64_GOT_TLSLD16_HI", Const, 5, ""},
-		{"R_PPC64_GOT_TLSLD16_LO", Const, 5, ""},
-		{"R_PPC64_GOT_TLSLD_PCREL34", Const, 20, ""},
-		{"R_PPC64_GOT_TPREL16_DS", Const, 5, ""},
-		{"R_PPC64_GOT_TPREL16_HA", Const, 5, ""},
-		{"R_PPC64_GOT_TPREL16_HI", Const, 5, ""},
-		{"R_PPC64_GOT_TPREL16_LO_DS", Const, 5, ""},
-		{"R_PPC64_GOT_TPREL_PCREL34", Const, 20, ""},
-		{"R_PPC64_IRELATIVE", Const, 10, ""},
-		{"R_PPC64_JMP_IREL", Const, 10, ""},
-		{"R_PPC64_JMP_SLOT", Const, 5, ""},
-		{"R_PPC64_NONE", Const, 5, ""},
-		{"R_PPC64_PCREL28", Const, 20, ""},
-		{"R_PPC64_PCREL34", Const, 20, ""},
-		{"R_PPC64_PCREL_OPT", Const, 20, ""},
-		{"R_PPC64_PLT16_HA", Const, 20, ""},
-		{"R_PPC64_PLT16_HI", Const, 20, ""},
-		{"R_PPC64_PLT16_LO", Const, 20, ""},
-		{"R_PPC64_PLT16_LO_DS", Const, 10, ""},
-		{"R_PPC64_PLT32", Const, 20, ""},
-		{"R_PPC64_PLT64", Const, 20, ""},
-		{"R_PPC64_PLTCALL", Const, 20, ""},
-		{"R_PPC64_PLTCALL_NOTOC", Const, 20, ""},
-		{"R_PPC64_PLTGOT16", Const, 10, ""},
-		{"R_PPC64_PLTGOT16_DS", Const, 10, ""},
-		{"R_PPC64_PLTGOT16_HA", Const, 10, ""},
-		{"R_PPC64_PLTGOT16_HI", Const, 10, ""},
-		{"R_PPC64_PLTGOT16_LO", Const, 10, ""},
-		{"R_PPC64_PLTGOT_LO_DS", Const, 10, ""},
-		{"R_PPC64_PLTREL32", Const, 20, ""},
-		{"R_PPC64_PLTREL64", Const, 20, ""},
-		{"R_PPC64_PLTSEQ", Const, 20, ""},
-		{"R_PPC64_PLTSEQ_NOTOC", Const, 20, ""},
-		{"R_PPC64_PLT_PCREL34", Const, 20, ""},
-		{"R_PPC64_PLT_PCREL34_NOTOC", Const, 20, ""},
-		{"R_PPC64_REL14", Const, 5, ""},
-		{"R_PPC64_REL14_BRNTAKEN", Const, 5, ""},
-		{"R_PPC64_REL14_BRTAKEN", Const, 5, ""},
-		{"R_PPC64_REL16", Const, 5, ""},
-		{"R_PPC64_REL16DX_HA", Const, 10, ""},
-		{"R_PPC64_REL16_HA", Const, 5, ""},
-		{"R_PPC64_REL16_HI", Const, 5, ""},
-		{"R_PPC64_REL16_HIGH", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHA", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHER", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHER34", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHERA", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHERA34", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHEST", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHEST34", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHESTA", Const, 20, ""},
-		{"R_PPC64_REL16_HIGHESTA34", Const, 20, ""},
-		{"R_PPC64_REL16_LO", Const, 5, ""},
-		{"R_PPC64_REL24", Const, 5, ""},
-		{"R_PPC64_REL24_NOTOC", Const, 10, ""},
-		{"R_PPC64_REL24_P9NOTOC", Const, 21, ""},
-		{"R_PPC64_REL30", Const, 20, ""},
-		{"R_PPC64_REL32", Const, 5, ""},
-		{"R_PPC64_REL64", Const, 5, ""},
-		{"R_PPC64_RELATIVE", Const, 18, ""},
-		{"R_PPC64_SECTOFF", Const, 20, ""},
-		{"R_PPC64_SECTOFF_DS", Const, 10, ""},
-		{"R_PPC64_SECTOFF_HA", Const, 20, ""},
-		{"R_PPC64_SECTOFF_HI", Const, 20, ""},
-		{"R_PPC64_SECTOFF_LO", Const, 20, ""},
-		{"R_PPC64_SECTOFF_LO_DS", Const, 10, ""},
-		{"R_PPC64_TLS", Const, 5, ""},
-		{"R_PPC64_TLSGD", Const, 5, ""},
-		{"R_PPC64_TLSLD", Const, 5, ""},
-		{"R_PPC64_TOC", Const, 5, ""},
-		{"R_PPC64_TOC16", Const, 5, ""},
-		{"R_PPC64_TOC16_DS", Const, 5, ""},
-		{"R_PPC64_TOC16_HA", Const, 5, ""},
-		{"R_PPC64_TOC16_HI", Const, 5, ""},
-		{"R_PPC64_TOC16_LO", Const, 5, ""},
-		{"R_PPC64_TOC16_LO_DS", Const, 5, ""},
-		{"R_PPC64_TOCSAVE", Const, 10, ""},
-		{"R_PPC64_TPREL16", Const, 5, ""},
-		{"R_PPC64_TPREL16_DS", Const, 5, ""},
-		{"R_PPC64_TPREL16_HA", Const, 5, ""},
-		{"R_PPC64_TPREL16_HI", Const, 5, ""},
-		{"R_PPC64_TPREL16_HIGH", Const, 10, ""},
-		{"R_PPC64_TPREL16_HIGHA", Const, 10, ""},
-		{"R_PPC64_TPREL16_HIGHER", Const, 5, ""},
-		{"R_PPC64_TPREL16_HIGHERA", Const, 5, ""},
-		{"R_PPC64_TPREL16_HIGHEST", Const, 5, ""},
-		{"R_PPC64_TPREL16_HIGHESTA", Const, 5, ""},
-		{"R_PPC64_TPREL16_LO", Const, 5, ""},
-		{"R_PPC64_TPREL16_LO_DS", Const, 5, ""},
-		{"R_PPC64_TPREL34", Const, 20, ""},
-		{"R_PPC64_TPREL64", Const, 5, ""},
-		{"R_PPC64_UADDR16", Const, 20, ""},
-		{"R_PPC64_UADDR32", Const, 20, ""},
-		{"R_PPC64_UADDR64", Const, 20, ""},
-		{"R_PPC_ADDR14", Const, 0, ""},
-		{"R_PPC_ADDR14_BRNTAKEN", Const, 0, ""},
-		{"R_PPC_ADDR14_BRTAKEN", Const, 0, ""},
-		{"R_PPC_ADDR16", Const, 0, ""},
-		{"R_PPC_ADDR16_HA", Const, 0, ""},
-		{"R_PPC_ADDR16_HI", Const, 0, ""},
-		{"R_PPC_ADDR16_LO", Const, 0, ""},
-		{"R_PPC_ADDR24", Const, 0, ""},
-		{"R_PPC_ADDR32", Const, 0, ""},
-		{"R_PPC_COPY", Const, 0, ""},
-		{"R_PPC_DTPMOD32", Const, 0, ""},
-		{"R_PPC_DTPREL16", Const, 0, ""},
-		{"R_PPC_DTPREL16_HA", Const, 0, ""},
-		{"R_PPC_DTPREL16_HI", Const, 0, ""},
-		{"R_PPC_DTPREL16_LO", Const, 0, ""},
-		{"R_PPC_DTPREL32", Const, 0, ""},
-		{"R_PPC_EMB_BIT_FLD", Const, 0, ""},
-		{"R_PPC_EMB_MRKREF", Const, 0, ""},
-		{"R_PPC_EMB_NADDR16", Const, 0, ""},
-		{"R_PPC_EMB_NADDR16_HA", Const, 0, ""},
-		{"R_PPC_EMB_NADDR16_HI", Const, 0, ""},
-		{"R_PPC_EMB_NADDR16_LO", Const, 0, ""},
-		{"R_PPC_EMB_NADDR32", Const, 0, ""},
-		{"R_PPC_EMB_RELSDA", Const, 0, ""},
-		{"R_PPC_EMB_RELSEC16", Const, 0, ""},
-		{"R_PPC_EMB_RELST_HA", Const, 0, ""},
-		{"R_PPC_EMB_RELST_HI", Const, 0, ""},
-		{"R_PPC_EMB_RELST_LO", Const, 0, ""},
-		{"R_PPC_EMB_SDA21", Const, 0, ""},
-		{"R_PPC_EMB_SDA2I16", Const, 0, ""},
-		{"R_PPC_EMB_SDA2REL", Const, 0, ""},
-		{"R_PPC_EMB_SDAI16", Const, 0, ""},
-		{"R_PPC_GLOB_DAT", Const, 0, ""},
-		{"R_PPC_GOT16", Const, 0, ""},
-		{"R_PPC_GOT16_HA", Const, 0, ""},
-		{"R_PPC_GOT16_HI", Const, 0, ""},
-		{"R_PPC_GOT16_LO", Const, 0, ""},
-		{"R_PPC_GOT_TLSGD16", Const, 0, ""},
-		{"R_PPC_GOT_TLSGD16_HA", Const, 0, ""},
-		{"R_PPC_GOT_TLSGD16_HI", Const, 0, ""},
-		{"R_PPC_GOT_TLSGD16_LO", Const, 0, ""},
-		{"R_PPC_GOT_TLSLD16", Const, 0, ""},
-		{"R_PPC_GOT_TLSLD16_HA", Const, 0, ""},
-		{"R_PPC_GOT_TLSLD16_HI", Const, 0, ""},
-		{"R_PPC_GOT_TLSLD16_LO", Const, 0, ""},
-		{"R_PPC_GOT_TPREL16", Const, 0, ""},
-		{"R_PPC_GOT_TPREL16_HA", Const, 0, ""},
-		{"R_PPC_GOT_TPREL16_HI", Const, 0, ""},
-		{"R_PPC_GOT_TPREL16_LO", Const, 0, ""},
-		{"R_PPC_JMP_SLOT", Const, 0, ""},
-		{"R_PPC_LOCAL24PC", Const, 0, ""},
-		{"R_PPC_NONE", Const, 0, ""},
-		{"R_PPC_PLT16_HA", Const, 0, ""},
-		{"R_PPC_PLT16_HI", Const, 0, ""},
-		{"R_PPC_PLT16_LO", Const, 0, ""},
-		{"R_PPC_PLT32", Const, 0, ""},
-		{"R_PPC_PLTREL24", Const, 0, ""},
-		{"R_PPC_PLTREL32", Const, 0, ""},
-		{"R_PPC_REL14", Const, 0, ""},
-		{"R_PPC_REL14_BRNTAKEN", Const, 0, ""},
-		{"R_PPC_REL14_BRTAKEN", Const, 0, ""},
-		{"R_PPC_REL24", Const, 0, ""},
-		{"R_PPC_REL32", Const, 0, ""},
-		{"R_PPC_RELATIVE", Const, 0, ""},
-		{"R_PPC_SDAREL16", Const, 0, ""},
-		{"R_PPC_SECTOFF", Const, 0, ""},
-		{"R_PPC_SECTOFF_HA", Const, 0, ""},
-		{"R_PPC_SECTOFF_HI", Const, 0, ""},
-		{"R_PPC_SECTOFF_LO", Const, 0, ""},
-		{"R_PPC_TLS", Const, 0, ""},
-		{"R_PPC_TPREL16", Const, 0, ""},
-		{"R_PPC_TPREL16_HA", Const, 0, ""},
-		{"R_PPC_TPREL16_HI", Const, 0, ""},
-		{"R_PPC_TPREL16_LO", Const, 0, ""},
-		{"R_PPC_TPREL32", Const, 0, ""},
-		{"R_PPC_UADDR16", Const, 0, ""},
-		{"R_PPC_UADDR32", Const, 0, ""},
-		{"R_RISCV", Type, 11, ""},
-		{"R_RISCV_32", Const, 11, ""},
-		{"R_RISCV_32_PCREL", Const, 12, ""},
-		{"R_RISCV_64", Const, 11, ""},
-		{"R_RISCV_ADD16", Const, 11, ""},
-		{"R_RISCV_ADD32", Const, 11, ""},
-		{"R_RISCV_ADD64", Const, 11, ""},
-		{"R_RISCV_ADD8", Const, 11, ""},
-		{"R_RISCV_ALIGN", Const, 11, ""},
-		{"R_RISCV_BRANCH", Const, 11, ""},
-		{"R_RISCV_CALL", Const, 11, ""},
-		{"R_RISCV_CALL_PLT", Const, 11, ""},
-		{"R_RISCV_COPY", Const, 11, ""},
-		{"R_RISCV_GNU_VTENTRY", Const, 11, ""},
-		{"R_RISCV_GNU_VTINHERIT", Const, 11, ""},
-		{"R_RISCV_GOT_HI20", Const, 11, ""},
-		{"R_RISCV_GPREL_I", Const, 11, ""},
-		{"R_RISCV_GPREL_S", Const, 11, ""},
-		{"R_RISCV_HI20", Const, 11, ""},
-		{"R_RISCV_JAL", Const, 11, ""},
-		{"R_RISCV_JUMP_SLOT", Const, 11, ""},
-		{"R_RISCV_LO12_I", Const, 11, ""},
-		{"R_RISCV_LO12_S", Const, 11, ""},
-		{"R_RISCV_NONE", Const, 11, ""},
-		{"R_RISCV_PCREL_HI20", Const, 11, ""},
-		{"R_RISCV_PCREL_LO12_I", Const, 11, ""},
-		{"R_RISCV_PCREL_LO12_S", Const, 11, ""},
-		{"R_RISCV_RELATIVE", Const, 11, ""},
-		{"R_RISCV_RELAX", Const, 11, ""},
-		{"R_RISCV_RVC_BRANCH", Const, 11, ""},
-		{"R_RISCV_RVC_JUMP", Const, 11, ""},
-		{"R_RISCV_RVC_LUI", Const, 11, ""},
-		{"R_RISCV_SET16", Const, 11, ""},
-		{"R_RISCV_SET32", Const, 11, ""},
-		{"R_RISCV_SET6", Const, 11, ""},
-		{"R_RISCV_SET8", Const, 11, ""},
-		{"R_RISCV_SUB16", Const, 11, ""},
-		{"R_RISCV_SUB32", Const, 11, ""},
-		{"R_RISCV_SUB6", Const, 11, ""},
-		{"R_RISCV_SUB64", Const, 11, ""},
-		{"R_RISCV_SUB8", Const, 11, ""},
-		{"R_RISCV_TLS_DTPMOD32", Const, 11, ""},
-		{"R_RISCV_TLS_DTPMOD64", Const, 11, ""},
-		{"R_RISCV_TLS_DTPREL32", Const, 11, ""},
-		{"R_RISCV_TLS_DTPREL64", Const, 11, ""},
-		{"R_RISCV_TLS_GD_HI20", Const, 11, ""},
-		{"R_RISCV_TLS_GOT_HI20", Const, 11, ""},
-		{"R_RISCV_TLS_TPREL32", Const, 11, ""},
-		{"R_RISCV_TLS_TPREL64", Const, 11, ""},
-		{"R_RISCV_TPREL_ADD", Const, 11, ""},
-		{"R_RISCV_TPREL_HI20", Const, 11, ""},
-		{"R_RISCV_TPREL_I", Const, 11, ""},
-		{"R_RISCV_TPREL_LO12_I", Const, 11, ""},
-		{"R_RISCV_TPREL_LO12_S", Const, 11, ""},
-		{"R_RISCV_TPREL_S", Const, 11, ""},
-		{"R_SPARC", Type, 0, ""},
-		{"R_SPARC_10", Const, 0, ""},
-		{"R_SPARC_11", Const, 0, ""},
-		{"R_SPARC_13", Const, 0, ""},
-		{"R_SPARC_16", Const, 0, ""},
-		{"R_SPARC_22", Const, 0, ""},
-		{"R_SPARC_32", Const, 0, ""},
-		{"R_SPARC_5", Const, 0, ""},
-		{"R_SPARC_6", Const, 0, ""},
-		{"R_SPARC_64", Const, 0, ""},
-		{"R_SPARC_7", Const, 0, ""},
-		{"R_SPARC_8", Const, 0, ""},
-		{"R_SPARC_COPY", Const, 0, ""},
-		{"R_SPARC_DISP16", Const, 0, ""},
-		{"R_SPARC_DISP32", Const, 0, ""},
-		{"R_SPARC_DISP64", Const, 0, ""},
-		{"R_SPARC_DISP8", Const, 0, ""},
-		{"R_SPARC_GLOB_DAT", Const, 0, ""},
-		{"R_SPARC_GLOB_JMP", Const, 0, ""},
-		{"R_SPARC_GOT10", Const, 0, ""},
-		{"R_SPARC_GOT13", Const, 0, ""},
-		{"R_SPARC_GOT22", Const, 0, ""},
-		{"R_SPARC_H44", Const, 0, ""},
-		{"R_SPARC_HH22", Const, 0, ""},
-		{"R_SPARC_HI22", Const, 0, ""},
-		{"R_SPARC_HIPLT22", Const, 0, ""},
-		{"R_SPARC_HIX22", Const, 0, ""},
-		{"R_SPARC_HM10", Const, 0, ""},
-		{"R_SPARC_JMP_SLOT", Const, 0, ""},
-		{"R_SPARC_L44", Const, 0, ""},
-		{"R_SPARC_LM22", Const, 0, ""},
-		{"R_SPARC_LO10", Const, 0, ""},
-		{"R_SPARC_LOPLT10", Const, 0, ""},
-		{"R_SPARC_LOX10", Const, 0, ""},
-		{"R_SPARC_M44", Const, 0, ""},
-		{"R_SPARC_NONE", Const, 0, ""},
-		{"R_SPARC_OLO10", Const, 0, ""},
-		{"R_SPARC_PC10", Const, 0, ""},
-		{"R_SPARC_PC22", Const, 0, ""},
-		{"R_SPARC_PCPLT10", Const, 0, ""},
-		{"R_SPARC_PCPLT22", Const, 0, ""},
-		{"R_SPARC_PCPLT32", Const, 0, ""},
-		{"R_SPARC_PC_HH22", Const, 0, ""},
-		{"R_SPARC_PC_HM10", Const, 0, ""},
-		{"R_SPARC_PC_LM22", Const, 0, ""},
-		{"R_SPARC_PLT32", Const, 0, ""},
-		{"R_SPARC_PLT64", Const, 0, ""},
-		{"R_SPARC_REGISTER", Const, 0, ""},
-		{"R_SPARC_RELATIVE", Const, 0, ""},
-		{"R_SPARC_UA16", Const, 0, ""},
-		{"R_SPARC_UA32", Const, 0, ""},
-		{"R_SPARC_UA64", Const, 0, ""},
-		{"R_SPARC_WDISP16", Const, 0, ""},
-		{"R_SPARC_WDISP19", Const, 0, ""},
-		{"R_SPARC_WDISP22", Const, 0, ""},
-		{"R_SPARC_WDISP30", Const, 0, ""},
-		{"R_SPARC_WPLT30", Const, 0, ""},
-		{"R_SYM32", Func, 0, "func(info uint32) uint32"},
-		{"R_SYM64", Func, 0, "func(info uint64) uint32"},
-		{"R_TYPE32", Func, 0, "func(info uint32) uint32"},
-		{"R_TYPE64", Func, 0, "func(info uint64) uint32"},
-		{"R_X86_64", Type, 0, ""},
-		{"R_X86_64_16", Const, 0, ""},
-		{"R_X86_64_32", Const, 0, ""},
-		{"R_X86_64_32S", Const, 0, ""},
-		{"R_X86_64_64", Const, 0, ""},
-		{"R_X86_64_8", Const, 0, ""},
-		{"R_X86_64_COPY", Const, 0, ""},
-		{"R_X86_64_DTPMOD64", Const, 0, ""},
-		{"R_X86_64_DTPOFF32", Const, 0, ""},
-		{"R_X86_64_DTPOFF64", Const, 0, ""},
-		{"R_X86_64_GLOB_DAT", Const, 0, ""},
-		{"R_X86_64_GOT32", Const, 0, ""},
-		{"R_X86_64_GOT64", Const, 10, ""},
-		{"R_X86_64_GOTOFF64", Const, 10, ""},
-		{"R_X86_64_GOTPC32", Const, 10, ""},
-		{"R_X86_64_GOTPC32_TLSDESC", Const, 10, ""},
-		{"R_X86_64_GOTPC64", Const, 10, ""},
-		{"R_X86_64_GOTPCREL", Const, 0, ""},
-		{"R_X86_64_GOTPCREL64", Const, 10, ""},
-		{"R_X86_64_GOTPCRELX", Const, 10, ""},
-		{"R_X86_64_GOTPLT64", Const, 10, ""},
-		{"R_X86_64_GOTTPOFF", Const, 0, ""},
-		{"R_X86_64_IRELATIVE", Const, 10, ""},
-		{"R_X86_64_JMP_SLOT", Const, 0, ""},
-		{"R_X86_64_NONE", Const, 0, ""},
-		{"R_X86_64_PC16", Const, 0, ""},
-		{"R_X86_64_PC32", Const, 0, ""},
-		{"R_X86_64_PC32_BND", Const, 10, ""},
-		{"R_X86_64_PC64", Const, 10, ""},
-		{"R_X86_64_PC8", Const, 0, ""},
-		{"R_X86_64_PLT32", Const, 0, ""},
-		{"R_X86_64_PLT32_BND", Const, 10, ""},
-		{"R_X86_64_PLTOFF64", Const, 10, ""},
-		{"R_X86_64_RELATIVE", Const, 0, ""},
-		{"R_X86_64_RELATIVE64", Const, 10, ""},
-		{"R_X86_64_REX_GOTPCRELX", Const, 10, ""},
-		{"R_X86_64_SIZE32", Const, 10, ""},
-		{"R_X86_64_SIZE64", Const, 10, ""},
-		{"R_X86_64_TLSDESC", Const, 10, ""},
-		{"R_X86_64_TLSDESC_CALL", Const, 10, ""},
-		{"R_X86_64_TLSGD", Const, 0, ""},
-		{"R_X86_64_TLSLD", Const, 0, ""},
-		{"R_X86_64_TPOFF32", Const, 0, ""},
-		{"R_X86_64_TPOFF64", Const, 0, ""},
-		{"Rel32", Type, 0, ""},
-		{"Rel32.Info", Field, 0, ""},
-		{"Rel32.Off", Field, 0, ""},
-		{"Rel64", Type, 0, ""},
-		{"Rel64.Info", Field, 0, ""},
-		{"Rel64.Off", Field, 0, ""},
-		{"Rela32", Type, 0, ""},
-		{"Rela32.Addend", Field, 0, ""},
-		{"Rela32.Info", Field, 0, ""},
-		{"Rela32.Off", Field, 0, ""},
-		{"Rela64", Type, 0, ""},
-		{"Rela64.Addend", Field, 0, ""},
-		{"Rela64.Info", Field, 0, ""},
-		{"Rela64.Off", Field, 0, ""},
-		{"SHF_ALLOC", Const, 0, ""},
-		{"SHF_COMPRESSED", Const, 6, ""},
-		{"SHF_EXECINSTR", Const, 0, ""},
-		{"SHF_GROUP", Const, 0, ""},
-		{"SHF_INFO_LINK", Const, 0, ""},
-		{"SHF_LINK_ORDER", Const, 0, ""},
-		{"SHF_MASKOS", Const, 0, ""},
-		{"SHF_MASKPROC", Const, 0, ""},
-		{"SHF_MERGE", Const, 0, ""},
-		{"SHF_OS_NONCONFORMING", Const, 0, ""},
-		{"SHF_STRINGS", Const, 0, ""},
-		{"SHF_TLS", Const, 0, ""},
-		{"SHF_WRITE", Const, 0, ""},
-		{"SHN_ABS", Const, 0, ""},
-		{"SHN_COMMON", Const, 0, ""},
-		{"SHN_HIOS", Const, 0, ""},
-		{"SHN_HIPROC", Const, 0, ""},
-		{"SHN_HIRESERVE", Const, 0, ""},
-		{"SHN_LOOS", Const, 0, ""},
-		{"SHN_LOPROC", Const, 0, ""},
-		{"SHN_LORESERVE", Const, 0, ""},
-		{"SHN_UNDEF", Const, 0, ""},
-		{"SHN_XINDEX", Const, 0, ""},
-		{"SHT_DYNAMIC", Const, 0, ""},
-		{"SHT_DYNSYM", Const, 0, ""},
-		{"SHT_FINI_ARRAY", Const, 0, ""},
-		{"SHT_GNU_ATTRIBUTES", Const, 0, ""},
-		{"SHT_GNU_HASH", Const, 0, ""},
-		{"SHT_GNU_LIBLIST", Const, 0, ""},
-		{"SHT_GNU_VERDEF", Const, 0, ""},
-		{"SHT_GNU_VERNEED", Const, 0, ""},
-		{"SHT_GNU_VERSYM", Const, 0, ""},
-		{"SHT_GROUP", Const, 0, ""},
-		{"SHT_HASH", Const, 0, ""},
-		{"SHT_HIOS", Const, 0, ""},
-		{"SHT_HIPROC", Const, 0, ""},
-		{"SHT_HIUSER", Const, 0, ""},
-		{"SHT_INIT_ARRAY", Const, 0, ""},
-		{"SHT_LOOS", Const, 0, ""},
-		{"SHT_LOPROC", Const, 0, ""},
-		{"SHT_LOUSER", Const, 0, ""},
-		{"SHT_MIPS_ABIFLAGS", Const, 17, ""},
-		{"SHT_NOBITS", Const, 0, ""},
-		{"SHT_NOTE", Const, 0, ""},
-		{"SHT_NULL", Const, 0, ""},
-		{"SHT_PREINIT_ARRAY", Const, 0, ""},
-		{"SHT_PROGBITS", Const, 0, ""},
-		{"SHT_REL", Const, 0, ""},
-		{"SHT_RELA", Const, 0, ""},
-		{"SHT_RISCV_ATTRIBUTES", Const, 25, ""},
-		{"SHT_SHLIB", Const, 0, ""},
-		{"SHT_STRTAB", Const, 0, ""},
-		{"SHT_SYMTAB", Const, 0, ""},
-		{"SHT_SYMTAB_SHNDX", Const, 0, ""},
-		{"STB_GLOBAL", Const, 0, ""},
-		{"STB_HIOS", Const, 0, ""},
-		{"STB_HIPROC", Const, 0, ""},
-		{"STB_LOCAL", Const, 0, ""},
-		{"STB_LOOS", Const, 0, ""},
-		{"STB_LOPROC", Const, 0, ""},
-		{"STB_WEAK", Const, 0, ""},
-		{"STT_COMMON", Const, 0, ""},
-		{"STT_FILE", Const, 0, ""},
-		{"STT_FUNC", Const, 0, ""},
-		{"STT_GNU_IFUNC", Const, 23, ""},
-		{"STT_HIOS", Const, 0, ""},
-		{"STT_HIPROC", Const, 0, ""},
-		{"STT_LOOS", Const, 0, ""},
-		{"STT_LOPROC", Const, 0, ""},
-		{"STT_NOTYPE", Const, 0, ""},
-		{"STT_OBJECT", Const, 0, ""},
-		{"STT_RELC", Const, 23, ""},
-		{"STT_SECTION", Const, 0, ""},
-		{"STT_SRELC", Const, 23, ""},
-		{"STT_TLS", Const, 0, ""},
-		{"STV_DEFAULT", Const, 0, ""},
-		{"STV_HIDDEN", Const, 0, ""},
-		{"STV_INTERNAL", Const, 0, ""},
-		{"STV_PROTECTED", Const, 0, ""},
-		{"ST_BIND", Func, 0, "func(info uint8) SymBind"},
-		{"ST_INFO", Func, 0, "func(bind SymBind, typ SymType) uint8"},
-		{"ST_TYPE", Func, 0, "func(info uint8) SymType"},
-		{"ST_VISIBILITY", Func, 0, "func(other uint8) SymVis"},
-		{"Section", Type, 0, ""},
-		{"Section.ReaderAt", Field, 0, ""},
-		{"Section.SectionHeader", Field, 0, ""},
-		{"Section32", Type, 0, ""},
-		{"Section32.Addr", Field, 0, ""},
-		{"Section32.Addralign", Field, 0, ""},
-		{"Section32.Entsize", Field, 0, ""},
-		{"Section32.Flags", Field, 0, ""},
-		{"Section32.Info", Field, 0, ""},
-		{"Section32.Link", Field, 0, ""},
-		{"Section32.Name", Field, 0, ""},
-		{"Section32.Off", Field, 0, ""},
-		{"Section32.Size", Field, 0, ""},
-		{"Section32.Type", Field, 0, ""},
-		{"Section64", Type, 0, ""},
-		{"Section64.Addr", Field, 0, ""},
-		{"Section64.Addralign", Field, 0, ""},
-		{"Section64.Entsize", Field, 0, ""},
-		{"Section64.Flags", Field, 0, ""},
-		{"Section64.Info", Field, 0, ""},
-		{"Section64.Link", Field, 0, ""},
-		{"Section64.Name", Field, 0, ""},
-		{"Section64.Off", Field, 0, ""},
-		{"Section64.Size", Field, 0, ""},
-		{"Section64.Type", Field, 0, ""},
-		{"SectionFlag", Type, 0, ""},
-		{"SectionHeader", Type, 0, ""},
-		{"SectionHeader.Addr", Field, 0, ""},
-		{"SectionHeader.Addralign", Field, 0, ""},
-		{"SectionHeader.Entsize", Field, 0, ""},
-		{"SectionHeader.FileSize", Field, 6, ""},
-		{"SectionHeader.Flags", Field, 0, ""},
-		{"SectionHeader.Info", Field, 0, ""},
-		{"SectionHeader.Link", Field, 0, ""},
-		{"SectionHeader.Name", Field, 0, ""},
-		{"SectionHeader.Offset", Field, 0, ""},
-		{"SectionHeader.Size", Field, 0, ""},
-		{"SectionHeader.Type", Field, 0, ""},
-		{"SectionIndex", Type, 0, ""},
-		{"SectionType", Type, 0, ""},
-		{"Sym32", Type, 0, ""},
-		{"Sym32.Info", Field, 0, ""},
-		{"Sym32.Name", Field, 0, ""},
-		{"Sym32.Other", Field, 0, ""},
-		{"Sym32.Shndx", Field, 0, ""},
-		{"Sym32.Size", Field, 0, ""},
-		{"Sym32.Value", Field, 0, ""},
-		{"Sym32Size", Const, 0, ""},
-		{"Sym64", Type, 0, ""},
-		{"Sym64.Info", Field, 0, ""},
-		{"Sym64.Name", Field, 0, ""},
-		{"Sym64.Other", Field, 0, ""},
-		{"Sym64.Shndx", Field, 0, ""},
-		{"Sym64.Size", Field, 0, ""},
-		{"Sym64.Value", Field, 0, ""},
-		{"Sym64Size", Const, 0, ""},
-		{"SymBind", Type, 0, ""},
-		{"SymType", Type, 0, ""},
-		{"SymVis", Type, 0, ""},
-		{"Symbol", Type, 0, ""},
-		{"Symbol.HasVersion", Field, 24, ""},
-		{"Symbol.Info", Field, 0, ""},
-		{"Symbol.Library", Field, 13, ""},
-		{"Symbol.Name", Field, 0, ""},
-		{"Symbol.Other", Field, 0, ""},
-		{"Symbol.Section", Field, 0, ""},
-		{"Symbol.Size", Field, 0, ""},
-		{"Symbol.Value", Field, 0, ""},
-		{"Symbol.Version", Field, 13, ""},
-		{"Symbol.VersionIndex", Field, 24, ""},
-		{"Type", Type, 0, ""},
-		{"VER_FLG_BASE", Const, 24, ""},
-		{"VER_FLG_INFO", Const, 24, ""},
-		{"VER_FLG_WEAK", Const, 24, ""},
-		{"Version", Type, 0, ""},
-		{"VersionIndex", Type, 24, ""},
+		{"(*File).Close", Method, 0},
+		{"(*File).DWARF", Method, 0},
+		{"(*File).DynString", Method, 1},
+		{"(*File).DynValue", Method, 21},
+		{"(*File).DynamicSymbols", Method, 4},
+		{"(*File).DynamicVersionNeeds", Method, 24},
+		{"(*File).DynamicVersions", Method, 24},
+		{"(*File).ImportedLibraries", Method, 0},
+		{"(*File).ImportedSymbols", Method, 0},
+		{"(*File).Section", Method, 0},
+		{"(*File).SectionByType", Method, 0},
+		{"(*File).Symbols", Method, 0},
+		{"(*FormatError).Error", Method, 0},
+		{"(*Prog).Open", Method, 0},
+		{"(*Section).Data", Method, 0},
+		{"(*Section).Open", Method, 0},
+		{"(Class).GoString", Method, 0},
+		{"(Class).String", Method, 0},
+		{"(CompressionType).GoString", Method, 6},
+		{"(CompressionType).String", Method, 6},
+		{"(Data).GoString", Method, 0},
+		{"(Data).String", Method, 0},
+		{"(DynFlag).GoString", Method, 0},
+		{"(DynFlag).String", Method, 0},
+		{"(DynFlag1).GoString", Method, 21},
+		{"(DynFlag1).String", Method, 21},
+		{"(DynTag).GoString", Method, 0},
+		{"(DynTag).String", Method, 0},
+		{"(Machine).GoString", Method, 0},
+		{"(Machine).String", Method, 0},
+		{"(NType).GoString", Method, 0},
+		{"(NType).String", Method, 0},
+		{"(OSABI).GoString", Method, 0},
+		{"(OSABI).String", Method, 0},
+		{"(Prog).ReadAt", Method, 0},
+		{"(ProgFlag).GoString", Method, 0},
+		{"(ProgFlag).String", Method, 0},
+		{"(ProgType).GoString", Method, 0},
+		{"(ProgType).String", Method, 0},
+		{"(R_386).GoString", Method, 0},
+		{"(R_386).String", Method, 0},
+		{"(R_390).GoString", Method, 7},
+		{"(R_390).String", Method, 7},
+		{"(R_AARCH64).GoString", Method, 4},
+		{"(R_AARCH64).String", Method, 4},
+		{"(R_ALPHA).GoString", Method, 0},
+		{"(R_ALPHA).String", Method, 0},
+		{"(R_ARM).GoString", Method, 0},
+		{"(R_ARM).String", Method, 0},
+		{"(R_LARCH).GoString", Method, 19},
+		{"(R_LARCH).String", Method, 19},
+		{"(R_MIPS).GoString", Method, 6},
+		{"(R_MIPS).String", Method, 6},
+		{"(R_PPC).GoString", Method, 0},
+		{"(R_PPC).String", Method, 0},
+		{"(R_PPC64).GoString", Method, 5},
+		{"(R_PPC64).String", Method, 5},
+		{"(R_RISCV).GoString", Method, 11},
+		{"(R_RISCV).String", Method, 11},
+		{"(R_SPARC).GoString", Method, 0},
+		{"(R_SPARC).String", Method, 0},
+		{"(R_X86_64).GoString", Method, 0},
+		{"(R_X86_64).String", Method, 0},
+		{"(Section).ReadAt", Method, 0},
+		{"(SectionFlag).GoString", Method, 0},
+		{"(SectionFlag).String", Method, 0},
+		{"(SectionIndex).GoString", Method, 0},
+		{"(SectionIndex).String", Method, 0},
+		{"(SectionType).GoString", Method, 0},
+		{"(SectionType).String", Method, 0},
+		{"(SymBind).GoString", Method, 0},
+		{"(SymBind).String", Method, 0},
+		{"(SymType).GoString", Method, 0},
+		{"(SymType).String", Method, 0},
+		{"(SymVis).GoString", Method, 0},
+		{"(SymVis).String", Method, 0},
+		{"(Type).GoString", Method, 0},
+		{"(Type).String", Method, 0},
+		{"(Version).GoString", Method, 0},
+		{"(Version).String", Method, 0},
+		{"(VersionIndex).Index", Method, 24},
+		{"(VersionIndex).IsHidden", Method, 24},
+		{"ARM_MAGIC_TRAMP_NUMBER", Const, 0},
+		{"COMPRESS_HIOS", Const, 6},
+		{"COMPRESS_HIPROC", Const, 6},
+		{"COMPRESS_LOOS", Const, 6},
+		{"COMPRESS_LOPROC", Const, 6},
+		{"COMPRESS_ZLIB", Const, 6},
+		{"COMPRESS_ZSTD", Const, 21},
+		{"Chdr32", Type, 6},
+		{"Chdr32.Addralign", Field, 6},
+		{"Chdr32.Size", Field, 6},
+		{"Chdr32.Type", Field, 6},
+		{"Chdr64", Type, 6},
+		{"Chdr64.Addralign", Field, 6},
+		{"Chdr64.Size", Field, 6},
+		{"Chdr64.Type", Field, 6},
+		{"Class", Type, 0},
+		{"CompressionType", Type, 6},
+		{"DF_1_CONFALT", Const, 21},
+		{"DF_1_DIRECT", Const, 21},
+		{"DF_1_DISPRELDNE", Const, 21},
+		{"DF_1_DISPRELPND", Const, 21},
+		{"DF_1_EDITED", Const, 21},
+		{"DF_1_ENDFILTEE", Const, 21},
+		{"DF_1_GLOBAL", Const, 21},
+		{"DF_1_GLOBAUDIT", Const, 21},
+		{"DF_1_GROUP", Const, 21},
+		{"DF_1_IGNMULDEF", Const, 21},
+		{"DF_1_INITFIRST", Const, 21},
+		{"DF_1_INTERPOSE", Const, 21},
+		{"DF_1_KMOD", Const, 21},
+		{"DF_1_LOADFLTR", Const, 21},
+		{"DF_1_NOCOMMON", Const, 21},
+		{"DF_1_NODEFLIB", Const, 21},
+		{"DF_1_NODELETE", Const, 21},
+		{"DF_1_NODIRECT", Const, 21},
+		{"DF_1_NODUMP", Const, 21},
+		{"DF_1_NOHDR", Const, 21},
+		{"DF_1_NOKSYMS", Const, 21},
+		{"DF_1_NOOPEN", Const, 21},
+		{"DF_1_NORELOC", Const, 21},
+		{"DF_1_NOW", Const, 21},
+		{"DF_1_ORIGIN", Const, 21},
+		{"DF_1_PIE", Const, 21},
+		{"DF_1_SINGLETON", Const, 21},
+		{"DF_1_STUB", Const, 21},
+		{"DF_1_SYMINTPOSE", Const, 21},
+		{"DF_1_TRANS", Const, 21},
+		{"DF_1_WEAKFILTER", Const, 21},
+		{"DF_BIND_NOW", Const, 0},
+		{"DF_ORIGIN", Const, 0},
+		{"DF_STATIC_TLS", Const, 0},
+		{"DF_SYMBOLIC", Const, 0},
+		{"DF_TEXTREL", Const, 0},
+		{"DT_ADDRRNGHI", Const, 16},
+		{"DT_ADDRRNGLO", Const, 16},
+		{"DT_AUDIT", Const, 16},
+		{"DT_AUXILIARY", Const, 16},
+		{"DT_BIND_NOW", Const, 0},
+		{"DT_CHECKSUM", Const, 16},
+		{"DT_CONFIG", Const, 16},
+		{"DT_DEBUG", Const, 0},
+		{"DT_DEPAUDIT", Const, 16},
+		{"DT_ENCODING", Const, 0},
+		{"DT_FEATURE", Const, 16},
+		{"DT_FILTER", Const, 16},
+		{"DT_FINI", Const, 0},
+		{"DT_FINI_ARRAY", Const, 0},
+		{"DT_FINI_ARRAYSZ", Const, 0},
+		{"DT_FLAGS", Const, 0},
+		{"DT_FLAGS_1", Const, 16},
+		{"DT_GNU_CONFLICT", Const, 16},
+		{"DT_GNU_CONFLICTSZ", Const, 16},
+		{"DT_GNU_HASH", Const, 16},
+		{"DT_GNU_LIBLIST", Const, 16},
+		{"DT_GNU_LIBLISTSZ", Const, 16},
+		{"DT_GNU_PRELINKED", Const, 16},
+		{"DT_HASH", Const, 0},
+		{"DT_HIOS", Const, 0},
+		{"DT_HIPROC", Const, 0},
+		{"DT_INIT", Const, 0},
+		{"DT_INIT_ARRAY", Const, 0},
+		{"DT_INIT_ARRAYSZ", Const, 0},
+		{"DT_JMPREL", Const, 0},
+		{"DT_LOOS", Const, 0},
+		{"DT_LOPROC", Const, 0},
+		{"DT_MIPS_AUX_DYNAMIC", Const, 16},
+		{"DT_MIPS_BASE_ADDRESS", Const, 16},
+		{"DT_MIPS_COMPACT_SIZE", Const, 16},
+		{"DT_MIPS_CONFLICT", Const, 16},
+		{"DT_MIPS_CONFLICTNO", Const, 16},
+		{"DT_MIPS_CXX_FLAGS", Const, 16},
+		{"DT_MIPS_DELTA_CLASS", Const, 16},
+		{"DT_MIPS_DELTA_CLASSSYM", Const, 16},
+		{"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16},
+		{"DT_MIPS_DELTA_CLASS_NO", Const, 16},
+		{"DT_MIPS_DELTA_INSTANCE", Const, 16},
+		{"DT_MIPS_DELTA_INSTANCE_NO", Const, 16},
+		{"DT_MIPS_DELTA_RELOC", Const, 16},
+		{"DT_MIPS_DELTA_RELOC_NO", Const, 16},
+		{"DT_MIPS_DELTA_SYM", Const, 16},
+		{"DT_MIPS_DELTA_SYM_NO", Const, 16},
+		{"DT_MIPS_DYNSTR_ALIGN", Const, 16},
+		{"DT_MIPS_FLAGS", Const, 16},
+		{"DT_MIPS_GOTSYM", Const, 16},
+		{"DT_MIPS_GP_VALUE", Const, 16},
+		{"DT_MIPS_HIDDEN_GOTIDX", Const, 16},
+		{"DT_MIPS_HIPAGENO", Const, 16},
+		{"DT_MIPS_ICHECKSUM", Const, 16},
+		{"DT_MIPS_INTERFACE", Const, 16},
+		{"DT_MIPS_INTERFACE_SIZE", Const, 16},
+		{"DT_MIPS_IVERSION", Const, 16},
+		{"DT_MIPS_LIBLIST", Const, 16},
+		{"DT_MIPS_LIBLISTNO", Const, 16},
+		{"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16},
+		{"DT_MIPS_LOCAL_GOTIDX", Const, 16},
+		{"DT_MIPS_LOCAL_GOTNO", Const, 16},
+		{"DT_MIPS_MSYM", Const, 16},
+		{"DT_MIPS_OPTIONS", Const, 16},
+		{"DT_MIPS_PERF_SUFFIX", Const, 16},
+		{"DT_MIPS_PIXIE_INIT", Const, 16},
+		{"DT_MIPS_PLTGOT", Const, 16},
+		{"DT_MIPS_PROTECTED_GOTIDX", Const, 16},
+		{"DT_MIPS_RLD_MAP", Const, 16},
+		{"DT_MIPS_RLD_MAP_REL", Const, 16},
+		{"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16},
+		{"DT_MIPS_RLD_VERSION", Const, 16},
+		{"DT_MIPS_RWPLT", Const, 16},
+		{"DT_MIPS_SYMBOL_LIB", Const, 16},
+		{"DT_MIPS_SYMTABNO", Const, 16},
+		{"DT_MIPS_TIME_STAMP", Const, 16},
+		{"DT_MIPS_UNREFEXTNO", Const, 16},
+		{"DT_MOVEENT", Const, 16},
+		{"DT_MOVESZ", Const, 16},
+		{"DT_MOVETAB", Const, 16},
+		{"DT_NEEDED", Const, 0},
+		{"DT_NULL", Const, 0},
+		{"DT_PLTGOT", Const, 0},
+		{"DT_PLTPAD", Const, 16},
+		{"DT_PLTPADSZ", Const, 16},
+		{"DT_PLTREL", Const, 0},
+		{"DT_PLTRELSZ", Const, 0},
+		{"DT_POSFLAG_1", Const, 16},
+		{"DT_PPC64_GLINK", Const, 16},
+		{"DT_PPC64_OPD", Const, 16},
+		{"DT_PPC64_OPDSZ", Const, 16},
+		{"DT_PPC64_OPT", Const, 16},
+		{"DT_PPC_GOT", Const, 16},
+		{"DT_PPC_OPT", Const, 16},
+		{"DT_PREINIT_ARRAY", Const, 0},
+		{"DT_PREINIT_ARRAYSZ", Const, 0},
+		{"DT_REL", Const, 0},
+		{"DT_RELA", Const, 0},
+		{"DT_RELACOUNT", Const, 16},
+		{"DT_RELAENT", Const, 0},
+		{"DT_RELASZ", Const, 0},
+		{"DT_RELCOUNT", Const, 16},
+		{"DT_RELENT", Const, 0},
+		{"DT_RELSZ", Const, 0},
+		{"DT_RPATH", Const, 0},
+		{"DT_RUNPATH", Const, 0},
+		{"DT_SONAME", Const, 0},
+		{"DT_SPARC_REGISTER", Const, 16},
+		{"DT_STRSZ", Const, 0},
+		{"DT_STRTAB", Const, 0},
+		{"DT_SYMBOLIC", Const, 0},
+		{"DT_SYMENT", Const, 0},
+		{"DT_SYMINENT", Const, 16},
+		{"DT_SYMINFO", Const, 16},
+		{"DT_SYMINSZ", Const, 16},
+		{"DT_SYMTAB", Const, 0},
+		{"DT_SYMTAB_SHNDX", Const, 16},
+		{"DT_TEXTREL", Const, 0},
+		{"DT_TLSDESC_GOT", Const, 16},
+		{"DT_TLSDESC_PLT", Const, 16},
+		{"DT_USED", Const, 16},
+		{"DT_VALRNGHI", Const, 16},
+		{"DT_VALRNGLO", Const, 16},
+		{"DT_VERDEF", Const, 16},
+		{"DT_VERDEFNUM", Const, 16},
+		{"DT_VERNEED", Const, 0},
+		{"DT_VERNEEDNUM", Const, 0},
+		{"DT_VERSYM", Const, 0},
+		{"Data", Type, 0},
+		{"Dyn32", Type, 0},
+		{"Dyn32.Tag", Field, 0},
+		{"Dyn32.Val", Field, 0},
+		{"Dyn64", Type, 0},
+		{"Dyn64.Tag", Field, 0},
+		{"Dyn64.Val", Field, 0},
+		{"DynFlag", Type, 0},
+		{"DynFlag1", Type, 21},
+		{"DynTag", Type, 0},
+		{"DynamicVersion", Type, 24},
+		{"DynamicVersion.Deps", Field, 24},
+		{"DynamicVersion.Flags", Field, 24},
+		{"DynamicVersion.Index", Field, 24},
+		{"DynamicVersion.Name", Field, 24},
+		{"DynamicVersionDep", Type, 24},
+		{"DynamicVersionDep.Dep", Field, 24},
+		{"DynamicVersionDep.Flags", Field, 24},
+		{"DynamicVersionDep.Index", Field, 24},
+		{"DynamicVersionFlag", Type, 24},
+		{"DynamicVersionNeed", Type, 24},
+		{"DynamicVersionNeed.Name", Field, 24},
+		{"DynamicVersionNeed.Needs", Field, 24},
+		{"EI_ABIVERSION", Const, 0},
+		{"EI_CLASS", Const, 0},
+		{"EI_DATA", Const, 0},
+		{"EI_NIDENT", Const, 0},
+		{"EI_OSABI", Const, 0},
+		{"EI_PAD", Const, 0},
+		{"EI_VERSION", Const, 0},
+		{"ELFCLASS32", Const, 0},
+		{"ELFCLASS64", Const, 0},
+		{"ELFCLASSNONE", Const, 0},
+		{"ELFDATA2LSB", Const, 0},
+		{"ELFDATA2MSB", Const, 0},
+		{"ELFDATANONE", Const, 0},
+		{"ELFMAG", Const, 0},
+		{"ELFOSABI_86OPEN", Const, 0},
+		{"ELFOSABI_AIX", Const, 0},
+		{"ELFOSABI_ARM", Const, 0},
+		{"ELFOSABI_AROS", Const, 11},
+		{"ELFOSABI_CLOUDABI", Const, 11},
+		{"ELFOSABI_FENIXOS", Const, 11},
+		{"ELFOSABI_FREEBSD", Const, 0},
+		{"ELFOSABI_HPUX", Const, 0},
+		{"ELFOSABI_HURD", Const, 0},
+		{"ELFOSABI_IRIX", Const, 0},
+		{"ELFOSABI_LINUX", Const, 0},
+		{"ELFOSABI_MODESTO", Const, 0},
+		{"ELFOSABI_NETBSD", Const, 0},
+		{"ELFOSABI_NONE", Const, 0},
+		{"ELFOSABI_NSK", Const, 0},
+		{"ELFOSABI_OPENBSD", Const, 0},
+		{"ELFOSABI_OPENVMS", Const, 0},
+		{"ELFOSABI_SOLARIS", Const, 0},
+		{"ELFOSABI_STANDALONE", Const, 0},
+		{"ELFOSABI_TRU64", Const, 0},
+		{"EM_386", Const, 0},
+		{"EM_486", Const, 0},
+		{"EM_56800EX", Const, 11},
+		{"EM_68HC05", Const, 11},
+		{"EM_68HC08", Const, 11},
+		{"EM_68HC11", Const, 11},
+		{"EM_68HC12", Const, 0},
+		{"EM_68HC16", Const, 11},
+		{"EM_68K", Const, 0},
+		{"EM_78KOR", Const, 11},
+		{"EM_8051", Const, 11},
+		{"EM_860", Const, 0},
+		{"EM_88K", Const, 0},
+		{"EM_960", Const, 0},
+		{"EM_AARCH64", Const, 4},
+		{"EM_ALPHA", Const, 0},
+		{"EM_ALPHA_STD", Const, 0},
+		{"EM_ALTERA_NIOS2", Const, 11},
+		{"EM_AMDGPU", Const, 11},
+		{"EM_ARC", Const, 0},
+		{"EM_ARCA", Const, 11},
+		{"EM_ARC_COMPACT", Const, 11},
+		{"EM_ARC_COMPACT2", Const, 11},
+		{"EM_ARM", Const, 0},
+		{"EM_AVR", Const, 11},
+		{"EM_AVR32", Const, 11},
+		{"EM_BA1", Const, 11},
+		{"EM_BA2", Const, 11},
+		{"EM_BLACKFIN", Const, 11},
+		{"EM_BPF", Const, 11},
+		{"EM_C166", Const, 11},
+		{"EM_CDP", Const, 11},
+		{"EM_CE", Const, 11},
+		{"EM_CLOUDSHIELD", Const, 11},
+		{"EM_COGE", Const, 11},
+		{"EM_COLDFIRE", Const, 0},
+		{"EM_COOL", Const, 11},
+		{"EM_COREA_1ST", Const, 11},
+		{"EM_COREA_2ND", Const, 11},
+		{"EM_CR", Const, 11},
+		{"EM_CR16", Const, 11},
+		{"EM_CRAYNV2", Const, 11},
+		{"EM_CRIS", Const, 11},
+		{"EM_CRX", Const, 11},
+		{"EM_CSR_KALIMBA", Const, 11},
+		{"EM_CUDA", Const, 11},
+		{"EM_CYPRESS_M8C", Const, 11},
+		{"EM_D10V", Const, 11},
+		{"EM_D30V", Const, 11},
+		{"EM_DSP24", Const, 11},
+		{"EM_DSPIC30F", Const, 11},
+		{"EM_DXP", Const, 11},
+		{"EM_ECOG1", Const, 11},
+		{"EM_ECOG16", Const, 11},
+		{"EM_ECOG1X", Const, 11},
+		{"EM_ECOG2", Const, 11},
+		{"EM_ETPU", Const, 11},
+		{"EM_EXCESS", Const, 11},
+		{"EM_F2MC16", Const, 11},
+		{"EM_FIREPATH", Const, 11},
+		{"EM_FR20", Const, 0},
+		{"EM_FR30", Const, 11},
+		{"EM_FT32", Const, 11},
+		{"EM_FX66", Const, 11},
+		{"EM_H8S", Const, 0},
+		{"EM_H8_300", Const, 0},
+		{"EM_H8_300H", Const, 0},
+		{"EM_H8_500", Const, 0},
+		{"EM_HUANY", Const, 11},
+		{"EM_IA_64", Const, 0},
+		{"EM_INTEL205", Const, 11},
+		{"EM_INTEL206", Const, 11},
+		{"EM_INTEL207", Const, 11},
+		{"EM_INTEL208", Const, 11},
+		{"EM_INTEL209", Const, 11},
+		{"EM_IP2K", Const, 11},
+		{"EM_JAVELIN", Const, 11},
+		{"EM_K10M", Const, 11},
+		{"EM_KM32", Const, 11},
+		{"EM_KMX16", Const, 11},
+		{"EM_KMX32", Const, 11},
+		{"EM_KMX8", Const, 11},
+		{"EM_KVARC", Const, 11},
+		{"EM_L10M", Const, 11},
+		{"EM_LANAI", Const, 11},
+		{"EM_LATTICEMICO32", Const, 11},
+		{"EM_LOONGARCH", Const, 19},
+		{"EM_M16C", Const, 11},
+		{"EM_M32", Const, 0},
+		{"EM_M32C", Const, 11},
+		{"EM_M32R", Const, 11},
+		{"EM_MANIK", Const, 11},
+		{"EM_MAX", Const, 11},
+		{"EM_MAXQ30", Const, 11},
+		{"EM_MCHP_PIC", Const, 11},
+		{"EM_MCST_ELBRUS", Const, 11},
+		{"EM_ME16", Const, 0},
+		{"EM_METAG", Const, 11},
+		{"EM_MICROBLAZE", Const, 11},
+		{"EM_MIPS", Const, 0},
+		{"EM_MIPS_RS3_LE", Const, 0},
+		{"EM_MIPS_RS4_BE", Const, 0},
+		{"EM_MIPS_X", Const, 0},
+		{"EM_MMA", Const, 0},
+		{"EM_MMDSP_PLUS", Const, 11},
+		{"EM_MMIX", Const, 11},
+		{"EM_MN10200", Const, 11},
+		{"EM_MN10300", Const, 11},
+		{"EM_MOXIE", Const, 11},
+		{"EM_MSP430", Const, 11},
+		{"EM_NCPU", Const, 0},
+		{"EM_NDR1", Const, 0},
+		{"EM_NDS32", Const, 11},
+		{"EM_NONE", Const, 0},
+		{"EM_NORC", Const, 11},
+		{"EM_NS32K", Const, 11},
+		{"EM_OPEN8", Const, 11},
+		{"EM_OPENRISC", Const, 11},
+		{"EM_PARISC", Const, 0},
+		{"EM_PCP", Const, 0},
+		{"EM_PDP10", Const, 11},
+		{"EM_PDP11", Const, 11},
+		{"EM_PDSP", Const, 11},
+		{"EM_PJ", Const, 11},
+		{"EM_PPC", Const, 0},
+		{"EM_PPC64", Const, 0},
+		{"EM_PRISM", Const, 11},
+		{"EM_QDSP6", Const, 11},
+		{"EM_R32C", Const, 11},
+		{"EM_RCE", Const, 0},
+		{"EM_RH32", Const, 0},
+		{"EM_RISCV", Const, 11},
+		{"EM_RL78", Const, 11},
+		{"EM_RS08", Const, 11},
+		{"EM_RX", Const, 11},
+		{"EM_S370", Const, 0},
+		{"EM_S390", Const, 0},
+		{"EM_SCORE7", Const, 11},
+		{"EM_SEP", Const, 11},
+		{"EM_SE_C17", Const, 11},
+		{"EM_SE_C33", Const, 11},
+		{"EM_SH", Const, 0},
+		{"EM_SHARC", Const, 11},
+		{"EM_SLE9X", Const, 11},
+		{"EM_SNP1K", Const, 11},
+		{"EM_SPARC", Const, 0},
+		{"EM_SPARC32PLUS", Const, 0},
+		{"EM_SPARCV9", Const, 0},
+		{"EM_ST100", Const, 0},
+		{"EM_ST19", Const, 11},
+		{"EM_ST200", Const, 11},
+		{"EM_ST7", Const, 11},
+		{"EM_ST9PLUS", Const, 11},
+		{"EM_STARCORE", Const, 0},
+		{"EM_STM8", Const, 11},
+		{"EM_STXP7X", Const, 11},
+		{"EM_SVX", Const, 11},
+		{"EM_TILE64", Const, 11},
+		{"EM_TILEGX", Const, 11},
+		{"EM_TILEPRO", Const, 11},
+		{"EM_TINYJ", Const, 0},
+		{"EM_TI_ARP32", Const, 11},
+		{"EM_TI_C2000", Const, 11},
+		{"EM_TI_C5500", Const, 11},
+		{"EM_TI_C6000", Const, 11},
+		{"EM_TI_PRU", Const, 11},
+		{"EM_TMM_GPP", Const, 11},
+		{"EM_TPC", Const, 11},
+		{"EM_TRICORE", Const, 0},
+		{"EM_TRIMEDIA", Const, 11},
+		{"EM_TSK3000", Const, 11},
+		{"EM_UNICORE", Const, 11},
+		{"EM_V800", Const, 0},
+		{"EM_V850", Const, 11},
+		{"EM_VAX", Const, 11},
+		{"EM_VIDEOCORE", Const, 11},
+		{"EM_VIDEOCORE3", Const, 11},
+		{"EM_VIDEOCORE5", Const, 11},
+		{"EM_VISIUM", Const, 11},
+		{"EM_VPP500", Const, 0},
+		{"EM_X86_64", Const, 0},
+		{"EM_XCORE", Const, 11},
+		{"EM_XGATE", Const, 11},
+		{"EM_XIMO16", Const, 11},
+		{"EM_XTENSA", Const, 11},
+		{"EM_Z80", Const, 11},
+		{"EM_ZSP", Const, 11},
+		{"ET_CORE", Const, 0},
+		{"ET_DYN", Const, 0},
+		{"ET_EXEC", Const, 0},
+		{"ET_HIOS", Const, 0},
+		{"ET_HIPROC", Const, 0},
+		{"ET_LOOS", Const, 0},
+		{"ET_LOPROC", Const, 0},
+		{"ET_NONE", Const, 0},
+		{"ET_REL", Const, 0},
+		{"EV_CURRENT", Const, 0},
+		{"EV_NONE", Const, 0},
+		{"ErrNoSymbols", Var, 4},
+		{"File", Type, 0},
+		{"File.FileHeader", Field, 0},
+		{"File.Progs", Field, 0},
+		{"File.Sections", Field, 0},
+		{"FileHeader", Type, 0},
+		{"FileHeader.ABIVersion", Field, 0},
+		{"FileHeader.ByteOrder", Field, 0},
+		{"FileHeader.Class", Field, 0},
+		{"FileHeader.Data", Field, 0},
+		{"FileHeader.Entry", Field, 1},
+		{"FileHeader.Machine", Field, 0},
+		{"FileHeader.OSABI", Field, 0},
+		{"FileHeader.Type", Field, 0},
+		{"FileHeader.Version", Field, 0},
+		{"FormatError", Type, 0},
+		{"Header32", Type, 0},
+		{"Header32.Ehsize", Field, 0},
+		{"Header32.Entry", Field, 0},
+		{"Header32.Flags", Field, 0},
+		{"Header32.Ident", Field, 0},
+		{"Header32.Machine", Field, 0},
+		{"Header32.Phentsize", Field, 0},
+		{"Header32.Phnum", Field, 0},
+		{"Header32.Phoff", Field, 0},
+		{"Header32.Shentsize", Field, 0},
+		{"Header32.Shnum", Field, 0},
+		{"Header32.Shoff", Field, 0},
+		{"Header32.Shstrndx", Field, 0},
+		{"Header32.Type", Field, 0},
+		{"Header32.Version", Field, 0},
+		{"Header64", Type, 0},
+		{"Header64.Ehsize", Field, 0},
+		{"Header64.Entry", Field, 0},
+		{"Header64.Flags", Field, 0},
+		{"Header64.Ident", Field, 0},
+		{"Header64.Machine", Field, 0},
+		{"Header64.Phentsize", Field, 0},
+		{"Header64.Phnum", Field, 0},
+		{"Header64.Phoff", Field, 0},
+		{"Header64.Shentsize", Field, 0},
+		{"Header64.Shnum", Field, 0},
+		{"Header64.Shoff", Field, 0},
+		{"Header64.Shstrndx", Field, 0},
+		{"Header64.Type", Field, 0},
+		{"Header64.Version", Field, 0},
+		{"ImportedSymbol", Type, 0},
+		{"ImportedSymbol.Library", Field, 0},
+		{"ImportedSymbol.Name", Field, 0},
+		{"ImportedSymbol.Version", Field, 0},
+		{"Machine", Type, 0},
+		{"NT_FPREGSET", Const, 0},
+		{"NT_PRPSINFO", Const, 0},
+		{"NT_PRSTATUS", Const, 0},
+		{"NType", Type, 0},
+		{"NewFile", Func, 0},
+		{"OSABI", Type, 0},
+		{"Open", Func, 0},
+		{"PF_MASKOS", Const, 0},
+		{"PF_MASKPROC", Const, 0},
+		{"PF_R", Const, 0},
+		{"PF_W", Const, 0},
+		{"PF_X", Const, 0},
+		{"PT_AARCH64_ARCHEXT", Const, 16},
+		{"PT_AARCH64_UNWIND", Const, 16},
+		{"PT_ARM_ARCHEXT", Const, 16},
+		{"PT_ARM_EXIDX", Const, 16},
+		{"PT_DYNAMIC", Const, 0},
+		{"PT_GNU_EH_FRAME", Const, 16},
+		{"PT_GNU_MBIND_HI", Const, 16},
+		{"PT_GNU_MBIND_LO", Const, 16},
+		{"PT_GNU_PROPERTY", Const, 16},
+		{"PT_GNU_RELRO", Const, 16},
+		{"PT_GNU_STACK", Const, 16},
+		{"PT_HIOS", Const, 0},
+		{"PT_HIPROC", Const, 0},
+		{"PT_INTERP", Const, 0},
+		{"PT_LOAD", Const, 0},
+		{"PT_LOOS", Const, 0},
+		{"PT_LOPROC", Const, 0},
+		{"PT_MIPS_ABIFLAGS", Const, 16},
+		{"PT_MIPS_OPTIONS", Const, 16},
+		{"PT_MIPS_REGINFO", Const, 16},
+		{"PT_MIPS_RTPROC", Const, 16},
+		{"PT_NOTE", Const, 0},
+		{"PT_NULL", Const, 0},
+		{"PT_OPENBSD_BOOTDATA", Const, 16},
+		{"PT_OPENBSD_NOBTCFI", Const, 23},
+		{"PT_OPENBSD_RANDOMIZE", Const, 16},
+		{"PT_OPENBSD_WXNEEDED", Const, 16},
+		{"PT_PAX_FLAGS", Const, 16},
+		{"PT_PHDR", Const, 0},
+		{"PT_S390_PGSTE", Const, 16},
+		{"PT_SHLIB", Const, 0},
+		{"PT_SUNWSTACK", Const, 16},
+		{"PT_SUNW_EH_FRAME", Const, 16},
+		{"PT_TLS", Const, 0},
+		{"Prog", Type, 0},
+		{"Prog.ProgHeader", Field, 0},
+		{"Prog.ReaderAt", Field, 0},
+		{"Prog32", Type, 0},
+		{"Prog32.Align", Field, 0},
+		{"Prog32.Filesz", Field, 0},
+		{"Prog32.Flags", Field, 0},
+		{"Prog32.Memsz", Field, 0},
+		{"Prog32.Off", Field, 0},
+		{"Prog32.Paddr", Field, 0},
+		{"Prog32.Type", Field, 0},
+		{"Prog32.Vaddr", Field, 0},
+		{"Prog64", Type, 0},
+		{"Prog64.Align", Field, 0},
+		{"Prog64.Filesz", Field, 0},
+		{"Prog64.Flags", Field, 0},
+		{"Prog64.Memsz", Field, 0},
+		{"Prog64.Off", Field, 0},
+		{"Prog64.Paddr", Field, 0},
+		{"Prog64.Type", Field, 0},
+		{"Prog64.Vaddr", Field, 0},
+		{"ProgFlag", Type, 0},
+		{"ProgHeader", Type, 0},
+		{"ProgHeader.Align", Field, 0},
+		{"ProgHeader.Filesz", Field, 0},
+		{"ProgHeader.Flags", Field, 0},
+		{"ProgHeader.Memsz", Field, 0},
+		{"ProgHeader.Off", Field, 0},
+		{"ProgHeader.Paddr", Field, 0},
+		{"ProgHeader.Type", Field, 0},
+		{"ProgHeader.Vaddr", Field, 0},
+		{"ProgType", Type, 0},
+		{"R_386", Type, 0},
+		{"R_386_16", Const, 10},
+		{"R_386_32", Const, 0},
+		{"R_386_32PLT", Const, 10},
+		{"R_386_8", Const, 10},
+		{"R_386_COPY", Const, 0},
+		{"R_386_GLOB_DAT", Const, 0},
+		{"R_386_GOT32", Const, 0},
+		{"R_386_GOT32X", Const, 10},
+		{"R_386_GOTOFF", Const, 0},
+		{"R_386_GOTPC", Const, 0},
+		{"R_386_IRELATIVE", Const, 10},
+		{"R_386_JMP_SLOT", Const, 0},
+		{"R_386_NONE", Const, 0},
+		{"R_386_PC16", Const, 10},
+		{"R_386_PC32", Const, 0},
+		{"R_386_PC8", Const, 10},
+		{"R_386_PLT32", Const, 0},
+		{"R_386_RELATIVE", Const, 0},
+		{"R_386_SIZE32", Const, 10},
+		{"R_386_TLS_DESC", Const, 10},
+		{"R_386_TLS_DESC_CALL", Const, 10},
+		{"R_386_TLS_DTPMOD32", Const, 0},
+		{"R_386_TLS_DTPOFF32", Const, 0},
+		{"R_386_TLS_GD", Const, 0},
+		{"R_386_TLS_GD_32", Const, 0},
+		{"R_386_TLS_GD_CALL", Const, 0},
+		{"R_386_TLS_GD_POP", Const, 0},
+		{"R_386_TLS_GD_PUSH", Const, 0},
+		{"R_386_TLS_GOTDESC", Const, 10},
+		{"R_386_TLS_GOTIE", Const, 0},
+		{"R_386_TLS_IE", Const, 0},
+		{"R_386_TLS_IE_32", Const, 0},
+		{"R_386_TLS_LDM", Const, 0},
+		{"R_386_TLS_LDM_32", Const, 0},
+		{"R_386_TLS_LDM_CALL", Const, 0},
+		{"R_386_TLS_LDM_POP", Const, 0},
+		{"R_386_TLS_LDM_PUSH", Const, 0},
+		{"R_386_TLS_LDO_32", Const, 0},
+		{"R_386_TLS_LE", Const, 0},
+		{"R_386_TLS_LE_32", Const, 0},
+		{"R_386_TLS_TPOFF", Const, 0},
+		{"R_386_TLS_TPOFF32", Const, 0},
+		{"R_390", Type, 7},
+		{"R_390_12", Const, 7},
+		{"R_390_16", Const, 7},
+		{"R_390_20", Const, 7},
+		{"R_390_32", Const, 7},
+		{"R_390_64", Const, 7},
+		{"R_390_8", Const, 7},
+		{"R_390_COPY", Const, 7},
+		{"R_390_GLOB_DAT", Const, 7},
+		{"R_390_GOT12", Const, 7},
+		{"R_390_GOT16", Const, 7},
+		{"R_390_GOT20", Const, 7},
+		{"R_390_GOT32", Const, 7},
+		{"R_390_GOT64", Const, 7},
+		{"R_390_GOTENT", Const, 7},
+		{"R_390_GOTOFF", Const, 7},
+		{"R_390_GOTOFF16", Const, 7},
+		{"R_390_GOTOFF64", Const, 7},
+		{"R_390_GOTPC", Const, 7},
+		{"R_390_GOTPCDBL", Const, 7},
+		{"R_390_GOTPLT12", Const, 7},
+		{"R_390_GOTPLT16", Const, 7},
+		{"R_390_GOTPLT20", Const, 7},
+		{"R_390_GOTPLT32", Const, 7},
+		{"R_390_GOTPLT64", Const, 7},
+		{"R_390_GOTPLTENT", Const, 7},
+		{"R_390_GOTPLTOFF16", Const, 7},
+		{"R_390_GOTPLTOFF32", Const, 7},
+		{"R_390_GOTPLTOFF64", Const, 7},
+		{"R_390_JMP_SLOT", Const, 7},
+		{"R_390_NONE", Const, 7},
+		{"R_390_PC16", Const, 7},
+		{"R_390_PC16DBL", Const, 7},
+		{"R_390_PC32", Const, 7},
+		{"R_390_PC32DBL", Const, 7},
+		{"R_390_PC64", Const, 7},
+		{"R_390_PLT16DBL", Const, 7},
+		{"R_390_PLT32", Const, 7},
+		{"R_390_PLT32DBL", Const, 7},
+		{"R_390_PLT64", Const, 7},
+		{"R_390_RELATIVE", Const, 7},
+		{"R_390_TLS_DTPMOD", Const, 7},
+		{"R_390_TLS_DTPOFF", Const, 7},
+		{"R_390_TLS_GD32", Const, 7},
+		{"R_390_TLS_GD64", Const, 7},
+		{"R_390_TLS_GDCALL", Const, 7},
+		{"R_390_TLS_GOTIE12", Const, 7},
+		{"R_390_TLS_GOTIE20", Const, 7},
+		{"R_390_TLS_GOTIE32", Const, 7},
+		{"R_390_TLS_GOTIE64", Const, 7},
+		{"R_390_TLS_IE32", Const, 7},
+		{"R_390_TLS_IE64", Const, 7},
+		{"R_390_TLS_IEENT", Const, 7},
+		{"R_390_TLS_LDCALL", Const, 7},
+		{"R_390_TLS_LDM32", Const, 7},
+		{"R_390_TLS_LDM64", Const, 7},
+		{"R_390_TLS_LDO32", Const, 7},
+		{"R_390_TLS_LDO64", Const, 7},
+		{"R_390_TLS_LE32", Const, 7},
+		{"R_390_TLS_LE64", Const, 7},
+		{"R_390_TLS_LOAD", Const, 7},
+		{"R_390_TLS_TPOFF", Const, 7},
+		{"R_AARCH64", Type, 4},
+		{"R_AARCH64_ABS16", Const, 4},
+		{"R_AARCH64_ABS32", Const, 4},
+		{"R_AARCH64_ABS64", Const, 4},
+		{"R_AARCH64_ADD_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_ADR_GOT_PAGE", Const, 4},
+		{"R_AARCH64_ADR_PREL_LO21", Const, 4},
+		{"R_AARCH64_ADR_PREL_PG_HI21", Const, 4},
+		{"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4},
+		{"R_AARCH64_CALL26", Const, 4},
+		{"R_AARCH64_CONDBR19", Const, 4},
+		{"R_AARCH64_COPY", Const, 4},
+		{"R_AARCH64_GLOB_DAT", Const, 4},
+		{"R_AARCH64_GOT_LD_PREL19", Const, 4},
+		{"R_AARCH64_IRELATIVE", Const, 4},
+		{"R_AARCH64_JUMP26", Const, 4},
+		{"R_AARCH64_JUMP_SLOT", Const, 4},
+		{"R_AARCH64_LD64_GOTOFF_LO15", Const, 10},
+		{"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10},
+		{"R_AARCH64_LD64_GOT_LO12_NC", Const, 4},
+		{"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_LD_PREL_LO19", Const, 4},
+		{"R_AARCH64_MOVW_SABS_G0", Const, 4},
+		{"R_AARCH64_MOVW_SABS_G1", Const, 4},
+		{"R_AARCH64_MOVW_SABS_G2", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G0", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G0_NC", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G1", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G1_NC", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G2", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G2_NC", Const, 4},
+		{"R_AARCH64_MOVW_UABS_G3", Const, 4},
+		{"R_AARCH64_NONE", Const, 4},
+		{"R_AARCH64_NULL", Const, 4},
+		{"R_AARCH64_P32_ABS16", Const, 4},
+		{"R_AARCH64_P32_ABS32", Const, 4},
+		{"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4},
+		{"R_AARCH64_P32_ADR_PREL_LO21", Const, 4},
+		{"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4},
+		{"R_AARCH64_P32_CALL26", Const, 4},
+		{"R_AARCH64_P32_CONDBR19", Const, 4},
+		{"R_AARCH64_P32_COPY", Const, 4},
+		{"R_AARCH64_P32_GLOB_DAT", Const, 4},
+		{"R_AARCH64_P32_GOT_LD_PREL19", Const, 4},
+		{"R_AARCH64_P32_IRELATIVE", Const, 4},
+		{"R_AARCH64_P32_JUMP26", Const, 4},
+		{"R_AARCH64_P32_JUMP_SLOT", Const, 4},
+		{"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_LD_PREL_LO19", Const, 4},
+		{"R_AARCH64_P32_MOVW_SABS_G0", Const, 4},
+		{"R_AARCH64_P32_MOVW_UABS_G0", Const, 4},
+		{"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4},
+		{"R_AARCH64_P32_MOVW_UABS_G1", Const, 4},
+		{"R_AARCH64_P32_PREL16", Const, 4},
+		{"R_AARCH64_P32_PREL32", Const, 4},
+		{"R_AARCH64_P32_RELATIVE", Const, 4},
+		{"R_AARCH64_P32_TLSDESC", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_CALL", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4},
+		{"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4},
+		{"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
+		{"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4},
+		{"R_AARCH64_P32_TLS_DTPMOD", Const, 4},
+		{"R_AARCH64_P32_TLS_DTPREL", Const, 4},
+		{"R_AARCH64_P32_TLS_TPREL", Const, 4},
+		{"R_AARCH64_P32_TSTBR14", Const, 4},
+		{"R_AARCH64_PREL16", Const, 4},
+		{"R_AARCH64_PREL32", Const, 4},
+		{"R_AARCH64_PREL64", Const, 4},
+		{"R_AARCH64_RELATIVE", Const, 4},
+		{"R_AARCH64_TLSDESC", Const, 4},
+		{"R_AARCH64_TLSDESC_ADD", Const, 4},
+		{"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4},
+		{"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4},
+		{"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4},
+		{"R_AARCH64_TLSDESC_CALL", Const, 4},
+		{"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4},
+		{"R_AARCH64_TLSDESC_LDR", Const, 4},
+		{"R_AARCH64_TLSDESC_LD_PREL19", Const, 4},
+		{"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4},
+		{"R_AARCH64_TLSDESC_OFF_G1", Const, 4},
+		{"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4},
+		{"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4},
+		{"R_AARCH64_TLSGD_ADR_PREL21", Const, 10},
+		{"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10},
+		{"R_AARCH64_TLSGD_MOVW_G1", Const, 10},
+		{"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4},
+		{"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4},
+		{"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4},
+		{"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10},
+		{"R_AARCH64_TLSLD_ADR_PREL21", Const, 10},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10},
+		{"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4},
+		{"R_AARCH64_TLS_DTPMOD64", Const, 4},
+		{"R_AARCH64_TLS_DTPREL64", Const, 4},
+		{"R_AARCH64_TLS_TPREL64", Const, 4},
+		{"R_AARCH64_TSTBR14", Const, 4},
+		{"R_ALPHA", Type, 0},
+		{"R_ALPHA_BRADDR", Const, 0},
+		{"R_ALPHA_COPY", Const, 0},
+		{"R_ALPHA_GLOB_DAT", Const, 0},
+		{"R_ALPHA_GPDISP", Const, 0},
+		{"R_ALPHA_GPREL32", Const, 0},
+		{"R_ALPHA_GPRELHIGH", Const, 0},
+		{"R_ALPHA_GPRELLOW", Const, 0},
+		{"R_ALPHA_GPVALUE", Const, 0},
+		{"R_ALPHA_HINT", Const, 0},
+		{"R_ALPHA_IMMED_BR_HI32", Const, 0},
+		{"R_ALPHA_IMMED_GP_16", Const, 0},
+		{"R_ALPHA_IMMED_GP_HI32", Const, 0},
+		{"R_ALPHA_IMMED_LO32", Const, 0},
+		{"R_ALPHA_IMMED_SCN_HI32", Const, 0},
+		{"R_ALPHA_JMP_SLOT", Const, 0},
+		{"R_ALPHA_LITERAL", Const, 0},
+		{"R_ALPHA_LITUSE", Const, 0},
+		{"R_ALPHA_NONE", Const, 0},
+		{"R_ALPHA_OP_PRSHIFT", Const, 0},
+		{"R_ALPHA_OP_PSUB", Const, 0},
+		{"R_ALPHA_OP_PUSH", Const, 0},
+		{"R_ALPHA_OP_STORE", Const, 0},
+		{"R_ALPHA_REFLONG", Const, 0},
+		{"R_ALPHA_REFQUAD", Const, 0},
+		{"R_ALPHA_RELATIVE", Const, 0},
+		{"R_ALPHA_SREL16", Const, 0},
+		{"R_ALPHA_SREL32", Const, 0},
+		{"R_ALPHA_SREL64", Const, 0},
+		{"R_ARM", Type, 0},
+		{"R_ARM_ABS12", Const, 0},
+		{"R_ARM_ABS16", Const, 0},
+		{"R_ARM_ABS32", Const, 0},
+		{"R_ARM_ABS32_NOI", Const, 10},
+		{"R_ARM_ABS8", Const, 0},
+		{"R_ARM_ALU_PCREL_15_8", Const, 10},
+		{"R_ARM_ALU_PCREL_23_15", Const, 10},
+		{"R_ARM_ALU_PCREL_7_0", Const, 10},
+		{"R_ARM_ALU_PC_G0", Const, 10},
+		{"R_ARM_ALU_PC_G0_NC", Const, 10},
+		{"R_ARM_ALU_PC_G1", Const, 10},
+		{"R_ARM_ALU_PC_G1_NC", Const, 10},
+		{"R_ARM_ALU_PC_G2", Const, 10},
+		{"R_ARM_ALU_SBREL_19_12_NC", Const, 10},
+		{"R_ARM_ALU_SBREL_27_20_CK", Const, 10},
+		{"R_ARM_ALU_SB_G0", Const, 10},
+		{"R_ARM_ALU_SB_G0_NC", Const, 10},
+		{"R_ARM_ALU_SB_G1", Const, 10},
+		{"R_ARM_ALU_SB_G1_NC", Const, 10},
+		{"R_ARM_ALU_SB_G2", Const, 10},
+		{"R_ARM_AMP_VCALL9", Const, 0},
+		{"R_ARM_BASE_ABS", Const, 10},
+		{"R_ARM_CALL", Const, 10},
+		{"R_ARM_COPY", Const, 0},
+		{"R_ARM_GLOB_DAT", Const, 0},
+		{"R_ARM_GNU_VTENTRY", Const, 0},
+		{"R_ARM_GNU_VTINHERIT", Const, 0},
+		{"R_ARM_GOT32", Const, 0},
+		{"R_ARM_GOTOFF", Const, 0},
+		{"R_ARM_GOTOFF12", Const, 10},
+		{"R_ARM_GOTPC", Const, 0},
+		{"R_ARM_GOTRELAX", Const, 10},
+		{"R_ARM_GOT_ABS", Const, 10},
+		{"R_ARM_GOT_BREL12", Const, 10},
+		{"R_ARM_GOT_PREL", Const, 10},
+		{"R_ARM_IRELATIVE", Const, 10},
+		{"R_ARM_JUMP24", Const, 10},
+		{"R_ARM_JUMP_SLOT", Const, 0},
+		{"R_ARM_LDC_PC_G0", Const, 10},
+		{"R_ARM_LDC_PC_G1", Const, 10},
+		{"R_ARM_LDC_PC_G2", Const, 10},
+		{"R_ARM_LDC_SB_G0", Const, 10},
+		{"R_ARM_LDC_SB_G1", Const, 10},
+		{"R_ARM_LDC_SB_G2", Const, 10},
+		{"R_ARM_LDRS_PC_G0", Const, 10},
+		{"R_ARM_LDRS_PC_G1", Const, 10},
+		{"R_ARM_LDRS_PC_G2", Const, 10},
+		{"R_ARM_LDRS_SB_G0", Const, 10},
+		{"R_ARM_LDRS_SB_G1", Const, 10},
+		{"R_ARM_LDRS_SB_G2", Const, 10},
+		{"R_ARM_LDR_PC_G1", Const, 10},
+		{"R_ARM_LDR_PC_G2", Const, 10},
+		{"R_ARM_LDR_SBREL_11_10_NC", Const, 10},
+		{"R_ARM_LDR_SB_G0", Const, 10},
+		{"R_ARM_LDR_SB_G1", Const, 10},
+		{"R_ARM_LDR_SB_G2", Const, 10},
+		{"R_ARM_ME_TOO", Const, 10},
+		{"R_ARM_MOVT_ABS", Const, 10},
+		{"R_ARM_MOVT_BREL", Const, 10},
+		{"R_ARM_MOVT_PREL", Const, 10},
+		{"R_ARM_MOVW_ABS_NC", Const, 10},
+		{"R_ARM_MOVW_BREL", Const, 10},
+		{"R_ARM_MOVW_BREL_NC", Const, 10},
+		{"R_ARM_MOVW_PREL_NC", Const, 10},
+		{"R_ARM_NONE", Const, 0},
+		{"R_ARM_PC13", Const, 0},
+		{"R_ARM_PC24", Const, 0},
+		{"R_ARM_PLT32", Const, 0},
+		{"R_ARM_PLT32_ABS", Const, 10},
+		{"R_ARM_PREL31", Const, 10},
+		{"R_ARM_PRIVATE_0", Const, 10},
+		{"R_ARM_PRIVATE_1", Const, 10},
+		{"R_ARM_PRIVATE_10", Const, 10},
+		{"R_ARM_PRIVATE_11", Const, 10},
+		{"R_ARM_PRIVATE_12", Const, 10},
+		{"R_ARM_PRIVATE_13", Const, 10},
+		{"R_ARM_PRIVATE_14", Const, 10},
+		{"R_ARM_PRIVATE_15", Const, 10},
+		{"R_ARM_PRIVATE_2", Const, 10},
+		{"R_ARM_PRIVATE_3", Const, 10},
+		{"R_ARM_PRIVATE_4", Const, 10},
+		{"R_ARM_PRIVATE_5", Const, 10},
+		{"R_ARM_PRIVATE_6", Const, 10},
+		{"R_ARM_PRIVATE_7", Const, 10},
+		{"R_ARM_PRIVATE_8", Const, 10},
+		{"R_ARM_PRIVATE_9", Const, 10},
+		{"R_ARM_RABS32", Const, 0},
+		{"R_ARM_RBASE", Const, 0},
+		{"R_ARM_REL32", Const, 0},
+		{"R_ARM_REL32_NOI", Const, 10},
+		{"R_ARM_RELATIVE", Const, 0},
+		{"R_ARM_RPC24", Const, 0},
+		{"R_ARM_RREL32", Const, 0},
+		{"R_ARM_RSBREL32", Const, 0},
+		{"R_ARM_RXPC25", Const, 10},
+		{"R_ARM_SBREL31", Const, 10},
+		{"R_ARM_SBREL32", Const, 0},
+		{"R_ARM_SWI24", Const, 0},
+		{"R_ARM_TARGET1", Const, 10},
+		{"R_ARM_TARGET2", Const, 10},
+		{"R_ARM_THM_ABS5", Const, 0},
+		{"R_ARM_THM_ALU_ABS_G0_NC", Const, 10},
+		{"R_ARM_THM_ALU_ABS_G1_NC", Const, 10},
+		{"R_ARM_THM_ALU_ABS_G2_NC", Const, 10},
+		{"R_ARM_THM_ALU_ABS_G3", Const, 10},
+		{"R_ARM_THM_ALU_PREL_11_0", Const, 10},
+		{"R_ARM_THM_GOT_BREL12", Const, 10},
+		{"R_ARM_THM_JUMP11", Const, 10},
+		{"R_ARM_THM_JUMP19", Const, 10},
+		{"R_ARM_THM_JUMP24", Const, 10},
+		{"R_ARM_THM_JUMP6", Const, 10},
+		{"R_ARM_THM_JUMP8", Const, 10},
+		{"R_ARM_THM_MOVT_ABS", Const, 10},
+		{"R_ARM_THM_MOVT_BREL", Const, 10},
+		{"R_ARM_THM_MOVT_PREL", Const, 10},
+		{"R_ARM_THM_MOVW_ABS_NC", Const, 10},
+		{"R_ARM_THM_MOVW_BREL", Const, 10},
+		{"R_ARM_THM_MOVW_BREL_NC", Const, 10},
+		{"R_ARM_THM_MOVW_PREL_NC", Const, 10},
+		{"R_ARM_THM_PC12", Const, 10},
+		{"R_ARM_THM_PC22", Const, 0},
+		{"R_ARM_THM_PC8", Const, 0},
+		{"R_ARM_THM_RPC22", Const, 0},
+		{"R_ARM_THM_SWI8", Const, 0},
+		{"R_ARM_THM_TLS_CALL", Const, 10},
+		{"R_ARM_THM_TLS_DESCSEQ16", Const, 10},
+		{"R_ARM_THM_TLS_DESCSEQ32", Const, 10},
+		{"R_ARM_THM_XPC22", Const, 0},
+		{"R_ARM_TLS_CALL", Const, 10},
+		{"R_ARM_TLS_DESCSEQ", Const, 10},
+		{"R_ARM_TLS_DTPMOD32", Const, 10},
+		{"R_ARM_TLS_DTPOFF32", Const, 10},
+		{"R_ARM_TLS_GD32", Const, 10},
+		{"R_ARM_TLS_GOTDESC", Const, 10},
+		{"R_ARM_TLS_IE12GP", Const, 10},
+		{"R_ARM_TLS_IE32", Const, 10},
+		{"R_ARM_TLS_LDM32", Const, 10},
+		{"R_ARM_TLS_LDO12", Const, 10},
+		{"R_ARM_TLS_LDO32", Const, 10},
+		{"R_ARM_TLS_LE12", Const, 10},
+		{"R_ARM_TLS_LE32", Const, 10},
+		{"R_ARM_TLS_TPOFF32", Const, 10},
+		{"R_ARM_V4BX", Const, 10},
+		{"R_ARM_XPC25", Const, 0},
+		{"R_INFO", Func, 0},
+		{"R_INFO32", Func, 0},
+		{"R_LARCH", Type, 19},
+		{"R_LARCH_32", Const, 19},
+		{"R_LARCH_32_PCREL", Const, 20},
+		{"R_LARCH_64", Const, 19},
+		{"R_LARCH_64_PCREL", Const, 22},
+		{"R_LARCH_ABS64_HI12", Const, 20},
+		{"R_LARCH_ABS64_LO20", Const, 20},
+		{"R_LARCH_ABS_HI20", Const, 20},
+		{"R_LARCH_ABS_LO12", Const, 20},
+		{"R_LARCH_ADD16", Const, 19},
+		{"R_LARCH_ADD24", Const, 19},
+		{"R_LARCH_ADD32", Const, 19},
+		{"R_LARCH_ADD6", Const, 22},
+		{"R_LARCH_ADD64", Const, 19},
+		{"R_LARCH_ADD8", Const, 19},
+		{"R_LARCH_ADD_ULEB128", Const, 22},
+		{"R_LARCH_ALIGN", Const, 22},
+		{"R_LARCH_B16", Const, 20},
+		{"R_LARCH_B21", Const, 20},
+		{"R_LARCH_B26", Const, 20},
+		{"R_LARCH_CFA", Const, 22},
+		{"R_LARCH_COPY", Const, 19},
+		{"R_LARCH_DELETE", Const, 22},
+		{"R_LARCH_GNU_VTENTRY", Const, 20},
+		{"R_LARCH_GNU_VTINHERIT", Const, 20},
+		{"R_LARCH_GOT64_HI12", Const, 20},
+		{"R_LARCH_GOT64_LO20", Const, 20},
+		{"R_LARCH_GOT64_PC_HI12", Const, 20},
+		{"R_LARCH_GOT64_PC_LO20", Const, 20},
+		{"R_LARCH_GOT_HI20", Const, 20},
+		{"R_LARCH_GOT_LO12", Const, 20},
+		{"R_LARCH_GOT_PC_HI20", Const, 20},
+		{"R_LARCH_GOT_PC_LO12", Const, 20},
+		{"R_LARCH_IRELATIVE", Const, 19},
+		{"R_LARCH_JUMP_SLOT", Const, 19},
+		{"R_LARCH_MARK_LA", Const, 19},
+		{"R_LARCH_MARK_PCREL", Const, 19},
+		{"R_LARCH_NONE", Const, 19},
+		{"R_LARCH_PCALA64_HI12", Const, 20},
+		{"R_LARCH_PCALA64_LO20", Const, 20},
+		{"R_LARCH_PCALA_HI20", Const, 20},
+		{"R_LARCH_PCALA_LO12", Const, 20},
+		{"R_LARCH_PCREL20_S2", Const, 22},
+		{"R_LARCH_RELATIVE", Const, 19},
+		{"R_LARCH_RELAX", Const, 20},
+		{"R_LARCH_SOP_ADD", Const, 19},
+		{"R_LARCH_SOP_AND", Const, 19},
+		{"R_LARCH_SOP_ASSERT", Const, 19},
+		{"R_LARCH_SOP_IF_ELSE", Const, 19},
+		{"R_LARCH_SOP_NOT", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_10_12", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_10_16", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_10_5", Const, 19},
+		{"R_LARCH_SOP_POP_32_S_5_20", Const, 19},
+		{"R_LARCH_SOP_POP_32_U", Const, 19},
+		{"R_LARCH_SOP_POP_32_U_10_12", Const, 19},
+		{"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19},
+		{"R_LARCH_SOP_PUSH_DUP", Const, 19},
+		{"R_LARCH_SOP_PUSH_GPREL", Const, 19},
+		{"R_LARCH_SOP_PUSH_PCREL", Const, 19},
+		{"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19},
+		{"R_LARCH_SOP_PUSH_TLS_GD", Const, 19},
+		{"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19},
+		{"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19},
+		{"R_LARCH_SOP_SL", Const, 19},
+		{"R_LARCH_SOP_SR", Const, 19},
+		{"R_LARCH_SOP_SUB", Const, 19},
+		{"R_LARCH_SUB16", Const, 19},
+		{"R_LARCH_SUB24", Const, 19},
+		{"R_LARCH_SUB32", Const, 19},
+		{"R_LARCH_SUB6", Const, 22},
+		{"R_LARCH_SUB64", Const, 19},
+		{"R_LARCH_SUB8", Const, 19},
+		{"R_LARCH_SUB_ULEB128", Const, 22},
+		{"R_LARCH_TLS_DTPMOD32", Const, 19},
+		{"R_LARCH_TLS_DTPMOD64", Const, 19},
+		{"R_LARCH_TLS_DTPREL32", Const, 19},
+		{"R_LARCH_TLS_DTPREL64", Const, 19},
+		{"R_LARCH_TLS_GD_HI20", Const, 20},
+		{"R_LARCH_TLS_GD_PC_HI20", Const, 20},
+		{"R_LARCH_TLS_IE64_HI12", Const, 20},
+		{"R_LARCH_TLS_IE64_LO20", Const, 20},
+		{"R_LARCH_TLS_IE64_PC_HI12", Const, 20},
+		{"R_LARCH_TLS_IE64_PC_LO20", Const, 20},
+		{"R_LARCH_TLS_IE_HI20", Const, 20},
+		{"R_LARCH_TLS_IE_LO12", Const, 20},
+		{"R_LARCH_TLS_IE_PC_HI20", Const, 20},
+		{"R_LARCH_TLS_IE_PC_LO12", Const, 20},
+		{"R_LARCH_TLS_LD_HI20", Const, 20},
+		{"R_LARCH_TLS_LD_PC_HI20", Const, 20},
+		{"R_LARCH_TLS_LE64_HI12", Const, 20},
+		{"R_LARCH_TLS_LE64_LO20", Const, 20},
+		{"R_LARCH_TLS_LE_HI20", Const, 20},
+		{"R_LARCH_TLS_LE_LO12", Const, 20},
+		{"R_LARCH_TLS_TPREL32", Const, 19},
+		{"R_LARCH_TLS_TPREL64", Const, 19},
+		{"R_MIPS", Type, 6},
+		{"R_MIPS_16", Const, 6},
+		{"R_MIPS_26", Const, 6},
+		{"R_MIPS_32", Const, 6},
+		{"R_MIPS_64", Const, 6},
+		{"R_MIPS_ADD_IMMEDIATE", Const, 6},
+		{"R_MIPS_CALL16", Const, 6},
+		{"R_MIPS_CALL_HI16", Const, 6},
+		{"R_MIPS_CALL_LO16", Const, 6},
+		{"R_MIPS_DELETE", Const, 6},
+		{"R_MIPS_GOT16", Const, 6},
+		{"R_MIPS_GOT_DISP", Const, 6},
+		{"R_MIPS_GOT_HI16", Const, 6},
+		{"R_MIPS_GOT_LO16", Const, 6},
+		{"R_MIPS_GOT_OFST", Const, 6},
+		{"R_MIPS_GOT_PAGE", Const, 6},
+		{"R_MIPS_GPREL16", Const, 6},
+		{"R_MIPS_GPREL32", Const, 6},
+		{"R_MIPS_HI16", Const, 6},
+		{"R_MIPS_HIGHER", Const, 6},
+		{"R_MIPS_HIGHEST", Const, 6},
+		{"R_MIPS_INSERT_A", Const, 6},
+		{"R_MIPS_INSERT_B", Const, 6},
+		{"R_MIPS_JALR", Const, 6},
+		{"R_MIPS_LITERAL", Const, 6},
+		{"R_MIPS_LO16", Const, 6},
+		{"R_MIPS_NONE", Const, 6},
+		{"R_MIPS_PC16", Const, 6},
+		{"R_MIPS_PC32", Const, 22},
+		{"R_MIPS_PJUMP", Const, 6},
+		{"R_MIPS_REL16", Const, 6},
+		{"R_MIPS_REL32", Const, 6},
+		{"R_MIPS_RELGOT", Const, 6},
+		{"R_MIPS_SCN_DISP", Const, 6},
+		{"R_MIPS_SHIFT5", Const, 6},
+		{"R_MIPS_SHIFT6", Const, 6},
+		{"R_MIPS_SUB", Const, 6},
+		{"R_MIPS_TLS_DTPMOD32", Const, 6},
+		{"R_MIPS_TLS_DTPMOD64", Const, 6},
+		{"R_MIPS_TLS_DTPREL32", Const, 6},
+		{"R_MIPS_TLS_DTPREL64", Const, 6},
+		{"R_MIPS_TLS_DTPREL_HI16", Const, 6},
+		{"R_MIPS_TLS_DTPREL_LO16", Const, 6},
+		{"R_MIPS_TLS_GD", Const, 6},
+		{"R_MIPS_TLS_GOTTPREL", Const, 6},
+		{"R_MIPS_TLS_LDM", Const, 6},
+		{"R_MIPS_TLS_TPREL32", Const, 6},
+		{"R_MIPS_TLS_TPREL64", Const, 6},
+		{"R_MIPS_TLS_TPREL_HI16", Const, 6},
+		{"R_MIPS_TLS_TPREL_LO16", Const, 6},
+		{"R_PPC", Type, 0},
+		{"R_PPC64", Type, 5},
+		{"R_PPC64_ADDR14", Const, 5},
+		{"R_PPC64_ADDR14_BRNTAKEN", Const, 5},
+		{"R_PPC64_ADDR14_BRTAKEN", Const, 5},
+		{"R_PPC64_ADDR16", Const, 5},
+		{"R_PPC64_ADDR16_DS", Const, 5},
+		{"R_PPC64_ADDR16_HA", Const, 5},
+		{"R_PPC64_ADDR16_HI", Const, 5},
+		{"R_PPC64_ADDR16_HIGH", Const, 10},
+		{"R_PPC64_ADDR16_HIGHA", Const, 10},
+		{"R_PPC64_ADDR16_HIGHER", Const, 5},
+		{"R_PPC64_ADDR16_HIGHER34", Const, 20},
+		{"R_PPC64_ADDR16_HIGHERA", Const, 5},
+		{"R_PPC64_ADDR16_HIGHERA34", Const, 20},
+		{"R_PPC64_ADDR16_HIGHEST", Const, 5},
+		{"R_PPC64_ADDR16_HIGHEST34", Const, 20},
+		{"R_PPC64_ADDR16_HIGHESTA", Const, 5},
+		{"R_PPC64_ADDR16_HIGHESTA34", Const, 20},
+		{"R_PPC64_ADDR16_LO", Const, 5},
+		{"R_PPC64_ADDR16_LO_DS", Const, 5},
+		{"R_PPC64_ADDR24", Const, 5},
+		{"R_PPC64_ADDR32", Const, 5},
+		{"R_PPC64_ADDR64", Const, 5},
+		{"R_PPC64_ADDR64_LOCAL", Const, 10},
+		{"R_PPC64_COPY", Const, 20},
+		{"R_PPC64_D28", Const, 20},
+		{"R_PPC64_D34", Const, 20},
+		{"R_PPC64_D34_HA30", Const, 20},
+		{"R_PPC64_D34_HI30", Const, 20},
+		{"R_PPC64_D34_LO", Const, 20},
+		{"R_PPC64_DTPMOD64", Const, 5},
+		{"R_PPC64_DTPREL16", Const, 5},
+		{"R_PPC64_DTPREL16_DS", Const, 5},
+		{"R_PPC64_DTPREL16_HA", Const, 5},
+		{"R_PPC64_DTPREL16_HI", Const, 5},
+		{"R_PPC64_DTPREL16_HIGH", Const, 10},
+		{"R_PPC64_DTPREL16_HIGHA", Const, 10},
+		{"R_PPC64_DTPREL16_HIGHER", Const, 5},
+		{"R_PPC64_DTPREL16_HIGHERA", Const, 5},
+		{"R_PPC64_DTPREL16_HIGHEST", Const, 5},
+		{"R_PPC64_DTPREL16_HIGHESTA", Const, 5},
+		{"R_PPC64_DTPREL16_LO", Const, 5},
+		{"R_PPC64_DTPREL16_LO_DS", Const, 5},
+		{"R_PPC64_DTPREL34", Const, 20},
+		{"R_PPC64_DTPREL64", Const, 5},
+		{"R_PPC64_ENTRY", Const, 10},
+		{"R_PPC64_GLOB_DAT", Const, 20},
+		{"R_PPC64_GNU_VTENTRY", Const, 20},
+		{"R_PPC64_GNU_VTINHERIT", Const, 20},
+		{"R_PPC64_GOT16", Const, 5},
+		{"R_PPC64_GOT16_DS", Const, 5},
+		{"R_PPC64_GOT16_HA", Const, 5},
+		{"R_PPC64_GOT16_HI", Const, 5},
+		{"R_PPC64_GOT16_LO", Const, 5},
+		{"R_PPC64_GOT16_LO_DS", Const, 5},
+		{"R_PPC64_GOT_DTPREL16_DS", Const, 5},
+		{"R_PPC64_GOT_DTPREL16_HA", Const, 5},
+		{"R_PPC64_GOT_DTPREL16_HI", Const, 5},
+		{"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5},
+		{"R_PPC64_GOT_DTPREL_PCREL34", Const, 20},
+		{"R_PPC64_GOT_PCREL34", Const, 20},
+		{"R_PPC64_GOT_TLSGD16", Const, 5},
+		{"R_PPC64_GOT_TLSGD16_HA", Const, 5},
+		{"R_PPC64_GOT_TLSGD16_HI", Const, 5},
+		{"R_PPC64_GOT_TLSGD16_LO", Const, 5},
+		{"R_PPC64_GOT_TLSGD_PCREL34", Const, 20},
+		{"R_PPC64_GOT_TLSLD16", Const, 5},
+		{"R_PPC64_GOT_TLSLD16_HA", Const, 5},
+		{"R_PPC64_GOT_TLSLD16_HI", Const, 5},
+		{"R_PPC64_GOT_TLSLD16_LO", Const, 5},
+		{"R_PPC64_GOT_TLSLD_PCREL34", Const, 20},
+		{"R_PPC64_GOT_TPREL16_DS", Const, 5},
+		{"R_PPC64_GOT_TPREL16_HA", Const, 5},
+		{"R_PPC64_GOT_TPREL16_HI", Const, 5},
+		{"R_PPC64_GOT_TPREL16_LO_DS", Const, 5},
+		{"R_PPC64_GOT_TPREL_PCREL34", Const, 20},
+		{"R_PPC64_IRELATIVE", Const, 10},
+		{"R_PPC64_JMP_IREL", Const, 10},
+		{"R_PPC64_JMP_SLOT", Const, 5},
+		{"R_PPC64_NONE", Const, 5},
+		{"R_PPC64_PCREL28", Const, 20},
+		{"R_PPC64_PCREL34", Const, 20},
+		{"R_PPC64_PCREL_OPT", Const, 20},
+		{"R_PPC64_PLT16_HA", Const, 20},
+		{"R_PPC64_PLT16_HI", Const, 20},
+		{"R_PPC64_PLT16_LO", Const, 20},
+		{"R_PPC64_PLT16_LO_DS", Const, 10},
+		{"R_PPC64_PLT32", Const, 20},
+		{"R_PPC64_PLT64", Const, 20},
+		{"R_PPC64_PLTCALL", Const, 20},
+		{"R_PPC64_PLTCALL_NOTOC", Const, 20},
+		{"R_PPC64_PLTGOT16", Const, 10},
+		{"R_PPC64_PLTGOT16_DS", Const, 10},
+		{"R_PPC64_PLTGOT16_HA", Const, 10},
+		{"R_PPC64_PLTGOT16_HI", Const, 10},
+		{"R_PPC64_PLTGOT16_LO", Const, 10},
+		{"R_PPC64_PLTGOT_LO_DS", Const, 10},
+		{"R_PPC64_PLTREL32", Const, 20},
+		{"R_PPC64_PLTREL64", Const, 20},
+		{"R_PPC64_PLTSEQ", Const, 20},
+		{"R_PPC64_PLTSEQ_NOTOC", Const, 20},
+		{"R_PPC64_PLT_PCREL34", Const, 20},
+		{"R_PPC64_PLT_PCREL34_NOTOC", Const, 20},
+		{"R_PPC64_REL14", Const, 5},
+		{"R_PPC64_REL14_BRNTAKEN", Const, 5},
+		{"R_PPC64_REL14_BRTAKEN", Const, 5},
+		{"R_PPC64_REL16", Const, 5},
+		{"R_PPC64_REL16DX_HA", Const, 10},
+		{"R_PPC64_REL16_HA", Const, 5},
+		{"R_PPC64_REL16_HI", Const, 5},
+		{"R_PPC64_REL16_HIGH", Const, 20},
+		{"R_PPC64_REL16_HIGHA", Const, 20},
+		{"R_PPC64_REL16_HIGHER", Const, 20},
+		{"R_PPC64_REL16_HIGHER34", Const, 20},
+		{"R_PPC64_REL16_HIGHERA", Const, 20},
+		{"R_PPC64_REL16_HIGHERA34", Const, 20},
+		{"R_PPC64_REL16_HIGHEST", Const, 20},
+		{"R_PPC64_REL16_HIGHEST34", Const, 20},
+		{"R_PPC64_REL16_HIGHESTA", Const, 20},
+		{"R_PPC64_REL16_HIGHESTA34", Const, 20},
+		{"R_PPC64_REL16_LO", Const, 5},
+		{"R_PPC64_REL24", Const, 5},
+		{"R_PPC64_REL24_NOTOC", Const, 10},
+		{"R_PPC64_REL24_P9NOTOC", Const, 21},
+		{"R_PPC64_REL30", Const, 20},
+		{"R_PPC64_REL32", Const, 5},
+		{"R_PPC64_REL64", Const, 5},
+		{"R_PPC64_RELATIVE", Const, 18},
+		{"R_PPC64_SECTOFF", Const, 20},
+		{"R_PPC64_SECTOFF_DS", Const, 10},
+		{"R_PPC64_SECTOFF_HA", Const, 20},
+		{"R_PPC64_SECTOFF_HI", Const, 20},
+		{"R_PPC64_SECTOFF_LO", Const, 20},
+		{"R_PPC64_SECTOFF_LO_DS", Const, 10},
+		{"R_PPC64_TLS", Const, 5},
+		{"R_PPC64_TLSGD", Const, 5},
+		{"R_PPC64_TLSLD", Const, 5},
+		{"R_PPC64_TOC", Const, 5},
+		{"R_PPC64_TOC16", Const, 5},
+		{"R_PPC64_TOC16_DS", Const, 5},
+		{"R_PPC64_TOC16_HA", Const, 5},
+		{"R_PPC64_TOC16_HI", Const, 5},
+		{"R_PPC64_TOC16_LO", Const, 5},
+		{"R_PPC64_TOC16_LO_DS", Const, 5},
+		{"R_PPC64_TOCSAVE", Const, 10},
+		{"R_PPC64_TPREL16", Const, 5},
+		{"R_PPC64_TPREL16_DS", Const, 5},
+		{"R_PPC64_TPREL16_HA", Const, 5},
+		{"R_PPC64_TPREL16_HI", Const, 5},
+		{"R_PPC64_TPREL16_HIGH", Const, 10},
+		{"R_PPC64_TPREL16_HIGHA", Const, 10},
+		{"R_PPC64_TPREL16_HIGHER", Const, 5},
+		{"R_PPC64_TPREL16_HIGHERA", Const, 5},
+		{"R_PPC64_TPREL16_HIGHEST", Const, 5},
+		{"R_PPC64_TPREL16_HIGHESTA", Const, 5},
+		{"R_PPC64_TPREL16_LO", Const, 5},
+		{"R_PPC64_TPREL16_LO_DS", Const, 5},
+		{"R_PPC64_TPREL34", Const, 20},
+		{"R_PPC64_TPREL64", Const, 5},
+		{"R_PPC64_UADDR16", Const, 20},
+		{"R_PPC64_UADDR32", Const, 20},
+		{"R_PPC64_UADDR64", Const, 20},
+		{"R_PPC_ADDR14", Const, 0},
+		{"R_PPC_ADDR14_BRNTAKEN", Const, 0},
+		{"R_PPC_ADDR14_BRTAKEN", Const, 0},
+		{"R_PPC_ADDR16", Const, 0},
+		{"R_PPC_ADDR16_HA", Const, 0},
+		{"R_PPC_ADDR16_HI", Const, 0},
+		{"R_PPC_ADDR16_LO", Const, 0},
+		{"R_PPC_ADDR24", Const, 0},
+		{"R_PPC_ADDR32", Const, 0},
+		{"R_PPC_COPY", Const, 0},
+		{"R_PPC_DTPMOD32", Const, 0},
+		{"R_PPC_DTPREL16", Const, 0},
+		{"R_PPC_DTPREL16_HA", Const, 0},
+		{"R_PPC_DTPREL16_HI", Const, 0},
+		{"R_PPC_DTPREL16_LO", Const, 0},
+		{"R_PPC_DTPREL32", Const, 0},
+		{"R_PPC_EMB_BIT_FLD", Const, 0},
+		{"R_PPC_EMB_MRKREF", Const, 0},
+		{"R_PPC_EMB_NADDR16", Const, 0},
+		{"R_PPC_EMB_NADDR16_HA", Const, 0},
+		{"R_PPC_EMB_NADDR16_HI", Const, 0},
+		{"R_PPC_EMB_NADDR16_LO", Const, 0},
+		{"R_PPC_EMB_NADDR32", Const, 0},
+		{"R_PPC_EMB_RELSDA", Const, 0},
+		{"R_PPC_EMB_RELSEC16", Const, 0},
+		{"R_PPC_EMB_RELST_HA", Const, 0},
+		{"R_PPC_EMB_RELST_HI", Const, 0},
+		{"R_PPC_EMB_RELST_LO", Const, 0},
+		{"R_PPC_EMB_SDA21", Const, 0},
+		{"R_PPC_EMB_SDA2I16", Const, 0},
+		{"R_PPC_EMB_SDA2REL", Const, 0},
+		{"R_PPC_EMB_SDAI16", Const, 0},
+		{"R_PPC_GLOB_DAT", Const, 0},
+		{"R_PPC_GOT16", Const, 0},
+		{"R_PPC_GOT16_HA", Const, 0},
+		{"R_PPC_GOT16_HI", Const, 0},
+		{"R_PPC_GOT16_LO", Const, 0},
+		{"R_PPC_GOT_TLSGD16", Const, 0},
+		{"R_PPC_GOT_TLSGD16_HA", Const, 0},
+		{"R_PPC_GOT_TLSGD16_HI", Const, 0},
+		{"R_PPC_GOT_TLSGD16_LO", Const, 0},
+		{"R_PPC_GOT_TLSLD16", Const, 0},
+		{"R_PPC_GOT_TLSLD16_HA", Const, 0},
+		{"R_PPC_GOT_TLSLD16_HI", Const, 0},
+		{"R_PPC_GOT_TLSLD16_LO", Const, 0},
+		{"R_PPC_GOT_TPREL16", Const, 0},
+		{"R_PPC_GOT_TPREL16_HA", Const, 0},
+		{"R_PPC_GOT_TPREL16_HI", Const, 0},
+		{"R_PPC_GOT_TPREL16_LO", Const, 0},
+		{"R_PPC_JMP_SLOT", Const, 0},
+		{"R_PPC_LOCAL24PC", Const, 0},
+		{"R_PPC_NONE", Const, 0},
+		{"R_PPC_PLT16_HA", Const, 0},
+		{"R_PPC_PLT16_HI", Const, 0},
+		{"R_PPC_PLT16_LO", Const, 0},
+		{"R_PPC_PLT32", Const, 0},
+		{"R_PPC_PLTREL24", Const, 0},
+		{"R_PPC_PLTREL32", Const, 0},
+		{"R_PPC_REL14", Const, 0},
+		{"R_PPC_REL14_BRNTAKEN", Const, 0},
+		{"R_PPC_REL14_BRTAKEN", Const, 0},
+		{"R_PPC_REL24", Const, 0},
+		{"R_PPC_REL32", Const, 0},
+		{"R_PPC_RELATIVE", Const, 0},
+		{"R_PPC_SDAREL16", Const, 0},
+		{"R_PPC_SECTOFF", Const, 0},
+		{"R_PPC_SECTOFF_HA", Const, 0},
+		{"R_PPC_SECTOFF_HI", Const, 0},
+		{"R_PPC_SECTOFF_LO", Const, 0},
+		{"R_PPC_TLS", Const, 0},
+		{"R_PPC_TPREL16", Const, 0},
+		{"R_PPC_TPREL16_HA", Const, 0},
+		{"R_PPC_TPREL16_HI", Const, 0},
+		{"R_PPC_TPREL16_LO", Const, 0},
+		{"R_PPC_TPREL32", Const, 0},
+		{"R_PPC_UADDR16", Const, 0},
+		{"R_PPC_UADDR32", Const, 0},
+		{"R_RISCV", Type, 11},
+		{"R_RISCV_32", Const, 11},
+		{"R_RISCV_32_PCREL", Const, 12},
+		{"R_RISCV_64", Const, 11},
+		{"R_RISCV_ADD16", Const, 11},
+		{"R_RISCV_ADD32", Const, 11},
+		{"R_RISCV_ADD64", Const, 11},
+		{"R_RISCV_ADD8", Const, 11},
+		{"R_RISCV_ALIGN", Const, 11},
+		{"R_RISCV_BRANCH", Const, 11},
+		{"R_RISCV_CALL", Const, 11},
+		{"R_RISCV_CALL_PLT", Const, 11},
+		{"R_RISCV_COPY", Const, 11},
+		{"R_RISCV_GNU_VTENTRY", Const, 11},
+		{"R_RISCV_GNU_VTINHERIT", Const, 11},
+		{"R_RISCV_GOT_HI20", Const, 11},
+		{"R_RISCV_GPREL_I", Const, 11},
+		{"R_RISCV_GPREL_S", Const, 11},
+		{"R_RISCV_HI20", Const, 11},
+		{"R_RISCV_JAL", Const, 11},
+		{"R_RISCV_JUMP_SLOT", Const, 11},
+		{"R_RISCV_LO12_I", Const, 11},
+		{"R_RISCV_LO12_S", Const, 11},
+		{"R_RISCV_NONE", Const, 11},
+		{"R_RISCV_PCREL_HI20", Const, 11},
+		{"R_RISCV_PCREL_LO12_I", Const, 11},
+		{"R_RISCV_PCREL_LO12_S", Const, 11},
+		{"R_RISCV_RELATIVE", Const, 11},
+		{"R_RISCV_RELAX", Const, 11},
+		{"R_RISCV_RVC_BRANCH", Const, 11},
+		{"R_RISCV_RVC_JUMP", Const, 11},
+		{"R_RISCV_RVC_LUI", Const, 11},
+		{"R_RISCV_SET16", Const, 11},
+		{"R_RISCV_SET32", Const, 11},
+		{"R_RISCV_SET6", Const, 11},
+		{"R_RISCV_SET8", Const, 11},
+		{"R_RISCV_SUB16", Const, 11},
+		{"R_RISCV_SUB32", Const, 11},
+		{"R_RISCV_SUB6", Const, 11},
+		{"R_RISCV_SUB64", Const, 11},
+		{"R_RISCV_SUB8", Const, 11},
+		{"R_RISCV_TLS_DTPMOD32", Const, 11},
+		{"R_RISCV_TLS_DTPMOD64", Const, 11},
+		{"R_RISCV_TLS_DTPREL32", Const, 11},
+		{"R_RISCV_TLS_DTPREL64", Const, 11},
+		{"R_RISCV_TLS_GD_HI20", Const, 11},
+		{"R_RISCV_TLS_GOT_HI20", Const, 11},
+		{"R_RISCV_TLS_TPREL32", Const, 11},
+		{"R_RISCV_TLS_TPREL64", Const, 11},
+		{"R_RISCV_TPREL_ADD", Const, 11},
+		{"R_RISCV_TPREL_HI20", Const, 11},
+		{"R_RISCV_TPREL_I", Const, 11},
+		{"R_RISCV_TPREL_LO12_I", Const, 11},
+		{"R_RISCV_TPREL_LO12_S", Const, 11},
+		{"R_RISCV_TPREL_S", Const, 11},
+		{"R_SPARC", Type, 0},
+		{"R_SPARC_10", Const, 0},
+		{"R_SPARC_11", Const, 0},
+		{"R_SPARC_13", Const, 0},
+		{"R_SPARC_16", Const, 0},
+		{"R_SPARC_22", Const, 0},
+		{"R_SPARC_32", Const, 0},
+		{"R_SPARC_5", Const, 0},
+		{"R_SPARC_6", Const, 0},
+		{"R_SPARC_64", Const, 0},
+		{"R_SPARC_7", Const, 0},
+		{"R_SPARC_8", Const, 0},
+		{"R_SPARC_COPY", Const, 0},
+		{"R_SPARC_DISP16", Const, 0},
+		{"R_SPARC_DISP32", Const, 0},
+		{"R_SPARC_DISP64", Const, 0},
+		{"R_SPARC_DISP8", Const, 0},
+		{"R_SPARC_GLOB_DAT", Const, 0},
+		{"R_SPARC_GLOB_JMP", Const, 0},
+		{"R_SPARC_GOT10", Const, 0},
+		{"R_SPARC_GOT13", Const, 0},
+		{"R_SPARC_GOT22", Const, 0},
+		{"R_SPARC_H44", Const, 0},
+		{"R_SPARC_HH22", Const, 0},
+		{"R_SPARC_HI22", Const, 0},
+		{"R_SPARC_HIPLT22", Const, 0},
+		{"R_SPARC_HIX22", Const, 0},
+		{"R_SPARC_HM10", Const, 0},
+		{"R_SPARC_JMP_SLOT", Const, 0},
+		{"R_SPARC_L44", Const, 0},
+		{"R_SPARC_LM22", Const, 0},
+		{"R_SPARC_LO10", Const, 0},
+		{"R_SPARC_LOPLT10", Const, 0},
+		{"R_SPARC_LOX10", Const, 0},
+		{"R_SPARC_M44", Const, 0},
+		{"R_SPARC_NONE", Const, 0},
+		{"R_SPARC_OLO10", Const, 0},
+		{"R_SPARC_PC10", Const, 0},
+		{"R_SPARC_PC22", Const, 0},
+		{"R_SPARC_PCPLT10", Const, 0},
+		{"R_SPARC_PCPLT22", Const, 0},
+		{"R_SPARC_PCPLT32", Const, 0},
+		{"R_SPARC_PC_HH22", Const, 0},
+		{"R_SPARC_PC_HM10", Const, 0},
+		{"R_SPARC_PC_LM22", Const, 0},
+		{"R_SPARC_PLT32", Const, 0},
+		{"R_SPARC_PLT64", Const, 0},
+		{"R_SPARC_REGISTER", Const, 0},
+		{"R_SPARC_RELATIVE", Const, 0},
+		{"R_SPARC_UA16", Const, 0},
+		{"R_SPARC_UA32", Const, 0},
+		{"R_SPARC_UA64", Const, 0},
+		{"R_SPARC_WDISP16", Const, 0},
+		{"R_SPARC_WDISP19", Const, 0},
+		{"R_SPARC_WDISP22", Const, 0},
+		{"R_SPARC_WDISP30", Const, 0},
+		{"R_SPARC_WPLT30", Const, 0},
+		{"R_SYM32", Func, 0},
+		{"R_SYM64", Func, 0},
+		{"R_TYPE32", Func, 0},
+		{"R_TYPE64", Func, 0},
+		{"R_X86_64", Type, 0},
+		{"R_X86_64_16", Const, 0},
+		{"R_X86_64_32", Const, 0},
+		{"R_X86_64_32S", Const, 0},
+		{"R_X86_64_64", Const, 0},
+		{"R_X86_64_8", Const, 0},
+		{"R_X86_64_COPY", Const, 0},
+		{"R_X86_64_DTPMOD64", Const, 0},
+		{"R_X86_64_DTPOFF32", Const, 0},
+		{"R_X86_64_DTPOFF64", Const, 0},
+		{"R_X86_64_GLOB_DAT", Const, 0},
+		{"R_X86_64_GOT32", Const, 0},
+		{"R_X86_64_GOT64", Const, 10},
+		{"R_X86_64_GOTOFF64", Const, 10},
+		{"R_X86_64_GOTPC32", Const, 10},
+		{"R_X86_64_GOTPC32_TLSDESC", Const, 10},
+		{"R_X86_64_GOTPC64", Const, 10},
+		{"R_X86_64_GOTPCREL", Const, 0},
+		{"R_X86_64_GOTPCREL64", Const, 10},
+		{"R_X86_64_GOTPCRELX", Const, 10},
+		{"R_X86_64_GOTPLT64", Const, 10},
+		{"R_X86_64_GOTTPOFF", Const, 0},
+		{"R_X86_64_IRELATIVE", Const, 10},
+		{"R_X86_64_JMP_SLOT", Const, 0},
+		{"R_X86_64_NONE", Const, 0},
+		{"R_X86_64_PC16", Const, 0},
+		{"R_X86_64_PC32", Const, 0},
+		{"R_X86_64_PC32_BND", Const, 10},
+		{"R_X86_64_PC64", Const, 10},
+		{"R_X86_64_PC8", Const, 0},
+		{"R_X86_64_PLT32", Const, 0},
+		{"R_X86_64_PLT32_BND", Const, 10},
+		{"R_X86_64_PLTOFF64", Const, 10},
+		{"R_X86_64_RELATIVE", Const, 0},
+		{"R_X86_64_RELATIVE64", Const, 10},
+		{"R_X86_64_REX_GOTPCRELX", Const, 10},
+		{"R_X86_64_SIZE32", Const, 10},
+		{"R_X86_64_SIZE64", Const, 10},
+		{"R_X86_64_TLSDESC", Const, 10},
+		{"R_X86_64_TLSDESC_CALL", Const, 10},
+		{"R_X86_64_TLSGD", Const, 0},
+		{"R_X86_64_TLSLD", Const, 0},
+		{"R_X86_64_TPOFF32", Const, 0},
+		{"R_X86_64_TPOFF64", Const, 0},
+		{"Rel32", Type, 0},
+		{"Rel32.Info", Field, 0},
+		{"Rel32.Off", Field, 0},
+		{"Rel64", Type, 0},
+		{"Rel64.Info", Field, 0},
+		{"Rel64.Off", Field, 0},
+		{"Rela32", Type, 0},
+		{"Rela32.Addend", Field, 0},
+		{"Rela32.Info", Field, 0},
+		{"Rela32.Off", Field, 0},
+		{"Rela64", Type, 0},
+		{"Rela64.Addend", Field, 0},
+		{"Rela64.Info", Field, 0},
+		{"Rela64.Off", Field, 0},
+		{"SHF_ALLOC", Const, 0},
+		{"SHF_COMPRESSED", Const, 6},
+		{"SHF_EXECINSTR", Const, 0},
+		{"SHF_GROUP", Const, 0},
+		{"SHF_INFO_LINK", Const, 0},
+		{"SHF_LINK_ORDER", Const, 0},
+		{"SHF_MASKOS", Const, 0},
+		{"SHF_MASKPROC", Const, 0},
+		{"SHF_MERGE", Const, 0},
+		{"SHF_OS_NONCONFORMING", Const, 0},
+		{"SHF_STRINGS", Const, 0},
+		{"SHF_TLS", Const, 0},
+		{"SHF_WRITE", Const, 0},
+		{"SHN_ABS", Const, 0},
+		{"SHN_COMMON", Const, 0},
+		{"SHN_HIOS", Const, 0},
+		{"SHN_HIPROC", Const, 0},
+		{"SHN_HIRESERVE", Const, 0},
+		{"SHN_LOOS", Const, 0},
+		{"SHN_LOPROC", Const, 0},
+		{"SHN_LORESERVE", Const, 0},
+		{"SHN_UNDEF", Const, 0},
+		{"SHN_XINDEX", Const, 0},
+		{"SHT_DYNAMIC", Const, 0},
+		{"SHT_DYNSYM", Const, 0},
+		{"SHT_FINI_ARRAY", Const, 0},
+		{"SHT_GNU_ATTRIBUTES", Const, 0},
+		{"SHT_GNU_HASH", Const, 0},
+		{"SHT_GNU_LIBLIST", Const, 0},
+		{"SHT_GNU_VERDEF", Const, 0},
+		{"SHT_GNU_VERNEED", Const, 0},
+		{"SHT_GNU_VERSYM", Const, 0},
+		{"SHT_GROUP", Const, 0},
+		{"SHT_HASH", Const, 0},
+		{"SHT_HIOS", Const, 0},
+		{"SHT_HIPROC", Const, 0},
+		{"SHT_HIUSER", Const, 0},
+		{"SHT_INIT_ARRAY", Const, 0},
+		{"SHT_LOOS", Const, 0},
+		{"SHT_LOPROC", Const, 0},
+		{"SHT_LOUSER", Const, 0},
+		{"SHT_MIPS_ABIFLAGS", Const, 17},
+		{"SHT_NOBITS", Const, 0},
+		{"SHT_NOTE", Const, 0},
+		{"SHT_NULL", Const, 0},
+		{"SHT_PREINIT_ARRAY", Const, 0},
+		{"SHT_PROGBITS", Const, 0},
+		{"SHT_REL", Const, 0},
+		{"SHT_RELA", Const, 0},
+		{"SHT_SHLIB", Const, 0},
+		{"SHT_STRTAB", Const, 0},
+		{"SHT_SYMTAB", Const, 0},
+		{"SHT_SYMTAB_SHNDX", Const, 0},
+		{"STB_GLOBAL", Const, 0},
+		{"STB_HIOS", Const, 0},
+		{"STB_HIPROC", Const, 0},
+		{"STB_LOCAL", Const, 0},
+		{"STB_LOOS", Const, 0},
+		{"STB_LOPROC", Const, 0},
+		{"STB_WEAK", Const, 0},
+		{"STT_COMMON", Const, 0},
+		{"STT_FILE", Const, 0},
+		{"STT_FUNC", Const, 0},
+		{"STT_GNU_IFUNC", Const, 23},
+		{"STT_HIOS", Const, 0},
+		{"STT_HIPROC", Const, 0},
+		{"STT_LOOS", Const, 0},
+		{"STT_LOPROC", Const, 0},
+		{"STT_NOTYPE", Const, 0},
+		{"STT_OBJECT", Const, 0},
+		{"STT_RELC", Const, 23},
+		{"STT_SECTION", Const, 0},
+		{"STT_SRELC", Const, 23},
+		{"STT_TLS", Const, 0},
+		{"STV_DEFAULT", Const, 0},
+		{"STV_HIDDEN", Const, 0},
+		{"STV_INTERNAL", Const, 0},
+		{"STV_PROTECTED", Const, 0},
+		{"ST_BIND", Func, 0},
+		{"ST_INFO", Func, 0},
+		{"ST_TYPE", Func, 0},
+		{"ST_VISIBILITY", Func, 0},
+		{"Section", Type, 0},
+		{"Section.ReaderAt", Field, 0},
+		{"Section.SectionHeader", Field, 0},
+		{"Section32", Type, 0},
+		{"Section32.Addr", Field, 0},
+		{"Section32.Addralign", Field, 0},
+		{"Section32.Entsize", Field, 0},
+		{"Section32.Flags", Field, 0},
+		{"Section32.Info", Field, 0},
+		{"Section32.Link", Field, 0},
+		{"Section32.Name", Field, 0},
+		{"Section32.Off", Field, 0},
+		{"Section32.Size", Field, 0},
+		{"Section32.Type", Field, 0},
+		{"Section64", Type, 0},
+		{"Section64.Addr", Field, 0},
+		{"Section64.Addralign", Field, 0},
+		{"Section64.Entsize", Field, 0},
+		{"Section64.Flags", Field, 0},
+		{"Section64.Info", Field, 0},
+		{"Section64.Link", Field, 0},
+		{"Section64.Name", Field, 0},
+		{"Section64.Off", Field, 0},
+		{"Section64.Size", Field, 0},
+		{"Section64.Type", Field, 0},
+		{"SectionFlag", Type, 0},
+		{"SectionHeader", Type, 0},
+		{"SectionHeader.Addr", Field, 0},
+		{"SectionHeader.Addralign", Field, 0},
+		{"SectionHeader.Entsize", Field, 0},
+		{"SectionHeader.FileSize", Field, 6},
+		{"SectionHeader.Flags", Field, 0},
+		{"SectionHeader.Info", Field, 0},
+		{"SectionHeader.Link", Field, 0},
+		{"SectionHeader.Name", Field, 0},
+		{"SectionHeader.Offset", Field, 0},
+		{"SectionHeader.Size", Field, 0},
+		{"SectionHeader.Type", Field, 0},
+		{"SectionIndex", Type, 0},
+		{"SectionType", Type, 0},
+		{"Sym32", Type, 0},
+		{"Sym32.Info", Field, 0},
+		{"Sym32.Name", Field, 0},
+		{"Sym32.Other", Field, 0},
+		{"Sym32.Shndx", Field, 0},
+		{"Sym32.Size", Field, 0},
+		{"Sym32.Value", Field, 0},
+		{"Sym32Size", Const, 0},
+		{"Sym64", Type, 0},
+		{"Sym64.Info", Field, 0},
+		{"Sym64.Name", Field, 0},
+		{"Sym64.Other", Field, 0},
+		{"Sym64.Shndx", Field, 0},
+		{"Sym64.Size", Field, 0},
+		{"Sym64.Value", Field, 0},
+		{"Sym64Size", Const, 0},
+		{"SymBind", Type, 0},
+		{"SymType", Type, 0},
+		{"SymVis", Type, 0},
+		{"Symbol", Type, 0},
+		{"Symbol.HasVersion", Field, 24},
+		{"Symbol.Info", Field, 0},
+		{"Symbol.Library", Field, 13},
+		{"Symbol.Name", Field, 0},
+		{"Symbol.Other", Field, 0},
+		{"Symbol.Section", Field, 0},
+		{"Symbol.Size", Field, 0},
+		{"Symbol.Value", Field, 0},
+		{"Symbol.Version", Field, 13},
+		{"Symbol.VersionIndex", Field, 24},
+		{"Type", Type, 0},
+		{"VER_FLG_BASE", Const, 24},
+		{"VER_FLG_INFO", Const, 24},
+		{"VER_FLG_WEAK", Const, 24},
+		{"Version", Type, 0},
+		{"VersionIndex", Type, 24},
 	},
 	"debug/gosym": {
-		{"(*DecodingError).Error", Method, 0, ""},
-		{"(*LineTable).LineToPC", Method, 0, ""},
-		{"(*LineTable).PCToLine", Method, 0, ""},
-		{"(*Sym).BaseName", Method, 0, ""},
-		{"(*Sym).PackageName", Method, 0, ""},
-		{"(*Sym).ReceiverName", Method, 0, ""},
-		{"(*Sym).Static", Method, 0, ""},
-		{"(*Table).LineToPC", Method, 0, ""},
-		{"(*Table).LookupFunc", Method, 0, ""},
-		{"(*Table).LookupSym", Method, 0, ""},
-		{"(*Table).PCToFunc", Method, 0, ""},
-		{"(*Table).PCToLine", Method, 0, ""},
-		{"(*Table).SymByAddr", Method, 0, ""},
-		{"(*UnknownLineError).Error", Method, 0, ""},
-		{"(Func).BaseName", Method, 0, ""},
-		{"(Func).PackageName", Method, 0, ""},
-		{"(Func).ReceiverName", Method, 0, ""},
-		{"(Func).Static", Method, 0, ""},
-		{"(UnknownFileError).Error", Method, 0, ""},
-		{"DecodingError", Type, 0, ""},
-		{"Func", Type, 0, ""},
-		{"Func.End", Field, 0, ""},
-		{"Func.Entry", Field, 0, ""},
-		{"Func.FrameSize", Field, 0, ""},
-		{"Func.LineTable", Field, 0, ""},
-		{"Func.Locals", Field, 0, ""},
-		{"Func.Obj", Field, 0, ""},
-		{"Func.Params", Field, 0, ""},
-		{"Func.Sym", Field, 0, ""},
-		{"LineTable", Type, 0, ""},
-		{"LineTable.Data", Field, 0, ""},
-		{"LineTable.Line", Field, 0, ""},
-		{"LineTable.PC", Field, 0, ""},
-		{"NewLineTable", Func, 0, "func(data []byte, text uint64) *LineTable"},
-		{"NewTable", Func, 0, "func(symtab []byte, pcln *LineTable) (*Table, error)"},
-		{"Obj", Type, 0, ""},
-		{"Obj.Funcs", Field, 0, ""},
-		{"Obj.Paths", Field, 0, ""},
-		{"Sym", Type, 0, ""},
-		{"Sym.Func", Field, 0, ""},
-		{"Sym.GoType", Field, 0, ""},
-		{"Sym.Name", Field, 0, ""},
-		{"Sym.Type", Field, 0, ""},
-		{"Sym.Value", Field, 0, ""},
-		{"Table", Type, 0, ""},
-		{"Table.Files", Field, 0, ""},
-		{"Table.Funcs", Field, 0, ""},
-		{"Table.Objs", Field, 0, ""},
-		{"Table.Syms", Field, 0, ""},
-		{"UnknownFileError", Type, 0, ""},
-		{"UnknownLineError", Type, 0, ""},
-		{"UnknownLineError.File", Field, 0, ""},
-		{"UnknownLineError.Line", Field, 0, ""},
+		{"(*DecodingError).Error", Method, 0},
+		{"(*LineTable).LineToPC", Method, 0},
+		{"(*LineTable).PCToLine", Method, 0},
+		{"(*Sym).BaseName", Method, 0},
+		{"(*Sym).PackageName", Method, 0},
+		{"(*Sym).ReceiverName", Method, 0},
+		{"(*Sym).Static", Method, 0},
+		{"(*Table).LineToPC", Method, 0},
+		{"(*Table).LookupFunc", Method, 0},
+		{"(*Table).LookupSym", Method, 0},
+		{"(*Table).PCToFunc", Method, 0},
+		{"(*Table).PCToLine", Method, 0},
+		{"(*Table).SymByAddr", Method, 0},
+		{"(*UnknownLineError).Error", Method, 0},
+		{"(Func).BaseName", Method, 0},
+		{"(Func).PackageName", Method, 0},
+		{"(Func).ReceiverName", Method, 0},
+		{"(Func).Static", Method, 0},
+		{"(UnknownFileError).Error", Method, 0},
+		{"DecodingError", Type, 0},
+		{"Func", Type, 0},
+		{"Func.End", Field, 0},
+		{"Func.Entry", Field, 0},
+		{"Func.FrameSize", Field, 0},
+		{"Func.LineTable", Field, 0},
+		{"Func.Locals", Field, 0},
+		{"Func.Obj", Field, 0},
+		{"Func.Params", Field, 0},
+		{"Func.Sym", Field, 0},
+		{"LineTable", Type, 0},
+		{"LineTable.Data", Field, 0},
+		{"LineTable.Line", Field, 0},
+		{"LineTable.PC", Field, 0},
+		{"NewLineTable", Func, 0},
+		{"NewTable", Func, 0},
+		{"Obj", Type, 0},
+		{"Obj.Funcs", Field, 0},
+		{"Obj.Paths", Field, 0},
+		{"Sym", Type, 0},
+		{"Sym.Func", Field, 0},
+		{"Sym.GoType", Field, 0},
+		{"Sym.Name", Field, 0},
+		{"Sym.Type", Field, 0},
+		{"Sym.Value", Field, 0},
+		{"Table", Type, 0},
+		{"Table.Files", Field, 0},
+		{"Table.Funcs", Field, 0},
+		{"Table.Objs", Field, 0},
+		{"Table.Syms", Field, 0},
+		{"UnknownFileError", Type, 0},
+		{"UnknownLineError", Type, 0},
+		{"UnknownLineError.File", Field, 0},
+		{"UnknownLineError.Line", Field, 0},
 	},
 	"debug/macho": {
-		{"(*FatFile).Close", Method, 3, ""},
-		{"(*File).Close", Method, 0, ""},
-		{"(*File).DWARF", Method, 0, ""},
-		{"(*File).ImportedLibraries", Method, 0, ""},
-		{"(*File).ImportedSymbols", Method, 0, ""},
-		{"(*File).Section", Method, 0, ""},
-		{"(*File).Segment", Method, 0, ""},
-		{"(*FormatError).Error", Method, 0, ""},
-		{"(*Section).Data", Method, 0, ""},
-		{"(*Section).Open", Method, 0, ""},
-		{"(*Segment).Data", Method, 0, ""},
-		{"(*Segment).Open", Method, 0, ""},
-		{"(Cpu).GoString", Method, 0, ""},
-		{"(Cpu).String", Method, 0, ""},
-		{"(Dylib).Raw", Method, 0, ""},
-		{"(Dysymtab).Raw", Method, 0, ""},
-		{"(FatArch).Close", Method, 3, ""},
-		{"(FatArch).DWARF", Method, 3, ""},
-		{"(FatArch).ImportedLibraries", Method, 3, ""},
-		{"(FatArch).ImportedSymbols", Method, 3, ""},
-		{"(FatArch).Section", Method, 3, ""},
-		{"(FatArch).Segment", Method, 3, ""},
-		{"(LoadBytes).Raw", Method, 0, ""},
-		{"(LoadCmd).GoString", Method, 0, ""},
-		{"(LoadCmd).String", Method, 0, ""},
-		{"(RelocTypeARM).GoString", Method, 10, ""},
-		{"(RelocTypeARM).String", Method, 10, ""},
-		{"(RelocTypeARM64).GoString", Method, 10, ""},
-		{"(RelocTypeARM64).String", Method, 10, ""},
-		{"(RelocTypeGeneric).GoString", Method, 10, ""},
-		{"(RelocTypeGeneric).String", Method, 10, ""},
-		{"(RelocTypeX86_64).GoString", Method, 10, ""},
-		{"(RelocTypeX86_64).String", Method, 10, ""},
-		{"(Rpath).Raw", Method, 10, ""},
-		{"(Section).ReadAt", Method, 0, ""},
-		{"(Segment).Raw", Method, 0, ""},
-		{"(Segment).ReadAt", Method, 0, ""},
-		{"(Symtab).Raw", Method, 0, ""},
-		{"(Type).GoString", Method, 10, ""},
-		{"(Type).String", Method, 10, ""},
-		{"ARM64_RELOC_ADDEND", Const, 10, ""},
-		{"ARM64_RELOC_BRANCH26", Const, 10, ""},
-		{"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10, ""},
-		{"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10, ""},
-		{"ARM64_RELOC_PAGE21", Const, 10, ""},
-		{"ARM64_RELOC_PAGEOFF12", Const, 10, ""},
-		{"ARM64_RELOC_POINTER_TO_GOT", Const, 10, ""},
-		{"ARM64_RELOC_SUBTRACTOR", Const, 10, ""},
-		{"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10, ""},
-		{"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10, ""},
-		{"ARM64_RELOC_UNSIGNED", Const, 10, ""},
-		{"ARM_RELOC_BR24", Const, 10, ""},
-		{"ARM_RELOC_HALF", Const, 10, ""},
-		{"ARM_RELOC_HALF_SECTDIFF", Const, 10, ""},
-		{"ARM_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
-		{"ARM_RELOC_PAIR", Const, 10, ""},
-		{"ARM_RELOC_PB_LA_PTR", Const, 10, ""},
-		{"ARM_RELOC_SECTDIFF", Const, 10, ""},
-		{"ARM_RELOC_VANILLA", Const, 10, ""},
-		{"ARM_THUMB_32BIT_BRANCH", Const, 10, ""},
-		{"ARM_THUMB_RELOC_BR22", Const, 10, ""},
-		{"Cpu", Type, 0, ""},
-		{"Cpu386", Const, 0, ""},
-		{"CpuAmd64", Const, 0, ""},
-		{"CpuArm", Const, 3, ""},
-		{"CpuArm64", Const, 11, ""},
-		{"CpuPpc", Const, 3, ""},
-		{"CpuPpc64", Const, 3, ""},
-		{"Dylib", Type, 0, ""},
-		{"Dylib.CompatVersion", Field, 0, ""},
-		{"Dylib.CurrentVersion", Field, 0, ""},
-		{"Dylib.LoadBytes", Field, 0, ""},
-		{"Dylib.Name", Field, 0, ""},
-		{"Dylib.Time", Field, 0, ""},
-		{"DylibCmd", Type, 0, ""},
-		{"DylibCmd.Cmd", Field, 0, ""},
-		{"DylibCmd.CompatVersion", Field, 0, ""},
-		{"DylibCmd.CurrentVersion", Field, 0, ""},
-		{"DylibCmd.Len", Field, 0, ""},
-		{"DylibCmd.Name", Field, 0, ""},
-		{"DylibCmd.Time", Field, 0, ""},
-		{"Dysymtab", Type, 0, ""},
-		{"Dysymtab.DysymtabCmd", Field, 0, ""},
-		{"Dysymtab.IndirectSyms", Field, 0, ""},
-		{"Dysymtab.LoadBytes", Field, 0, ""},
-		{"DysymtabCmd", Type, 0, ""},
-		{"DysymtabCmd.Cmd", Field, 0, ""},
-		{"DysymtabCmd.Extrefsymoff", Field, 0, ""},
-		{"DysymtabCmd.Extreloff", Field, 0, ""},
-		{"DysymtabCmd.Iextdefsym", Field, 0, ""},
-		{"DysymtabCmd.Ilocalsym", Field, 0, ""},
-		{"DysymtabCmd.Indirectsymoff", Field, 0, ""},
-		{"DysymtabCmd.Iundefsym", Field, 0, ""},
-		{"DysymtabCmd.Len", Field, 0, ""},
-		{"DysymtabCmd.Locreloff", Field, 0, ""},
-		{"DysymtabCmd.Modtaboff", Field, 0, ""},
-		{"DysymtabCmd.Nextdefsym", Field, 0, ""},
-		{"DysymtabCmd.Nextrefsyms", Field, 0, ""},
-		{"DysymtabCmd.Nextrel", Field, 0, ""},
-		{"DysymtabCmd.Nindirectsyms", Field, 0, ""},
-		{"DysymtabCmd.Nlocalsym", Field, 0, ""},
-		{"DysymtabCmd.Nlocrel", Field, 0, ""},
-		{"DysymtabCmd.Nmodtab", Field, 0, ""},
-		{"DysymtabCmd.Ntoc", Field, 0, ""},
-		{"DysymtabCmd.Nundefsym", Field, 0, ""},
-		{"DysymtabCmd.Tocoffset", Field, 0, ""},
-		{"ErrNotFat", Var, 3, ""},
-		{"FatArch", Type, 3, ""},
-		{"FatArch.FatArchHeader", Field, 3, ""},
-		{"FatArch.File", Field, 3, ""},
-		{"FatArchHeader", Type, 3, ""},
-		{"FatArchHeader.Align", Field, 3, ""},
-		{"FatArchHeader.Cpu", Field, 3, ""},
-		{"FatArchHeader.Offset", Field, 3, ""},
-		{"FatArchHeader.Size", Field, 3, ""},
-		{"FatArchHeader.SubCpu", Field, 3, ""},
-		{"FatFile", Type, 3, ""},
-		{"FatFile.Arches", Field, 3, ""},
-		{"FatFile.Magic", Field, 3, ""},
-		{"File", Type, 0, ""},
-		{"File.ByteOrder", Field, 0, ""},
-		{"File.Dysymtab", Field, 0, ""},
-		{"File.FileHeader", Field, 0, ""},
-		{"File.Loads", Field, 0, ""},
-		{"File.Sections", Field, 0, ""},
-		{"File.Symtab", Field, 0, ""},
-		{"FileHeader", Type, 0, ""},
-		{"FileHeader.Cmdsz", Field, 0, ""},
-		{"FileHeader.Cpu", Field, 0, ""},
-		{"FileHeader.Flags", Field, 0, ""},
-		{"FileHeader.Magic", Field, 0, ""},
-		{"FileHeader.Ncmd", Field, 0, ""},
-		{"FileHeader.SubCpu", Field, 0, ""},
-		{"FileHeader.Type", Field, 0, ""},
-		{"FlagAllModsBound", Const, 10, ""},
-		{"FlagAllowStackExecution", Const, 10, ""},
-		{"FlagAppExtensionSafe", Const, 10, ""},
-		{"FlagBindAtLoad", Const, 10, ""},
-		{"FlagBindsToWeak", Const, 10, ""},
-		{"FlagCanonical", Const, 10, ""},
-		{"FlagDeadStrippableDylib", Const, 10, ""},
-		{"FlagDyldLink", Const, 10, ""},
-		{"FlagForceFlat", Const, 10, ""},
-		{"FlagHasTLVDescriptors", Const, 10, ""},
-		{"FlagIncrLink", Const, 10, ""},
-		{"FlagLazyInit", Const, 10, ""},
-		{"FlagNoFixPrebinding", Const, 10, ""},
-		{"FlagNoHeapExecution", Const, 10, ""},
-		{"FlagNoMultiDefs", Const, 10, ""},
-		{"FlagNoReexportedDylibs", Const, 10, ""},
-		{"FlagNoUndefs", Const, 10, ""},
-		{"FlagPIE", Const, 10, ""},
-		{"FlagPrebindable", Const, 10, ""},
-		{"FlagPrebound", Const, 10, ""},
-		{"FlagRootSafe", Const, 10, ""},
-		{"FlagSetuidSafe", Const, 10, ""},
-		{"FlagSplitSegs", Const, 10, ""},
-		{"FlagSubsectionsViaSymbols", Const, 10, ""},
-		{"FlagTwoLevel", Const, 10, ""},
-		{"FlagWeakDefines", Const, 10, ""},
-		{"FormatError", Type, 0, ""},
-		{"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
-		{"GENERIC_RELOC_PAIR", Const, 10, ""},
-		{"GENERIC_RELOC_PB_LA_PTR", Const, 10, ""},
-		{"GENERIC_RELOC_SECTDIFF", Const, 10, ""},
-		{"GENERIC_RELOC_TLV", Const, 10, ""},
-		{"GENERIC_RELOC_VANILLA", Const, 10, ""},
-		{"Load", Type, 0, ""},
-		{"LoadBytes", Type, 0, ""},
-		{"LoadCmd", Type, 0, ""},
-		{"LoadCmdDylib", Const, 0, ""},
-		{"LoadCmdDylinker", Const, 0, ""},
-		{"LoadCmdDysymtab", Const, 0, ""},
-		{"LoadCmdRpath", Const, 10, ""},
-		{"LoadCmdSegment", Const, 0, ""},
-		{"LoadCmdSegment64", Const, 0, ""},
-		{"LoadCmdSymtab", Const, 0, ""},
-		{"LoadCmdThread", Const, 0, ""},
-		{"LoadCmdUnixThread", Const, 0, ""},
-		{"Magic32", Const, 0, ""},
-		{"Magic64", Const, 0, ""},
-		{"MagicFat", Const, 3, ""},
-		{"NewFatFile", Func, 3, "func(r io.ReaderAt) (*FatFile, error)"},
-		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
-		{"Nlist32", Type, 0, ""},
-		{"Nlist32.Desc", Field, 0, ""},
-		{"Nlist32.Name", Field, 0, ""},
-		{"Nlist32.Sect", Field, 0, ""},
-		{"Nlist32.Type", Field, 0, ""},
-		{"Nlist32.Value", Field, 0, ""},
-		{"Nlist64", Type, 0, ""},
-		{"Nlist64.Desc", Field, 0, ""},
-		{"Nlist64.Name", Field, 0, ""},
-		{"Nlist64.Sect", Field, 0, ""},
-		{"Nlist64.Type", Field, 0, ""},
-		{"Nlist64.Value", Field, 0, ""},
-		{"Open", Func, 0, "func(name string) (*File, error)"},
-		{"OpenFat", Func, 3, "func(name string) (*FatFile, error)"},
-		{"Regs386", Type, 0, ""},
-		{"Regs386.AX", Field, 0, ""},
-		{"Regs386.BP", Field, 0, ""},
-		{"Regs386.BX", Field, 0, ""},
-		{"Regs386.CS", Field, 0, ""},
-		{"Regs386.CX", Field, 0, ""},
-		{"Regs386.DI", Field, 0, ""},
-		{"Regs386.DS", Field, 0, ""},
-		{"Regs386.DX", Field, 0, ""},
-		{"Regs386.ES", Field, 0, ""},
-		{"Regs386.FLAGS", Field, 0, ""},
-		{"Regs386.FS", Field, 0, ""},
-		{"Regs386.GS", Field, 0, ""},
-		{"Regs386.IP", Field, 0, ""},
-		{"Regs386.SI", Field, 0, ""},
-		{"Regs386.SP", Field, 0, ""},
-		{"Regs386.SS", Field, 0, ""},
-		{"RegsAMD64", Type, 0, ""},
-		{"RegsAMD64.AX", Field, 0, ""},
-		{"RegsAMD64.BP", Field, 0, ""},
-		{"RegsAMD64.BX", Field, 0, ""},
-		{"RegsAMD64.CS", Field, 0, ""},
-		{"RegsAMD64.CX", Field, 0, ""},
-		{"RegsAMD64.DI", Field, 0, ""},
-		{"RegsAMD64.DX", Field, 0, ""},
-		{"RegsAMD64.FLAGS", Field, 0, ""},
-		{"RegsAMD64.FS", Field, 0, ""},
-		{"RegsAMD64.GS", Field, 0, ""},
-		{"RegsAMD64.IP", Field, 0, ""},
-		{"RegsAMD64.R10", Field, 0, ""},
-		{"RegsAMD64.R11", Field, 0, ""},
-		{"RegsAMD64.R12", Field, 0, ""},
-		{"RegsAMD64.R13", Field, 0, ""},
-		{"RegsAMD64.R14", Field, 0, ""},
-		{"RegsAMD64.R15", Field, 0, ""},
-		{"RegsAMD64.R8", Field, 0, ""},
-		{"RegsAMD64.R9", Field, 0, ""},
-		{"RegsAMD64.SI", Field, 0, ""},
-		{"RegsAMD64.SP", Field, 0, ""},
-		{"Reloc", Type, 10, ""},
-		{"Reloc.Addr", Field, 10, ""},
-		{"Reloc.Extern", Field, 10, ""},
-		{"Reloc.Len", Field, 10, ""},
-		{"Reloc.Pcrel", Field, 10, ""},
-		{"Reloc.Scattered", Field, 10, ""},
-		{"Reloc.Type", Field, 10, ""},
-		{"Reloc.Value", Field, 10, ""},
-		{"RelocTypeARM", Type, 10, ""},
-		{"RelocTypeARM64", Type, 10, ""},
-		{"RelocTypeGeneric", Type, 10, ""},
-		{"RelocTypeX86_64", Type, 10, ""},
-		{"Rpath", Type, 10, ""},
-		{"Rpath.LoadBytes", Field, 10, ""},
-		{"Rpath.Path", Field, 10, ""},
-		{"RpathCmd", Type, 10, ""},
-		{"RpathCmd.Cmd", Field, 10, ""},
-		{"RpathCmd.Len", Field, 10, ""},
-		{"RpathCmd.Path", Field, 10, ""},
-		{"Section", Type, 0, ""},
-		{"Section.ReaderAt", Field, 0, ""},
-		{"Section.Relocs", Field, 10, ""},
-		{"Section.SectionHeader", Field, 0, ""},
-		{"Section32", Type, 0, ""},
-		{"Section32.Addr", Field, 0, ""},
-		{"Section32.Align", Field, 0, ""},
-		{"Section32.Flags", Field, 0, ""},
-		{"Section32.Name", Field, 0, ""},
-		{"Section32.Nreloc", Field, 0, ""},
-		{"Section32.Offset", Field, 0, ""},
-		{"Section32.Reloff", Field, 0, ""},
-		{"Section32.Reserve1", Field, 0, ""},
-		{"Section32.Reserve2", Field, 0, ""},
-		{"Section32.Seg", Field, 0, ""},
-		{"Section32.Size", Field, 0, ""},
-		{"Section64", Type, 0, ""},
-		{"Section64.Addr", Field, 0, ""},
-		{"Section64.Align", Field, 0, ""},
-		{"Section64.Flags", Field, 0, ""},
-		{"Section64.Name", Field, 0, ""},
-		{"Section64.Nreloc", Field, 0, ""},
-		{"Section64.Offset", Field, 0, ""},
-		{"Section64.Reloff", Field, 0, ""},
-		{"Section64.Reserve1", Field, 0, ""},
-		{"Section64.Reserve2", Field, 0, ""},
-		{"Section64.Reserve3", Field, 0, ""},
-		{"Section64.Seg", Field, 0, ""},
-		{"Section64.Size", Field, 0, ""},
-		{"SectionHeader", Type, 0, ""},
-		{"SectionHeader.Addr", Field, 0, ""},
-		{"SectionHeader.Align", Field, 0, ""},
-		{"SectionHeader.Flags", Field, 0, ""},
-		{"SectionHeader.Name", Field, 0, ""},
-		{"SectionHeader.Nreloc", Field, 0, ""},
-		{"SectionHeader.Offset", Field, 0, ""},
-		{"SectionHeader.Reloff", Field, 0, ""},
-		{"SectionHeader.Seg", Field, 0, ""},
-		{"SectionHeader.Size", Field, 0, ""},
-		{"Segment", Type, 0, ""},
-		{"Segment.LoadBytes", Field, 0, ""},
-		{"Segment.ReaderAt", Field, 0, ""},
-		{"Segment.SegmentHeader", Field, 0, ""},
-		{"Segment32", Type, 0, ""},
-		{"Segment32.Addr", Field, 0, ""},
-		{"Segment32.Cmd", Field, 0, ""},
-		{"Segment32.Filesz", Field, 0, ""},
-		{"Segment32.Flag", Field, 0, ""},
-		{"Segment32.Len", Field, 0, ""},
-		{"Segment32.Maxprot", Field, 0, ""},
-		{"Segment32.Memsz", Field, 0, ""},
-		{"Segment32.Name", Field, 0, ""},
-		{"Segment32.Nsect", Field, 0, ""},
-		{"Segment32.Offset", Field, 0, ""},
-		{"Segment32.Prot", Field, 0, ""},
-		{"Segment64", Type, 0, ""},
-		{"Segment64.Addr", Field, 0, ""},
-		{"Segment64.Cmd", Field, 0, ""},
-		{"Segment64.Filesz", Field, 0, ""},
-		{"Segment64.Flag", Field, 0, ""},
-		{"Segment64.Len", Field, 0, ""},
-		{"Segment64.Maxprot", Field, 0, ""},
-		{"Segment64.Memsz", Field, 0, ""},
-		{"Segment64.Name", Field, 0, ""},
-		{"Segment64.Nsect", Field, 0, ""},
-		{"Segment64.Offset", Field, 0, ""},
-		{"Segment64.Prot", Field, 0, ""},
-		{"SegmentHeader", Type, 0, ""},
-		{"SegmentHeader.Addr", Field, 0, ""},
-		{"SegmentHeader.Cmd", Field, 0, ""},
-		{"SegmentHeader.Filesz", Field, 0, ""},
-		{"SegmentHeader.Flag", Field, 0, ""},
-		{"SegmentHeader.Len", Field, 0, ""},
-		{"SegmentHeader.Maxprot", Field, 0, ""},
-		{"SegmentHeader.Memsz", Field, 0, ""},
-		{"SegmentHeader.Name", Field, 0, ""},
-		{"SegmentHeader.Nsect", Field, 0, ""},
-		{"SegmentHeader.Offset", Field, 0, ""},
-		{"SegmentHeader.Prot", Field, 0, ""},
-		{"Symbol", Type, 0, ""},
-		{"Symbol.Desc", Field, 0, ""},
-		{"Symbol.Name", Field, 0, ""},
-		{"Symbol.Sect", Field, 0, ""},
-		{"Symbol.Type", Field, 0, ""},
-		{"Symbol.Value", Field, 0, ""},
-		{"Symtab", Type, 0, ""},
-		{"Symtab.LoadBytes", Field, 0, ""},
-		{"Symtab.Syms", Field, 0, ""},
-		{"Symtab.SymtabCmd", Field, 0, ""},
-		{"SymtabCmd", Type, 0, ""},
-		{"SymtabCmd.Cmd", Field, 0, ""},
-		{"SymtabCmd.Len", Field, 0, ""},
-		{"SymtabCmd.Nsyms", Field, 0, ""},
-		{"SymtabCmd.Stroff", Field, 0, ""},
-		{"SymtabCmd.Strsize", Field, 0, ""},
-		{"SymtabCmd.Symoff", Field, 0, ""},
-		{"Thread", Type, 0, ""},
-		{"Thread.Cmd", Field, 0, ""},
-		{"Thread.Data", Field, 0, ""},
-		{"Thread.Len", Field, 0, ""},
-		{"Thread.Type", Field, 0, ""},
-		{"Type", Type, 0, ""},
-		{"TypeBundle", Const, 3, ""},
-		{"TypeDylib", Const, 3, ""},
-		{"TypeExec", Const, 0, ""},
-		{"TypeObj", Const, 0, ""},
-		{"X86_64_RELOC_BRANCH", Const, 10, ""},
-		{"X86_64_RELOC_GOT", Const, 10, ""},
-		{"X86_64_RELOC_GOT_LOAD", Const, 10, ""},
-		{"X86_64_RELOC_SIGNED", Const, 10, ""},
-		{"X86_64_RELOC_SIGNED_1", Const, 10, ""},
-		{"X86_64_RELOC_SIGNED_2", Const, 10, ""},
-		{"X86_64_RELOC_SIGNED_4", Const, 10, ""},
-		{"X86_64_RELOC_SUBTRACTOR", Const, 10, ""},
-		{"X86_64_RELOC_TLV", Const, 10, ""},
-		{"X86_64_RELOC_UNSIGNED", Const, 10, ""},
+		{"(*FatFile).Close", Method, 3},
+		{"(*File).Close", Method, 0},
+		{"(*File).DWARF", Method, 0},
+		{"(*File).ImportedLibraries", Method, 0},
+		{"(*File).ImportedSymbols", Method, 0},
+		{"(*File).Section", Method, 0},
+		{"(*File).Segment", Method, 0},
+		{"(*FormatError).Error", Method, 0},
+		{"(*Section).Data", Method, 0},
+		{"(*Section).Open", Method, 0},
+		{"(*Segment).Data", Method, 0},
+		{"(*Segment).Open", Method, 0},
+		{"(Cpu).GoString", Method, 0},
+		{"(Cpu).String", Method, 0},
+		{"(Dylib).Raw", Method, 0},
+		{"(Dysymtab).Raw", Method, 0},
+		{"(FatArch).Close", Method, 3},
+		{"(FatArch).DWARF", Method, 3},
+		{"(FatArch).ImportedLibraries", Method, 3},
+		{"(FatArch).ImportedSymbols", Method, 3},
+		{"(FatArch).Section", Method, 3},
+		{"(FatArch).Segment", Method, 3},
+		{"(LoadBytes).Raw", Method, 0},
+		{"(LoadCmd).GoString", Method, 0},
+		{"(LoadCmd).String", Method, 0},
+		{"(RelocTypeARM).GoString", Method, 10},
+		{"(RelocTypeARM).String", Method, 10},
+		{"(RelocTypeARM64).GoString", Method, 10},
+		{"(RelocTypeARM64).String", Method, 10},
+		{"(RelocTypeGeneric).GoString", Method, 10},
+		{"(RelocTypeGeneric).String", Method, 10},
+		{"(RelocTypeX86_64).GoString", Method, 10},
+		{"(RelocTypeX86_64).String", Method, 10},
+		{"(Rpath).Raw", Method, 10},
+		{"(Section).ReadAt", Method, 0},
+		{"(Segment).Raw", Method, 0},
+		{"(Segment).ReadAt", Method, 0},
+		{"(Symtab).Raw", Method, 0},
+		{"(Type).GoString", Method, 10},
+		{"(Type).String", Method, 10},
+		{"ARM64_RELOC_ADDEND", Const, 10},
+		{"ARM64_RELOC_BRANCH26", Const, 10},
+		{"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10},
+		{"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10},
+		{"ARM64_RELOC_PAGE21", Const, 10},
+		{"ARM64_RELOC_PAGEOFF12", Const, 10},
+		{"ARM64_RELOC_POINTER_TO_GOT", Const, 10},
+		{"ARM64_RELOC_SUBTRACTOR", Const, 10},
+		{"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10},
+		{"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10},
+		{"ARM64_RELOC_UNSIGNED", Const, 10},
+		{"ARM_RELOC_BR24", Const, 10},
+		{"ARM_RELOC_HALF", Const, 10},
+		{"ARM_RELOC_HALF_SECTDIFF", Const, 10},
+		{"ARM_RELOC_LOCAL_SECTDIFF", Const, 10},
+		{"ARM_RELOC_PAIR", Const, 10},
+		{"ARM_RELOC_PB_LA_PTR", Const, 10},
+		{"ARM_RELOC_SECTDIFF", Const, 10},
+		{"ARM_RELOC_VANILLA", Const, 10},
+		{"ARM_THUMB_32BIT_BRANCH", Const, 10},
+		{"ARM_THUMB_RELOC_BR22", Const, 10},
+		{"Cpu", Type, 0},
+		{"Cpu386", Const, 0},
+		{"CpuAmd64", Const, 0},
+		{"CpuArm", Const, 3},
+		{"CpuArm64", Const, 11},
+		{"CpuPpc", Const, 3},
+		{"CpuPpc64", Const, 3},
+		{"Dylib", Type, 0},
+		{"Dylib.CompatVersion", Field, 0},
+		{"Dylib.CurrentVersion", Field, 0},
+		{"Dylib.LoadBytes", Field, 0},
+		{"Dylib.Name", Field, 0},
+		{"Dylib.Time", Field, 0},
+		{"DylibCmd", Type, 0},
+		{"DylibCmd.Cmd", Field, 0},
+		{"DylibCmd.CompatVersion", Field, 0},
+		{"DylibCmd.CurrentVersion", Field, 0},
+		{"DylibCmd.Len", Field, 0},
+		{"DylibCmd.Name", Field, 0},
+		{"DylibCmd.Time", Field, 0},
+		{"Dysymtab", Type, 0},
+		{"Dysymtab.DysymtabCmd", Field, 0},
+		{"Dysymtab.IndirectSyms", Field, 0},
+		{"Dysymtab.LoadBytes", Field, 0},
+		{"DysymtabCmd", Type, 0},
+		{"DysymtabCmd.Cmd", Field, 0},
+		{"DysymtabCmd.Extrefsymoff", Field, 0},
+		{"DysymtabCmd.Extreloff", Field, 0},
+		{"DysymtabCmd.Iextdefsym", Field, 0},
+		{"DysymtabCmd.Ilocalsym", Field, 0},
+		{"DysymtabCmd.Indirectsymoff", Field, 0},
+		{"DysymtabCmd.Iundefsym", Field, 0},
+		{"DysymtabCmd.Len", Field, 0},
+		{"DysymtabCmd.Locreloff", Field, 0},
+		{"DysymtabCmd.Modtaboff", Field, 0},
+		{"DysymtabCmd.Nextdefsym", Field, 0},
+		{"DysymtabCmd.Nextrefsyms", Field, 0},
+		{"DysymtabCmd.Nextrel", Field, 0},
+		{"DysymtabCmd.Nindirectsyms", Field, 0},
+		{"DysymtabCmd.Nlocalsym", Field, 0},
+		{"DysymtabCmd.Nlocrel", Field, 0},
+		{"DysymtabCmd.Nmodtab", Field, 0},
+		{"DysymtabCmd.Ntoc", Field, 0},
+		{"DysymtabCmd.Nundefsym", Field, 0},
+		{"DysymtabCmd.Tocoffset", Field, 0},
+		{"ErrNotFat", Var, 3},
+		{"FatArch", Type, 3},
+		{"FatArch.FatArchHeader", Field, 3},
+		{"FatArch.File", Field, 3},
+		{"FatArchHeader", Type, 3},
+		{"FatArchHeader.Align", Field, 3},
+		{"FatArchHeader.Cpu", Field, 3},
+		{"FatArchHeader.Offset", Field, 3},
+		{"FatArchHeader.Size", Field, 3},
+		{"FatArchHeader.SubCpu", Field, 3},
+		{"FatFile", Type, 3},
+		{"FatFile.Arches", Field, 3},
+		{"FatFile.Magic", Field, 3},
+		{"File", Type, 0},
+		{"File.ByteOrder", Field, 0},
+		{"File.Dysymtab", Field, 0},
+		{"File.FileHeader", Field, 0},
+		{"File.Loads", Field, 0},
+		{"File.Sections", Field, 0},
+		{"File.Symtab", Field, 0},
+		{"FileHeader", Type, 0},
+		{"FileHeader.Cmdsz", Field, 0},
+		{"FileHeader.Cpu", Field, 0},
+		{"FileHeader.Flags", Field, 0},
+		{"FileHeader.Magic", Field, 0},
+		{"FileHeader.Ncmd", Field, 0},
+		{"FileHeader.SubCpu", Field, 0},
+		{"FileHeader.Type", Field, 0},
+		{"FlagAllModsBound", Const, 10},
+		{"FlagAllowStackExecution", Const, 10},
+		{"FlagAppExtensionSafe", Const, 10},
+		{"FlagBindAtLoad", Const, 10},
+		{"FlagBindsToWeak", Const, 10},
+		{"FlagCanonical", Const, 10},
+		{"FlagDeadStrippableDylib", Const, 10},
+		{"FlagDyldLink", Const, 10},
+		{"FlagForceFlat", Const, 10},
+		{"FlagHasTLVDescriptors", Const, 10},
+		{"FlagIncrLink", Const, 10},
+		{"FlagLazyInit", Const, 10},
+		{"FlagNoFixPrebinding", Const, 10},
+		{"FlagNoHeapExecution", Const, 10},
+		{"FlagNoMultiDefs", Const, 10},
+		{"FlagNoReexportedDylibs", Const, 10},
+		{"FlagNoUndefs", Const, 10},
+		{"FlagPIE", Const, 10},
+		{"FlagPrebindable", Const, 10},
+		{"FlagPrebound", Const, 10},
+		{"FlagRootSafe", Const, 10},
+		{"FlagSetuidSafe", Const, 10},
+		{"FlagSplitSegs", Const, 10},
+		{"FlagSubsectionsViaSymbols", Const, 10},
+		{"FlagTwoLevel", Const, 10},
+		{"FlagWeakDefines", Const, 10},
+		{"FormatError", Type, 0},
+		{"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10},
+		{"GENERIC_RELOC_PAIR", Const, 10},
+		{"GENERIC_RELOC_PB_LA_PTR", Const, 10},
+		{"GENERIC_RELOC_SECTDIFF", Const, 10},
+		{"GENERIC_RELOC_TLV", Const, 10},
+		{"GENERIC_RELOC_VANILLA", Const, 10},
+		{"Load", Type, 0},
+		{"LoadBytes", Type, 0},
+		{"LoadCmd", Type, 0},
+		{"LoadCmdDylib", Const, 0},
+		{"LoadCmdDylinker", Const, 0},
+		{"LoadCmdDysymtab", Const, 0},
+		{"LoadCmdRpath", Const, 10},
+		{"LoadCmdSegment", Const, 0},
+		{"LoadCmdSegment64", Const, 0},
+		{"LoadCmdSymtab", Const, 0},
+		{"LoadCmdThread", Const, 0},
+		{"LoadCmdUnixThread", Const, 0},
+		{"Magic32", Const, 0},
+		{"Magic64", Const, 0},
+		{"MagicFat", Const, 3},
+		{"NewFatFile", Func, 3},
+		{"NewFile", Func, 0},
+		{"Nlist32", Type, 0},
+		{"Nlist32.Desc", Field, 0},
+		{"Nlist32.Name", Field, 0},
+		{"Nlist32.Sect", Field, 0},
+		{"Nlist32.Type", Field, 0},
+		{"Nlist32.Value", Field, 0},
+		{"Nlist64", Type, 0},
+		{"Nlist64.Desc", Field, 0},
+		{"Nlist64.Name", Field, 0},
+		{"Nlist64.Sect", Field, 0},
+		{"Nlist64.Type", Field, 0},
+		{"Nlist64.Value", Field, 0},
+		{"Open", Func, 0},
+		{"OpenFat", Func, 3},
+		{"Regs386", Type, 0},
+		{"Regs386.AX", Field, 0},
+		{"Regs386.BP", Field, 0},
+		{"Regs386.BX", Field, 0},
+		{"Regs386.CS", Field, 0},
+		{"Regs386.CX", Field, 0},
+		{"Regs386.DI", Field, 0},
+		{"Regs386.DS", Field, 0},
+		{"Regs386.DX", Field, 0},
+		{"Regs386.ES", Field, 0},
+		{"Regs386.FLAGS", Field, 0},
+		{"Regs386.FS", Field, 0},
+		{"Regs386.GS", Field, 0},
+		{"Regs386.IP", Field, 0},
+		{"Regs386.SI", Field, 0},
+		{"Regs386.SP", Field, 0},
+		{"Regs386.SS", Field, 0},
+		{"RegsAMD64", Type, 0},
+		{"RegsAMD64.AX", Field, 0},
+		{"RegsAMD64.BP", Field, 0},
+		{"RegsAMD64.BX", Field, 0},
+		{"RegsAMD64.CS", Field, 0},
+		{"RegsAMD64.CX", Field, 0},
+		{"RegsAMD64.DI", Field, 0},
+		{"RegsAMD64.DX", Field, 0},
+		{"RegsAMD64.FLAGS", Field, 0},
+		{"RegsAMD64.FS", Field, 0},
+		{"RegsAMD64.GS", Field, 0},
+		{"RegsAMD64.IP", Field, 0},
+		{"RegsAMD64.R10", Field, 0},
+		{"RegsAMD64.R11", Field, 0},
+		{"RegsAMD64.R12", Field, 0},
+		{"RegsAMD64.R13", Field, 0},
+		{"RegsAMD64.R14", Field, 0},
+		{"RegsAMD64.R15", Field, 0},
+		{"RegsAMD64.R8", Field, 0},
+		{"RegsAMD64.R9", Field, 0},
+		{"RegsAMD64.SI", Field, 0},
+		{"RegsAMD64.SP", Field, 0},
+		{"Reloc", Type, 10},
+		{"Reloc.Addr", Field, 10},
+		{"Reloc.Extern", Field, 10},
+		{"Reloc.Len", Field, 10},
+		{"Reloc.Pcrel", Field, 10},
+		{"Reloc.Scattered", Field, 10},
+		{"Reloc.Type", Field, 10},
+		{"Reloc.Value", Field, 10},
+		{"RelocTypeARM", Type, 10},
+		{"RelocTypeARM64", Type, 10},
+		{"RelocTypeGeneric", Type, 10},
+		{"RelocTypeX86_64", Type, 10},
+		{"Rpath", Type, 10},
+		{"Rpath.LoadBytes", Field, 10},
+		{"Rpath.Path", Field, 10},
+		{"RpathCmd", Type, 10},
+		{"RpathCmd.Cmd", Field, 10},
+		{"RpathCmd.Len", Field, 10},
+		{"RpathCmd.Path", Field, 10},
+		{"Section", Type, 0},
+		{"Section.ReaderAt", Field, 0},
+		{"Section.Relocs", Field, 10},
+		{"Section.SectionHeader", Field, 0},
+		{"Section32", Type, 0},
+		{"Section32.Addr", Field, 0},
+		{"Section32.Align", Field, 0},
+		{"Section32.Flags", Field, 0},
+		{"Section32.Name", Field, 0},
+		{"Section32.Nreloc", Field, 0},
+		{"Section32.Offset", Field, 0},
+		{"Section32.Reloff", Field, 0},
+		{"Section32.Reserve1", Field, 0},
+		{"Section32.Reserve2", Field, 0},
+		{"Section32.Seg", Field, 0},
+		{"Section32.Size", Field, 0},
+		{"Section64", Type, 0},
+		{"Section64.Addr", Field, 0},
+		{"Section64.Align", Field, 0},
+		{"Section64.Flags", Field, 0},
+		{"Section64.Name", Field, 0},
+		{"Section64.Nreloc", Field, 0},
+		{"Section64.Offset", Field, 0},
+		{"Section64.Reloff", Field, 0},
+		{"Section64.Reserve1", Field, 0},
+		{"Section64.Reserve2", Field, 0},
+		{"Section64.Reserve3", Field, 0},
+		{"Section64.Seg", Field, 0},
+		{"Section64.Size", Field, 0},
+		{"SectionHeader", Type, 0},
+		{"SectionHeader.Addr", Field, 0},
+		{"SectionHeader.Align", Field, 0},
+		{"SectionHeader.Flags", Field, 0},
+		{"SectionHeader.Name", Field, 0},
+		{"SectionHeader.Nreloc", Field, 0},
+		{"SectionHeader.Offset", Field, 0},
+		{"SectionHeader.Reloff", Field, 0},
+		{"SectionHeader.Seg", Field, 0},
+		{"SectionHeader.Size", Field, 0},
+		{"Segment", Type, 0},
+		{"Segment.LoadBytes", Field, 0},
+		{"Segment.ReaderAt", Field, 0},
+		{"Segment.SegmentHeader", Field, 0},
+		{"Segment32", Type, 0},
+		{"Segment32.Addr", Field, 0},
+		{"Segment32.Cmd", Field, 0},
+		{"Segment32.Filesz", Field, 0},
+		{"Segment32.Flag", Field, 0},
+		{"Segment32.Len", Field, 0},
+		{"Segment32.Maxprot", Field, 0},
+		{"Segment32.Memsz", Field, 0},
+		{"Segment32.Name", Field, 0},
+		{"Segment32.Nsect", Field, 0},
+		{"Segment32.Offset", Field, 0},
+		{"Segment32.Prot", Field, 0},
+		{"Segment64", Type, 0},
+		{"Segment64.Addr", Field, 0},
+		{"Segment64.Cmd", Field, 0},
+		{"Segment64.Filesz", Field, 0},
+		{"Segment64.Flag", Field, 0},
+		{"Segment64.Len", Field, 0},
+		{"Segment64.Maxprot", Field, 0},
+		{"Segment64.Memsz", Field, 0},
+		{"Segment64.Name", Field, 0},
+		{"Segment64.Nsect", Field, 0},
+		{"Segment64.Offset", Field, 0},
+		{"Segment64.Prot", Field, 0},
+		{"SegmentHeader", Type, 0},
+		{"SegmentHeader.Addr", Field, 0},
+		{"SegmentHeader.Cmd", Field, 0},
+		{"SegmentHeader.Filesz", Field, 0},
+		{"SegmentHeader.Flag", Field, 0},
+		{"SegmentHeader.Len", Field, 0},
+		{"SegmentHeader.Maxprot", Field, 0},
+		{"SegmentHeader.Memsz", Field, 0},
+		{"SegmentHeader.Name", Field, 0},
+		{"SegmentHeader.Nsect", Field, 0},
+		{"SegmentHeader.Offset", Field, 0},
+		{"SegmentHeader.Prot", Field, 0},
+		{"Symbol", Type, 0},
+		{"Symbol.Desc", Field, 0},
+		{"Symbol.Name", Field, 0},
+		{"Symbol.Sect", Field, 0},
+		{"Symbol.Type", Field, 0},
+		{"Symbol.Value", Field, 0},
+		{"Symtab", Type, 0},
+		{"Symtab.LoadBytes", Field, 0},
+		{"Symtab.Syms", Field, 0},
+		{"Symtab.SymtabCmd", Field, 0},
+		{"SymtabCmd", Type, 0},
+		{"SymtabCmd.Cmd", Field, 0},
+		{"SymtabCmd.Len", Field, 0},
+		{"SymtabCmd.Nsyms", Field, 0},
+		{"SymtabCmd.Stroff", Field, 0},
+		{"SymtabCmd.Strsize", Field, 0},
+		{"SymtabCmd.Symoff", Field, 0},
+		{"Thread", Type, 0},
+		{"Thread.Cmd", Field, 0},
+		{"Thread.Data", Field, 0},
+		{"Thread.Len", Field, 0},
+		{"Thread.Type", Field, 0},
+		{"Type", Type, 0},
+		{"TypeBundle", Const, 3},
+		{"TypeDylib", Const, 3},
+		{"TypeExec", Const, 0},
+		{"TypeObj", Const, 0},
+		{"X86_64_RELOC_BRANCH", Const, 10},
+		{"X86_64_RELOC_GOT", Const, 10},
+		{"X86_64_RELOC_GOT_LOAD", Const, 10},
+		{"X86_64_RELOC_SIGNED", Const, 10},
+		{"X86_64_RELOC_SIGNED_1", Const, 10},
+		{"X86_64_RELOC_SIGNED_2", Const, 10},
+		{"X86_64_RELOC_SIGNED_4", Const, 10},
+		{"X86_64_RELOC_SUBTRACTOR", Const, 10},
+		{"X86_64_RELOC_TLV", Const, 10},
+		{"X86_64_RELOC_UNSIGNED", Const, 10},
 	},
 	"debug/pe": {
-		{"(*COFFSymbol).FullName", Method, 8, ""},
-		{"(*File).COFFSymbolReadSectionDefAux", Method, 19, ""},
-		{"(*File).Close", Method, 0, ""},
-		{"(*File).DWARF", Method, 0, ""},
-		{"(*File).ImportedLibraries", Method, 0, ""},
-		{"(*File).ImportedSymbols", Method, 0, ""},
-		{"(*File).Section", Method, 0, ""},
-		{"(*FormatError).Error", Method, 0, ""},
-		{"(*Section).Data", Method, 0, ""},
-		{"(*Section).Open", Method, 0, ""},
-		{"(Section).ReadAt", Method, 0, ""},
-		{"(StringTable).String", Method, 8, ""},
-		{"COFFSymbol", Type, 1, ""},
-		{"COFFSymbol.Name", Field, 1, ""},
-		{"COFFSymbol.NumberOfAuxSymbols", Field, 1, ""},
-		{"COFFSymbol.SectionNumber", Field, 1, ""},
-		{"COFFSymbol.StorageClass", Field, 1, ""},
-		{"COFFSymbol.Type", Field, 1, ""},
-		{"COFFSymbol.Value", Field, 1, ""},
-		{"COFFSymbolAuxFormat5", Type, 19, ""},
-		{"COFFSymbolAuxFormat5.Checksum", Field, 19, ""},
-		{"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19, ""},
-		{"COFFSymbolAuxFormat5.NumRelocs", Field, 19, ""},
-		{"COFFSymbolAuxFormat5.SecNum", Field, 19, ""},
-		{"COFFSymbolAuxFormat5.Selection", Field, 19, ""},
-		{"COFFSymbolAuxFormat5.Size", Field, 19, ""},
-		{"COFFSymbolSize", Const, 1, ""},
-		{"DataDirectory", Type, 3, ""},
-		{"DataDirectory.Size", Field, 3, ""},
-		{"DataDirectory.VirtualAddress", Field, 3, ""},
-		{"File", Type, 0, ""},
-		{"File.COFFSymbols", Field, 8, ""},
-		{"File.FileHeader", Field, 0, ""},
-		{"File.OptionalHeader", Field, 3, ""},
-		{"File.Sections", Field, 0, ""},
-		{"File.StringTable", Field, 8, ""},
-		{"File.Symbols", Field, 1, ""},
-		{"FileHeader", Type, 0, ""},
-		{"FileHeader.Characteristics", Field, 0, ""},
-		{"FileHeader.Machine", Field, 0, ""},
-		{"FileHeader.NumberOfSections", Field, 0, ""},
-		{"FileHeader.NumberOfSymbols", Field, 0, ""},
-		{"FileHeader.PointerToSymbolTable", Field, 0, ""},
-		{"FileHeader.SizeOfOptionalHeader", Field, 0, ""},
-		{"FileHeader.TimeDateStamp", Field, 0, ""},
-		{"FormatError", Type, 0, ""},
-		{"IMAGE_COMDAT_SELECT_ANY", Const, 19, ""},
-		{"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19, ""},
-		{"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19, ""},
-		{"IMAGE_COMDAT_SELECT_LARGEST", Const, 19, ""},
-		{"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19, ""},
-		{"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19, ""},
-		{"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11, ""},
-		{"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11, ""},
-		{"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15, ""},
-		{"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15, ""},
-		{"IMAGE_FILE_32BIT_MACHINE", Const, 15, ""},
-		{"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15, ""},
-		{"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15, ""},
-		{"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15, ""},
-		{"IMAGE_FILE_DEBUG_STRIPPED", Const, 15, ""},
-		{"IMAGE_FILE_DLL", Const, 15, ""},
-		{"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15, ""},
-		{"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15, ""},
-		{"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15, ""},
-		{"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15, ""},
-		{"IMAGE_FILE_MACHINE_AM33", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_AMD64", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_ARM", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_ARM64", Const, 11, ""},
-		{"IMAGE_FILE_MACHINE_ARMNT", Const, 12, ""},
-		{"IMAGE_FILE_MACHINE_EBC", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_I386", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_IA64", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19, ""},
-		{"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19, ""},
-		{"IMAGE_FILE_MACHINE_M32R", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_MIPS16", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_POWERPC", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_R4000", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_RISCV128", Const, 20, ""},
-		{"IMAGE_FILE_MACHINE_RISCV32", Const, 20, ""},
-		{"IMAGE_FILE_MACHINE_RISCV64", Const, 20, ""},
-		{"IMAGE_FILE_MACHINE_SH3", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_SH3DSP", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_SH4", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_SH5", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_THUMB", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0, ""},
-		{"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0, ""},
-		{"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15, ""},
-		{"IMAGE_FILE_RELOCS_STRIPPED", Const, 15, ""},
-		{"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15, ""},
-		{"IMAGE_FILE_SYSTEM", Const, 15, ""},
-		{"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15, ""},
-		{"IMAGE_SCN_CNT_CODE", Const, 19, ""},
-		{"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19, ""},
-		{"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19, ""},
-		{"IMAGE_SCN_LNK_COMDAT", Const, 19, ""},
-		{"IMAGE_SCN_MEM_DISCARDABLE", Const, 19, ""},
-		{"IMAGE_SCN_MEM_EXECUTE", Const, 19, ""},
-		{"IMAGE_SCN_MEM_READ", Const, 19, ""},
-		{"IMAGE_SCN_MEM_WRITE", Const, 19, ""},
-		{"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_NATIVE", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15, ""},
-		{"IMAGE_SUBSYSTEM_XBOX", Const, 15, ""},
-		{"ImportDirectory", Type, 0, ""},
-		{"ImportDirectory.FirstThunk", Field, 0, ""},
-		{"ImportDirectory.ForwarderChain", Field, 0, ""},
-		{"ImportDirectory.Name", Field, 0, ""},
-		{"ImportDirectory.OriginalFirstThunk", Field, 0, ""},
-		{"ImportDirectory.TimeDateStamp", Field, 0, ""},
-		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
-		{"Open", Func, 0, "func(name string) (*File, error)"},
-		{"OptionalHeader32", Type, 3, ""},
-		{"OptionalHeader32.AddressOfEntryPoint", Field, 3, ""},
-		{"OptionalHeader32.BaseOfCode", Field, 3, ""},
-		{"OptionalHeader32.BaseOfData", Field, 3, ""},
-		{"OptionalHeader32.CheckSum", Field, 3, ""},
-		{"OptionalHeader32.DataDirectory", Field, 3, ""},
-		{"OptionalHeader32.DllCharacteristics", Field, 3, ""},
-		{"OptionalHeader32.FileAlignment", Field, 3, ""},
-		{"OptionalHeader32.ImageBase", Field, 3, ""},
-		{"OptionalHeader32.LoaderFlags", Field, 3, ""},
-		{"OptionalHeader32.Magic", Field, 3, ""},
-		{"OptionalHeader32.MajorImageVersion", Field, 3, ""},
-		{"OptionalHeader32.MajorLinkerVersion", Field, 3, ""},
-		{"OptionalHeader32.MajorOperatingSystemVersion", Field, 3, ""},
-		{"OptionalHeader32.MajorSubsystemVersion", Field, 3, ""},
-		{"OptionalHeader32.MinorImageVersion", Field, 3, ""},
-		{"OptionalHeader32.MinorLinkerVersion", Field, 3, ""},
-		{"OptionalHeader32.MinorOperatingSystemVersion", Field, 3, ""},
-		{"OptionalHeader32.MinorSubsystemVersion", Field, 3, ""},
-		{"OptionalHeader32.NumberOfRvaAndSizes", Field, 3, ""},
-		{"OptionalHeader32.SectionAlignment", Field, 3, ""},
-		{"OptionalHeader32.SizeOfCode", Field, 3, ""},
-		{"OptionalHeader32.SizeOfHeaders", Field, 3, ""},
-		{"OptionalHeader32.SizeOfHeapCommit", Field, 3, ""},
-		{"OptionalHeader32.SizeOfHeapReserve", Field, 3, ""},
-		{"OptionalHeader32.SizeOfImage", Field, 3, ""},
-		{"OptionalHeader32.SizeOfInitializedData", Field, 3, ""},
-		{"OptionalHeader32.SizeOfStackCommit", Field, 3, ""},
-		{"OptionalHeader32.SizeOfStackReserve", Field, 3, ""},
-		{"OptionalHeader32.SizeOfUninitializedData", Field, 3, ""},
-		{"OptionalHeader32.Subsystem", Field, 3, ""},
-		{"OptionalHeader32.Win32VersionValue", Field, 3, ""},
-		{"OptionalHeader64", Type, 3, ""},
-		{"OptionalHeader64.AddressOfEntryPoint", Field, 3, ""},
-		{"OptionalHeader64.BaseOfCode", Field, 3, ""},
-		{"OptionalHeader64.CheckSum", Field, 3, ""},
-		{"OptionalHeader64.DataDirectory", Field, 3, ""},
-		{"OptionalHeader64.DllCharacteristics", Field, 3, ""},
-		{"OptionalHeader64.FileAlignment", Field, 3, ""},
-		{"OptionalHeader64.ImageBase", Field, 3, ""},
-		{"OptionalHeader64.LoaderFlags", Field, 3, ""},
-		{"OptionalHeader64.Magic", Field, 3, ""},
-		{"OptionalHeader64.MajorImageVersion", Field, 3, ""},
-		{"OptionalHeader64.MajorLinkerVersion", Field, 3, ""},
-		{"OptionalHeader64.MajorOperatingSystemVersion", Field, 3, ""},
-		{"OptionalHeader64.MajorSubsystemVersion", Field, 3, ""},
-		{"OptionalHeader64.MinorImageVersion", Field, 3, ""},
-		{"OptionalHeader64.MinorLinkerVersion", Field, 3, ""},
-		{"OptionalHeader64.MinorOperatingSystemVersion", Field, 3, ""},
-		{"OptionalHeader64.MinorSubsystemVersion", Field, 3, ""},
-		{"OptionalHeader64.NumberOfRvaAndSizes", Field, 3, ""},
-		{"OptionalHeader64.SectionAlignment", Field, 3, ""},
-		{"OptionalHeader64.SizeOfCode", Field, 3, ""},
-		{"OptionalHeader64.SizeOfHeaders", Field, 3, ""},
-		{"OptionalHeader64.SizeOfHeapCommit", Field, 3, ""},
-		{"OptionalHeader64.SizeOfHeapReserve", Field, 3, ""},
-		{"OptionalHeader64.SizeOfImage", Field, 3, ""},
-		{"OptionalHeader64.SizeOfInitializedData", Field, 3, ""},
-		{"OptionalHeader64.SizeOfStackCommit", Field, 3, ""},
-		{"OptionalHeader64.SizeOfStackReserve", Field, 3, ""},
-		{"OptionalHeader64.SizeOfUninitializedData", Field, 3, ""},
-		{"OptionalHeader64.Subsystem", Field, 3, ""},
-		{"OptionalHeader64.Win32VersionValue", Field, 3, ""},
-		{"Reloc", Type, 8, ""},
-		{"Reloc.SymbolTableIndex", Field, 8, ""},
-		{"Reloc.Type", Field, 8, ""},
-		{"Reloc.VirtualAddress", Field, 8, ""},
-		{"Section", Type, 0, ""},
-		{"Section.ReaderAt", Field, 0, ""},
-		{"Section.Relocs", Field, 8, ""},
-		{"Section.SectionHeader", Field, 0, ""},
-		{"SectionHeader", Type, 0, ""},
-		{"SectionHeader.Characteristics", Field, 0, ""},
-		{"SectionHeader.Name", Field, 0, ""},
-		{"SectionHeader.NumberOfLineNumbers", Field, 0, ""},
-		{"SectionHeader.NumberOfRelocations", Field, 0, ""},
-		{"SectionHeader.Offset", Field, 0, ""},
-		{"SectionHeader.PointerToLineNumbers", Field, 0, ""},
-		{"SectionHeader.PointerToRelocations", Field, 0, ""},
-		{"SectionHeader.Size", Field, 0, ""},
-		{"SectionHeader.VirtualAddress", Field, 0, ""},
-		{"SectionHeader.VirtualSize", Field, 0, ""},
-		{"SectionHeader32", Type, 0, ""},
-		{"SectionHeader32.Characteristics", Field, 0, ""},
-		{"SectionHeader32.Name", Field, 0, ""},
-		{"SectionHeader32.NumberOfLineNumbers", Field, 0, ""},
-		{"SectionHeader32.NumberOfRelocations", Field, 0, ""},
-		{"SectionHeader32.PointerToLineNumbers", Field, 0, ""},
-		{"SectionHeader32.PointerToRawData", Field, 0, ""},
-		{"SectionHeader32.PointerToRelocations", Field, 0, ""},
-		{"SectionHeader32.SizeOfRawData", Field, 0, ""},
-		{"SectionHeader32.VirtualAddress", Field, 0, ""},
-		{"SectionHeader32.VirtualSize", Field, 0, ""},
-		{"StringTable", Type, 8, ""},
-		{"Symbol", Type, 1, ""},
-		{"Symbol.Name", Field, 1, ""},
-		{"Symbol.SectionNumber", Field, 1, ""},
-		{"Symbol.StorageClass", Field, 1, ""},
-		{"Symbol.Type", Field, 1, ""},
-		{"Symbol.Value", Field, 1, ""},
+		{"(*COFFSymbol).FullName", Method, 8},
+		{"(*File).COFFSymbolReadSectionDefAux", Method, 19},
+		{"(*File).Close", Method, 0},
+		{"(*File).DWARF", Method, 0},
+		{"(*File).ImportedLibraries", Method, 0},
+		{"(*File).ImportedSymbols", Method, 0},
+		{"(*File).Section", Method, 0},
+		{"(*FormatError).Error", Method, 0},
+		{"(*Section).Data", Method, 0},
+		{"(*Section).Open", Method, 0},
+		{"(Section).ReadAt", Method, 0},
+		{"(StringTable).String", Method, 8},
+		{"COFFSymbol", Type, 1},
+		{"COFFSymbol.Name", Field, 1},
+		{"COFFSymbol.NumberOfAuxSymbols", Field, 1},
+		{"COFFSymbol.SectionNumber", Field, 1},
+		{"COFFSymbol.StorageClass", Field, 1},
+		{"COFFSymbol.Type", Field, 1},
+		{"COFFSymbol.Value", Field, 1},
+		{"COFFSymbolAuxFormat5", Type, 19},
+		{"COFFSymbolAuxFormat5.Checksum", Field, 19},
+		{"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19},
+		{"COFFSymbolAuxFormat5.NumRelocs", Field, 19},
+		{"COFFSymbolAuxFormat5.SecNum", Field, 19},
+		{"COFFSymbolAuxFormat5.Selection", Field, 19},
+		{"COFFSymbolAuxFormat5.Size", Field, 19},
+		{"COFFSymbolSize", Const, 1},
+		{"DataDirectory", Type, 3},
+		{"DataDirectory.Size", Field, 3},
+		{"DataDirectory.VirtualAddress", Field, 3},
+		{"File", Type, 0},
+		{"File.COFFSymbols", Field, 8},
+		{"File.FileHeader", Field, 0},
+		{"File.OptionalHeader", Field, 3},
+		{"File.Sections", Field, 0},
+		{"File.StringTable", Field, 8},
+		{"File.Symbols", Field, 1},
+		{"FileHeader", Type, 0},
+		{"FileHeader.Characteristics", Field, 0},
+		{"FileHeader.Machine", Field, 0},
+		{"FileHeader.NumberOfSections", Field, 0},
+		{"FileHeader.NumberOfSymbols", Field, 0},
+		{"FileHeader.PointerToSymbolTable", Field, 0},
+		{"FileHeader.SizeOfOptionalHeader", Field, 0},
+		{"FileHeader.TimeDateStamp", Field, 0},
+		{"FormatError", Type, 0},
+		{"IMAGE_COMDAT_SELECT_ANY", Const, 19},
+		{"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19},
+		{"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19},
+		{"IMAGE_COMDAT_SELECT_LARGEST", Const, 19},
+		{"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19},
+		{"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19},
+		{"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11},
+		{"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11},
+		{"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15},
+		{"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15},
+		{"IMAGE_FILE_32BIT_MACHINE", Const, 15},
+		{"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15},
+		{"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15},
+		{"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15},
+		{"IMAGE_FILE_DEBUG_STRIPPED", Const, 15},
+		{"IMAGE_FILE_DLL", Const, 15},
+		{"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15},
+		{"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15},
+		{"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15},
+		{"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15},
+		{"IMAGE_FILE_MACHINE_AM33", Const, 0},
+		{"IMAGE_FILE_MACHINE_AMD64", Const, 0},
+		{"IMAGE_FILE_MACHINE_ARM", Const, 0},
+		{"IMAGE_FILE_MACHINE_ARM64", Const, 11},
+		{"IMAGE_FILE_MACHINE_ARMNT", Const, 12},
+		{"IMAGE_FILE_MACHINE_EBC", Const, 0},
+		{"IMAGE_FILE_MACHINE_I386", Const, 0},
+		{"IMAGE_FILE_MACHINE_IA64", Const, 0},
+		{"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19},
+		{"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19},
+		{"IMAGE_FILE_MACHINE_M32R", Const, 0},
+		{"IMAGE_FILE_MACHINE_MIPS16", Const, 0},
+		{"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0},
+		{"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0},
+		{"IMAGE_FILE_MACHINE_POWERPC", Const, 0},
+		{"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0},
+		{"IMAGE_FILE_MACHINE_R4000", Const, 0},
+		{"IMAGE_FILE_MACHINE_RISCV128", Const, 20},
+		{"IMAGE_FILE_MACHINE_RISCV32", Const, 20},
+		{"IMAGE_FILE_MACHINE_RISCV64", Const, 20},
+		{"IMAGE_FILE_MACHINE_SH3", Const, 0},
+		{"IMAGE_FILE_MACHINE_SH3DSP", Const, 0},
+		{"IMAGE_FILE_MACHINE_SH4", Const, 0},
+		{"IMAGE_FILE_MACHINE_SH5", Const, 0},
+		{"IMAGE_FILE_MACHINE_THUMB", Const, 0},
+		{"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0},
+		{"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0},
+		{"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15},
+		{"IMAGE_FILE_RELOCS_STRIPPED", Const, 15},
+		{"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15},
+		{"IMAGE_FILE_SYSTEM", Const, 15},
+		{"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15},
+		{"IMAGE_SCN_CNT_CODE", Const, 19},
+		{"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19},
+		{"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19},
+		{"IMAGE_SCN_LNK_COMDAT", Const, 19},
+		{"IMAGE_SCN_MEM_DISCARDABLE", Const, 19},
+		{"IMAGE_SCN_MEM_EXECUTE", Const, 19},
+		{"IMAGE_SCN_MEM_READ", Const, 19},
+		{"IMAGE_SCN_MEM_WRITE", Const, 19},
+		{"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15},
+		{"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15},
+		{"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15},
+		{"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15},
+		{"IMAGE_SUBSYSTEM_NATIVE", Const, 15},
+		{"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15},
+		{"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15},
+		{"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15},
+		{"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15},
+		{"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15},
+		{"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15},
+		{"IMAGE_SUBSYSTEM_XBOX", Const, 15},
+		{"ImportDirectory", Type, 0},
+		{"ImportDirectory.FirstThunk", Field, 0},
+		{"ImportDirectory.ForwarderChain", Field, 0},
+		{"ImportDirectory.Name", Field, 0},
+		{"ImportDirectory.OriginalFirstThunk", Field, 0},
+		{"ImportDirectory.TimeDateStamp", Field, 0},
+		{"NewFile", Func, 0},
+		{"Open", Func, 0},
+		{"OptionalHeader32", Type, 3},
+		{"OptionalHeader32.AddressOfEntryPoint", Field, 3},
+		{"OptionalHeader32.BaseOfCode", Field, 3},
+		{"OptionalHeader32.BaseOfData", Field, 3},
+		{"OptionalHeader32.CheckSum", Field, 3},
+		{"OptionalHeader32.DataDirectory", Field, 3},
+		{"OptionalHeader32.DllCharacteristics", Field, 3},
+		{"OptionalHeader32.FileAlignment", Field, 3},
+		{"OptionalHeader32.ImageBase", Field, 3},
+		{"OptionalHeader32.LoaderFlags", Field, 3},
+		{"OptionalHeader32.Magic", Field, 3},
+		{"OptionalHeader32.MajorImageVersion", Field, 3},
+		{"OptionalHeader32.MajorLinkerVersion", Field, 3},
+		{"OptionalHeader32.MajorOperatingSystemVersion", Field, 3},
+		{"OptionalHeader32.MajorSubsystemVersion", Field, 3},
+		{"OptionalHeader32.MinorImageVersion", Field, 3},
+		{"OptionalHeader32.MinorLinkerVersion", Field, 3},
+		{"OptionalHeader32.MinorOperatingSystemVersion", Field, 3},
+		{"OptionalHeader32.MinorSubsystemVersion", Field, 3},
+		{"OptionalHeader32.NumberOfRvaAndSizes", Field, 3},
+		{"OptionalHeader32.SectionAlignment", Field, 3},
+		{"OptionalHeader32.SizeOfCode", Field, 3},
+		{"OptionalHeader32.SizeOfHeaders", Field, 3},
+		{"OptionalHeader32.SizeOfHeapCommit", Field, 3},
+		{"OptionalHeader32.SizeOfHeapReserve", Field, 3},
+		{"OptionalHeader32.SizeOfImage", Field, 3},
+		{"OptionalHeader32.SizeOfInitializedData", Field, 3},
+		{"OptionalHeader32.SizeOfStackCommit", Field, 3},
+		{"OptionalHeader32.SizeOfStackReserve", Field, 3},
+		{"OptionalHeader32.SizeOfUninitializedData", Field, 3},
+		{"OptionalHeader32.Subsystem", Field, 3},
+		{"OptionalHeader32.Win32VersionValue", Field, 3},
+		{"OptionalHeader64", Type, 3},
+		{"OptionalHeader64.AddressOfEntryPoint", Field, 3},
+		{"OptionalHeader64.BaseOfCode", Field, 3},
+		{"OptionalHeader64.CheckSum", Field, 3},
+		{"OptionalHeader64.DataDirectory", Field, 3},
+		{"OptionalHeader64.DllCharacteristics", Field, 3},
+		{"OptionalHeader64.FileAlignment", Field, 3},
+		{"OptionalHeader64.ImageBase", Field, 3},
+		{"OptionalHeader64.LoaderFlags", Field, 3},
+		{"OptionalHeader64.Magic", Field, 3},
+		{"OptionalHeader64.MajorImageVersion", Field, 3},
+		{"OptionalHeader64.MajorLinkerVersion", Field, 3},
+		{"OptionalHeader64.MajorOperatingSystemVersion", Field, 3},
+		{"OptionalHeader64.MajorSubsystemVersion", Field, 3},
+		{"OptionalHeader64.MinorImageVersion", Field, 3},
+		{"OptionalHeader64.MinorLinkerVersion", Field, 3},
+		{"OptionalHeader64.MinorOperatingSystemVersion", Field, 3},
+		{"OptionalHeader64.MinorSubsystemVersion", Field, 3},
+		{"OptionalHeader64.NumberOfRvaAndSizes", Field, 3},
+		{"OptionalHeader64.SectionAlignment", Field, 3},
+		{"OptionalHeader64.SizeOfCode", Field, 3},
+		{"OptionalHeader64.SizeOfHeaders", Field, 3},
+		{"OptionalHeader64.SizeOfHeapCommit", Field, 3},
+		{"OptionalHeader64.SizeOfHeapReserve", Field, 3},
+		{"OptionalHeader64.SizeOfImage", Field, 3},
+		{"OptionalHeader64.SizeOfInitializedData", Field, 3},
+		{"OptionalHeader64.SizeOfStackCommit", Field, 3},
+		{"OptionalHeader64.SizeOfStackReserve", Field, 3},
+		{"OptionalHeader64.SizeOfUninitializedData", Field, 3},
+		{"OptionalHeader64.Subsystem", Field, 3},
+		{"OptionalHeader64.Win32VersionValue", Field, 3},
+		{"Reloc", Type, 8},
+		{"Reloc.SymbolTableIndex", Field, 8},
+		{"Reloc.Type", Field, 8},
+		{"Reloc.VirtualAddress", Field, 8},
+		{"Section", Type, 0},
+		{"Section.ReaderAt", Field, 0},
+		{"Section.Relocs", Field, 8},
+		{"Section.SectionHeader", Field, 0},
+		{"SectionHeader", Type, 0},
+		{"SectionHeader.Characteristics", Field, 0},
+		{"SectionHeader.Name", Field, 0},
+		{"SectionHeader.NumberOfLineNumbers", Field, 0},
+		{"SectionHeader.NumberOfRelocations", Field, 0},
+		{"SectionHeader.Offset", Field, 0},
+		{"SectionHeader.PointerToLineNumbers", Field, 0},
+		{"SectionHeader.PointerToRelocations", Field, 0},
+		{"SectionHeader.Size", Field, 0},
+		{"SectionHeader.VirtualAddress", Field, 0},
+		{"SectionHeader.VirtualSize", Field, 0},
+		{"SectionHeader32", Type, 0},
+		{"SectionHeader32.Characteristics", Field, 0},
+		{"SectionHeader32.Name", Field, 0},
+		{"SectionHeader32.NumberOfLineNumbers", Field, 0},
+		{"SectionHeader32.NumberOfRelocations", Field, 0},
+		{"SectionHeader32.PointerToLineNumbers", Field, 0},
+		{"SectionHeader32.PointerToRawData", Field, 0},
+		{"SectionHeader32.PointerToRelocations", Field, 0},
+		{"SectionHeader32.SizeOfRawData", Field, 0},
+		{"SectionHeader32.VirtualAddress", Field, 0},
+		{"SectionHeader32.VirtualSize", Field, 0},
+		{"StringTable", Type, 8},
+		{"Symbol", Type, 1},
+		{"Symbol.Name", Field, 1},
+		{"Symbol.SectionNumber", Field, 1},
+		{"Symbol.StorageClass", Field, 1},
+		{"Symbol.Type", Field, 1},
+		{"Symbol.Value", Field, 1},
 	},
 	"debug/plan9obj": {
-		{"(*File).Close", Method, 3, ""},
-		{"(*File).Section", Method, 3, ""},
-		{"(*File).Symbols", Method, 3, ""},
-		{"(*Section).Data", Method, 3, ""},
-		{"(*Section).Open", Method, 3, ""},
-		{"(Section).ReadAt", Method, 3, ""},
-		{"ErrNoSymbols", Var, 18, ""},
-		{"File", Type, 3, ""},
-		{"File.FileHeader", Field, 3, ""},
-		{"File.Sections", Field, 3, ""},
-		{"FileHeader", Type, 3, ""},
-		{"FileHeader.Bss", Field, 3, ""},
-		{"FileHeader.Entry", Field, 3, ""},
-		{"FileHeader.HdrSize", Field, 4, ""},
-		{"FileHeader.LoadAddress", Field, 4, ""},
-		{"FileHeader.Magic", Field, 3, ""},
-		{"FileHeader.PtrSize", Field, 3, ""},
-		{"Magic386", Const, 3, ""},
-		{"Magic64", Const, 3, ""},
-		{"MagicAMD64", Const, 3, ""},
-		{"MagicARM", Const, 3, ""},
-		{"NewFile", Func, 3, "func(r io.ReaderAt) (*File, error)"},
-		{"Open", Func, 3, "func(name string) (*File, error)"},
-		{"Section", Type, 3, ""},
-		{"Section.ReaderAt", Field, 3, ""},
-		{"Section.SectionHeader", Field, 3, ""},
-		{"SectionHeader", Type, 3, ""},
-		{"SectionHeader.Name", Field, 3, ""},
-		{"SectionHeader.Offset", Field, 3, ""},
-		{"SectionHeader.Size", Field, 3, ""},
-		{"Sym", Type, 3, ""},
-		{"Sym.Name", Field, 3, ""},
-		{"Sym.Type", Field, 3, ""},
-		{"Sym.Value", Field, 3, ""},
+		{"(*File).Close", Method, 3},
+		{"(*File).Section", Method, 3},
+		{"(*File).Symbols", Method, 3},
+		{"(*Section).Data", Method, 3},
+		{"(*Section).Open", Method, 3},
+		{"(Section).ReadAt", Method, 3},
+		{"ErrNoSymbols", Var, 18},
+		{"File", Type, 3},
+		{"File.FileHeader", Field, 3},
+		{"File.Sections", Field, 3},
+		{"FileHeader", Type, 3},
+		{"FileHeader.Bss", Field, 3},
+		{"FileHeader.Entry", Field, 3},
+		{"FileHeader.HdrSize", Field, 4},
+		{"FileHeader.LoadAddress", Field, 4},
+		{"FileHeader.Magic", Field, 3},
+		{"FileHeader.PtrSize", Field, 3},
+		{"Magic386", Const, 3},
+		{"Magic64", Const, 3},
+		{"MagicAMD64", Const, 3},
+		{"MagicARM", Const, 3},
+		{"NewFile", Func, 3},
+		{"Open", Func, 3},
+		{"Section", Type, 3},
+		{"Section.ReaderAt", Field, 3},
+		{"Section.SectionHeader", Field, 3},
+		{"SectionHeader", Type, 3},
+		{"SectionHeader.Name", Field, 3},
+		{"SectionHeader.Offset", Field, 3},
+		{"SectionHeader.Size", Field, 3},
+		{"Sym", Type, 3},
+		{"Sym.Name", Field, 3},
+		{"Sym.Type", Field, 3},
+		{"Sym.Value", Field, 3},
 	},
 	"embed": {
-		{"(FS).Open", Method, 16, ""},
-		{"(FS).ReadDir", Method, 16, ""},
-		{"(FS).ReadFile", Method, 16, ""},
-		{"FS", Type, 16, ""},
+		{"(FS).Open", Method, 16},
+		{"(FS).ReadDir", Method, 16},
+		{"(FS).ReadFile", Method, 16},
+		{"FS", Type, 16},
 	},
 	"encoding": {
-		{"BinaryAppender", Type, 24, ""},
-		{"BinaryMarshaler", Type, 2, ""},
-		{"BinaryUnmarshaler", Type, 2, ""},
-		{"TextAppender", Type, 24, ""},
-		{"TextMarshaler", Type, 2, ""},
-		{"TextUnmarshaler", Type, 2, ""},
+		{"BinaryAppender", Type, 24},
+		{"BinaryMarshaler", Type, 2},
+		{"BinaryUnmarshaler", Type, 2},
+		{"TextAppender", Type, 24},
+		{"TextMarshaler", Type, 2},
+		{"TextUnmarshaler", Type, 2},
 	},
 	"encoding/ascii85": {
-		{"(CorruptInputError).Error", Method, 0, ""},
-		{"CorruptInputError", Type, 0, ""},
-		{"Decode", Func, 0, "func(dst []byte, src []byte, flush bool) (ndst int, nsrc int, err error)"},
-		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
-		{"MaxEncodedLen", Func, 0, "func(n int) int"},
-		{"NewDecoder", Func, 0, "func(r io.Reader) io.Reader"},
-		{"NewEncoder", Func, 0, "func(w io.Writer) io.WriteCloser"},
+		{"(CorruptInputError).Error", Method, 0},
+		{"CorruptInputError", Type, 0},
+		{"Decode", Func, 0},
+		{"Encode", Func, 0},
+		{"MaxEncodedLen", Func, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
 	},
 	"encoding/asn1": {
-		{"(BitString).At", Method, 0, ""},
-		{"(BitString).RightAlign", Method, 0, ""},
-		{"(ObjectIdentifier).Equal", Method, 0, ""},
-		{"(ObjectIdentifier).String", Method, 3, ""},
-		{"(StructuralError).Error", Method, 0, ""},
-		{"(SyntaxError).Error", Method, 0, ""},
-		{"BitString", Type, 0, ""},
-		{"BitString.BitLength", Field, 0, ""},
-		{"BitString.Bytes", Field, 0, ""},
-		{"ClassApplication", Const, 6, ""},
-		{"ClassContextSpecific", Const, 6, ""},
-		{"ClassPrivate", Const, 6, ""},
-		{"ClassUniversal", Const, 6, ""},
-		{"Enumerated", Type, 0, ""},
-		{"Flag", Type, 0, ""},
-		{"Marshal", Func, 0, "func(val any) ([]byte, error)"},
-		{"MarshalWithParams", Func, 10, "func(val any, params string) ([]byte, error)"},
-		{"NullBytes", Var, 9, ""},
-		{"NullRawValue", Var, 9, ""},
-		{"ObjectIdentifier", Type, 0, ""},
-		{"RawContent", Type, 0, ""},
-		{"RawValue", Type, 0, ""},
-		{"RawValue.Bytes", Field, 0, ""},
-		{"RawValue.Class", Field, 0, ""},
-		{"RawValue.FullBytes", Field, 0, ""},
-		{"RawValue.IsCompound", Field, 0, ""},
-		{"RawValue.Tag", Field, 0, ""},
-		{"StructuralError", Type, 0, ""},
-		{"StructuralError.Msg", Field, 0, ""},
-		{"SyntaxError", Type, 0, ""},
-		{"SyntaxError.Msg", Field, 0, ""},
-		{"TagBMPString", Const, 14, ""},
-		{"TagBitString", Const, 6, ""},
-		{"TagBoolean", Const, 6, ""},
-		{"TagEnum", Const, 6, ""},
-		{"TagGeneralString", Const, 6, ""},
-		{"TagGeneralizedTime", Const, 6, ""},
-		{"TagIA5String", Const, 6, ""},
-		{"TagInteger", Const, 6, ""},
-		{"TagNull", Const, 9, ""},
-		{"TagNumericString", Const, 10, ""},
-		{"TagOID", Const, 6, ""},
-		{"TagOctetString", Const, 6, ""},
-		{"TagPrintableString", Const, 6, ""},
-		{"TagSequence", Const, 6, ""},
-		{"TagSet", Const, 6, ""},
-		{"TagT61String", Const, 6, ""},
-		{"TagUTCTime", Const, 6, ""},
-		{"TagUTF8String", Const, 6, ""},
-		{"Unmarshal", Func, 0, "func(b []byte, val any) (rest []byte, err error)"},
-		{"UnmarshalWithParams", Func, 0, "func(b []byte, val any, params string) (rest []byte, err error)"},
+		{"(BitString).At", Method, 0},
+		{"(BitString).RightAlign", Method, 0},
+		{"(ObjectIdentifier).Equal", Method, 0},
+		{"(ObjectIdentifier).String", Method, 3},
+		{"(StructuralError).Error", Method, 0},
+		{"(SyntaxError).Error", Method, 0},
+		{"BitString", Type, 0},
+		{"BitString.BitLength", Field, 0},
+		{"BitString.Bytes", Field, 0},
+		{"ClassApplication", Const, 6},
+		{"ClassContextSpecific", Const, 6},
+		{"ClassPrivate", Const, 6},
+		{"ClassUniversal", Const, 6},
+		{"Enumerated", Type, 0},
+		{"Flag", Type, 0},
+		{"Marshal", Func, 0},
+		{"MarshalWithParams", Func, 10},
+		{"NullBytes", Var, 9},
+		{"NullRawValue", Var, 9},
+		{"ObjectIdentifier", Type, 0},
+		{"RawContent", Type, 0},
+		{"RawValue", Type, 0},
+		{"RawValue.Bytes", Field, 0},
+		{"RawValue.Class", Field, 0},
+		{"RawValue.FullBytes", Field, 0},
+		{"RawValue.IsCompound", Field, 0},
+		{"RawValue.Tag", Field, 0},
+		{"StructuralError", Type, 0},
+		{"StructuralError.Msg", Field, 0},
+		{"SyntaxError", Type, 0},
+		{"SyntaxError.Msg", Field, 0},
+		{"TagBMPString", Const, 14},
+		{"TagBitString", Const, 6},
+		{"TagBoolean", Const, 6},
+		{"TagEnum", Const, 6},
+		{"TagGeneralString", Const, 6},
+		{"TagGeneralizedTime", Const, 6},
+		{"TagIA5String", Const, 6},
+		{"TagInteger", Const, 6},
+		{"TagNull", Const, 9},
+		{"TagNumericString", Const, 10},
+		{"TagOID", Const, 6},
+		{"TagOctetString", Const, 6},
+		{"TagPrintableString", Const, 6},
+		{"TagSequence", Const, 6},
+		{"TagSet", Const, 6},
+		{"TagT61String", Const, 6},
+		{"TagUTCTime", Const, 6},
+		{"TagUTF8String", Const, 6},
+		{"Unmarshal", Func, 0},
+		{"UnmarshalWithParams", Func, 0},
 	},
 	"encoding/base32": {
-		{"(*Encoding).AppendDecode", Method, 22, ""},
-		{"(*Encoding).AppendEncode", Method, 22, ""},
-		{"(*Encoding).Decode", Method, 0, ""},
-		{"(*Encoding).DecodeString", Method, 0, ""},
-		{"(*Encoding).DecodedLen", Method, 0, ""},
-		{"(*Encoding).Encode", Method, 0, ""},
-		{"(*Encoding).EncodeToString", Method, 0, ""},
-		{"(*Encoding).EncodedLen", Method, 0, ""},
-		{"(CorruptInputError).Error", Method, 0, ""},
-		{"(Encoding).WithPadding", Method, 9, ""},
-		{"CorruptInputError", Type, 0, ""},
-		{"Encoding", Type, 0, ""},
-		{"HexEncoding", Var, 0, ""},
-		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
-		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
-		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
-		{"NoPadding", Const, 9, ""},
-		{"StdEncoding", Var, 0, ""},
-		{"StdPadding", Const, 9, ""},
+		{"(*Encoding).AppendDecode", Method, 22},
+		{"(*Encoding).AppendEncode", Method, 22},
+		{"(*Encoding).Decode", Method, 0},
+		{"(*Encoding).DecodeString", Method, 0},
+		{"(*Encoding).DecodedLen", Method, 0},
+		{"(*Encoding).Encode", Method, 0},
+		{"(*Encoding).EncodeToString", Method, 0},
+		{"(*Encoding).EncodedLen", Method, 0},
+		{"(CorruptInputError).Error", Method, 0},
+		{"(Encoding).WithPadding", Method, 9},
+		{"CorruptInputError", Type, 0},
+		{"Encoding", Type, 0},
+		{"HexEncoding", Var, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
+		{"NewEncoding", Func, 0},
+		{"NoPadding", Const, 9},
+		{"StdEncoding", Var, 0},
+		{"StdPadding", Const, 9},
 	},
 	"encoding/base64": {
-		{"(*Encoding).AppendDecode", Method, 22, ""},
-		{"(*Encoding).AppendEncode", Method, 22, ""},
-		{"(*Encoding).Decode", Method, 0, ""},
-		{"(*Encoding).DecodeString", Method, 0, ""},
-		{"(*Encoding).DecodedLen", Method, 0, ""},
-		{"(*Encoding).Encode", Method, 0, ""},
-		{"(*Encoding).EncodeToString", Method, 0, ""},
-		{"(*Encoding).EncodedLen", Method, 0, ""},
-		{"(CorruptInputError).Error", Method, 0, ""},
-		{"(Encoding).Strict", Method, 8, ""},
-		{"(Encoding).WithPadding", Method, 5, ""},
-		{"CorruptInputError", Type, 0, ""},
-		{"Encoding", Type, 0, ""},
-		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
-		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
-		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
-		{"NoPadding", Const, 5, ""},
-		{"RawStdEncoding", Var, 5, ""},
-		{"RawURLEncoding", Var, 5, ""},
-		{"StdEncoding", Var, 0, ""},
-		{"StdPadding", Const, 5, ""},
-		{"URLEncoding", Var, 0, ""},
+		{"(*Encoding).AppendDecode", Method, 22},
+		{"(*Encoding).AppendEncode", Method, 22},
+		{"(*Encoding).Decode", Method, 0},
+		{"(*Encoding).DecodeString", Method, 0},
+		{"(*Encoding).DecodedLen", Method, 0},
+		{"(*Encoding).Encode", Method, 0},
+		{"(*Encoding).EncodeToString", Method, 0},
+		{"(*Encoding).EncodedLen", Method, 0},
+		{"(CorruptInputError).Error", Method, 0},
+		{"(Encoding).Strict", Method, 8},
+		{"(Encoding).WithPadding", Method, 5},
+		{"CorruptInputError", Type, 0},
+		{"Encoding", Type, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
+		{"NewEncoding", Func, 0},
+		{"NoPadding", Const, 5},
+		{"RawStdEncoding", Var, 5},
+		{"RawURLEncoding", Var, 5},
+		{"StdEncoding", Var, 0},
+		{"StdPadding", Const, 5},
+		{"URLEncoding", Var, 0},
 	},
 	"encoding/binary": {
-		{"Append", Func, 23, "func(buf []byte, order ByteOrder, data any) ([]byte, error)"},
-		{"AppendByteOrder", Type, 19, ""},
-		{"AppendUvarint", Func, 19, "func(buf []byte, x uint64) []byte"},
-		{"AppendVarint", Func, 19, "func(buf []byte, x int64) []byte"},
-		{"BigEndian", Var, 0, ""},
-		{"ByteOrder", Type, 0, ""},
-		{"Decode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
-		{"Encode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
-		{"LittleEndian", Var, 0, ""},
-		{"MaxVarintLen16", Const, 0, ""},
-		{"MaxVarintLen32", Const, 0, ""},
-		{"MaxVarintLen64", Const, 0, ""},
-		{"NativeEndian", Var, 21, ""},
-		{"PutUvarint", Func, 0, "func(buf []byte, x uint64) int"},
-		{"PutVarint", Func, 0, "func(buf []byte, x int64) int"},
-		{"Read", Func, 0, "func(r io.Reader, order ByteOrder, data any) error"},
-		{"ReadUvarint", Func, 0, "func(r io.ByteReader) (uint64, error)"},
-		{"ReadVarint", Func, 0, "func(r io.ByteReader) (int64, error)"},
-		{"Size", Func, 0, "func(v any) int"},
-		{"Uvarint", Func, 0, "func(buf []byte) (uint64, int)"},
-		{"Varint", Func, 0, "func(buf []byte) (int64, int)"},
-		{"Write", Func, 0, "func(w io.Writer, order ByteOrder, data any) error"},
+		{"Append", Func, 23},
+		{"AppendByteOrder", Type, 19},
+		{"AppendUvarint", Func, 19},
+		{"AppendVarint", Func, 19},
+		{"BigEndian", Var, 0},
+		{"ByteOrder", Type, 0},
+		{"Decode", Func, 23},
+		{"Encode", Func, 23},
+		{"LittleEndian", Var, 0},
+		{"MaxVarintLen16", Const, 0},
+		{"MaxVarintLen32", Const, 0},
+		{"MaxVarintLen64", Const, 0},
+		{"NativeEndian", Var, 21},
+		{"PutUvarint", Func, 0},
+		{"PutVarint", Func, 0},
+		{"Read", Func, 0},
+		{"ReadUvarint", Func, 0},
+		{"ReadVarint", Func, 0},
+		{"Size", Func, 0},
+		{"Uvarint", Func, 0},
+		{"Varint", Func, 0},
+		{"Write", Func, 0},
 	},
 	"encoding/csv": {
-		{"(*ParseError).Error", Method, 0, ""},
-		{"(*ParseError).Unwrap", Method, 13, ""},
-		{"(*Reader).FieldPos", Method, 17, ""},
-		{"(*Reader).InputOffset", Method, 19, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Reader).ReadAll", Method, 0, ""},
-		{"(*Writer).Error", Method, 1, ""},
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"(*Writer).WriteAll", Method, 0, ""},
-		{"ErrBareQuote", Var, 0, ""},
-		{"ErrFieldCount", Var, 0, ""},
-		{"ErrQuote", Var, 0, ""},
-		{"ErrTrailingComma", Var, 0, ""},
-		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"ParseError", Type, 0, ""},
-		{"ParseError.Column", Field, 0, ""},
-		{"ParseError.Err", Field, 0, ""},
-		{"ParseError.Line", Field, 0, ""},
-		{"ParseError.StartLine", Field, 10, ""},
-		{"Reader", Type, 0, ""},
-		{"Reader.Comma", Field, 0, ""},
-		{"Reader.Comment", Field, 0, ""},
-		{"Reader.FieldsPerRecord", Field, 0, ""},
-		{"Reader.LazyQuotes", Field, 0, ""},
-		{"Reader.ReuseRecord", Field, 9, ""},
-		{"Reader.TrailingComma", Field, 0, ""},
-		{"Reader.TrimLeadingSpace", Field, 0, ""},
-		{"Writer", Type, 0, ""},
-		{"Writer.Comma", Field, 0, ""},
-		{"Writer.UseCRLF", Field, 0, ""},
+		{"(*ParseError).Error", Method, 0},
+		{"(*ParseError).Unwrap", Method, 13},
+		{"(*Reader).FieldPos", Method, 17},
+		{"(*Reader).InputOffset", Method, 19},
+		{"(*Reader).Read", Method, 0},
+		{"(*Reader).ReadAll", Method, 0},
+		{"(*Writer).Error", Method, 1},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).Write", Method, 0},
+		{"(*Writer).WriteAll", Method, 0},
+		{"ErrBareQuote", Var, 0},
+		{"ErrFieldCount", Var, 0},
+		{"ErrQuote", Var, 0},
+		{"ErrTrailingComma", Var, 0},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"ParseError", Type, 0},
+		{"ParseError.Column", Field, 0},
+		{"ParseError.Err", Field, 0},
+		{"ParseError.Line", Field, 0},
+		{"ParseError.StartLine", Field, 10},
+		{"Reader", Type, 0},
+		{"Reader.Comma", Field, 0},
+		{"Reader.Comment", Field, 0},
+		{"Reader.FieldsPerRecord", Field, 0},
+		{"Reader.LazyQuotes", Field, 0},
+		{"Reader.ReuseRecord", Field, 9},
+		{"Reader.TrailingComma", Field, 0},
+		{"Reader.TrimLeadingSpace", Field, 0},
+		{"Writer", Type, 0},
+		{"Writer.Comma", Field, 0},
+		{"Writer.UseCRLF", Field, 0},
 	},
 	"encoding/gob": {
-		{"(*Decoder).Decode", Method, 0, ""},
-		{"(*Decoder).DecodeValue", Method, 0, ""},
-		{"(*Encoder).Encode", Method, 0, ""},
-		{"(*Encoder).EncodeValue", Method, 0, ""},
-		{"CommonType", Type, 0, ""},
-		{"CommonType.Id", Field, 0, ""},
-		{"CommonType.Name", Field, 0, ""},
-		{"Decoder", Type, 0, ""},
-		{"Encoder", Type, 0, ""},
-		{"GobDecoder", Type, 0, ""},
-		{"GobEncoder", Type, 0, ""},
-		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
-		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
-		{"Register", Func, 0, "func(value any)"},
-		{"RegisterName", Func, 0, "func(name string, value any)"},
+		{"(*Decoder).Decode", Method, 0},
+		{"(*Decoder).DecodeValue", Method, 0},
+		{"(*Encoder).Encode", Method, 0},
+		{"(*Encoder).EncodeValue", Method, 0},
+		{"CommonType", Type, 0},
+		{"CommonType.Id", Field, 0},
+		{"CommonType.Name", Field, 0},
+		{"Decoder", Type, 0},
+		{"Encoder", Type, 0},
+		{"GobDecoder", Type, 0},
+		{"GobEncoder", Type, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
+		{"Register", Func, 0},
+		{"RegisterName", Func, 0},
 	},
 	"encoding/hex": {
-		{"(InvalidByteError).Error", Method, 0, ""},
-		{"AppendDecode", Func, 22, "func(dst []byte, src []byte) ([]byte, error)"},
-		{"AppendEncode", Func, 22, "func(dst []byte, src []byte) []byte"},
-		{"Decode", Func, 0, "func(dst []byte, src []byte) (int, error)"},
-		{"DecodeString", Func, 0, "func(s string) ([]byte, error)"},
-		{"DecodedLen", Func, 0, "func(x int) int"},
-		{"Dump", Func, 0, "func(data []byte) string"},
-		{"Dumper", Func, 0, "func(w io.Writer) io.WriteCloser"},
-		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
-		{"EncodeToString", Func, 0, "func(src []byte) string"},
-		{"EncodedLen", Func, 0, "func(n int) int"},
-		{"ErrLength", Var, 0, ""},
-		{"InvalidByteError", Type, 0, ""},
-		{"NewDecoder", Func, 10, "func(r io.Reader) io.Reader"},
-		{"NewEncoder", Func, 10, "func(w io.Writer) io.Writer"},
+		{"(InvalidByteError).Error", Method, 0},
+		{"AppendDecode", Func, 22},
+		{"AppendEncode", Func, 22},
+		{"Decode", Func, 0},
+		{"DecodeString", Func, 0},
+		{"DecodedLen", Func, 0},
+		{"Dump", Func, 0},
+		{"Dumper", Func, 0},
+		{"Encode", Func, 0},
+		{"EncodeToString", Func, 0},
+		{"EncodedLen", Func, 0},
+		{"ErrLength", Var, 0},
+		{"InvalidByteError", Type, 0},
+		{"NewDecoder", Func, 10},
+		{"NewEncoder", Func, 10},
 	},
 	"encoding/json": {
-		{"(*Decoder).Buffered", Method, 1, ""},
-		{"(*Decoder).Decode", Method, 0, ""},
-		{"(*Decoder).DisallowUnknownFields", Method, 10, ""},
-		{"(*Decoder).InputOffset", Method, 14, ""},
-		{"(*Decoder).More", Method, 5, ""},
-		{"(*Decoder).Token", Method, 5, ""},
-		{"(*Decoder).UseNumber", Method, 1, ""},
-		{"(*Encoder).Encode", Method, 0, ""},
-		{"(*Encoder).SetEscapeHTML", Method, 7, ""},
-		{"(*Encoder).SetIndent", Method, 7, ""},
-		{"(*InvalidUTF8Error).Error", Method, 0, ""},
-		{"(*InvalidUnmarshalError).Error", Method, 0, ""},
-		{"(*MarshalerError).Error", Method, 0, ""},
-		{"(*MarshalerError).Unwrap", Method, 13, ""},
-		{"(*RawMessage).MarshalJSON", Method, 0, ""},
-		{"(*RawMessage).UnmarshalJSON", Method, 0, ""},
-		{"(*SyntaxError).Error", Method, 0, ""},
-		{"(*UnmarshalFieldError).Error", Method, 0, ""},
-		{"(*UnmarshalTypeError).Error", Method, 0, ""},
-		{"(*UnsupportedTypeError).Error", Method, 0, ""},
-		{"(*UnsupportedValueError).Error", Method, 0, ""},
-		{"(Delim).String", Method, 5, ""},
-		{"(Number).Float64", Method, 1, ""},
-		{"(Number).Int64", Method, 1, ""},
-		{"(Number).String", Method, 1, ""},
-		{"(RawMessage).MarshalJSON", Method, 8, ""},
-		{"Compact", Func, 0, "func(dst *bytes.Buffer, src []byte) error"},
-		{"Decoder", Type, 0, ""},
-		{"Delim", Type, 5, ""},
-		{"Encoder", Type, 0, ""},
-		{"HTMLEscape", Func, 0, "func(dst *bytes.Buffer, src []byte)"},
-		{"Indent", Func, 0, "func(dst *bytes.Buffer, src []byte, prefix string, indent string) error"},
-		{"InvalidUTF8Error", Type, 0, ""},
-		{"InvalidUTF8Error.S", Field, 0, ""},
-		{"InvalidUnmarshalError", Type, 0, ""},
-		{"InvalidUnmarshalError.Type", Field, 0, ""},
-		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
-		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
-		{"Marshaler", Type, 0, ""},
-		{"MarshalerError", Type, 0, ""},
-		{"MarshalerError.Err", Field, 0, ""},
-		{"MarshalerError.Type", Field, 0, ""},
-		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
-		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
-		{"Number", Type, 1, ""},
-		{"RawMessage", Type, 0, ""},
-		{"SyntaxError", Type, 0, ""},
-		{"SyntaxError.Offset", Field, 0, ""},
-		{"Token", Type, 5, ""},
-		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
-		{"UnmarshalFieldError", Type, 0, ""},
-		{"UnmarshalFieldError.Field", Field, 0, ""},
-		{"UnmarshalFieldError.Key", Field, 0, ""},
-		{"UnmarshalFieldError.Type", Field, 0, ""},
-		{"UnmarshalTypeError", Type, 0, ""},
-		{"UnmarshalTypeError.Field", Field, 8, ""},
-		{"UnmarshalTypeError.Offset", Field, 5, ""},
-		{"UnmarshalTypeError.Struct", Field, 8, ""},
-		{"UnmarshalTypeError.Type", Field, 0, ""},
-		{"UnmarshalTypeError.Value", Field, 0, ""},
-		{"Unmarshaler", Type, 0, ""},
-		{"UnsupportedTypeError", Type, 0, ""},
-		{"UnsupportedTypeError.Type", Field, 0, ""},
-		{"UnsupportedValueError", Type, 0, ""},
-		{"UnsupportedValueError.Str", Field, 0, ""},
-		{"UnsupportedValueError.Value", Field, 0, ""},
-		{"Valid", Func, 9, "func(data []byte) bool"},
+		{"(*Decoder).Buffered", Method, 1},
+		{"(*Decoder).Decode", Method, 0},
+		{"(*Decoder).DisallowUnknownFields", Method, 10},
+		{"(*Decoder).InputOffset", Method, 14},
+		{"(*Decoder).More", Method, 5},
+		{"(*Decoder).Token", Method, 5},
+		{"(*Decoder).UseNumber", Method, 1},
+		{"(*Encoder).Encode", Method, 0},
+		{"(*Encoder).SetEscapeHTML", Method, 7},
+		{"(*Encoder).SetIndent", Method, 7},
+		{"(*InvalidUTF8Error).Error", Method, 0},
+		{"(*InvalidUnmarshalError).Error", Method, 0},
+		{"(*MarshalerError).Error", Method, 0},
+		{"(*MarshalerError).Unwrap", Method, 13},
+		{"(*RawMessage).MarshalJSON", Method, 0},
+		{"(*RawMessage).UnmarshalJSON", Method, 0},
+		{"(*SyntaxError).Error", Method, 0},
+		{"(*UnmarshalFieldError).Error", Method, 0},
+		{"(*UnmarshalTypeError).Error", Method, 0},
+		{"(*UnsupportedTypeError).Error", Method, 0},
+		{"(*UnsupportedValueError).Error", Method, 0},
+		{"(Delim).String", Method, 5},
+		{"(Number).Float64", Method, 1},
+		{"(Number).Int64", Method, 1},
+		{"(Number).String", Method, 1},
+		{"(RawMessage).MarshalJSON", Method, 8},
+		{"Compact", Func, 0},
+		{"Decoder", Type, 0},
+		{"Delim", Type, 5},
+		{"Encoder", Type, 0},
+		{"HTMLEscape", Func, 0},
+		{"Indent", Func, 0},
+		{"InvalidUTF8Error", Type, 0},
+		{"InvalidUTF8Error.S", Field, 0},
+		{"InvalidUnmarshalError", Type, 0},
+		{"InvalidUnmarshalError.Type", Field, 0},
+		{"Marshal", Func, 0},
+		{"MarshalIndent", Func, 0},
+		{"Marshaler", Type, 0},
+		{"MarshalerError", Type, 0},
+		{"MarshalerError.Err", Field, 0},
+		{"MarshalerError.Type", Field, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
+		{"Number", Type, 1},
+		{"RawMessage", Type, 0},
+		{"SyntaxError", Type, 0},
+		{"SyntaxError.Offset", Field, 0},
+		{"Token", Type, 5},
+		{"Unmarshal", Func, 0},
+		{"UnmarshalFieldError", Type, 0},
+		{"UnmarshalFieldError.Field", Field, 0},
+		{"UnmarshalFieldError.Key", Field, 0},
+		{"UnmarshalFieldError.Type", Field, 0},
+		{"UnmarshalTypeError", Type, 0},
+		{"UnmarshalTypeError.Field", Field, 8},
+		{"UnmarshalTypeError.Offset", Field, 5},
+		{"UnmarshalTypeError.Struct", Field, 8},
+		{"UnmarshalTypeError.Type", Field, 0},
+		{"UnmarshalTypeError.Value", Field, 0},
+		{"Unmarshaler", Type, 0},
+		{"UnsupportedTypeError", Type, 0},
+		{"UnsupportedTypeError.Type", Field, 0},
+		{"UnsupportedValueError", Type, 0},
+		{"UnsupportedValueError.Str", Field, 0},
+		{"UnsupportedValueError.Value", Field, 0},
+		{"Valid", Func, 9},
 	},
 	"encoding/pem": {
-		{"Block", Type, 0, ""},
-		{"Block.Bytes", Field, 0, ""},
-		{"Block.Headers", Field, 0, ""},
-		{"Block.Type", Field, 0, ""},
-		{"Decode", Func, 0, "func(data []byte) (p *Block, rest []byte)"},
-		{"Encode", Func, 0, "func(out io.Writer, b *Block) error"},
-		{"EncodeToMemory", Func, 0, "func(b *Block) []byte"},
+		{"Block", Type, 0},
+		{"Block.Bytes", Field, 0},
+		{"Block.Headers", Field, 0},
+		{"Block.Type", Field, 0},
+		{"Decode", Func, 0},
+		{"Encode", Func, 0},
+		{"EncodeToMemory", Func, 0},
 	},
 	"encoding/xml": {
-		{"(*Decoder).Decode", Method, 0, ""},
-		{"(*Decoder).DecodeElement", Method, 0, ""},
-		{"(*Decoder).InputOffset", Method, 4, ""},
-		{"(*Decoder).InputPos", Method, 19, ""},
-		{"(*Decoder).RawToken", Method, 0, ""},
-		{"(*Decoder).Skip", Method, 0, ""},
-		{"(*Decoder).Token", Method, 0, ""},
-		{"(*Encoder).Close", Method, 20, ""},
-		{"(*Encoder).Encode", Method, 0, ""},
-		{"(*Encoder).EncodeElement", Method, 2, ""},
-		{"(*Encoder).EncodeToken", Method, 2, ""},
-		{"(*Encoder).Flush", Method, 2, ""},
-		{"(*Encoder).Indent", Method, 1, ""},
-		{"(*SyntaxError).Error", Method, 0, ""},
-		{"(*TagPathError).Error", Method, 0, ""},
-		{"(*UnsupportedTypeError).Error", Method, 0, ""},
-		{"(CharData).Copy", Method, 0, ""},
-		{"(Comment).Copy", Method, 0, ""},
-		{"(Directive).Copy", Method, 0, ""},
-		{"(ProcInst).Copy", Method, 0, ""},
-		{"(StartElement).Copy", Method, 0, ""},
-		{"(StartElement).End", Method, 2, ""},
-		{"(UnmarshalError).Error", Method, 0, ""},
-		{"Attr", Type, 0, ""},
-		{"Attr.Name", Field, 0, ""},
-		{"Attr.Value", Field, 0, ""},
-		{"CharData", Type, 0, ""},
-		{"Comment", Type, 0, ""},
-		{"CopyToken", Func, 0, "func(t Token) Token"},
-		{"Decoder", Type, 0, ""},
-		{"Decoder.AutoClose", Field, 0, ""},
-		{"Decoder.CharsetReader", Field, 0, ""},
-		{"Decoder.DefaultSpace", Field, 1, ""},
-		{"Decoder.Entity", Field, 0, ""},
-		{"Decoder.Strict", Field, 0, ""},
-		{"Directive", Type, 0, ""},
-		{"Encoder", Type, 0, ""},
-		{"EndElement", Type, 0, ""},
-		{"EndElement.Name", Field, 0, ""},
-		{"Escape", Func, 0, "func(w io.Writer, s []byte)"},
-		{"EscapeText", Func, 1, "func(w io.Writer, s []byte) error"},
-		{"HTMLAutoClose", Var, 0, ""},
-		{"HTMLEntity", Var, 0, ""},
-		{"Header", Const, 0, ""},
-		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
-		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
-		{"Marshaler", Type, 2, ""},
-		{"MarshalerAttr", Type, 2, ""},
-		{"Name", Type, 0, ""},
-		{"Name.Local", Field, 0, ""},
-		{"Name.Space", Field, 0, ""},
-		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
-		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
-		{"NewTokenDecoder", Func, 10, "func(t TokenReader) *Decoder"},
-		{"ProcInst", Type, 0, ""},
-		{"ProcInst.Inst", Field, 0, ""},
-		{"ProcInst.Target", Field, 0, ""},
-		{"StartElement", Type, 0, ""},
-		{"StartElement.Attr", Field, 0, ""},
-		{"StartElement.Name", Field, 0, ""},
-		{"SyntaxError", Type, 0, ""},
-		{"SyntaxError.Line", Field, 0, ""},
-		{"SyntaxError.Msg", Field, 0, ""},
-		{"TagPathError", Type, 0, ""},
-		{"TagPathError.Field1", Field, 0, ""},
-		{"TagPathError.Field2", Field, 0, ""},
-		{"TagPathError.Struct", Field, 0, ""},
-		{"TagPathError.Tag1", Field, 0, ""},
-		{"TagPathError.Tag2", Field, 0, ""},
-		{"Token", Type, 0, ""},
-		{"TokenReader", Type, 10, ""},
-		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
-		{"UnmarshalError", Type, 0, ""},
-		{"Unmarshaler", Type, 2, ""},
-		{"UnmarshalerAttr", Type, 2, ""},
-		{"UnsupportedTypeError", Type, 0, ""},
-		{"UnsupportedTypeError.Type", Field, 0, ""},
+		{"(*Decoder).Decode", Method, 0},
+		{"(*Decoder).DecodeElement", Method, 0},
+		{"(*Decoder).InputOffset", Method, 4},
+		{"(*Decoder).InputPos", Method, 19},
+		{"(*Decoder).RawToken", Method, 0},
+		{"(*Decoder).Skip", Method, 0},
+		{"(*Decoder).Token", Method, 0},
+		{"(*Encoder).Close", Method, 20},
+		{"(*Encoder).Encode", Method, 0},
+		{"(*Encoder).EncodeElement", Method, 2},
+		{"(*Encoder).EncodeToken", Method, 2},
+		{"(*Encoder).Flush", Method, 2},
+		{"(*Encoder).Indent", Method, 1},
+		{"(*SyntaxError).Error", Method, 0},
+		{"(*TagPathError).Error", Method, 0},
+		{"(*UnsupportedTypeError).Error", Method, 0},
+		{"(CharData).Copy", Method, 0},
+		{"(Comment).Copy", Method, 0},
+		{"(Directive).Copy", Method, 0},
+		{"(ProcInst).Copy", Method, 0},
+		{"(StartElement).Copy", Method, 0},
+		{"(StartElement).End", Method, 2},
+		{"(UnmarshalError).Error", Method, 0},
+		{"Attr", Type, 0},
+		{"Attr.Name", Field, 0},
+		{"Attr.Value", Field, 0},
+		{"CharData", Type, 0},
+		{"Comment", Type, 0},
+		{"CopyToken", Func, 0},
+		{"Decoder", Type, 0},
+		{"Decoder.AutoClose", Field, 0},
+		{"Decoder.CharsetReader", Field, 0},
+		{"Decoder.DefaultSpace", Field, 1},
+		{"Decoder.Entity", Field, 0},
+		{"Decoder.Strict", Field, 0},
+		{"Directive", Type, 0},
+		{"Encoder", Type, 0},
+		{"EndElement", Type, 0},
+		{"EndElement.Name", Field, 0},
+		{"Escape", Func, 0},
+		{"EscapeText", Func, 1},
+		{"HTMLAutoClose", Var, 0},
+		{"HTMLEntity", Var, 0},
+		{"Header", Const, 0},
+		{"Marshal", Func, 0},
+		{"MarshalIndent", Func, 0},
+		{"Marshaler", Type, 2},
+		{"MarshalerAttr", Type, 2},
+		{"Name", Type, 0},
+		{"Name.Local", Field, 0},
+		{"Name.Space", Field, 0},
+		{"NewDecoder", Func, 0},
+		{"NewEncoder", Func, 0},
+		{"NewTokenDecoder", Func, 10},
+		{"ProcInst", Type, 0},
+		{"ProcInst.Inst", Field, 0},
+		{"ProcInst.Target", Field, 0},
+		{"StartElement", Type, 0},
+		{"StartElement.Attr", Field, 0},
+		{"StartElement.Name", Field, 0},
+		{"SyntaxError", Type, 0},
+		{"SyntaxError.Line", Field, 0},
+		{"SyntaxError.Msg", Field, 0},
+		{"TagPathError", Type, 0},
+		{"TagPathError.Field1", Field, 0},
+		{"TagPathError.Field2", Field, 0},
+		{"TagPathError.Struct", Field, 0},
+		{"TagPathError.Tag1", Field, 0},
+		{"TagPathError.Tag2", Field, 0},
+		{"Token", Type, 0},
+		{"TokenReader", Type, 10},
+		{"Unmarshal", Func, 0},
+		{"UnmarshalError", Type, 0},
+		{"Unmarshaler", Type, 2},
+		{"UnmarshalerAttr", Type, 2},
+		{"UnsupportedTypeError", Type, 0},
+		{"UnsupportedTypeError.Type", Field, 0},
 	},
 	"errors": {
-		{"As", Func, 13, "func(err error, target any) bool"},
-		{"ErrUnsupported", Var, 21, ""},
-		{"Is", Func, 13, "func(err error, target error) bool"},
-		{"Join", Func, 20, "func(errs ...error) error"},
-		{"New", Func, 0, "func(text string) error"},
-		{"Unwrap", Func, 13, "func(err error) error"},
+		{"As", Func, 13},
+		{"ErrUnsupported", Var, 21},
+		{"Is", Func, 13},
+		{"Join", Func, 20},
+		{"New", Func, 0},
+		{"Unwrap", Func, 13},
 	},
 	"expvar": {
-		{"(*Float).Add", Method, 0, ""},
-		{"(*Float).Set", Method, 0, ""},
-		{"(*Float).String", Method, 0, ""},
-		{"(*Float).Value", Method, 8, ""},
-		{"(*Int).Add", Method, 0, ""},
-		{"(*Int).Set", Method, 0, ""},
-		{"(*Int).String", Method, 0, ""},
-		{"(*Int).Value", Method, 8, ""},
-		{"(*Map).Add", Method, 0, ""},
-		{"(*Map).AddFloat", Method, 0, ""},
-		{"(*Map).Delete", Method, 12, ""},
-		{"(*Map).Do", Method, 0, ""},
-		{"(*Map).Get", Method, 0, ""},
-		{"(*Map).Init", Method, 0, ""},
-		{"(*Map).Set", Method, 0, ""},
-		{"(*Map).String", Method, 0, ""},
-		{"(*String).Set", Method, 0, ""},
-		{"(*String).String", Method, 0, ""},
-		{"(*String).Value", Method, 8, ""},
-		{"(Func).String", Method, 0, ""},
-		{"(Func).Value", Method, 8, ""},
-		{"Do", Func, 0, "func(f func(KeyValue))"},
-		{"Float", Type, 0, ""},
-		{"Func", Type, 0, ""},
-		{"Get", Func, 0, "func(name string) Var"},
-		{"Handler", Func, 8, "func() http.Handler"},
-		{"Int", Type, 0, ""},
-		{"KeyValue", Type, 0, ""},
-		{"KeyValue.Key", Field, 0, ""},
-		{"KeyValue.Value", Field, 0, ""},
-		{"Map", Type, 0, ""},
-		{"NewFloat", Func, 0, "func(name string) *Float"},
-		{"NewInt", Func, 0, "func(name string) *Int"},
-		{"NewMap", Func, 0, "func(name string) *Map"},
-		{"NewString", Func, 0, "func(name string) *String"},
-		{"Publish", Func, 0, "func(name string, v Var)"},
-		{"String", Type, 0, ""},
-		{"Var", Type, 0, ""},
+		{"(*Float).Add", Method, 0},
+		{"(*Float).Set", Method, 0},
+		{"(*Float).String", Method, 0},
+		{"(*Float).Value", Method, 8},
+		{"(*Int).Add", Method, 0},
+		{"(*Int).Set", Method, 0},
+		{"(*Int).String", Method, 0},
+		{"(*Int).Value", Method, 8},
+		{"(*Map).Add", Method, 0},
+		{"(*Map).AddFloat", Method, 0},
+		{"(*Map).Delete", Method, 12},
+		{"(*Map).Do", Method, 0},
+		{"(*Map).Get", Method, 0},
+		{"(*Map).Init", Method, 0},
+		{"(*Map).Set", Method, 0},
+		{"(*Map).String", Method, 0},
+		{"(*String).Set", Method, 0},
+		{"(*String).String", Method, 0},
+		{"(*String).Value", Method, 8},
+		{"(Func).String", Method, 0},
+		{"(Func).Value", Method, 8},
+		{"Do", Func, 0},
+		{"Float", Type, 0},
+		{"Func", Type, 0},
+		{"Get", Func, 0},
+		{"Handler", Func, 8},
+		{"Int", Type, 0},
+		{"KeyValue", Type, 0},
+		{"KeyValue.Key", Field, 0},
+		{"KeyValue.Value", Field, 0},
+		{"Map", Type, 0},
+		{"NewFloat", Func, 0},
+		{"NewInt", Func, 0},
+		{"NewMap", Func, 0},
+		{"NewString", Func, 0},
+		{"Publish", Func, 0},
+		{"String", Type, 0},
+		{"Var", Type, 0},
 	},
 	"flag": {
-		{"(*FlagSet).Arg", Method, 0, ""},
-		{"(*FlagSet).Args", Method, 0, ""},
-		{"(*FlagSet).Bool", Method, 0, ""},
-		{"(*FlagSet).BoolFunc", Method, 21, ""},
-		{"(*FlagSet).BoolVar", Method, 0, ""},
-		{"(*FlagSet).Duration", Method, 0, ""},
-		{"(*FlagSet).DurationVar", Method, 0, ""},
-		{"(*FlagSet).ErrorHandling", Method, 10, ""},
-		{"(*FlagSet).Float64", Method, 0, ""},
-		{"(*FlagSet).Float64Var", Method, 0, ""},
-		{"(*FlagSet).Func", Method, 16, ""},
-		{"(*FlagSet).Init", Method, 0, ""},
-		{"(*FlagSet).Int", Method, 0, ""},
-		{"(*FlagSet).Int64", Method, 0, ""},
-		{"(*FlagSet).Int64Var", Method, 0, ""},
-		{"(*FlagSet).IntVar", Method, 0, ""},
-		{"(*FlagSet).Lookup", Method, 0, ""},
-		{"(*FlagSet).NArg", Method, 0, ""},
-		{"(*FlagSet).NFlag", Method, 0, ""},
-		{"(*FlagSet).Name", Method, 10, ""},
-		{"(*FlagSet).Output", Method, 10, ""},
-		{"(*FlagSet).Parse", Method, 0, ""},
-		{"(*FlagSet).Parsed", Method, 0, ""},
-		{"(*FlagSet).PrintDefaults", Method, 0, ""},
-		{"(*FlagSet).Set", Method, 0, ""},
-		{"(*FlagSet).SetOutput", Method, 0, ""},
-		{"(*FlagSet).String", Method, 0, ""},
-		{"(*FlagSet).StringVar", Method, 0, ""},
-		{"(*FlagSet).TextVar", Method, 19, ""},
-		{"(*FlagSet).Uint", Method, 0, ""},
-		{"(*FlagSet).Uint64", Method, 0, ""},
-		{"(*FlagSet).Uint64Var", Method, 0, ""},
-		{"(*FlagSet).UintVar", Method, 0, ""},
-		{"(*FlagSet).Var", Method, 0, ""},
-		{"(*FlagSet).Visit", Method, 0, ""},
-		{"(*FlagSet).VisitAll", Method, 0, ""},
-		{"Arg", Func, 0, "func(i int) string"},
-		{"Args", Func, 0, "func() []string"},
-		{"Bool", Func, 0, "func(name string, value bool, usage string) *bool"},
-		{"BoolFunc", Func, 21, "func(name string, usage string, fn func(string) error)"},
-		{"BoolVar", Func, 0, "func(p *bool, name string, value bool, usage string)"},
-		{"CommandLine", Var, 2, ""},
-		{"ContinueOnError", Const, 0, ""},
-		{"Duration", Func, 0, "func(name string, value time.Duration, usage string) *time.Duration"},
-		{"DurationVar", Func, 0, "func(p *time.Duration, name string, value time.Duration, usage string)"},
-		{"ErrHelp", Var, 0, ""},
-		{"ErrorHandling", Type, 0, ""},
-		{"ExitOnError", Const, 0, ""},
-		{"Flag", Type, 0, ""},
-		{"Flag.DefValue", Field, 0, ""},
-		{"Flag.Name", Field, 0, ""},
-		{"Flag.Usage", Field, 0, ""},
-		{"Flag.Value", Field, 0, ""},
-		{"FlagSet", Type, 0, ""},
-		{"FlagSet.Usage", Field, 0, ""},
-		{"Float64", Func, 0, "func(name string, value float64, usage string) *float64"},
-		{"Float64Var", Func, 0, "func(p *float64, name string, value float64, usage string)"},
-		{"Func", Func, 16, "func(name string, usage string, fn func(string) error)"},
-		{"Getter", Type, 2, ""},
-		{"Int", Func, 0, "func(name string, value int, usage string) *int"},
-		{"Int64", Func, 0, "func(name string, value int64, usage string) *int64"},
-		{"Int64Var", Func, 0, "func(p *int64, name string, value int64, usage string)"},
-		{"IntVar", Func, 0, "func(p *int, name string, value int, usage string)"},
-		{"Lookup", Func, 0, "func(name string) *Flag"},
-		{"NArg", Func, 0, "func() int"},
-		{"NFlag", Func, 0, "func() int"},
-		{"NewFlagSet", Func, 0, "func(name string, errorHandling ErrorHandling) *FlagSet"},
-		{"PanicOnError", Const, 0, ""},
-		{"Parse", Func, 0, "func()"},
-		{"Parsed", Func, 0, "func() bool"},
-		{"PrintDefaults", Func, 0, "func()"},
-		{"Set", Func, 0, "func(name string, value string) error"},
-		{"String", Func, 0, "func(name string, value string, usage string) *string"},
-		{"StringVar", Func, 0, "func(p *string, name string, value string, usage string)"},
-		{"TextVar", Func, 19, "func(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)"},
-		{"Uint", Func, 0, "func(name string, value uint, usage string) *uint"},
-		{"Uint64", Func, 0, "func(name string, value uint64, usage string) *uint64"},
-		{"Uint64Var", Func, 0, "func(p *uint64, name string, value uint64, usage string)"},
-		{"UintVar", Func, 0, "func(p *uint, name string, value uint, usage string)"},
-		{"UnquoteUsage", Func, 5, "func(flag *Flag) (name string, usage string)"},
-		{"Usage", Var, 0, ""},
-		{"Value", Type, 0, ""},
-		{"Var", Func, 0, "func(value Value, name string, usage string)"},
-		{"Visit", Func, 0, "func(fn func(*Flag))"},
-		{"VisitAll", Func, 0, "func(fn func(*Flag))"},
+		{"(*FlagSet).Arg", Method, 0},
+		{"(*FlagSet).Args", Method, 0},
+		{"(*FlagSet).Bool", Method, 0},
+		{"(*FlagSet).BoolFunc", Method, 21},
+		{"(*FlagSet).BoolVar", Method, 0},
+		{"(*FlagSet).Duration", Method, 0},
+		{"(*FlagSet).DurationVar", Method, 0},
+		{"(*FlagSet).ErrorHandling", Method, 10},
+		{"(*FlagSet).Float64", Method, 0},
+		{"(*FlagSet).Float64Var", Method, 0},
+		{"(*FlagSet).Func", Method, 16},
+		{"(*FlagSet).Init", Method, 0},
+		{"(*FlagSet).Int", Method, 0},
+		{"(*FlagSet).Int64", Method, 0},
+		{"(*FlagSet).Int64Var", Method, 0},
+		{"(*FlagSet).IntVar", Method, 0},
+		{"(*FlagSet).Lookup", Method, 0},
+		{"(*FlagSet).NArg", Method, 0},
+		{"(*FlagSet).NFlag", Method, 0},
+		{"(*FlagSet).Name", Method, 10},
+		{"(*FlagSet).Output", Method, 10},
+		{"(*FlagSet).Parse", Method, 0},
+		{"(*FlagSet).Parsed", Method, 0},
+		{"(*FlagSet).PrintDefaults", Method, 0},
+		{"(*FlagSet).Set", Method, 0},
+		{"(*FlagSet).SetOutput", Method, 0},
+		{"(*FlagSet).String", Method, 0},
+		{"(*FlagSet).StringVar", Method, 0},
+		{"(*FlagSet).TextVar", Method, 19},
+		{"(*FlagSet).Uint", Method, 0},
+		{"(*FlagSet).Uint64", Method, 0},
+		{"(*FlagSet).Uint64Var", Method, 0},
+		{"(*FlagSet).UintVar", Method, 0},
+		{"(*FlagSet).Var", Method, 0},
+		{"(*FlagSet).Visit", Method, 0},
+		{"(*FlagSet).VisitAll", Method, 0},
+		{"Arg", Func, 0},
+		{"Args", Func, 0},
+		{"Bool", Func, 0},
+		{"BoolFunc", Func, 21},
+		{"BoolVar", Func, 0},
+		{"CommandLine", Var, 2},
+		{"ContinueOnError", Const, 0},
+		{"Duration", Func, 0},
+		{"DurationVar", Func, 0},
+		{"ErrHelp", Var, 0},
+		{"ErrorHandling", Type, 0},
+		{"ExitOnError", Const, 0},
+		{"Flag", Type, 0},
+		{"Flag.DefValue", Field, 0},
+		{"Flag.Name", Field, 0},
+		{"Flag.Usage", Field, 0},
+		{"Flag.Value", Field, 0},
+		{"FlagSet", Type, 0},
+		{"FlagSet.Usage", Field, 0},
+		{"Float64", Func, 0},
+		{"Float64Var", Func, 0},
+		{"Func", Func, 16},
+		{"Getter", Type, 2},
+		{"Int", Func, 0},
+		{"Int64", Func, 0},
+		{"Int64Var", Func, 0},
+		{"IntVar", Func, 0},
+		{"Lookup", Func, 0},
+		{"NArg", Func, 0},
+		{"NFlag", Func, 0},
+		{"NewFlagSet", Func, 0},
+		{"PanicOnError", Const, 0},
+		{"Parse", Func, 0},
+		{"Parsed", Func, 0},
+		{"PrintDefaults", Func, 0},
+		{"Set", Func, 0},
+		{"String", Func, 0},
+		{"StringVar", Func, 0},
+		{"TextVar", Func, 19},
+		{"Uint", Func, 0},
+		{"Uint64", Func, 0},
+		{"Uint64Var", Func, 0},
+		{"UintVar", Func, 0},
+		{"UnquoteUsage", Func, 5},
+		{"Usage", Var, 0},
+		{"Value", Type, 0},
+		{"Var", Func, 0},
+		{"Visit", Func, 0},
+		{"VisitAll", Func, 0},
 	},
 	"fmt": {
-		{"Append", Func, 19, "func(b []byte, a ...any) []byte"},
-		{"Appendf", Func, 19, "func(b []byte, format string, a ...any) []byte"},
-		{"Appendln", Func, 19, "func(b []byte, a ...any) []byte"},
-		{"Errorf", Func, 0, "func(format string, a ...any) error"},
-		{"FormatString", Func, 20, "func(state State, verb rune) string"},
-		{"Formatter", Type, 0, ""},
-		{"Fprint", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
-		{"Fprintf", Func, 0, "func(w io.Writer, format string, a ...any) (n int, err error)"},
-		{"Fprintln", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
-		{"Fscan", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
-		{"Fscanf", Func, 0, "func(r io.Reader, format string, a ...any) (n int, err error)"},
-		{"Fscanln", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
-		{"GoStringer", Type, 0, ""},
-		{"Print", Func, 0, "func(a ...any) (n int, err error)"},
-		{"Printf", Func, 0, "func(format string, a ...any) (n int, err error)"},
-		{"Println", Func, 0, "func(a ...any) (n int, err error)"},
-		{"Scan", Func, 0, "func(a ...any) (n int, err error)"},
-		{"ScanState", Type, 0, ""},
-		{"Scanf", Func, 0, "func(format string, a ...any) (n int, err error)"},
-		{"Scanln", Func, 0, "func(a ...any) (n int, err error)"},
-		{"Scanner", Type, 0, ""},
-		{"Sprint", Func, 0, "func(a ...any) string"},
-		{"Sprintf", Func, 0, "func(format string, a ...any) string"},
-		{"Sprintln", Func, 0, "func(a ...any) string"},
-		{"Sscan", Func, 0, "func(str string, a ...any) (n int, err error)"},
-		{"Sscanf", Func, 0, "func(str string, format string, a ...any) (n int, err error)"},
-		{"Sscanln", Func, 0, "func(str string, a ...any) (n int, err error)"},
-		{"State", Type, 0, ""},
-		{"Stringer", Type, 0, ""},
+		{"Append", Func, 19},
+		{"Appendf", Func, 19},
+		{"Appendln", Func, 19},
+		{"Errorf", Func, 0},
+		{"FormatString", Func, 20},
+		{"Formatter", Type, 0},
+		{"Fprint", Func, 0},
+		{"Fprintf", Func, 0},
+		{"Fprintln", Func, 0},
+		{"Fscan", Func, 0},
+		{"Fscanf", Func, 0},
+		{"Fscanln", Func, 0},
+		{"GoStringer", Type, 0},
+		{"Print", Func, 0},
+		{"Printf", Func, 0},
+		{"Println", Func, 0},
+		{"Scan", Func, 0},
+		{"ScanState", Type, 0},
+		{"Scanf", Func, 0},
+		{"Scanln", Func, 0},
+		{"Scanner", Type, 0},
+		{"Sprint", Func, 0},
+		{"Sprintf", Func, 0},
+		{"Sprintln", Func, 0},
+		{"Sscan", Func, 0},
+		{"Sscanf", Func, 0},
+		{"Sscanln", Func, 0},
+		{"State", Type, 0},
+		{"Stringer", Type, 0},
 	},
 	"go/ast": {
-		{"(*ArrayType).End", Method, 0, ""},
-		{"(*ArrayType).Pos", Method, 0, ""},
-		{"(*AssignStmt).End", Method, 0, ""},
-		{"(*AssignStmt).Pos", Method, 0, ""},
-		{"(*BadDecl).End", Method, 0, ""},
-		{"(*BadDecl).Pos", Method, 0, ""},
-		{"(*BadExpr).End", Method, 0, ""},
-		{"(*BadExpr).Pos", Method, 0, ""},
-		{"(*BadStmt).End", Method, 0, ""},
-		{"(*BadStmt).Pos", Method, 0, ""},
-		{"(*BasicLit).End", Method, 0, ""},
-		{"(*BasicLit).Pos", Method, 0, ""},
-		{"(*BinaryExpr).End", Method, 0, ""},
-		{"(*BinaryExpr).Pos", Method, 0, ""},
-		{"(*BlockStmt).End", Method, 0, ""},
-		{"(*BlockStmt).Pos", Method, 0, ""},
-		{"(*BranchStmt).End", Method, 0, ""},
-		{"(*BranchStmt).Pos", Method, 0, ""},
-		{"(*CallExpr).End", Method, 0, ""},
-		{"(*CallExpr).Pos", Method, 0, ""},
-		{"(*CaseClause).End", Method, 0, ""},
-		{"(*CaseClause).Pos", Method, 0, ""},
-		{"(*ChanType).End", Method, 0, ""},
-		{"(*ChanType).Pos", Method, 0, ""},
-		{"(*CommClause).End", Method, 0, ""},
-		{"(*CommClause).Pos", Method, 0, ""},
-		{"(*Comment).End", Method, 0, ""},
-		{"(*Comment).Pos", Method, 0, ""},
-		{"(*CommentGroup).End", Method, 0, ""},
-		{"(*CommentGroup).Pos", Method, 0, ""},
-		{"(*CommentGroup).Text", Method, 0, ""},
-		{"(*CompositeLit).End", Method, 0, ""},
-		{"(*CompositeLit).Pos", Method, 0, ""},
-		{"(*DeclStmt).End", Method, 0, ""},
-		{"(*DeclStmt).Pos", Method, 0, ""},
-		{"(*DeferStmt).End", Method, 0, ""},
-		{"(*DeferStmt).Pos", Method, 0, ""},
-		{"(*Ellipsis).End", Method, 0, ""},
-		{"(*Ellipsis).Pos", Method, 0, ""},
-		{"(*EmptyStmt).End", Method, 0, ""},
-		{"(*EmptyStmt).Pos", Method, 0, ""},
-		{"(*ExprStmt).End", Method, 0, ""},
-		{"(*ExprStmt).Pos", Method, 0, ""},
-		{"(*Field).End", Method, 0, ""},
-		{"(*Field).Pos", Method, 0, ""},
-		{"(*FieldList).End", Method, 0, ""},
-		{"(*FieldList).NumFields", Method, 0, ""},
-		{"(*FieldList).Pos", Method, 0, ""},
-		{"(*File).End", Method, 0, ""},
-		{"(*File).Pos", Method, 0, ""},
-		{"(*ForStmt).End", Method, 0, ""},
-		{"(*ForStmt).Pos", Method, 0, ""},
-		{"(*FuncDecl).End", Method, 0, ""},
-		{"(*FuncDecl).Pos", Method, 0, ""},
-		{"(*FuncLit).End", Method, 0, ""},
-		{"(*FuncLit).Pos", Method, 0, ""},
-		{"(*FuncType).End", Method, 0, ""},
-		{"(*FuncType).Pos", Method, 0, ""},
-		{"(*GenDecl).End", Method, 0, ""},
-		{"(*GenDecl).Pos", Method, 0, ""},
-		{"(*GoStmt).End", Method, 0, ""},
-		{"(*GoStmt).Pos", Method, 0, ""},
-		{"(*Ident).End", Method, 0, ""},
-		{"(*Ident).IsExported", Method, 0, ""},
-		{"(*Ident).Pos", Method, 0, ""},
-		{"(*Ident).String", Method, 0, ""},
-		{"(*IfStmt).End", Method, 0, ""},
-		{"(*IfStmt).Pos", Method, 0, ""},
-		{"(*ImportSpec).End", Method, 0, ""},
-		{"(*ImportSpec).Pos", Method, 0, ""},
-		{"(*IncDecStmt).End", Method, 0, ""},
-		{"(*IncDecStmt).Pos", Method, 0, ""},
-		{"(*IndexExpr).End", Method, 0, ""},
-		{"(*IndexExpr).Pos", Method, 0, ""},
-		{"(*IndexListExpr).End", Method, 18, ""},
-		{"(*IndexListExpr).Pos", Method, 18, ""},
-		{"(*InterfaceType).End", Method, 0, ""},
-		{"(*InterfaceType).Pos", Method, 0, ""},
-		{"(*KeyValueExpr).End", Method, 0, ""},
-		{"(*KeyValueExpr).Pos", Method, 0, ""},
-		{"(*LabeledStmt).End", Method, 0, ""},
-		{"(*LabeledStmt).Pos", Method, 0, ""},
-		{"(*MapType).End", Method, 0, ""},
-		{"(*MapType).Pos", Method, 0, ""},
-		{"(*Object).Pos", Method, 0, ""},
-		{"(*Package).End", Method, 0, ""},
-		{"(*Package).Pos", Method, 0, ""},
-		{"(*ParenExpr).End", Method, 0, ""},
-		{"(*ParenExpr).Pos", Method, 0, ""},
-		{"(*RangeStmt).End", Method, 0, ""},
-		{"(*RangeStmt).Pos", Method, 0, ""},
-		{"(*ReturnStmt).End", Method, 0, ""},
-		{"(*ReturnStmt).Pos", Method, 0, ""},
-		{"(*Scope).Insert", Method, 0, ""},
-		{"(*Scope).Lookup", Method, 0, ""},
-		{"(*Scope).String", Method, 0, ""},
-		{"(*SelectStmt).End", Method, 0, ""},
-		{"(*SelectStmt).Pos", Method, 0, ""},
-		{"(*SelectorExpr).End", Method, 0, ""},
-		{"(*SelectorExpr).Pos", Method, 0, ""},
-		{"(*SendStmt).End", Method, 0, ""},
-		{"(*SendStmt).Pos", Method, 0, ""},
-		{"(*SliceExpr).End", Method, 0, ""},
-		{"(*SliceExpr).Pos", Method, 0, ""},
-		{"(*StarExpr).End", Method, 0, ""},
-		{"(*StarExpr).Pos", Method, 0, ""},
-		{"(*StructType).End", Method, 0, ""},
-		{"(*StructType).Pos", Method, 0, ""},
-		{"(*SwitchStmt).End", Method, 0, ""},
-		{"(*SwitchStmt).Pos", Method, 0, ""},
-		{"(*TypeAssertExpr).End", Method, 0, ""},
-		{"(*TypeAssertExpr).Pos", Method, 0, ""},
-		{"(*TypeSpec).End", Method, 0, ""},
-		{"(*TypeSpec).Pos", Method, 0, ""},
-		{"(*TypeSwitchStmt).End", Method, 0, ""},
-		{"(*TypeSwitchStmt).Pos", Method, 0, ""},
-		{"(*UnaryExpr).End", Method, 0, ""},
-		{"(*UnaryExpr).Pos", Method, 0, ""},
-		{"(*ValueSpec).End", Method, 0, ""},
-		{"(*ValueSpec).Pos", Method, 0, ""},
-		{"(CommentMap).Comments", Method, 1, ""},
-		{"(CommentMap).Filter", Method, 1, ""},
-		{"(CommentMap).String", Method, 1, ""},
-		{"(CommentMap).Update", Method, 1, ""},
-		{"(ObjKind).String", Method, 0, ""},
-		{"ArrayType", Type, 0, ""},
-		{"ArrayType.Elt", Field, 0, ""},
-		{"ArrayType.Lbrack", Field, 0, ""},
-		{"ArrayType.Len", Field, 0, ""},
-		{"AssignStmt", Type, 0, ""},
-		{"AssignStmt.Lhs", Field, 0, ""},
-		{"AssignStmt.Rhs", Field, 0, ""},
-		{"AssignStmt.Tok", Field, 0, ""},
-		{"AssignStmt.TokPos", Field, 0, ""},
-		{"Bad", Const, 0, ""},
-		{"BadDecl", Type, 0, ""},
-		{"BadDecl.From", Field, 0, ""},
-		{"BadDecl.To", Field, 0, ""},
-		{"BadExpr", Type, 0, ""},
-		{"BadExpr.From", Field, 0, ""},
-		{"BadExpr.To", Field, 0, ""},
-		{"BadStmt", Type, 0, ""},
-		{"BadStmt.From", Field, 0, ""},
-		{"BadStmt.To", Field, 0, ""},
-		{"BasicLit", Type, 0, ""},
-		{"BasicLit.Kind", Field, 0, ""},
-		{"BasicLit.Value", Field, 0, ""},
-		{"BasicLit.ValuePos", Field, 0, ""},
-		{"BinaryExpr", Type, 0, ""},
-		{"BinaryExpr.Op", Field, 0, ""},
-		{"BinaryExpr.OpPos", Field, 0, ""},
-		{"BinaryExpr.X", Field, 0, ""},
-		{"BinaryExpr.Y", Field, 0, ""},
-		{"BlockStmt", Type, 0, ""},
-		{"BlockStmt.Lbrace", Field, 0, ""},
-		{"BlockStmt.List", Field, 0, ""},
-		{"BlockStmt.Rbrace", Field, 0, ""},
-		{"BranchStmt", Type, 0, ""},
-		{"BranchStmt.Label", Field, 0, ""},
-		{"BranchStmt.Tok", Field, 0, ""},
-		{"BranchStmt.TokPos", Field, 0, ""},
-		{"CallExpr", Type, 0, ""},
-		{"CallExpr.Args", Field, 0, ""},
-		{"CallExpr.Ellipsis", Field, 0, ""},
-		{"CallExpr.Fun", Field, 0, ""},
-		{"CallExpr.Lparen", Field, 0, ""},
-		{"CallExpr.Rparen", Field, 0, ""},
-		{"CaseClause", Type, 0, ""},
-		{"CaseClause.Body", Field, 0, ""},
-		{"CaseClause.Case", Field, 0, ""},
-		{"CaseClause.Colon", Field, 0, ""},
-		{"CaseClause.List", Field, 0, ""},
-		{"ChanDir", Type, 0, ""},
-		{"ChanType", Type, 0, ""},
-		{"ChanType.Arrow", Field, 1, ""},
-		{"ChanType.Begin", Field, 0, ""},
-		{"ChanType.Dir", Field, 0, ""},
-		{"ChanType.Value", Field, 0, ""},
-		{"CommClause", Type, 0, ""},
-		{"CommClause.Body", Field, 0, ""},
-		{"CommClause.Case", Field, 0, ""},
-		{"CommClause.Colon", Field, 0, ""},
-		{"CommClause.Comm", Field, 0, ""},
-		{"Comment", Type, 0, ""},
-		{"Comment.Slash", Field, 0, ""},
-		{"Comment.Text", Field, 0, ""},
-		{"CommentGroup", Type, 0, ""},
-		{"CommentGroup.List", Field, 0, ""},
-		{"CommentMap", Type, 1, ""},
-		{"CompositeLit", Type, 0, ""},
-		{"CompositeLit.Elts", Field, 0, ""},
-		{"CompositeLit.Incomplete", Field, 11, ""},
-		{"CompositeLit.Lbrace", Field, 0, ""},
-		{"CompositeLit.Rbrace", Field, 0, ""},
-		{"CompositeLit.Type", Field, 0, ""},
-		{"Con", Const, 0, ""},
-		{"Decl", Type, 0, ""},
-		{"DeclStmt", Type, 0, ""},
-		{"DeclStmt.Decl", Field, 0, ""},
-		{"DeferStmt", Type, 0, ""},
-		{"DeferStmt.Call", Field, 0, ""},
-		{"DeferStmt.Defer", Field, 0, ""},
-		{"Ellipsis", Type, 0, ""},
-		{"Ellipsis.Ellipsis", Field, 0, ""},
-		{"Ellipsis.Elt", Field, 0, ""},
-		{"EmptyStmt", Type, 0, ""},
-		{"EmptyStmt.Implicit", Field, 5, ""},
-		{"EmptyStmt.Semicolon", Field, 0, ""},
-		{"Expr", Type, 0, ""},
-		{"ExprStmt", Type, 0, ""},
-		{"ExprStmt.X", Field, 0, ""},
-		{"Field", Type, 0, ""},
-		{"Field.Comment", Field, 0, ""},
-		{"Field.Doc", Field, 0, ""},
-		{"Field.Names", Field, 0, ""},
-		{"Field.Tag", Field, 0, ""},
-		{"Field.Type", Field, 0, ""},
-		{"FieldFilter", Type, 0, ""},
-		{"FieldList", Type, 0, ""},
-		{"FieldList.Closing", Field, 0, ""},
-		{"FieldList.List", Field, 0, ""},
-		{"FieldList.Opening", Field, 0, ""},
-		{"File", Type, 0, ""},
-		{"File.Comments", Field, 0, ""},
-		{"File.Decls", Field, 0, ""},
-		{"File.Doc", Field, 0, ""},
-		{"File.FileEnd", Field, 20, ""},
-		{"File.FileStart", Field, 20, ""},
-		{"File.GoVersion", Field, 21, ""},
-		{"File.Imports", Field, 0, ""},
-		{"File.Name", Field, 0, ""},
-		{"File.Package", Field, 0, ""},
-		{"File.Scope", Field, 0, ""},
-		{"File.Unresolved", Field, 0, ""},
-		{"FileExports", Func, 0, "func(src *File) bool"},
-		{"Filter", Type, 0, ""},
-		{"FilterDecl", Func, 0, "func(decl Decl, f Filter) bool"},
-		{"FilterFile", Func, 0, "func(src *File, f Filter) bool"},
-		{"FilterFuncDuplicates", Const, 0, ""},
-		{"FilterImportDuplicates", Const, 0, ""},
-		{"FilterPackage", Func, 0, "func(pkg *Package, f Filter) bool"},
-		{"FilterUnassociatedComments", Const, 0, ""},
-		{"ForStmt", Type, 0, ""},
-		{"ForStmt.Body", Field, 0, ""},
-		{"ForStmt.Cond", Field, 0, ""},
-		{"ForStmt.For", Field, 0, ""},
-		{"ForStmt.Init", Field, 0, ""},
-		{"ForStmt.Post", Field, 0, ""},
-		{"Fprint", Func, 0, "func(w io.Writer, fset *token.FileSet, x any, f FieldFilter) error"},
-		{"Fun", Const, 0, ""},
-		{"FuncDecl", Type, 0, ""},
-		{"FuncDecl.Body", Field, 0, ""},
-		{"FuncDecl.Doc", Field, 0, ""},
-		{"FuncDecl.Name", Field, 0, ""},
-		{"FuncDecl.Recv", Field, 0, ""},
-		{"FuncDecl.Type", Field, 0, ""},
-		{"FuncLit", Type, 0, ""},
-		{"FuncLit.Body", Field, 0, ""},
-		{"FuncLit.Type", Field, 0, ""},
-		{"FuncType", Type, 0, ""},
-		{"FuncType.Func", Field, 0, ""},
-		{"FuncType.Params", Field, 0, ""},
-		{"FuncType.Results", Field, 0, ""},
-		{"FuncType.TypeParams", Field, 18, ""},
-		{"GenDecl", Type, 0, ""},
-		{"GenDecl.Doc", Field, 0, ""},
-		{"GenDecl.Lparen", Field, 0, ""},
-		{"GenDecl.Rparen", Field, 0, ""},
-		{"GenDecl.Specs", Field, 0, ""},
-		{"GenDecl.Tok", Field, 0, ""},
-		{"GenDecl.TokPos", Field, 0, ""},
-		{"GoStmt", Type, 0, ""},
-		{"GoStmt.Call", Field, 0, ""},
-		{"GoStmt.Go", Field, 0, ""},
-		{"Ident", Type, 0, ""},
-		{"Ident.Name", Field, 0, ""},
-		{"Ident.NamePos", Field, 0, ""},
-		{"Ident.Obj", Field, 0, ""},
-		{"IfStmt", Type, 0, ""},
-		{"IfStmt.Body", Field, 0, ""},
-		{"IfStmt.Cond", Field, 0, ""},
-		{"IfStmt.Else", Field, 0, ""},
-		{"IfStmt.If", Field, 0, ""},
-		{"IfStmt.Init", Field, 0, ""},
-		{"ImportSpec", Type, 0, ""},
-		{"ImportSpec.Comment", Field, 0, ""},
-		{"ImportSpec.Doc", Field, 0, ""},
-		{"ImportSpec.EndPos", Field, 0, ""},
-		{"ImportSpec.Name", Field, 0, ""},
-		{"ImportSpec.Path", Field, 0, ""},
-		{"Importer", Type, 0, ""},
-		{"IncDecStmt", Type, 0, ""},
-		{"IncDecStmt.Tok", Field, 0, ""},
-		{"IncDecStmt.TokPos", Field, 0, ""},
-		{"IncDecStmt.X", Field, 0, ""},
-		{"IndexExpr", Type, 0, ""},
-		{"IndexExpr.Index", Field, 0, ""},
-		{"IndexExpr.Lbrack", Field, 0, ""},
-		{"IndexExpr.Rbrack", Field, 0, ""},
-		{"IndexExpr.X", Field, 0, ""},
-		{"IndexListExpr", Type, 18, ""},
-		{"IndexListExpr.Indices", Field, 18, ""},
-		{"IndexListExpr.Lbrack", Field, 18, ""},
-		{"IndexListExpr.Rbrack", Field, 18, ""},
-		{"IndexListExpr.X", Field, 18, ""},
-		{"Inspect", Func, 0, "func(node Node, f func(Node) bool)"},
-		{"InterfaceType", Type, 0, ""},
-		{"InterfaceType.Incomplete", Field, 0, ""},
-		{"InterfaceType.Interface", Field, 0, ""},
-		{"InterfaceType.Methods", Field, 0, ""},
-		{"IsExported", Func, 0, "func(name string) bool"},
-		{"IsGenerated", Func, 21, "func(file *File) bool"},
-		{"KeyValueExpr", Type, 0, ""},
-		{"KeyValueExpr.Colon", Field, 0, ""},
-		{"KeyValueExpr.Key", Field, 0, ""},
-		{"KeyValueExpr.Value", Field, 0, ""},
-		{"LabeledStmt", Type, 0, ""},
-		{"LabeledStmt.Colon", Field, 0, ""},
-		{"LabeledStmt.Label", Field, 0, ""},
-		{"LabeledStmt.Stmt", Field, 0, ""},
-		{"Lbl", Const, 0, ""},
-		{"MapType", Type, 0, ""},
-		{"MapType.Key", Field, 0, ""},
-		{"MapType.Map", Field, 0, ""},
-		{"MapType.Value", Field, 0, ""},
-		{"MergeMode", Type, 0, ""},
-		{"MergePackageFiles", Func, 0, "func(pkg *Package, mode MergeMode) *File"},
-		{"NewCommentMap", Func, 1, "func(fset *token.FileSet, node Node, comments []*CommentGroup) CommentMap"},
-		{"NewIdent", Func, 0, "func(name string) *Ident"},
-		{"NewObj", Func, 0, "func(kind ObjKind, name string) *Object"},
-		{"NewPackage", Func, 0, "func(fset *token.FileSet, files map[string]*File, importer Importer, universe *Scope) (*Package, error)"},
-		{"NewScope", Func, 0, "func(outer *Scope) *Scope"},
-		{"Node", Type, 0, ""},
-		{"NotNilFilter", Func, 0, "func(_ string, v reflect.Value) bool"},
-		{"ObjKind", Type, 0, ""},
-		{"Object", Type, 0, ""},
-		{"Object.Data", Field, 0, ""},
-		{"Object.Decl", Field, 0, ""},
-		{"Object.Kind", Field, 0, ""},
-		{"Object.Name", Field, 0, ""},
-		{"Object.Type", Field, 0, ""},
-		{"Package", Type, 0, ""},
-		{"Package.Files", Field, 0, ""},
-		{"Package.Imports", Field, 0, ""},
-		{"Package.Name", Field, 0, ""},
-		{"Package.Scope", Field, 0, ""},
-		{"PackageExports", Func, 0, "func(pkg *Package) bool"},
-		{"ParenExpr", Type, 0, ""},
-		{"ParenExpr.Lparen", Field, 0, ""},
-		{"ParenExpr.Rparen", Field, 0, ""},
-		{"ParenExpr.X", Field, 0, ""},
-		{"Pkg", Const, 0, ""},
-		{"Preorder", Func, 23, "func(root Node) iter.Seq[Node]"},
-		{"Print", Func, 0, "func(fset *token.FileSet, x any) error"},
-		{"RECV", Const, 0, ""},
-		{"RangeStmt", Type, 0, ""},
-		{"RangeStmt.Body", Field, 0, ""},
-		{"RangeStmt.For", Field, 0, ""},
-		{"RangeStmt.Key", Field, 0, ""},
-		{"RangeStmt.Range", Field, 20, ""},
-		{"RangeStmt.Tok", Field, 0, ""},
-		{"RangeStmt.TokPos", Field, 0, ""},
-		{"RangeStmt.Value", Field, 0, ""},
-		{"RangeStmt.X", Field, 0, ""},
-		{"ReturnStmt", Type, 0, ""},
-		{"ReturnStmt.Results", Field, 0, ""},
-		{"ReturnStmt.Return", Field, 0, ""},
-		{"SEND", Const, 0, ""},
-		{"Scope", Type, 0, ""},
-		{"Scope.Objects", Field, 0, ""},
-		{"Scope.Outer", Field, 0, ""},
-		{"SelectStmt", Type, 0, ""},
-		{"SelectStmt.Body", Field, 0, ""},
-		{"SelectStmt.Select", Field, 0, ""},
-		{"SelectorExpr", Type, 0, ""},
-		{"SelectorExpr.Sel", Field, 0, ""},
-		{"SelectorExpr.X", Field, 0, ""},
-		{"SendStmt", Type, 0, ""},
-		{"SendStmt.Arrow", Field, 0, ""},
-		{"SendStmt.Chan", Field, 0, ""},
-		{"SendStmt.Value", Field, 0, ""},
-		{"SliceExpr", Type, 0, ""},
-		{"SliceExpr.High", Field, 0, ""},
-		{"SliceExpr.Lbrack", Field, 0, ""},
-		{"SliceExpr.Low", Field, 0, ""},
-		{"SliceExpr.Max", Field, 2, ""},
-		{"SliceExpr.Rbrack", Field, 0, ""},
-		{"SliceExpr.Slice3", Field, 2, ""},
-		{"SliceExpr.X", Field, 0, ""},
-		{"SortImports", Func, 0, "func(fset *token.FileSet, f *File)"},
-		{"Spec", Type, 0, ""},
-		{"StarExpr", Type, 0, ""},
-		{"StarExpr.Star", Field, 0, ""},
-		{"StarExpr.X", Field, 0, ""},
-		{"Stmt", Type, 0, ""},
-		{"StructType", Type, 0, ""},
-		{"StructType.Fields", Field, 0, ""},
-		{"StructType.Incomplete", Field, 0, ""},
-		{"StructType.Struct", Field, 0, ""},
-		{"SwitchStmt", Type, 0, ""},
-		{"SwitchStmt.Body", Field, 0, ""},
-		{"SwitchStmt.Init", Field, 0, ""},
-		{"SwitchStmt.Switch", Field, 0, ""},
-		{"SwitchStmt.Tag", Field, 0, ""},
-		{"Typ", Const, 0, ""},
-		{"TypeAssertExpr", Type, 0, ""},
-		{"TypeAssertExpr.Lparen", Field, 2, ""},
-		{"TypeAssertExpr.Rparen", Field, 2, ""},
-		{"TypeAssertExpr.Type", Field, 0, ""},
-		{"TypeAssertExpr.X", Field, 0, ""},
-		{"TypeSpec", Type, 0, ""},
-		{"TypeSpec.Assign", Field, 9, ""},
-		{"TypeSpec.Comment", Field, 0, ""},
-		{"TypeSpec.Doc", Field, 0, ""},
-		{"TypeSpec.Name", Field, 0, ""},
-		{"TypeSpec.Type", Field, 0, ""},
-		{"TypeSpec.TypeParams", Field, 18, ""},
-		{"TypeSwitchStmt", Type, 0, ""},
-		{"TypeSwitchStmt.Assign", Field, 0, ""},
-		{"TypeSwitchStmt.Body", Field, 0, ""},
-		{"TypeSwitchStmt.Init", Field, 0, ""},
-		{"TypeSwitchStmt.Switch", Field, 0, ""},
-		{"UnaryExpr", Type, 0, ""},
-		{"UnaryExpr.Op", Field, 0, ""},
-		{"UnaryExpr.OpPos", Field, 0, ""},
-		{"UnaryExpr.X", Field, 0, ""},
-		{"Unparen", Func, 22, "func(e Expr) Expr"},
-		{"ValueSpec", Type, 0, ""},
-		{"ValueSpec.Comment", Field, 0, ""},
-		{"ValueSpec.Doc", Field, 0, ""},
-		{"ValueSpec.Names", Field, 0, ""},
-		{"ValueSpec.Type", Field, 0, ""},
-		{"ValueSpec.Values", Field, 0, ""},
-		{"Var", Const, 0, ""},
-		{"Visitor", Type, 0, ""},
-		{"Walk", Func, 0, "func(v Visitor, node Node)"},
+		{"(*ArrayType).End", Method, 0},
+		{"(*ArrayType).Pos", Method, 0},
+		{"(*AssignStmt).End", Method, 0},
+		{"(*AssignStmt).Pos", Method, 0},
+		{"(*BadDecl).End", Method, 0},
+		{"(*BadDecl).Pos", Method, 0},
+		{"(*BadExpr).End", Method, 0},
+		{"(*BadExpr).Pos", Method, 0},
+		{"(*BadStmt).End", Method, 0},
+		{"(*BadStmt).Pos", Method, 0},
+		{"(*BasicLit).End", Method, 0},
+		{"(*BasicLit).Pos", Method, 0},
+		{"(*BinaryExpr).End", Method, 0},
+		{"(*BinaryExpr).Pos", Method, 0},
+		{"(*BlockStmt).End", Method, 0},
+		{"(*BlockStmt).Pos", Method, 0},
+		{"(*BranchStmt).End", Method, 0},
+		{"(*BranchStmt).Pos", Method, 0},
+		{"(*CallExpr).End", Method, 0},
+		{"(*CallExpr).Pos", Method, 0},
+		{"(*CaseClause).End", Method, 0},
+		{"(*CaseClause).Pos", Method, 0},
+		{"(*ChanType).End", Method, 0},
+		{"(*ChanType).Pos", Method, 0},
+		{"(*CommClause).End", Method, 0},
+		{"(*CommClause).Pos", Method, 0},
+		{"(*Comment).End", Method, 0},
+		{"(*Comment).Pos", Method, 0},
+		{"(*CommentGroup).End", Method, 0},
+		{"(*CommentGroup).Pos", Method, 0},
+		{"(*CommentGroup).Text", Method, 0},
+		{"(*CompositeLit).End", Method, 0},
+		{"(*CompositeLit).Pos", Method, 0},
+		{"(*DeclStmt).End", Method, 0},
+		{"(*DeclStmt).Pos", Method, 0},
+		{"(*DeferStmt).End", Method, 0},
+		{"(*DeferStmt).Pos", Method, 0},
+		{"(*Ellipsis).End", Method, 0},
+		{"(*Ellipsis).Pos", Method, 0},
+		{"(*EmptyStmt).End", Method, 0},
+		{"(*EmptyStmt).Pos", Method, 0},
+		{"(*ExprStmt).End", Method, 0},
+		{"(*ExprStmt).Pos", Method, 0},
+		{"(*Field).End", Method, 0},
+		{"(*Field).Pos", Method, 0},
+		{"(*FieldList).End", Method, 0},
+		{"(*FieldList).NumFields", Method, 0},
+		{"(*FieldList).Pos", Method, 0},
+		{"(*File).End", Method, 0},
+		{"(*File).Pos", Method, 0},
+		{"(*ForStmt).End", Method, 0},
+		{"(*ForStmt).Pos", Method, 0},
+		{"(*FuncDecl).End", Method, 0},
+		{"(*FuncDecl).Pos", Method, 0},
+		{"(*FuncLit).End", Method, 0},
+		{"(*FuncLit).Pos", Method, 0},
+		{"(*FuncType).End", Method, 0},
+		{"(*FuncType).Pos", Method, 0},
+		{"(*GenDecl).End", Method, 0},
+		{"(*GenDecl).Pos", Method, 0},
+		{"(*GoStmt).End", Method, 0},
+		{"(*GoStmt).Pos", Method, 0},
+		{"(*Ident).End", Method, 0},
+		{"(*Ident).IsExported", Method, 0},
+		{"(*Ident).Pos", Method, 0},
+		{"(*Ident).String", Method, 0},
+		{"(*IfStmt).End", Method, 0},
+		{"(*IfStmt).Pos", Method, 0},
+		{"(*ImportSpec).End", Method, 0},
+		{"(*ImportSpec).Pos", Method, 0},
+		{"(*IncDecStmt).End", Method, 0},
+		{"(*IncDecStmt).Pos", Method, 0},
+		{"(*IndexExpr).End", Method, 0},
+		{"(*IndexExpr).Pos", Method, 0},
+		{"(*IndexListExpr).End", Method, 18},
+		{"(*IndexListExpr).Pos", Method, 18},
+		{"(*InterfaceType).End", Method, 0},
+		{"(*InterfaceType).Pos", Method, 0},
+		{"(*KeyValueExpr).End", Method, 0},
+		{"(*KeyValueExpr).Pos", Method, 0},
+		{"(*LabeledStmt).End", Method, 0},
+		{"(*LabeledStmt).Pos", Method, 0},
+		{"(*MapType).End", Method, 0},
+		{"(*MapType).Pos", Method, 0},
+		{"(*Object).Pos", Method, 0},
+		{"(*Package).End", Method, 0},
+		{"(*Package).Pos", Method, 0},
+		{"(*ParenExpr).End", Method, 0},
+		{"(*ParenExpr).Pos", Method, 0},
+		{"(*RangeStmt).End", Method, 0},
+		{"(*RangeStmt).Pos", Method, 0},
+		{"(*ReturnStmt).End", Method, 0},
+		{"(*ReturnStmt).Pos", Method, 0},
+		{"(*Scope).Insert", Method, 0},
+		{"(*Scope).Lookup", Method, 0},
+		{"(*Scope).String", Method, 0},
+		{"(*SelectStmt).End", Method, 0},
+		{"(*SelectStmt).Pos", Method, 0},
+		{"(*SelectorExpr).End", Method, 0},
+		{"(*SelectorExpr).Pos", Method, 0},
+		{"(*SendStmt).End", Method, 0},
+		{"(*SendStmt).Pos", Method, 0},
+		{"(*SliceExpr).End", Method, 0},
+		{"(*SliceExpr).Pos", Method, 0},
+		{"(*StarExpr).End", Method, 0},
+		{"(*StarExpr).Pos", Method, 0},
+		{"(*StructType).End", Method, 0},
+		{"(*StructType).Pos", Method, 0},
+		{"(*SwitchStmt).End", Method, 0},
+		{"(*SwitchStmt).Pos", Method, 0},
+		{"(*TypeAssertExpr).End", Method, 0},
+		{"(*TypeAssertExpr).Pos", Method, 0},
+		{"(*TypeSpec).End", Method, 0},
+		{"(*TypeSpec).Pos", Method, 0},
+		{"(*TypeSwitchStmt).End", Method, 0},
+		{"(*TypeSwitchStmt).Pos", Method, 0},
+		{"(*UnaryExpr).End", Method, 0},
+		{"(*UnaryExpr).Pos", Method, 0},
+		{"(*ValueSpec).End", Method, 0},
+		{"(*ValueSpec).Pos", Method, 0},
+		{"(CommentMap).Comments", Method, 1},
+		{"(CommentMap).Filter", Method, 1},
+		{"(CommentMap).String", Method, 1},
+		{"(CommentMap).Update", Method, 1},
+		{"(ObjKind).String", Method, 0},
+		{"ArrayType", Type, 0},
+		{"ArrayType.Elt", Field, 0},
+		{"ArrayType.Lbrack", Field, 0},
+		{"ArrayType.Len", Field, 0},
+		{"AssignStmt", Type, 0},
+		{"AssignStmt.Lhs", Field, 0},
+		{"AssignStmt.Rhs", Field, 0},
+		{"AssignStmt.Tok", Field, 0},
+		{"AssignStmt.TokPos", Field, 0},
+		{"Bad", Const, 0},
+		{"BadDecl", Type, 0},
+		{"BadDecl.From", Field, 0},
+		{"BadDecl.To", Field, 0},
+		{"BadExpr", Type, 0},
+		{"BadExpr.From", Field, 0},
+		{"BadExpr.To", Field, 0},
+		{"BadStmt", Type, 0},
+		{"BadStmt.From", Field, 0},
+		{"BadStmt.To", Field, 0},
+		{"BasicLit", Type, 0},
+		{"BasicLit.Kind", Field, 0},
+		{"BasicLit.Value", Field, 0},
+		{"BasicLit.ValuePos", Field, 0},
+		{"BinaryExpr", Type, 0},
+		{"BinaryExpr.Op", Field, 0},
+		{"BinaryExpr.OpPos", Field, 0},
+		{"BinaryExpr.X", Field, 0},
+		{"BinaryExpr.Y", Field, 0},
+		{"BlockStmt", Type, 0},
+		{"BlockStmt.Lbrace", Field, 0},
+		{"BlockStmt.List", Field, 0},
+		{"BlockStmt.Rbrace", Field, 0},
+		{"BranchStmt", Type, 0},
+		{"BranchStmt.Label", Field, 0},
+		{"BranchStmt.Tok", Field, 0},
+		{"BranchStmt.TokPos", Field, 0},
+		{"CallExpr", Type, 0},
+		{"CallExpr.Args", Field, 0},
+		{"CallExpr.Ellipsis", Field, 0},
+		{"CallExpr.Fun", Field, 0},
+		{"CallExpr.Lparen", Field, 0},
+		{"CallExpr.Rparen", Field, 0},
+		{"CaseClause", Type, 0},
+		{"CaseClause.Body", Field, 0},
+		{"CaseClause.Case", Field, 0},
+		{"CaseClause.Colon", Field, 0},
+		{"CaseClause.List", Field, 0},
+		{"ChanDir", Type, 0},
+		{"ChanType", Type, 0},
+		{"ChanType.Arrow", Field, 1},
+		{"ChanType.Begin", Field, 0},
+		{"ChanType.Dir", Field, 0},
+		{"ChanType.Value", Field, 0},
+		{"CommClause", Type, 0},
+		{"CommClause.Body", Field, 0},
+		{"CommClause.Case", Field, 0},
+		{"CommClause.Colon", Field, 0},
+		{"CommClause.Comm", Field, 0},
+		{"Comment", Type, 0},
+		{"Comment.Slash", Field, 0},
+		{"Comment.Text", Field, 0},
+		{"CommentGroup", Type, 0},
+		{"CommentGroup.List", Field, 0},
+		{"CommentMap", Type, 1},
+		{"CompositeLit", Type, 0},
+		{"CompositeLit.Elts", Field, 0},
+		{"CompositeLit.Incomplete", Field, 11},
+		{"CompositeLit.Lbrace", Field, 0},
+		{"CompositeLit.Rbrace", Field, 0},
+		{"CompositeLit.Type", Field, 0},
+		{"Con", Const, 0},
+		{"Decl", Type, 0},
+		{"DeclStmt", Type, 0},
+		{"DeclStmt.Decl", Field, 0},
+		{"DeferStmt", Type, 0},
+		{"DeferStmt.Call", Field, 0},
+		{"DeferStmt.Defer", Field, 0},
+		{"Ellipsis", Type, 0},
+		{"Ellipsis.Ellipsis", Field, 0},
+		{"Ellipsis.Elt", Field, 0},
+		{"EmptyStmt", Type, 0},
+		{"EmptyStmt.Implicit", Field, 5},
+		{"EmptyStmt.Semicolon", Field, 0},
+		{"Expr", Type, 0},
+		{"ExprStmt", Type, 0},
+		{"ExprStmt.X", Field, 0},
+		{"Field", Type, 0},
+		{"Field.Comment", Field, 0},
+		{"Field.Doc", Field, 0},
+		{"Field.Names", Field, 0},
+		{"Field.Tag", Field, 0},
+		{"Field.Type", Field, 0},
+		{"FieldFilter", Type, 0},
+		{"FieldList", Type, 0},
+		{"FieldList.Closing", Field, 0},
+		{"FieldList.List", Field, 0},
+		{"FieldList.Opening", Field, 0},
+		{"File", Type, 0},
+		{"File.Comments", Field, 0},
+		{"File.Decls", Field, 0},
+		{"File.Doc", Field, 0},
+		{"File.FileEnd", Field, 20},
+		{"File.FileStart", Field, 20},
+		{"File.GoVersion", Field, 21},
+		{"File.Imports", Field, 0},
+		{"File.Name", Field, 0},
+		{"File.Package", Field, 0},
+		{"File.Scope", Field, 0},
+		{"File.Unresolved", Field, 0},
+		{"FileExports", Func, 0},
+		{"Filter", Type, 0},
+		{"FilterDecl", Func, 0},
+		{"FilterFile", Func, 0},
+		{"FilterFuncDuplicates", Const, 0},
+		{"FilterImportDuplicates", Const, 0},
+		{"FilterPackage", Func, 0},
+		{"FilterUnassociatedComments", Const, 0},
+		{"ForStmt", Type, 0},
+		{"ForStmt.Body", Field, 0},
+		{"ForStmt.Cond", Field, 0},
+		{"ForStmt.For", Field, 0},
+		{"ForStmt.Init", Field, 0},
+		{"ForStmt.Post", Field, 0},
+		{"Fprint", Func, 0},
+		{"Fun", Const, 0},
+		{"FuncDecl", Type, 0},
+		{"FuncDecl.Body", Field, 0},
+		{"FuncDecl.Doc", Field, 0},
+		{"FuncDecl.Name", Field, 0},
+		{"FuncDecl.Recv", Field, 0},
+		{"FuncDecl.Type", Field, 0},
+		{"FuncLit", Type, 0},
+		{"FuncLit.Body", Field, 0},
+		{"FuncLit.Type", Field, 0},
+		{"FuncType", Type, 0},
+		{"FuncType.Func", Field, 0},
+		{"FuncType.Params", Field, 0},
+		{"FuncType.Results", Field, 0},
+		{"FuncType.TypeParams", Field, 18},
+		{"GenDecl", Type, 0},
+		{"GenDecl.Doc", Field, 0},
+		{"GenDecl.Lparen", Field, 0},
+		{"GenDecl.Rparen", Field, 0},
+		{"GenDecl.Specs", Field, 0},
+		{"GenDecl.Tok", Field, 0},
+		{"GenDecl.TokPos", Field, 0},
+		{"GoStmt", Type, 0},
+		{"GoStmt.Call", Field, 0},
+		{"GoStmt.Go", Field, 0},
+		{"Ident", Type, 0},
+		{"Ident.Name", Field, 0},
+		{"Ident.NamePos", Field, 0},
+		{"Ident.Obj", Field, 0},
+		{"IfStmt", Type, 0},
+		{"IfStmt.Body", Field, 0},
+		{"IfStmt.Cond", Field, 0},
+		{"IfStmt.Else", Field, 0},
+		{"IfStmt.If", Field, 0},
+		{"IfStmt.Init", Field, 0},
+		{"ImportSpec", Type, 0},
+		{"ImportSpec.Comment", Field, 0},
+		{"ImportSpec.Doc", Field, 0},
+		{"ImportSpec.EndPos", Field, 0},
+		{"ImportSpec.Name", Field, 0},
+		{"ImportSpec.Path", Field, 0},
+		{"Importer", Type, 0},
+		{"IncDecStmt", Type, 0},
+		{"IncDecStmt.Tok", Field, 0},
+		{"IncDecStmt.TokPos", Field, 0},
+		{"IncDecStmt.X", Field, 0},
+		{"IndexExpr", Type, 0},
+		{"IndexExpr.Index", Field, 0},
+		{"IndexExpr.Lbrack", Field, 0},
+		{"IndexExpr.Rbrack", Field, 0},
+		{"IndexExpr.X", Field, 0},
+		{"IndexListExpr", Type, 18},
+		{"IndexListExpr.Indices", Field, 18},
+		{"IndexListExpr.Lbrack", Field, 18},
+		{"IndexListExpr.Rbrack", Field, 18},
+		{"IndexListExpr.X", Field, 18},
+		{"Inspect", Func, 0},
+		{"InterfaceType", Type, 0},
+		{"InterfaceType.Incomplete", Field, 0},
+		{"InterfaceType.Interface", Field, 0},
+		{"InterfaceType.Methods", Field, 0},
+		{"IsExported", Func, 0},
+		{"IsGenerated", Func, 21},
+		{"KeyValueExpr", Type, 0},
+		{"KeyValueExpr.Colon", Field, 0},
+		{"KeyValueExpr.Key", Field, 0},
+		{"KeyValueExpr.Value", Field, 0},
+		{"LabeledStmt", Type, 0},
+		{"LabeledStmt.Colon", Field, 0},
+		{"LabeledStmt.Label", Field, 0},
+		{"LabeledStmt.Stmt", Field, 0},
+		{"Lbl", Const, 0},
+		{"MapType", Type, 0},
+		{"MapType.Key", Field, 0},
+		{"MapType.Map", Field, 0},
+		{"MapType.Value", Field, 0},
+		{"MergeMode", Type, 0},
+		{"MergePackageFiles", Func, 0},
+		{"NewCommentMap", Func, 1},
+		{"NewIdent", Func, 0},
+		{"NewObj", Func, 0},
+		{"NewPackage", Func, 0},
+		{"NewScope", Func, 0},
+		{"Node", Type, 0},
+		{"NotNilFilter", Func, 0},
+		{"ObjKind", Type, 0},
+		{"Object", Type, 0},
+		{"Object.Data", Field, 0},
+		{"Object.Decl", Field, 0},
+		{"Object.Kind", Field, 0},
+		{"Object.Name", Field, 0},
+		{"Object.Type", Field, 0},
+		{"Package", Type, 0},
+		{"Package.Files", Field, 0},
+		{"Package.Imports", Field, 0},
+		{"Package.Name", Field, 0},
+		{"Package.Scope", Field, 0},
+		{"PackageExports", Func, 0},
+		{"ParenExpr", Type, 0},
+		{"ParenExpr.Lparen", Field, 0},
+		{"ParenExpr.Rparen", Field, 0},
+		{"ParenExpr.X", Field, 0},
+		{"Pkg", Const, 0},
+		{"Preorder", Func, 23},
+		{"Print", Func, 0},
+		{"RECV", Const, 0},
+		{"RangeStmt", Type, 0},
+		{"RangeStmt.Body", Field, 0},
+		{"RangeStmt.For", Field, 0},
+		{"RangeStmt.Key", Field, 0},
+		{"RangeStmt.Range", Field, 20},
+		{"RangeStmt.Tok", Field, 0},
+		{"RangeStmt.TokPos", Field, 0},
+		{"RangeStmt.Value", Field, 0},
+		{"RangeStmt.X", Field, 0},
+		{"ReturnStmt", Type, 0},
+		{"ReturnStmt.Results", Field, 0},
+		{"ReturnStmt.Return", Field, 0},
+		{"SEND", Const, 0},
+		{"Scope", Type, 0},
+		{"Scope.Objects", Field, 0},
+		{"Scope.Outer", Field, 0},
+		{"SelectStmt", Type, 0},
+		{"SelectStmt.Body", Field, 0},
+		{"SelectStmt.Select", Field, 0},
+		{"SelectorExpr", Type, 0},
+		{"SelectorExpr.Sel", Field, 0},
+		{"SelectorExpr.X", Field, 0},
+		{"SendStmt", Type, 0},
+		{"SendStmt.Arrow", Field, 0},
+		{"SendStmt.Chan", Field, 0},
+		{"SendStmt.Value", Field, 0},
+		{"SliceExpr", Type, 0},
+		{"SliceExpr.High", Field, 0},
+		{"SliceExpr.Lbrack", Field, 0},
+		{"SliceExpr.Low", Field, 0},
+		{"SliceExpr.Max", Field, 2},
+		{"SliceExpr.Rbrack", Field, 0},
+		{"SliceExpr.Slice3", Field, 2},
+		{"SliceExpr.X", Field, 0},
+		{"SortImports", Func, 0},
+		{"Spec", Type, 0},
+		{"StarExpr", Type, 0},
+		{"StarExpr.Star", Field, 0},
+		{"StarExpr.X", Field, 0},
+		{"Stmt", Type, 0},
+		{"StructType", Type, 0},
+		{"StructType.Fields", Field, 0},
+		{"StructType.Incomplete", Field, 0},
+		{"StructType.Struct", Field, 0},
+		{"SwitchStmt", Type, 0},
+		{"SwitchStmt.Body", Field, 0},
+		{"SwitchStmt.Init", Field, 0},
+		{"SwitchStmt.Switch", Field, 0},
+		{"SwitchStmt.Tag", Field, 0},
+		{"Typ", Const, 0},
+		{"TypeAssertExpr", Type, 0},
+		{"TypeAssertExpr.Lparen", Field, 2},
+		{"TypeAssertExpr.Rparen", Field, 2},
+		{"TypeAssertExpr.Type", Field, 0},
+		{"TypeAssertExpr.X", Field, 0},
+		{"TypeSpec", Type, 0},
+		{"TypeSpec.Assign", Field, 9},
+		{"TypeSpec.Comment", Field, 0},
+		{"TypeSpec.Doc", Field, 0},
+		{"TypeSpec.Name", Field, 0},
+		{"TypeSpec.Type", Field, 0},
+		{"TypeSpec.TypeParams", Field, 18},
+		{"TypeSwitchStmt", Type, 0},
+		{"TypeSwitchStmt.Assign", Field, 0},
+		{"TypeSwitchStmt.Body", Field, 0},
+		{"TypeSwitchStmt.Init", Field, 0},
+		{"TypeSwitchStmt.Switch", Field, 0},
+		{"UnaryExpr", Type, 0},
+		{"UnaryExpr.Op", Field, 0},
+		{"UnaryExpr.OpPos", Field, 0},
+		{"UnaryExpr.X", Field, 0},
+		{"Unparen", Func, 22},
+		{"ValueSpec", Type, 0},
+		{"ValueSpec.Comment", Field, 0},
+		{"ValueSpec.Doc", Field, 0},
+		{"ValueSpec.Names", Field, 0},
+		{"ValueSpec.Type", Field, 0},
+		{"ValueSpec.Values", Field, 0},
+		{"Var", Const, 0},
+		{"Visitor", Type, 0},
+		{"Walk", Func, 0},
 	},
 	"go/build": {
-		{"(*Context).Import", Method, 0, ""},
-		{"(*Context).ImportDir", Method, 0, ""},
-		{"(*Context).MatchFile", Method, 2, ""},
-		{"(*Context).SrcDirs", Method, 0, ""},
-		{"(*MultiplePackageError).Error", Method, 4, ""},
-		{"(*NoGoError).Error", Method, 0, ""},
-		{"(*Package).IsCommand", Method, 0, ""},
-		{"AllowBinary", Const, 0, ""},
-		{"ArchChar", Func, 0, "func(goarch string) (string, error)"},
-		{"Context", Type, 0, ""},
-		{"Context.BuildTags", Field, 0, ""},
-		{"Context.CgoEnabled", Field, 0, ""},
-		{"Context.Compiler", Field, 0, ""},
-		{"Context.Dir", Field, 14, ""},
-		{"Context.GOARCH", Field, 0, ""},
-		{"Context.GOOS", Field, 0, ""},
-		{"Context.GOPATH", Field, 0, ""},
-		{"Context.GOROOT", Field, 0, ""},
-		{"Context.HasSubdir", Field, 0, ""},
-		{"Context.InstallSuffix", Field, 1, ""},
-		{"Context.IsAbsPath", Field, 0, ""},
-		{"Context.IsDir", Field, 0, ""},
-		{"Context.JoinPath", Field, 0, ""},
-		{"Context.OpenFile", Field, 0, ""},
-		{"Context.ReadDir", Field, 0, ""},
-		{"Context.ReleaseTags", Field, 1, ""},
-		{"Context.SplitPathList", Field, 0, ""},
-		{"Context.ToolTags", Field, 17, ""},
-		{"Context.UseAllFiles", Field, 0, ""},
-		{"Default", Var, 0, ""},
-		{"Directive", Type, 21, ""},
-		{"Directive.Pos", Field, 21, ""},
-		{"Directive.Text", Field, 21, ""},
-		{"FindOnly", Const, 0, ""},
-		{"IgnoreVendor", Const, 6, ""},
-		{"Import", Func, 0, "func(path string, srcDir string, mode ImportMode) (*Package, error)"},
-		{"ImportComment", Const, 4, ""},
-		{"ImportDir", Func, 0, "func(dir string, mode ImportMode) (*Package, error)"},
-		{"ImportMode", Type, 0, ""},
-		{"IsLocalImport", Func, 0, "func(path string) bool"},
-		{"MultiplePackageError", Type, 4, ""},
-		{"MultiplePackageError.Dir", Field, 4, ""},
-		{"MultiplePackageError.Files", Field, 4, ""},
-		{"MultiplePackageError.Packages", Field, 4, ""},
-		{"NoGoError", Type, 0, ""},
-		{"NoGoError.Dir", Field, 0, ""},
-		{"Package", Type, 0, ""},
-		{"Package.AllTags", Field, 2, ""},
-		{"Package.BinDir", Field, 0, ""},
-		{"Package.BinaryOnly", Field, 7, ""},
-		{"Package.CFiles", Field, 0, ""},
-		{"Package.CXXFiles", Field, 2, ""},
-		{"Package.CgoCFLAGS", Field, 0, ""},
-		{"Package.CgoCPPFLAGS", Field, 2, ""},
-		{"Package.CgoCXXFLAGS", Field, 2, ""},
-		{"Package.CgoFFLAGS", Field, 7, ""},
-		{"Package.CgoFiles", Field, 0, ""},
-		{"Package.CgoLDFLAGS", Field, 0, ""},
-		{"Package.CgoPkgConfig", Field, 0, ""},
-		{"Package.ConflictDir", Field, 2, ""},
-		{"Package.Dir", Field, 0, ""},
-		{"Package.Directives", Field, 21, ""},
-		{"Package.Doc", Field, 0, ""},
-		{"Package.EmbedPatternPos", Field, 16, ""},
-		{"Package.EmbedPatterns", Field, 16, ""},
-		{"Package.FFiles", Field, 7, ""},
-		{"Package.GoFiles", Field, 0, ""},
-		{"Package.Goroot", Field, 0, ""},
-		{"Package.HFiles", Field, 0, ""},
-		{"Package.IgnoredGoFiles", Field, 1, ""},
-		{"Package.IgnoredOtherFiles", Field, 16, ""},
-		{"Package.ImportComment", Field, 4, ""},
-		{"Package.ImportPath", Field, 0, ""},
-		{"Package.ImportPos", Field, 0, ""},
-		{"Package.Imports", Field, 0, ""},
-		{"Package.InvalidGoFiles", Field, 6, ""},
-		{"Package.MFiles", Field, 3, ""},
-		{"Package.Name", Field, 0, ""},
-		{"Package.PkgObj", Field, 0, ""},
-		{"Package.PkgRoot", Field, 0, ""},
-		{"Package.PkgTargetRoot", Field, 5, ""},
-		{"Package.Root", Field, 0, ""},
-		{"Package.SFiles", Field, 0, ""},
-		{"Package.SrcRoot", Field, 0, ""},
-		{"Package.SwigCXXFiles", Field, 1, ""},
-		{"Package.SwigFiles", Field, 1, ""},
-		{"Package.SysoFiles", Field, 0, ""},
-		{"Package.TestDirectives", Field, 21, ""},
-		{"Package.TestEmbedPatternPos", Field, 16, ""},
-		{"Package.TestEmbedPatterns", Field, 16, ""},
-		{"Package.TestGoFiles", Field, 0, ""},
-		{"Package.TestImportPos", Field, 0, ""},
-		{"Package.TestImports", Field, 0, ""},
-		{"Package.XTestDirectives", Field, 21, ""},
-		{"Package.XTestEmbedPatternPos", Field, 16, ""},
-		{"Package.XTestEmbedPatterns", Field, 16, ""},
-		{"Package.XTestGoFiles", Field, 0, ""},
-		{"Package.XTestImportPos", Field, 0, ""},
-		{"Package.XTestImports", Field, 0, ""},
-		{"ToolDir", Var, 0, ""},
+		{"(*Context).Import", Method, 0},
+		{"(*Context).ImportDir", Method, 0},
+		{"(*Context).MatchFile", Method, 2},
+		{"(*Context).SrcDirs", Method, 0},
+		{"(*MultiplePackageError).Error", Method, 4},
+		{"(*NoGoError).Error", Method, 0},
+		{"(*Package).IsCommand", Method, 0},
+		{"AllowBinary", Const, 0},
+		{"ArchChar", Func, 0},
+		{"Context", Type, 0},
+		{"Context.BuildTags", Field, 0},
+		{"Context.CgoEnabled", Field, 0},
+		{"Context.Compiler", Field, 0},
+		{"Context.Dir", Field, 14},
+		{"Context.GOARCH", Field, 0},
+		{"Context.GOOS", Field, 0},
+		{"Context.GOPATH", Field, 0},
+		{"Context.GOROOT", Field, 0},
+		{"Context.HasSubdir", Field, 0},
+		{"Context.InstallSuffix", Field, 1},
+		{"Context.IsAbsPath", Field, 0},
+		{"Context.IsDir", Field, 0},
+		{"Context.JoinPath", Field, 0},
+		{"Context.OpenFile", Field, 0},
+		{"Context.ReadDir", Field, 0},
+		{"Context.ReleaseTags", Field, 1},
+		{"Context.SplitPathList", Field, 0},
+		{"Context.ToolTags", Field, 17},
+		{"Context.UseAllFiles", Field, 0},
+		{"Default", Var, 0},
+		{"Directive", Type, 21},
+		{"Directive.Pos", Field, 21},
+		{"Directive.Text", Field, 21},
+		{"FindOnly", Const, 0},
+		{"IgnoreVendor", Const, 6},
+		{"Import", Func, 0},
+		{"ImportComment", Const, 4},
+		{"ImportDir", Func, 0},
+		{"ImportMode", Type, 0},
+		{"IsLocalImport", Func, 0},
+		{"MultiplePackageError", Type, 4},
+		{"MultiplePackageError.Dir", Field, 4},
+		{"MultiplePackageError.Files", Field, 4},
+		{"MultiplePackageError.Packages", Field, 4},
+		{"NoGoError", Type, 0},
+		{"NoGoError.Dir", Field, 0},
+		{"Package", Type, 0},
+		{"Package.AllTags", Field, 2},
+		{"Package.BinDir", Field, 0},
+		{"Package.BinaryOnly", Field, 7},
+		{"Package.CFiles", Field, 0},
+		{"Package.CXXFiles", Field, 2},
+		{"Package.CgoCFLAGS", Field, 0},
+		{"Package.CgoCPPFLAGS", Field, 2},
+		{"Package.CgoCXXFLAGS", Field, 2},
+		{"Package.CgoFFLAGS", Field, 7},
+		{"Package.CgoFiles", Field, 0},
+		{"Package.CgoLDFLAGS", Field, 0},
+		{"Package.CgoPkgConfig", Field, 0},
+		{"Package.ConflictDir", Field, 2},
+		{"Package.Dir", Field, 0},
+		{"Package.Directives", Field, 21},
+		{"Package.Doc", Field, 0},
+		{"Package.EmbedPatternPos", Field, 16},
+		{"Package.EmbedPatterns", Field, 16},
+		{"Package.FFiles", Field, 7},
+		{"Package.GoFiles", Field, 0},
+		{"Package.Goroot", Field, 0},
+		{"Package.HFiles", Field, 0},
+		{"Package.IgnoredGoFiles", Field, 1},
+		{"Package.IgnoredOtherFiles", Field, 16},
+		{"Package.ImportComment", Field, 4},
+		{"Package.ImportPath", Field, 0},
+		{"Package.ImportPos", Field, 0},
+		{"Package.Imports", Field, 0},
+		{"Package.InvalidGoFiles", Field, 6},
+		{"Package.MFiles", Field, 3},
+		{"Package.Name", Field, 0},
+		{"Package.PkgObj", Field, 0},
+		{"Package.PkgRoot", Field, 0},
+		{"Package.PkgTargetRoot", Field, 5},
+		{"Package.Root", Field, 0},
+		{"Package.SFiles", Field, 0},
+		{"Package.SrcRoot", Field, 0},
+		{"Package.SwigCXXFiles", Field, 1},
+		{"Package.SwigFiles", Field, 1},
+		{"Package.SysoFiles", Field, 0},
+		{"Package.TestDirectives", Field, 21},
+		{"Package.TestEmbedPatternPos", Field, 16},
+		{"Package.TestEmbedPatterns", Field, 16},
+		{"Package.TestGoFiles", Field, 0},
+		{"Package.TestImportPos", Field, 0},
+		{"Package.TestImports", Field, 0},
+		{"Package.XTestDirectives", Field, 21},
+		{"Package.XTestEmbedPatternPos", Field, 16},
+		{"Package.XTestEmbedPatterns", Field, 16},
+		{"Package.XTestGoFiles", Field, 0},
+		{"Package.XTestImportPos", Field, 0},
+		{"Package.XTestImports", Field, 0},
+		{"ToolDir", Var, 0},
 	},
 	"go/build/constraint": {
-		{"(*AndExpr).Eval", Method, 16, ""},
-		{"(*AndExpr).String", Method, 16, ""},
-		{"(*NotExpr).Eval", Method, 16, ""},
-		{"(*NotExpr).String", Method, 16, ""},
-		{"(*OrExpr).Eval", Method, 16, ""},
-		{"(*OrExpr).String", Method, 16, ""},
-		{"(*SyntaxError).Error", Method, 16, ""},
-		{"(*TagExpr).Eval", Method, 16, ""},
-		{"(*TagExpr).String", Method, 16, ""},
-		{"AndExpr", Type, 16, ""},
-		{"AndExpr.X", Field, 16, ""},
-		{"AndExpr.Y", Field, 16, ""},
-		{"Expr", Type, 16, ""},
-		{"GoVersion", Func, 21, "func(x Expr) string"},
-		{"IsGoBuild", Func, 16, "func(line string) bool"},
-		{"IsPlusBuild", Func, 16, "func(line string) bool"},
-		{"NotExpr", Type, 16, ""},
-		{"NotExpr.X", Field, 16, ""},
-		{"OrExpr", Type, 16, ""},
-		{"OrExpr.X", Field, 16, ""},
-		{"OrExpr.Y", Field, 16, ""},
-		{"Parse", Func, 16, "func(line string) (Expr, error)"},
-		{"PlusBuildLines", Func, 16, "func(x Expr) ([]string, error)"},
-		{"SyntaxError", Type, 16, ""},
-		{"SyntaxError.Err", Field, 16, ""},
-		{"SyntaxError.Offset", Field, 16, ""},
-		{"TagExpr", Type, 16, ""},
-		{"TagExpr.Tag", Field, 16, ""},
+		{"(*AndExpr).Eval", Method, 16},
+		{"(*AndExpr).String", Method, 16},
+		{"(*NotExpr).Eval", Method, 16},
+		{"(*NotExpr).String", Method, 16},
+		{"(*OrExpr).Eval", Method, 16},
+		{"(*OrExpr).String", Method, 16},
+		{"(*SyntaxError).Error", Method, 16},
+		{"(*TagExpr).Eval", Method, 16},
+		{"(*TagExpr).String", Method, 16},
+		{"AndExpr", Type, 16},
+		{"AndExpr.X", Field, 16},
+		{"AndExpr.Y", Field, 16},
+		{"Expr", Type, 16},
+		{"GoVersion", Func, 21},
+		{"IsGoBuild", Func, 16},
+		{"IsPlusBuild", Func, 16},
+		{"NotExpr", Type, 16},
+		{"NotExpr.X", Field, 16},
+		{"OrExpr", Type, 16},
+		{"OrExpr.X", Field, 16},
+		{"OrExpr.Y", Field, 16},
+		{"Parse", Func, 16},
+		{"PlusBuildLines", Func, 16},
+		{"SyntaxError", Type, 16},
+		{"SyntaxError.Err", Field, 16},
+		{"SyntaxError.Offset", Field, 16},
+		{"TagExpr", Type, 16},
+		{"TagExpr.Tag", Field, 16},
 	},
 	"go/constant": {
-		{"(Kind).String", Method, 18, ""},
-		{"BinaryOp", Func, 5, "func(x_ Value, op token.Token, y_ Value) Value"},
-		{"BitLen", Func, 5, "func(x Value) int"},
-		{"Bool", Const, 5, ""},
-		{"BoolVal", Func, 5, "func(x Value) bool"},
-		{"Bytes", Func, 5, "func(x Value) []byte"},
-		{"Compare", Func, 5, "func(x_ Value, op token.Token, y_ Value) bool"},
-		{"Complex", Const, 5, ""},
-		{"Denom", Func, 5, "func(x Value) Value"},
-		{"Float", Const, 5, ""},
-		{"Float32Val", Func, 5, "func(x Value) (float32, bool)"},
-		{"Float64Val", Func, 5, "func(x Value) (float64, bool)"},
-		{"Imag", Func, 5, "func(x Value) Value"},
-		{"Int", Const, 5, ""},
-		{"Int64Val", Func, 5, "func(x Value) (int64, bool)"},
-		{"Kind", Type, 5, ""},
-		{"Make", Func, 13, "func(x any) Value"},
-		{"MakeBool", Func, 5, "func(b bool) Value"},
-		{"MakeFloat64", Func, 5, "func(x float64) Value"},
-		{"MakeFromBytes", Func, 5, "func(bytes []byte) Value"},
-		{"MakeFromLiteral", Func, 5, "func(lit string, tok token.Token, zero uint) Value"},
-		{"MakeImag", Func, 5, "func(x Value) Value"},
-		{"MakeInt64", Func, 5, "func(x int64) Value"},
-		{"MakeString", Func, 5, "func(s string) Value"},
-		{"MakeUint64", Func, 5, "func(x uint64) Value"},
-		{"MakeUnknown", Func, 5, "func() Value"},
-		{"Num", Func, 5, "func(x Value) Value"},
-		{"Real", Func, 5, "func(x Value) Value"},
-		{"Shift", Func, 5, "func(x Value, op token.Token, s uint) Value"},
-		{"Sign", Func, 5, "func(x Value) int"},
-		{"String", Const, 5, ""},
-		{"StringVal", Func, 5, "func(x Value) string"},
-		{"ToComplex", Func, 6, "func(x Value) Value"},
-		{"ToFloat", Func, 6, "func(x Value) Value"},
-		{"ToInt", Func, 6, "func(x Value) Value"},
-		{"Uint64Val", Func, 5, "func(x Value) (uint64, bool)"},
-		{"UnaryOp", Func, 5, "func(op token.Token, y Value, prec uint) Value"},
-		{"Unknown", Const, 5, ""},
-		{"Val", Func, 13, "func(x Value) any"},
-		{"Value", Type, 5, ""},
+		{"(Kind).String", Method, 18},
+		{"BinaryOp", Func, 5},
+		{"BitLen", Func, 5},
+		{"Bool", Const, 5},
+		{"BoolVal", Func, 5},
+		{"Bytes", Func, 5},
+		{"Compare", Func, 5},
+		{"Complex", Const, 5},
+		{"Denom", Func, 5},
+		{"Float", Const, 5},
+		{"Float32Val", Func, 5},
+		{"Float64Val", Func, 5},
+		{"Imag", Func, 5},
+		{"Int", Const, 5},
+		{"Int64Val", Func, 5},
+		{"Kind", Type, 5},
+		{"Make", Func, 13},
+		{"MakeBool", Func, 5},
+		{"MakeFloat64", Func, 5},
+		{"MakeFromBytes", Func, 5},
+		{"MakeFromLiteral", Func, 5},
+		{"MakeImag", Func, 5},
+		{"MakeInt64", Func, 5},
+		{"MakeString", Func, 5},
+		{"MakeUint64", Func, 5},
+		{"MakeUnknown", Func, 5},
+		{"Num", Func, 5},
+		{"Real", Func, 5},
+		{"Shift", Func, 5},
+		{"Sign", Func, 5},
+		{"String", Const, 5},
+		{"StringVal", Func, 5},
+		{"ToComplex", Func, 6},
+		{"ToFloat", Func, 6},
+		{"ToInt", Func, 6},
+		{"Uint64Val", Func, 5},
+		{"UnaryOp", Func, 5},
+		{"Unknown", Const, 5},
+		{"Val", Func, 13},
+		{"Value", Type, 5},
 	},
 	"go/doc": {
-		{"(*Package).Filter", Method, 0, ""},
-		{"(*Package).HTML", Method, 19, ""},
-		{"(*Package).Markdown", Method, 19, ""},
-		{"(*Package).Parser", Method, 19, ""},
-		{"(*Package).Printer", Method, 19, ""},
-		{"(*Package).Synopsis", Method, 19, ""},
-		{"(*Package).Text", Method, 19, ""},
-		{"AllDecls", Const, 0, ""},
-		{"AllMethods", Const, 0, ""},
-		{"Example", Type, 0, ""},
-		{"Example.Code", Field, 0, ""},
-		{"Example.Comments", Field, 0, ""},
-		{"Example.Doc", Field, 0, ""},
-		{"Example.EmptyOutput", Field, 1, ""},
-		{"Example.Name", Field, 0, ""},
-		{"Example.Order", Field, 1, ""},
-		{"Example.Output", Field, 0, ""},
-		{"Example.Play", Field, 1, ""},
-		{"Example.Suffix", Field, 14, ""},
-		{"Example.Unordered", Field, 7, ""},
-		{"Examples", Func, 0, "func(testFiles ...*ast.File) []*Example"},
-		{"Filter", Type, 0, ""},
-		{"Func", Type, 0, ""},
-		{"Func.Decl", Field, 0, ""},
-		{"Func.Doc", Field, 0, ""},
-		{"Func.Examples", Field, 14, ""},
-		{"Func.Level", Field, 0, ""},
-		{"Func.Name", Field, 0, ""},
-		{"Func.Orig", Field, 0, ""},
-		{"Func.Recv", Field, 0, ""},
-		{"IllegalPrefixes", Var, 1, ""},
-		{"IsPredeclared", Func, 8, "func(s string) bool"},
-		{"Mode", Type, 0, ""},
-		{"New", Func, 0, "func(pkg *ast.Package, importPath string, mode Mode) *Package"},
-		{"NewFromFiles", Func, 14, "func(fset *token.FileSet, files []*ast.File, importPath string, opts ...any) (*Package, error)"},
-		{"Note", Type, 1, ""},
-		{"Note.Body", Field, 1, ""},
-		{"Note.End", Field, 1, ""},
-		{"Note.Pos", Field, 1, ""},
-		{"Note.UID", Field, 1, ""},
-		{"Package", Type, 0, ""},
-		{"Package.Bugs", Field, 0, ""},
-		{"Package.Consts", Field, 0, ""},
-		{"Package.Doc", Field, 0, ""},
-		{"Package.Examples", Field, 14, ""},
-		{"Package.Filenames", Field, 0, ""},
-		{"Package.Funcs", Field, 0, ""},
-		{"Package.ImportPath", Field, 0, ""},
-		{"Package.Imports", Field, 0, ""},
-		{"Package.Name", Field, 0, ""},
-		{"Package.Notes", Field, 1, ""},
-		{"Package.Types", Field, 0, ""},
-		{"Package.Vars", Field, 0, ""},
-		{"PreserveAST", Const, 12, ""},
-		{"Synopsis", Func, 0, "func(text string) string"},
-		{"ToHTML", Func, 0, "func(w io.Writer, text string, words map[string]string)"},
-		{"ToText", Func, 0, "func(w io.Writer, text string, prefix string, codePrefix string, width int)"},
-		{"Type", Type, 0, ""},
-		{"Type.Consts", Field, 0, ""},
-		{"Type.Decl", Field, 0, ""},
-		{"Type.Doc", Field, 0, ""},
-		{"Type.Examples", Field, 14, ""},
-		{"Type.Funcs", Field, 0, ""},
-		{"Type.Methods", Field, 0, ""},
-		{"Type.Name", Field, 0, ""},
-		{"Type.Vars", Field, 0, ""},
-		{"Value", Type, 0, ""},
-		{"Value.Decl", Field, 0, ""},
-		{"Value.Doc", Field, 0, ""},
-		{"Value.Names", Field, 0, ""},
+		{"(*Package).Filter", Method, 0},
+		{"(*Package).HTML", Method, 19},
+		{"(*Package).Markdown", Method, 19},
+		{"(*Package).Parser", Method, 19},
+		{"(*Package).Printer", Method, 19},
+		{"(*Package).Synopsis", Method, 19},
+		{"(*Package).Text", Method, 19},
+		{"AllDecls", Const, 0},
+		{"AllMethods", Const, 0},
+		{"Example", Type, 0},
+		{"Example.Code", Field, 0},
+		{"Example.Comments", Field, 0},
+		{"Example.Doc", Field, 0},
+		{"Example.EmptyOutput", Field, 1},
+		{"Example.Name", Field, 0},
+		{"Example.Order", Field, 1},
+		{"Example.Output", Field, 0},
+		{"Example.Play", Field, 1},
+		{"Example.Suffix", Field, 14},
+		{"Example.Unordered", Field, 7},
+		{"Examples", Func, 0},
+		{"Filter", Type, 0},
+		{"Func", Type, 0},
+		{"Func.Decl", Field, 0},
+		{"Func.Doc", Field, 0},
+		{"Func.Examples", Field, 14},
+		{"Func.Level", Field, 0},
+		{"Func.Name", Field, 0},
+		{"Func.Orig", Field, 0},
+		{"Func.Recv", Field, 0},
+		{"IllegalPrefixes", Var, 1},
+		{"IsPredeclared", Func, 8},
+		{"Mode", Type, 0},
+		{"New", Func, 0},
+		{"NewFromFiles", Func, 14},
+		{"Note", Type, 1},
+		{"Note.Body", Field, 1},
+		{"Note.End", Field, 1},
+		{"Note.Pos", Field, 1},
+		{"Note.UID", Field, 1},
+		{"Package", Type, 0},
+		{"Package.Bugs", Field, 0},
+		{"Package.Consts", Field, 0},
+		{"Package.Doc", Field, 0},
+		{"Package.Examples", Field, 14},
+		{"Package.Filenames", Field, 0},
+		{"Package.Funcs", Field, 0},
+		{"Package.ImportPath", Field, 0},
+		{"Package.Imports", Field, 0},
+		{"Package.Name", Field, 0},
+		{"Package.Notes", Field, 1},
+		{"Package.Types", Field, 0},
+		{"Package.Vars", Field, 0},
+		{"PreserveAST", Const, 12},
+		{"Synopsis", Func, 0},
+		{"ToHTML", Func, 0},
+		{"ToText", Func, 0},
+		{"Type", Type, 0},
+		{"Type.Consts", Field, 0},
+		{"Type.Decl", Field, 0},
+		{"Type.Doc", Field, 0},
+		{"Type.Examples", Field, 14},
+		{"Type.Funcs", Field, 0},
+		{"Type.Methods", Field, 0},
+		{"Type.Name", Field, 0},
+		{"Type.Vars", Field, 0},
+		{"Value", Type, 0},
+		{"Value.Decl", Field, 0},
+		{"Value.Doc", Field, 0},
+		{"Value.Names", Field, 0},
 	},
 	"go/doc/comment": {
-		{"(*DocLink).DefaultURL", Method, 19, ""},
-		{"(*Heading).DefaultID", Method, 19, ""},
-		{"(*List).BlankBefore", Method, 19, ""},
-		{"(*List).BlankBetween", Method, 19, ""},
-		{"(*Parser).Parse", Method, 19, ""},
-		{"(*Printer).Comment", Method, 19, ""},
-		{"(*Printer).HTML", Method, 19, ""},
-		{"(*Printer).Markdown", Method, 19, ""},
-		{"(*Printer).Text", Method, 19, ""},
-		{"Block", Type, 19, ""},
-		{"Code", Type, 19, ""},
-		{"Code.Text", Field, 19, ""},
-		{"DefaultLookupPackage", Func, 19, "func(name string) (importPath string, ok bool)"},
-		{"Doc", Type, 19, ""},
-		{"Doc.Content", Field, 19, ""},
-		{"Doc.Links", Field, 19, ""},
-		{"DocLink", Type, 19, ""},
-		{"DocLink.ImportPath", Field, 19, ""},
-		{"DocLink.Name", Field, 19, ""},
-		{"DocLink.Recv", Field, 19, ""},
-		{"DocLink.Text", Field, 19, ""},
-		{"Heading", Type, 19, ""},
-		{"Heading.Text", Field, 19, ""},
-		{"Italic", Type, 19, ""},
-		{"Link", Type, 19, ""},
-		{"Link.Auto", Field, 19, ""},
-		{"Link.Text", Field, 19, ""},
-		{"Link.URL", Field, 19, ""},
-		{"LinkDef", Type, 19, ""},
-		{"LinkDef.Text", Field, 19, ""},
-		{"LinkDef.URL", Field, 19, ""},
-		{"LinkDef.Used", Field, 19, ""},
-		{"List", Type, 19, ""},
-		{"List.ForceBlankBefore", Field, 19, ""},
-		{"List.ForceBlankBetween", Field, 19, ""},
-		{"List.Items", Field, 19, ""},
-		{"ListItem", Type, 19, ""},
-		{"ListItem.Content", Field, 19, ""},
-		{"ListItem.Number", Field, 19, ""},
-		{"Paragraph", Type, 19, ""},
-		{"Paragraph.Text", Field, 19, ""},
-		{"Parser", Type, 19, ""},
-		{"Parser.LookupPackage", Field, 19, ""},
-		{"Parser.LookupSym", Field, 19, ""},
-		{"Parser.Words", Field, 19, ""},
-		{"Plain", Type, 19, ""},
-		{"Printer", Type, 19, ""},
-		{"Printer.DocLinkBaseURL", Field, 19, ""},
-		{"Printer.DocLinkURL", Field, 19, ""},
-		{"Printer.HeadingID", Field, 19, ""},
-		{"Printer.HeadingLevel", Field, 19, ""},
-		{"Printer.TextCodePrefix", Field, 19, ""},
-		{"Printer.TextPrefix", Field, 19, ""},
-		{"Printer.TextWidth", Field, 19, ""},
-		{"Text", Type, 19, ""},
+		{"(*DocLink).DefaultURL", Method, 19},
+		{"(*Heading).DefaultID", Method, 19},
+		{"(*List).BlankBefore", Method, 19},
+		{"(*List).BlankBetween", Method, 19},
+		{"(*Parser).Parse", Method, 19},
+		{"(*Printer).Comment", Method, 19},
+		{"(*Printer).HTML", Method, 19},
+		{"(*Printer).Markdown", Method, 19},
+		{"(*Printer).Text", Method, 19},
+		{"Block", Type, 19},
+		{"Code", Type, 19},
+		{"Code.Text", Field, 19},
+		{"DefaultLookupPackage", Func, 19},
+		{"Doc", Type, 19},
+		{"Doc.Content", Field, 19},
+		{"Doc.Links", Field, 19},
+		{"DocLink", Type, 19},
+		{"DocLink.ImportPath", Field, 19},
+		{"DocLink.Name", Field, 19},
+		{"DocLink.Recv", Field, 19},
+		{"DocLink.Text", Field, 19},
+		{"Heading", Type, 19},
+		{"Heading.Text", Field, 19},
+		{"Italic", Type, 19},
+		{"Link", Type, 19},
+		{"Link.Auto", Field, 19},
+		{"Link.Text", Field, 19},
+		{"Link.URL", Field, 19},
+		{"LinkDef", Type, 19},
+		{"LinkDef.Text", Field, 19},
+		{"LinkDef.URL", Field, 19},
+		{"LinkDef.Used", Field, 19},
+		{"List", Type, 19},
+		{"List.ForceBlankBefore", Field, 19},
+		{"List.ForceBlankBetween", Field, 19},
+		{"List.Items", Field, 19},
+		{"ListItem", Type, 19},
+		{"ListItem.Content", Field, 19},
+		{"ListItem.Number", Field, 19},
+		{"Paragraph", Type, 19},
+		{"Paragraph.Text", Field, 19},
+		{"Parser", Type, 19},
+		{"Parser.LookupPackage", Field, 19},
+		{"Parser.LookupSym", Field, 19},
+		{"Parser.Words", Field, 19},
+		{"Plain", Type, 19},
+		{"Printer", Type, 19},
+		{"Printer.DocLinkBaseURL", Field, 19},
+		{"Printer.DocLinkURL", Field, 19},
+		{"Printer.HeadingID", Field, 19},
+		{"Printer.HeadingLevel", Field, 19},
+		{"Printer.TextCodePrefix", Field, 19},
+		{"Printer.TextPrefix", Field, 19},
+		{"Printer.TextWidth", Field, 19},
+		{"Text", Type, 19},
 	},
 	"go/format": {
-		{"Node", Func, 1, "func(dst io.Writer, fset *token.FileSet, node any) error"},
-		{"Source", Func, 1, "func(src []byte) ([]byte, error)"},
+		{"Node", Func, 1},
+		{"Source", Func, 1},
 	},
 	"go/importer": {
-		{"Default", Func, 5, "func() types.Importer"},
-		{"For", Func, 5, "func(compiler string, lookup Lookup) types.Importer"},
-		{"ForCompiler", Func, 12, "func(fset *token.FileSet, compiler string, lookup Lookup) types.Importer"},
-		{"Lookup", Type, 5, ""},
+		{"Default", Func, 5},
+		{"For", Func, 5},
+		{"ForCompiler", Func, 12},
+		{"Lookup", Type, 5},
 	},
 	"go/parser": {
-		{"AllErrors", Const, 1, ""},
-		{"DeclarationErrors", Const, 0, ""},
-		{"ImportsOnly", Const, 0, ""},
-		{"Mode", Type, 0, ""},
-		{"PackageClauseOnly", Const, 0, ""},
-		{"ParseComments", Const, 0, ""},
-		{"ParseDir", Func, 0, "func(fset *token.FileSet, path string, filter func(fs.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error)"},
-		{"ParseExpr", Func, 0, "func(x string) (ast.Expr, error)"},
-		{"ParseExprFrom", Func, 5, "func(fset *token.FileSet, filename string, src any, mode Mode) (expr ast.Expr, err error)"},
-		{"ParseFile", Func, 0, "func(fset *token.FileSet, filename string, src any, mode Mode) (f *ast.File, err error)"},
-		{"SkipObjectResolution", Const, 17, ""},
-		{"SpuriousErrors", Const, 0, ""},
-		{"Trace", Const, 0, ""},
+		{"AllErrors", Const, 1},
+		{"DeclarationErrors", Const, 0},
+		{"ImportsOnly", Const, 0},
+		{"Mode", Type, 0},
+		{"PackageClauseOnly", Const, 0},
+		{"ParseComments", Const, 0},
+		{"ParseDir", Func, 0},
+		{"ParseExpr", Func, 0},
+		{"ParseExprFrom", Func, 5},
+		{"ParseFile", Func, 0},
+		{"SkipObjectResolution", Const, 17},
+		{"SpuriousErrors", Const, 0},
+		{"Trace", Const, 0},
 	},
 	"go/printer": {
-		{"(*Config).Fprint", Method, 0, ""},
-		{"CommentedNode", Type, 0, ""},
-		{"CommentedNode.Comments", Field, 0, ""},
-		{"CommentedNode.Node", Field, 0, ""},
-		{"Config", Type, 0, ""},
-		{"Config.Indent", Field, 1, ""},
-		{"Config.Mode", Field, 0, ""},
-		{"Config.Tabwidth", Field, 0, ""},
-		{"Fprint", Func, 0, "func(output io.Writer, fset *token.FileSet, node any) error"},
-		{"Mode", Type, 0, ""},
-		{"RawFormat", Const, 0, ""},
-		{"SourcePos", Const, 0, ""},
-		{"TabIndent", Const, 0, ""},
-		{"UseSpaces", Const, 0, ""},
+		{"(*Config).Fprint", Method, 0},
+		{"CommentedNode", Type, 0},
+		{"CommentedNode.Comments", Field, 0},
+		{"CommentedNode.Node", Field, 0},
+		{"Config", Type, 0},
+		{"Config.Indent", Field, 1},
+		{"Config.Mode", Field, 0},
+		{"Config.Tabwidth", Field, 0},
+		{"Fprint", Func, 0},
+		{"Mode", Type, 0},
+		{"RawFormat", Const, 0},
+		{"SourcePos", Const, 0},
+		{"TabIndent", Const, 0},
+		{"UseSpaces", Const, 0},
 	},
 	"go/scanner": {
-		{"(*ErrorList).Add", Method, 0, ""},
-		{"(*ErrorList).RemoveMultiples", Method, 0, ""},
-		{"(*ErrorList).Reset", Method, 0, ""},
-		{"(*Scanner).Init", Method, 0, ""},
-		{"(*Scanner).Scan", Method, 0, ""},
-		{"(Error).Error", Method, 0, ""},
-		{"(ErrorList).Err", Method, 0, ""},
-		{"(ErrorList).Error", Method, 0, ""},
-		{"(ErrorList).Len", Method, 0, ""},
-		{"(ErrorList).Less", Method, 0, ""},
-		{"(ErrorList).Sort", Method, 0, ""},
-		{"(ErrorList).Swap", Method, 0, ""},
-		{"Error", Type, 0, ""},
-		{"Error.Msg", Field, 0, ""},
-		{"Error.Pos", Field, 0, ""},
-		{"ErrorHandler", Type, 0, ""},
-		{"ErrorList", Type, 0, ""},
-		{"Mode", Type, 0, ""},
-		{"PrintError", Func, 0, "func(w io.Writer, err error)"},
-		{"ScanComments", Const, 0, ""},
-		{"Scanner", Type, 0, ""},
-		{"Scanner.ErrorCount", Field, 0, ""},
+		{"(*ErrorList).Add", Method, 0},
+		{"(*ErrorList).RemoveMultiples", Method, 0},
+		{"(*ErrorList).Reset", Method, 0},
+		{"(*Scanner).Init", Method, 0},
+		{"(*Scanner).Scan", Method, 0},
+		{"(Error).Error", Method, 0},
+		{"(ErrorList).Err", Method, 0},
+		{"(ErrorList).Error", Method, 0},
+		{"(ErrorList).Len", Method, 0},
+		{"(ErrorList).Less", Method, 0},
+		{"(ErrorList).Sort", Method, 0},
+		{"(ErrorList).Swap", Method, 0},
+		{"Error", Type, 0},
+		{"Error.Msg", Field, 0},
+		{"Error.Pos", Field, 0},
+		{"ErrorHandler", Type, 0},
+		{"ErrorList", Type, 0},
+		{"Mode", Type, 0},
+		{"PrintError", Func, 0},
+		{"ScanComments", Const, 0},
+		{"Scanner", Type, 0},
+		{"Scanner.ErrorCount", Field, 0},
 	},
 	"go/token": {
-		{"(*File).AddLine", Method, 0, ""},
-		{"(*File).AddLineColumnInfo", Method, 11, ""},
-		{"(*File).AddLineInfo", Method, 0, ""},
-		{"(*File).Base", Method, 0, ""},
-		{"(*File).Line", Method, 0, ""},
-		{"(*File).LineCount", Method, 0, ""},
-		{"(*File).LineStart", Method, 12, ""},
-		{"(*File).Lines", Method, 21, ""},
-		{"(*File).MergeLine", Method, 2, ""},
-		{"(*File).Name", Method, 0, ""},
-		{"(*File).Offset", Method, 0, ""},
-		{"(*File).Pos", Method, 0, ""},
-		{"(*File).Position", Method, 0, ""},
-		{"(*File).PositionFor", Method, 4, ""},
-		{"(*File).SetLines", Method, 0, ""},
-		{"(*File).SetLinesForContent", Method, 0, ""},
-		{"(*File).Size", Method, 0, ""},
-		{"(*FileSet).AddFile", Method, 0, ""},
-		{"(*FileSet).Base", Method, 0, ""},
-		{"(*FileSet).File", Method, 0, ""},
-		{"(*FileSet).Iterate", Method, 0, ""},
-		{"(*FileSet).Position", Method, 0, ""},
-		{"(*FileSet).PositionFor", Method, 4, ""},
-		{"(*FileSet).Read", Method, 0, ""},
-		{"(*FileSet).RemoveFile", Method, 20, ""},
-		{"(*FileSet).Write", Method, 0, ""},
-		{"(*Position).IsValid", Method, 0, ""},
-		{"(Pos).IsValid", Method, 0, ""},
-		{"(Position).String", Method, 0, ""},
-		{"(Token).IsKeyword", Method, 0, ""},
-		{"(Token).IsLiteral", Method, 0, ""},
-		{"(Token).IsOperator", Method, 0, ""},
-		{"(Token).Precedence", Method, 0, ""},
-		{"(Token).String", Method, 0, ""},
-		{"ADD", Const, 0, ""},
-		{"ADD_ASSIGN", Const, 0, ""},
-		{"AND", Const, 0, ""},
-		{"AND_ASSIGN", Const, 0, ""},
-		{"AND_NOT", Const, 0, ""},
-		{"AND_NOT_ASSIGN", Const, 0, ""},
-		{"ARROW", Const, 0, ""},
-		{"ASSIGN", Const, 0, ""},
-		{"BREAK", Const, 0, ""},
-		{"CASE", Const, 0, ""},
-		{"CHAN", Const, 0, ""},
-		{"CHAR", Const, 0, ""},
-		{"COLON", Const, 0, ""},
-		{"COMMA", Const, 0, ""},
-		{"COMMENT", Const, 0, ""},
-		{"CONST", Const, 0, ""},
-		{"CONTINUE", Const, 0, ""},
-		{"DEC", Const, 0, ""},
-		{"DEFAULT", Const, 0, ""},
-		{"DEFER", Const, 0, ""},
-		{"DEFINE", Const, 0, ""},
-		{"ELLIPSIS", Const, 0, ""},
-		{"ELSE", Const, 0, ""},
-		{"EOF", Const, 0, ""},
-		{"EQL", Const, 0, ""},
-		{"FALLTHROUGH", Const, 0, ""},
-		{"FLOAT", Const, 0, ""},
-		{"FOR", Const, 0, ""},
-		{"FUNC", Const, 0, ""},
-		{"File", Type, 0, ""},
-		{"FileSet", Type, 0, ""},
-		{"GEQ", Const, 0, ""},
-		{"GO", Const, 0, ""},
-		{"GOTO", Const, 0, ""},
-		{"GTR", Const, 0, ""},
-		{"HighestPrec", Const, 0, ""},
-		{"IDENT", Const, 0, ""},
-		{"IF", Const, 0, ""},
-		{"ILLEGAL", Const, 0, ""},
-		{"IMAG", Const, 0, ""},
-		{"IMPORT", Const, 0, ""},
-		{"INC", Const, 0, ""},
-		{"INT", Const, 0, ""},
-		{"INTERFACE", Const, 0, ""},
-		{"IsExported", Func, 13, "func(name string) bool"},
-		{"IsIdentifier", Func, 13, "func(name string) bool"},
-		{"IsKeyword", Func, 13, "func(name string) bool"},
-		{"LAND", Const, 0, ""},
-		{"LBRACE", Const, 0, ""},
-		{"LBRACK", Const, 0, ""},
-		{"LEQ", Const, 0, ""},
-		{"LOR", Const, 0, ""},
-		{"LPAREN", Const, 0, ""},
-		{"LSS", Const, 0, ""},
-		{"Lookup", Func, 0, "func(ident string) Token"},
-		{"LowestPrec", Const, 0, ""},
-		{"MAP", Const, 0, ""},
-		{"MUL", Const, 0, ""},
-		{"MUL_ASSIGN", Const, 0, ""},
-		{"NEQ", Const, 0, ""},
-		{"NOT", Const, 0, ""},
-		{"NewFileSet", Func, 0, "func() *FileSet"},
-		{"NoPos", Const, 0, ""},
-		{"OR", Const, 0, ""},
-		{"OR_ASSIGN", Const, 0, ""},
-		{"PACKAGE", Const, 0, ""},
-		{"PERIOD", Const, 0, ""},
-		{"Pos", Type, 0, ""},
-		{"Position", Type, 0, ""},
-		{"Position.Column", Field, 0, ""},
-		{"Position.Filename", Field, 0, ""},
-		{"Position.Line", Field, 0, ""},
-		{"Position.Offset", Field, 0, ""},
-		{"QUO", Const, 0, ""},
-		{"QUO_ASSIGN", Const, 0, ""},
-		{"RANGE", Const, 0, ""},
-		{"RBRACE", Const, 0, ""},
-		{"RBRACK", Const, 0, ""},
-		{"REM", Const, 0, ""},
-		{"REM_ASSIGN", Const, 0, ""},
-		{"RETURN", Const, 0, ""},
-		{"RPAREN", Const, 0, ""},
-		{"SELECT", Const, 0, ""},
-		{"SEMICOLON", Const, 0, ""},
-		{"SHL", Const, 0, ""},
-		{"SHL_ASSIGN", Const, 0, ""},
-		{"SHR", Const, 0, ""},
-		{"SHR_ASSIGN", Const, 0, ""},
-		{"STRING", Const, 0, ""},
-		{"STRUCT", Const, 0, ""},
-		{"SUB", Const, 0, ""},
-		{"SUB_ASSIGN", Const, 0, ""},
-		{"SWITCH", Const, 0, ""},
-		{"TILDE", Const, 18, ""},
-		{"TYPE", Const, 0, ""},
-		{"Token", Type, 0, ""},
-		{"UnaryPrec", Const, 0, ""},
-		{"VAR", Const, 0, ""},
-		{"XOR", Const, 0, ""},
-		{"XOR_ASSIGN", Const, 0, ""},
+		{"(*File).AddLine", Method, 0},
+		{"(*File).AddLineColumnInfo", Method, 11},
+		{"(*File).AddLineInfo", Method, 0},
+		{"(*File).Base", Method, 0},
+		{"(*File).Line", Method, 0},
+		{"(*File).LineCount", Method, 0},
+		{"(*File).LineStart", Method, 12},
+		{"(*File).Lines", Method, 21},
+		{"(*File).MergeLine", Method, 2},
+		{"(*File).Name", Method, 0},
+		{"(*File).Offset", Method, 0},
+		{"(*File).Pos", Method, 0},
+		{"(*File).Position", Method, 0},
+		{"(*File).PositionFor", Method, 4},
+		{"(*File).SetLines", Method, 0},
+		{"(*File).SetLinesForContent", Method, 0},
+		{"(*File).Size", Method, 0},
+		{"(*FileSet).AddFile", Method, 0},
+		{"(*FileSet).Base", Method, 0},
+		{"(*FileSet).File", Method, 0},
+		{"(*FileSet).Iterate", Method, 0},
+		{"(*FileSet).Position", Method, 0},
+		{"(*FileSet).PositionFor", Method, 4},
+		{"(*FileSet).Read", Method, 0},
+		{"(*FileSet).RemoveFile", Method, 20},
+		{"(*FileSet).Write", Method, 0},
+		{"(*Position).IsValid", Method, 0},
+		{"(Pos).IsValid", Method, 0},
+		{"(Position).String", Method, 0},
+		{"(Token).IsKeyword", Method, 0},
+		{"(Token).IsLiteral", Method, 0},
+		{"(Token).IsOperator", Method, 0},
+		{"(Token).Precedence", Method, 0},
+		{"(Token).String", Method, 0},
+		{"ADD", Const, 0},
+		{"ADD_ASSIGN", Const, 0},
+		{"AND", Const, 0},
+		{"AND_ASSIGN", Const, 0},
+		{"AND_NOT", Const, 0},
+		{"AND_NOT_ASSIGN", Const, 0},
+		{"ARROW", Const, 0},
+		{"ASSIGN", Const, 0},
+		{"BREAK", Const, 0},
+		{"CASE", Const, 0},
+		{"CHAN", Const, 0},
+		{"CHAR", Const, 0},
+		{"COLON", Const, 0},
+		{"COMMA", Const, 0},
+		{"COMMENT", Const, 0},
+		{"CONST", Const, 0},
+		{"CONTINUE", Const, 0},
+		{"DEC", Const, 0},
+		{"DEFAULT", Const, 0},
+		{"DEFER", Const, 0},
+		{"DEFINE", Const, 0},
+		{"ELLIPSIS", Const, 0},
+		{"ELSE", Const, 0},
+		{"EOF", Const, 0},
+		{"EQL", Const, 0},
+		{"FALLTHROUGH", Const, 0},
+		{"FLOAT", Const, 0},
+		{"FOR", Const, 0},
+		{"FUNC", Const, 0},
+		{"File", Type, 0},
+		{"FileSet", Type, 0},
+		{"GEQ", Const, 0},
+		{"GO", Const, 0},
+		{"GOTO", Const, 0},
+		{"GTR", Const, 0},
+		{"HighestPrec", Const, 0},
+		{"IDENT", Const, 0},
+		{"IF", Const, 0},
+		{"ILLEGAL", Const, 0},
+		{"IMAG", Const, 0},
+		{"IMPORT", Const, 0},
+		{"INC", Const, 0},
+		{"INT", Const, 0},
+		{"INTERFACE", Const, 0},
+		{"IsExported", Func, 13},
+		{"IsIdentifier", Func, 13},
+		{"IsKeyword", Func, 13},
+		{"LAND", Const, 0},
+		{"LBRACE", Const, 0},
+		{"LBRACK", Const, 0},
+		{"LEQ", Const, 0},
+		{"LOR", Const, 0},
+		{"LPAREN", Const, 0},
+		{"LSS", Const, 0},
+		{"Lookup", Func, 0},
+		{"LowestPrec", Const, 0},
+		{"MAP", Const, 0},
+		{"MUL", Const, 0},
+		{"MUL_ASSIGN", Const, 0},
+		{"NEQ", Const, 0},
+		{"NOT", Const, 0},
+		{"NewFileSet", Func, 0},
+		{"NoPos", Const, 0},
+		{"OR", Const, 0},
+		{"OR_ASSIGN", Const, 0},
+		{"PACKAGE", Const, 0},
+		{"PERIOD", Const, 0},
+		{"Pos", Type, 0},
+		{"Position", Type, 0},
+		{"Position.Column", Field, 0},
+		{"Position.Filename", Field, 0},
+		{"Position.Line", Field, 0},
+		{"Position.Offset", Field, 0},
+		{"QUO", Const, 0},
+		{"QUO_ASSIGN", Const, 0},
+		{"RANGE", Const, 0},
+		{"RBRACE", Const, 0},
+		{"RBRACK", Const, 0},
+		{"REM", Const, 0},
+		{"REM_ASSIGN", Const, 0},
+		{"RETURN", Const, 0},
+		{"RPAREN", Const, 0},
+		{"SELECT", Const, 0},
+		{"SEMICOLON", Const, 0},
+		{"SHL", Const, 0},
+		{"SHL_ASSIGN", Const, 0},
+		{"SHR", Const, 0},
+		{"SHR_ASSIGN", Const, 0},
+		{"STRING", Const, 0},
+		{"STRUCT", Const, 0},
+		{"SUB", Const, 0},
+		{"SUB_ASSIGN", Const, 0},
+		{"SWITCH", Const, 0},
+		{"TILDE", Const, 18},
+		{"TYPE", Const, 0},
+		{"Token", Type, 0},
+		{"UnaryPrec", Const, 0},
+		{"VAR", Const, 0},
+		{"XOR", Const, 0},
+		{"XOR_ASSIGN", Const, 0},
 	},
 	"go/types": {
-		{"(*Alias).Obj", Method, 22, ""},
-		{"(*Alias).Origin", Method, 23, ""},
-		{"(*Alias).Rhs", Method, 23, ""},
-		{"(*Alias).SetTypeParams", Method, 23, ""},
-		{"(*Alias).String", Method, 22, ""},
-		{"(*Alias).TypeArgs", Method, 23, ""},
-		{"(*Alias).TypeParams", Method, 23, ""},
-		{"(*Alias).Underlying", Method, 22, ""},
-		{"(*ArgumentError).Error", Method, 18, ""},
-		{"(*ArgumentError).Unwrap", Method, 18, ""},
-		{"(*Array).Elem", Method, 5, ""},
-		{"(*Array).Len", Method, 5, ""},
-		{"(*Array).String", Method, 5, ""},
-		{"(*Array).Underlying", Method, 5, ""},
-		{"(*Basic).Info", Method, 5, ""},
-		{"(*Basic).Kind", Method, 5, ""},
-		{"(*Basic).Name", Method, 5, ""},
-		{"(*Basic).String", Method, 5, ""},
-		{"(*Basic).Underlying", Method, 5, ""},
-		{"(*Builtin).Exported", Method, 5, ""},
-		{"(*Builtin).Id", Method, 5, ""},
-		{"(*Builtin).Name", Method, 5, ""},
-		{"(*Builtin).Parent", Method, 5, ""},
-		{"(*Builtin).Pkg", Method, 5, ""},
-		{"(*Builtin).Pos", Method, 5, ""},
-		{"(*Builtin).String", Method, 5, ""},
-		{"(*Builtin).Type", Method, 5, ""},
-		{"(*Chan).Dir", Method, 5, ""},
-		{"(*Chan).Elem", Method, 5, ""},
-		{"(*Chan).String", Method, 5, ""},
-		{"(*Chan).Underlying", Method, 5, ""},
-		{"(*Checker).Files", Method, 5, ""},
-		{"(*Config).Check", Method, 5, ""},
-		{"(*Const).Exported", Method, 5, ""},
-		{"(*Const).Id", Method, 5, ""},
-		{"(*Const).Name", Method, 5, ""},
-		{"(*Const).Parent", Method, 5, ""},
-		{"(*Const).Pkg", Method, 5, ""},
-		{"(*Const).Pos", Method, 5, ""},
-		{"(*Const).String", Method, 5, ""},
-		{"(*Const).Type", Method, 5, ""},
-		{"(*Const).Val", Method, 5, ""},
-		{"(*Func).Exported", Method, 5, ""},
-		{"(*Func).FullName", Method, 5, ""},
-		{"(*Func).Id", Method, 5, ""},
-		{"(*Func).Name", Method, 5, ""},
-		{"(*Func).Origin", Method, 19, ""},
-		{"(*Func).Parent", Method, 5, ""},
-		{"(*Func).Pkg", Method, 5, ""},
-		{"(*Func).Pos", Method, 5, ""},
-		{"(*Func).Scope", Method, 5, ""},
-		{"(*Func).Signature", Method, 23, ""},
-		{"(*Func).String", Method, 5, ""},
-		{"(*Func).Type", Method, 5, ""},
-		{"(*Info).ObjectOf", Method, 5, ""},
-		{"(*Info).PkgNameOf", Method, 22, ""},
-		{"(*Info).TypeOf", Method, 5, ""},
-		{"(*Initializer).String", Method, 5, ""},
-		{"(*Interface).Complete", Method, 5, ""},
-		{"(*Interface).Embedded", Method, 5, ""},
-		{"(*Interface).EmbeddedType", Method, 11, ""},
-		{"(*Interface).EmbeddedTypes", Method, 24, ""},
-		{"(*Interface).Empty", Method, 5, ""},
-		{"(*Interface).ExplicitMethod", Method, 5, ""},
-		{"(*Interface).ExplicitMethods", Method, 24, ""},
-		{"(*Interface).IsComparable", Method, 18, ""},
-		{"(*Interface).IsImplicit", Method, 18, ""},
-		{"(*Interface).IsMethodSet", Method, 18, ""},
-		{"(*Interface).MarkImplicit", Method, 18, ""},
-		{"(*Interface).Method", Method, 5, ""},
-		{"(*Interface).Methods", Method, 24, ""},
-		{"(*Interface).NumEmbeddeds", Method, 5, ""},
-		{"(*Interface).NumExplicitMethods", Method, 5, ""},
-		{"(*Interface).NumMethods", Method, 5, ""},
-		{"(*Interface).String", Method, 5, ""},
-		{"(*Interface).Underlying", Method, 5, ""},
-		{"(*Label).Exported", Method, 5, ""},
-		{"(*Label).Id", Method, 5, ""},
-		{"(*Label).Name", Method, 5, ""},
-		{"(*Label).Parent", Method, 5, ""},
-		{"(*Label).Pkg", Method, 5, ""},
-		{"(*Label).Pos", Method, 5, ""},
-		{"(*Label).String", Method, 5, ""},
-		{"(*Label).Type", Method, 5, ""},
-		{"(*Map).Elem", Method, 5, ""},
-		{"(*Map).Key", Method, 5, ""},
-		{"(*Map).String", Method, 5, ""},
-		{"(*Map).Underlying", Method, 5, ""},
-		{"(*MethodSet).At", Method, 5, ""},
-		{"(*MethodSet).Len", Method, 5, ""},
-		{"(*MethodSet).Lookup", Method, 5, ""},
-		{"(*MethodSet).Methods", Method, 24, ""},
-		{"(*MethodSet).String", Method, 5, ""},
-		{"(*Named).AddMethod", Method, 5, ""},
-		{"(*Named).Method", Method, 5, ""},
-		{"(*Named).Methods", Method, 24, ""},
-		{"(*Named).NumMethods", Method, 5, ""},
-		{"(*Named).Obj", Method, 5, ""},
-		{"(*Named).Origin", Method, 18, ""},
-		{"(*Named).SetTypeParams", Method, 18, ""},
-		{"(*Named).SetUnderlying", Method, 5, ""},
-		{"(*Named).String", Method, 5, ""},
-		{"(*Named).TypeArgs", Method, 18, ""},
-		{"(*Named).TypeParams", Method, 18, ""},
-		{"(*Named).Underlying", Method, 5, ""},
-		{"(*Nil).Exported", Method, 5, ""},
-		{"(*Nil).Id", Method, 5, ""},
-		{"(*Nil).Name", Method, 5, ""},
-		{"(*Nil).Parent", Method, 5, ""},
-		{"(*Nil).Pkg", Method, 5, ""},
-		{"(*Nil).Pos", Method, 5, ""},
-		{"(*Nil).String", Method, 5, ""},
-		{"(*Nil).Type", Method, 5, ""},
-		{"(*Package).Complete", Method, 5, ""},
-		{"(*Package).GoVersion", Method, 21, ""},
-		{"(*Package).Imports", Method, 5, ""},
-		{"(*Package).MarkComplete", Method, 5, ""},
-		{"(*Package).Name", Method, 5, ""},
-		{"(*Package).Path", Method, 5, ""},
-		{"(*Package).Scope", Method, 5, ""},
-		{"(*Package).SetImports", Method, 5, ""},
-		{"(*Package).SetName", Method, 6, ""},
-		{"(*Package).String", Method, 5, ""},
-		{"(*PkgName).Exported", Method, 5, ""},
-		{"(*PkgName).Id", Method, 5, ""},
-		{"(*PkgName).Imported", Method, 5, ""},
-		{"(*PkgName).Name", Method, 5, ""},
-		{"(*PkgName).Parent", Method, 5, ""},
-		{"(*PkgName).Pkg", Method, 5, ""},
-		{"(*PkgName).Pos", Method, 5, ""},
-		{"(*PkgName).String", Method, 5, ""},
-		{"(*PkgName).Type", Method, 5, ""},
-		{"(*Pointer).Elem", Method, 5, ""},
-		{"(*Pointer).String", Method, 5, ""},
-		{"(*Pointer).Underlying", Method, 5, ""},
-		{"(*Scope).Child", Method, 5, ""},
-		{"(*Scope).Children", Method, 24, ""},
-		{"(*Scope).Contains", Method, 5, ""},
-		{"(*Scope).End", Method, 5, ""},
-		{"(*Scope).Innermost", Method, 5, ""},
-		{"(*Scope).Insert", Method, 5, ""},
-		{"(*Scope).Len", Method, 5, ""},
-		{"(*Scope).Lookup", Method, 5, ""},
-		{"(*Scope).LookupParent", Method, 5, ""},
-		{"(*Scope).Names", Method, 5, ""},
-		{"(*Scope).NumChildren", Method, 5, ""},
-		{"(*Scope).Parent", Method, 5, ""},
-		{"(*Scope).Pos", Method, 5, ""},
-		{"(*Scope).String", Method, 5, ""},
-		{"(*Scope).WriteTo", Method, 5, ""},
-		{"(*Selection).Index", Method, 5, ""},
-		{"(*Selection).Indirect", Method, 5, ""},
-		{"(*Selection).Kind", Method, 5, ""},
-		{"(*Selection).Obj", Method, 5, ""},
-		{"(*Selection).Recv", Method, 5, ""},
-		{"(*Selection).String", Method, 5, ""},
-		{"(*Selection).Type", Method, 5, ""},
-		{"(*Signature).Params", Method, 5, ""},
-		{"(*Signature).Recv", Method, 5, ""},
-		{"(*Signature).RecvTypeParams", Method, 18, ""},
-		{"(*Signature).Results", Method, 5, ""},
-		{"(*Signature).String", Method, 5, ""},
-		{"(*Signature).TypeParams", Method, 18, ""},
-		{"(*Signature).Underlying", Method, 5, ""},
-		{"(*Signature).Variadic", Method, 5, ""},
-		{"(*Slice).Elem", Method, 5, ""},
-		{"(*Slice).String", Method, 5, ""},
-		{"(*Slice).Underlying", Method, 5, ""},
-		{"(*StdSizes).Alignof", Method, 5, ""},
-		{"(*StdSizes).Offsetsof", Method, 5, ""},
-		{"(*StdSizes).Sizeof", Method, 5, ""},
-		{"(*Struct).Field", Method, 5, ""},
-		{"(*Struct).Fields", Method, 24, ""},
-		{"(*Struct).NumFields", Method, 5, ""},
-		{"(*Struct).String", Method, 5, ""},
-		{"(*Struct).Tag", Method, 5, ""},
-		{"(*Struct).Underlying", Method, 5, ""},
-		{"(*Term).String", Method, 18, ""},
-		{"(*Term).Tilde", Method, 18, ""},
-		{"(*Term).Type", Method, 18, ""},
-		{"(*Tuple).At", Method, 5, ""},
-		{"(*Tuple).Len", Method, 5, ""},
-		{"(*Tuple).String", Method, 5, ""},
-		{"(*Tuple).Underlying", Method, 5, ""},
-		{"(*Tuple).Variables", Method, 24, ""},
-		{"(*TypeList).At", Method, 18, ""},
-		{"(*TypeList).Len", Method, 18, ""},
-		{"(*TypeList).Types", Method, 24, ""},
-		{"(*TypeName).Exported", Method, 5, ""},
-		{"(*TypeName).Id", Method, 5, ""},
-		{"(*TypeName).IsAlias", Method, 9, ""},
-		{"(*TypeName).Name", Method, 5, ""},
-		{"(*TypeName).Parent", Method, 5, ""},
-		{"(*TypeName).Pkg", Method, 5, ""},
-		{"(*TypeName).Pos", Method, 5, ""},
-		{"(*TypeName).String", Method, 5, ""},
-		{"(*TypeName).Type", Method, 5, ""},
-		{"(*TypeParam).Constraint", Method, 18, ""},
-		{"(*TypeParam).Index", Method, 18, ""},
-		{"(*TypeParam).Obj", Method, 18, ""},
-		{"(*TypeParam).SetConstraint", Method, 18, ""},
-		{"(*TypeParam).String", Method, 18, ""},
-		{"(*TypeParam).Underlying", Method, 18, ""},
-		{"(*TypeParamList).At", Method, 18, ""},
-		{"(*TypeParamList).Len", Method, 18, ""},
-		{"(*TypeParamList).TypeParams", Method, 24, ""},
-		{"(*Union).Len", Method, 18, ""},
-		{"(*Union).String", Method, 18, ""},
-		{"(*Union).Term", Method, 18, ""},
-		{"(*Union).Terms", Method, 24, ""},
-		{"(*Union).Underlying", Method, 18, ""},
-		{"(*Var).Anonymous", Method, 5, ""},
-		{"(*Var).Embedded", Method, 11, ""},
-		{"(*Var).Exported", Method, 5, ""},
-		{"(*Var).Id", Method, 5, ""},
-		{"(*Var).IsField", Method, 5, ""},
-		{"(*Var).Kind", Method, 25, ""},
-		{"(*Var).Name", Method, 5, ""},
-		{"(*Var).Origin", Method, 19, ""},
-		{"(*Var).Parent", Method, 5, ""},
-		{"(*Var).Pkg", Method, 5, ""},
-		{"(*Var).Pos", Method, 5, ""},
-		{"(*Var).SetKind", Method, 25, ""},
-		{"(*Var).String", Method, 5, ""},
-		{"(*Var).Type", Method, 5, ""},
-		{"(Checker).ObjectOf", Method, 5, ""},
-		{"(Checker).PkgNameOf", Method, 22, ""},
-		{"(Checker).TypeOf", Method, 5, ""},
-		{"(Error).Error", Method, 5, ""},
-		{"(TypeAndValue).Addressable", Method, 5, ""},
-		{"(TypeAndValue).Assignable", Method, 5, ""},
-		{"(TypeAndValue).HasOk", Method, 5, ""},
-		{"(TypeAndValue).IsBuiltin", Method, 5, ""},
-		{"(TypeAndValue).IsNil", Method, 5, ""},
-		{"(TypeAndValue).IsType", Method, 5, ""},
-		{"(TypeAndValue).IsValue", Method, 5, ""},
-		{"(TypeAndValue).IsVoid", Method, 5, ""},
-		{"(VarKind).String", Method, 25, ""},
-		{"Alias", Type, 22, ""},
-		{"ArgumentError", Type, 18, ""},
-		{"ArgumentError.Err", Field, 18, ""},
-		{"ArgumentError.Index", Field, 18, ""},
-		{"Array", Type, 5, ""},
-		{"AssertableTo", Func, 5, "func(V *Interface, T Type) bool"},
-		{"AssignableTo", Func, 5, "func(V Type, T Type) bool"},
-		{"Basic", Type, 5, ""},
-		{"BasicInfo", Type, 5, ""},
-		{"BasicKind", Type, 5, ""},
-		{"Bool", Const, 5, ""},
-		{"Builtin", Type, 5, ""},
-		{"Byte", Const, 5, ""},
-		{"Chan", Type, 5, ""},
-		{"ChanDir", Type, 5, ""},
-		{"CheckExpr", Func, 13, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr ast.Expr, info *Info) (err error)"},
-		{"Checker", Type, 5, ""},
-		{"Checker.Info", Field, 5, ""},
-		{"Comparable", Func, 5, "func(T Type) bool"},
-		{"Complex128", Const, 5, ""},
-		{"Complex64", Const, 5, ""},
-		{"Config", Type, 5, ""},
-		{"Config.Context", Field, 18, ""},
-		{"Config.DisableUnusedImportCheck", Field, 5, ""},
-		{"Config.Error", Field, 5, ""},
-		{"Config.FakeImportC", Field, 5, ""},
-		{"Config.GoVersion", Field, 18, ""},
-		{"Config.IgnoreFuncBodies", Field, 5, ""},
-		{"Config.Importer", Field, 5, ""},
-		{"Config.Sizes", Field, 5, ""},
-		{"Const", Type, 5, ""},
-		{"Context", Type, 18, ""},
-		{"ConvertibleTo", Func, 5, "func(V Type, T Type) bool"},
-		{"DefPredeclaredTestFuncs", Func, 5, "func()"},
-		{"Default", Func, 8, "func(t Type) Type"},
-		{"Error", Type, 5, ""},
-		{"Error.Fset", Field, 5, ""},
-		{"Error.Msg", Field, 5, ""},
-		{"Error.Pos", Field, 5, ""},
-		{"Error.Soft", Field, 5, ""},
-		{"Eval", Func, 5, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr string) (_ TypeAndValue, err error)"},
-		{"ExprString", Func, 5, "func(x ast.Expr) string"},
-		{"FieldVal", Const, 5, ""},
-		{"FieldVar", Const, 25, ""},
-		{"Float32", Const, 5, ""},
-		{"Float64", Const, 5, ""},
-		{"Func", Type, 5, ""},
-		{"Id", Func, 5, "func(pkg *Package, name string) string"},
-		{"Identical", Func, 5, "func(x Type, y Type) bool"},
-		{"IdenticalIgnoreTags", Func, 8, "func(x Type, y Type) bool"},
-		{"Implements", Func, 5, "func(V Type, T *Interface) bool"},
-		{"ImportMode", Type, 6, ""},
-		{"Importer", Type, 5, ""},
-		{"ImporterFrom", Type, 6, ""},
-		{"Info", Type, 5, ""},
-		{"Info.Defs", Field, 5, ""},
-		{"Info.FileVersions", Field, 22, ""},
-		{"Info.Implicits", Field, 5, ""},
-		{"Info.InitOrder", Field, 5, ""},
-		{"Info.Instances", Field, 18, ""},
-		{"Info.Scopes", Field, 5, ""},
-		{"Info.Selections", Field, 5, ""},
-		{"Info.Types", Field, 5, ""},
-		{"Info.Uses", Field, 5, ""},
-		{"Initializer", Type, 5, ""},
-		{"Initializer.Lhs", Field, 5, ""},
-		{"Initializer.Rhs", Field, 5, ""},
-		{"Instance", Type, 18, ""},
-		{"Instance.Type", Field, 18, ""},
-		{"Instance.TypeArgs", Field, 18, ""},
-		{"Instantiate", Func, 18, "func(ctxt *Context, orig Type, targs []Type, validate bool) (Type, error)"},
-		{"Int", Const, 5, ""},
-		{"Int16", Const, 5, ""},
-		{"Int32", Const, 5, ""},
-		{"Int64", Const, 5, ""},
-		{"Int8", Const, 5, ""},
-		{"Interface", Type, 5, ""},
-		{"Invalid", Const, 5, ""},
-		{"IsBoolean", Const, 5, ""},
-		{"IsComplex", Const, 5, ""},
-		{"IsConstType", Const, 5, ""},
-		{"IsFloat", Const, 5, ""},
-		{"IsInteger", Const, 5, ""},
-		{"IsInterface", Func, 5, "func(t Type) bool"},
-		{"IsNumeric", Const, 5, ""},
-		{"IsOrdered", Const, 5, ""},
-		{"IsString", Const, 5, ""},
-		{"IsUnsigned", Const, 5, ""},
-		{"IsUntyped", Const, 5, ""},
-		{"Label", Type, 5, ""},
-		{"LocalVar", Const, 25, ""},
-		{"LookupFieldOrMethod", Func, 5, "func(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)"},
-		{"LookupSelection", Func, 25, ""},
-		{"Map", Type, 5, ""},
-		{"MethodExpr", Const, 5, ""},
-		{"MethodSet", Type, 5, ""},
-		{"MethodVal", Const, 5, ""},
-		{"MissingMethod", Func, 5, "func(V Type, T *Interface, static bool) (method *Func, wrongType bool)"},
-		{"Named", Type, 5, ""},
-		{"NewAlias", Func, 22, "func(obj *TypeName, rhs Type) *Alias"},
-		{"NewArray", Func, 5, "func(elem Type, len int64) *Array"},
-		{"NewChan", Func, 5, "func(dir ChanDir, elem Type) *Chan"},
-		{"NewChecker", Func, 5, "func(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker"},
-		{"NewConst", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, val constant.Value) *Const"},
-		{"NewContext", Func, 18, "func() *Context"},
-		{"NewField", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, embedded bool) *Var"},
-		{"NewFunc", Func, 5, "func(pos token.Pos, pkg *Package, name string, sig *Signature) *Func"},
-		{"NewInterface", Func, 5, "func(methods []*Func, embeddeds []*Named) *Interface"},
-		{"NewInterfaceType", Func, 11, "func(methods []*Func, embeddeds []Type) *Interface"},
-		{"NewLabel", Func, 5, "func(pos token.Pos, pkg *Package, name string) *Label"},
-		{"NewMap", Func, 5, "func(key Type, elem Type) *Map"},
-		{"NewMethodSet", Func, 5, "func(T Type) *MethodSet"},
-		{"NewNamed", Func, 5, "func(obj *TypeName, underlying Type, methods []*Func) *Named"},
-		{"NewPackage", Func, 5, "func(path string, name string) *Package"},
-		{"NewParam", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
-		{"NewPkgName", Func, 5, "func(pos token.Pos, pkg *Package, name string, imported *Package) *PkgName"},
-		{"NewPointer", Func, 5, "func(elem Type) *Pointer"},
-		{"NewScope", Func, 5, "func(parent *Scope, pos token.Pos, end token.Pos, comment string) *Scope"},
-		{"NewSignature", Func, 5, "func(recv *Var, params *Tuple, results *Tuple, variadic bool) *Signature"},
-		{"NewSignatureType", Func, 18, "func(recv *Var, recvTypeParams []*TypeParam, typeParams []*TypeParam, params *Tuple, results *Tuple, variadic bool) *Signature"},
-		{"NewSlice", Func, 5, "func(elem Type) *Slice"},
-		{"NewStruct", Func, 5, "func(fields []*Var, tags []string) *Struct"},
-		{"NewTerm", Func, 18, "func(tilde bool, typ Type) *Term"},
-		{"NewTuple", Func, 5, "func(x ...*Var) *Tuple"},
-		{"NewTypeName", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *TypeName"},
-		{"NewTypeParam", Func, 18, "func(obj *TypeName, constraint Type) *TypeParam"},
-		{"NewUnion", Func, 18, "func(terms []*Term) *Union"},
-		{"NewVar", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
-		{"Nil", Type, 5, ""},
-		{"Object", Type, 5, ""},
-		{"ObjectString", Func, 5, "func(obj Object, qf Qualifier) string"},
-		{"Package", Type, 5, ""},
-		{"PackageVar", Const, 25, ""},
-		{"ParamVar", Const, 25, ""},
-		{"PkgName", Type, 5, ""},
-		{"Pointer", Type, 5, ""},
-		{"Qualifier", Type, 5, ""},
-		{"RecvOnly", Const, 5, ""},
-		{"RecvVar", Const, 25, ""},
-		{"RelativeTo", Func, 5, "func(pkg *Package) Qualifier"},
-		{"ResultVar", Const, 25, ""},
-		{"Rune", Const, 5, ""},
-		{"Satisfies", Func, 20, "func(V Type, T *Interface) bool"},
-		{"Scope", Type, 5, ""},
-		{"Selection", Type, 5, ""},
-		{"SelectionKind", Type, 5, ""},
-		{"SelectionString", Func, 5, "func(s *Selection, qf Qualifier) string"},
-		{"SendOnly", Const, 5, ""},
-		{"SendRecv", Const, 5, ""},
-		{"Signature", Type, 5, ""},
-		{"Sizes", Type, 5, ""},
-		{"SizesFor", Func, 9, "func(compiler string, arch string) Sizes"},
-		{"Slice", Type, 5, ""},
-		{"StdSizes", Type, 5, ""},
-		{"StdSizes.MaxAlign", Field, 5, ""},
-		{"StdSizes.WordSize", Field, 5, ""},
-		{"String", Const, 5, ""},
-		{"Struct", Type, 5, ""},
-		{"Term", Type, 18, ""},
-		{"Tuple", Type, 5, ""},
-		{"Typ", Var, 5, ""},
-		{"Type", Type, 5, ""},
-		{"TypeAndValue", Type, 5, ""},
-		{"TypeAndValue.Type", Field, 5, ""},
-		{"TypeAndValue.Value", Field, 5, ""},
-		{"TypeList", Type, 18, ""},
-		{"TypeName", Type, 5, ""},
-		{"TypeParam", Type, 18, ""},
-		{"TypeParamList", Type, 18, ""},
-		{"TypeString", Func, 5, "func(typ Type, qf Qualifier) string"},
-		{"Uint", Const, 5, ""},
-		{"Uint16", Const, 5, ""},
-		{"Uint32", Const, 5, ""},
-		{"Uint64", Const, 5, ""},
-		{"Uint8", Const, 5, ""},
-		{"Uintptr", Const, 5, ""},
-		{"Unalias", Func, 22, "func(t Type) Type"},
-		{"Union", Type, 18, ""},
-		{"Universe", Var, 5, ""},
-		{"Unsafe", Var, 5, ""},
-		{"UnsafePointer", Const, 5, ""},
-		{"UntypedBool", Const, 5, ""},
-		{"UntypedComplex", Const, 5, ""},
-		{"UntypedFloat", Const, 5, ""},
-		{"UntypedInt", Const, 5, ""},
-		{"UntypedNil", Const, 5, ""},
-		{"UntypedRune", Const, 5, ""},
-		{"UntypedString", Const, 5, ""},
-		{"Var", Type, 5, ""},
-		{"VarKind", Type, 25, ""},
-		{"WriteExpr", Func, 5, "func(buf *bytes.Buffer, x ast.Expr)"},
-		{"WriteSignature", Func, 5, "func(buf *bytes.Buffer, sig *Signature, qf Qualifier)"},
-		{"WriteType", Func, 5, "func(buf *bytes.Buffer, typ Type, qf Qualifier)"},
+		{"(*Alias).Obj", Method, 22},
+		{"(*Alias).Origin", Method, 23},
+		{"(*Alias).Rhs", Method, 23},
+		{"(*Alias).SetTypeParams", Method, 23},
+		{"(*Alias).String", Method, 22},
+		{"(*Alias).TypeArgs", Method, 23},
+		{"(*Alias).TypeParams", Method, 23},
+		{"(*Alias).Underlying", Method, 22},
+		{"(*ArgumentError).Error", Method, 18},
+		{"(*ArgumentError).Unwrap", Method, 18},
+		{"(*Array).Elem", Method, 5},
+		{"(*Array).Len", Method, 5},
+		{"(*Array).String", Method, 5},
+		{"(*Array).Underlying", Method, 5},
+		{"(*Basic).Info", Method, 5},
+		{"(*Basic).Kind", Method, 5},
+		{"(*Basic).Name", Method, 5},
+		{"(*Basic).String", Method, 5},
+		{"(*Basic).Underlying", Method, 5},
+		{"(*Builtin).Exported", Method, 5},
+		{"(*Builtin).Id", Method, 5},
+		{"(*Builtin).Name", Method, 5},
+		{"(*Builtin).Parent", Method, 5},
+		{"(*Builtin).Pkg", Method, 5},
+		{"(*Builtin).Pos", Method, 5},
+		{"(*Builtin).String", Method, 5},
+		{"(*Builtin).Type", Method, 5},
+		{"(*Chan).Dir", Method, 5},
+		{"(*Chan).Elem", Method, 5},
+		{"(*Chan).String", Method, 5},
+		{"(*Chan).Underlying", Method, 5},
+		{"(*Checker).Files", Method, 5},
+		{"(*Config).Check", Method, 5},
+		{"(*Const).Exported", Method, 5},
+		{"(*Const).Id", Method, 5},
+		{"(*Const).Name", Method, 5},
+		{"(*Const).Parent", Method, 5},
+		{"(*Const).Pkg", Method, 5},
+		{"(*Const).Pos", Method, 5},
+		{"(*Const).String", Method, 5},
+		{"(*Const).Type", Method, 5},
+		{"(*Const).Val", Method, 5},
+		{"(*Func).Exported", Method, 5},
+		{"(*Func).FullName", Method, 5},
+		{"(*Func).Id", Method, 5},
+		{"(*Func).Name", Method, 5},
+		{"(*Func).Origin", Method, 19},
+		{"(*Func).Parent", Method, 5},
+		{"(*Func).Pkg", Method, 5},
+		{"(*Func).Pos", Method, 5},
+		{"(*Func).Scope", Method, 5},
+		{"(*Func).Signature", Method, 23},
+		{"(*Func).String", Method, 5},
+		{"(*Func).Type", Method, 5},
+		{"(*Info).ObjectOf", Method, 5},
+		{"(*Info).PkgNameOf", Method, 22},
+		{"(*Info).TypeOf", Method, 5},
+		{"(*Initializer).String", Method, 5},
+		{"(*Interface).Complete", Method, 5},
+		{"(*Interface).Embedded", Method, 5},
+		{"(*Interface).EmbeddedType", Method, 11},
+		{"(*Interface).EmbeddedTypes", Method, 24},
+		{"(*Interface).Empty", Method, 5},
+		{"(*Interface).ExplicitMethod", Method, 5},
+		{"(*Interface).ExplicitMethods", Method, 24},
+		{"(*Interface).IsComparable", Method, 18},
+		{"(*Interface).IsImplicit", Method, 18},
+		{"(*Interface).IsMethodSet", Method, 18},
+		{"(*Interface).MarkImplicit", Method, 18},
+		{"(*Interface).Method", Method, 5},
+		{"(*Interface).Methods", Method, 24},
+		{"(*Interface).NumEmbeddeds", Method, 5},
+		{"(*Interface).NumExplicitMethods", Method, 5},
+		{"(*Interface).NumMethods", Method, 5},
+		{"(*Interface).String", Method, 5},
+		{"(*Interface).Underlying", Method, 5},
+		{"(*Label).Exported", Method, 5},
+		{"(*Label).Id", Method, 5},
+		{"(*Label).Name", Method, 5},
+		{"(*Label).Parent", Method, 5},
+		{"(*Label).Pkg", Method, 5},
+		{"(*Label).Pos", Method, 5},
+		{"(*Label).String", Method, 5},
+		{"(*Label).Type", Method, 5},
+		{"(*Map).Elem", Method, 5},
+		{"(*Map).Key", Method, 5},
+		{"(*Map).String", Method, 5},
+		{"(*Map).Underlying", Method, 5},
+		{"(*MethodSet).At", Method, 5},
+		{"(*MethodSet).Len", Method, 5},
+		{"(*MethodSet).Lookup", Method, 5},
+		{"(*MethodSet).Methods", Method, 24},
+		{"(*MethodSet).String", Method, 5},
+		{"(*Named).AddMethod", Method, 5},
+		{"(*Named).Method", Method, 5},
+		{"(*Named).Methods", Method, 24},
+		{"(*Named).NumMethods", Method, 5},
+		{"(*Named).Obj", Method, 5},
+		{"(*Named).Origin", Method, 18},
+		{"(*Named).SetTypeParams", Method, 18},
+		{"(*Named).SetUnderlying", Method, 5},
+		{"(*Named).String", Method, 5},
+		{"(*Named).TypeArgs", Method, 18},
+		{"(*Named).TypeParams", Method, 18},
+		{"(*Named).Underlying", Method, 5},
+		{"(*Nil).Exported", Method, 5},
+		{"(*Nil).Id", Method, 5},
+		{"(*Nil).Name", Method, 5},
+		{"(*Nil).Parent", Method, 5},
+		{"(*Nil).Pkg", Method, 5},
+		{"(*Nil).Pos", Method, 5},
+		{"(*Nil).String", Method, 5},
+		{"(*Nil).Type", Method, 5},
+		{"(*Package).Complete", Method, 5},
+		{"(*Package).GoVersion", Method, 21},
+		{"(*Package).Imports", Method, 5},
+		{"(*Package).MarkComplete", Method, 5},
+		{"(*Package).Name", Method, 5},
+		{"(*Package).Path", Method, 5},
+		{"(*Package).Scope", Method, 5},
+		{"(*Package).SetImports", Method, 5},
+		{"(*Package).SetName", Method, 6},
+		{"(*Package).String", Method, 5},
+		{"(*PkgName).Exported", Method, 5},
+		{"(*PkgName).Id", Method, 5},
+		{"(*PkgName).Imported", Method, 5},
+		{"(*PkgName).Name", Method, 5},
+		{"(*PkgName).Parent", Method, 5},
+		{"(*PkgName).Pkg", Method, 5},
+		{"(*PkgName).Pos", Method, 5},
+		{"(*PkgName).String", Method, 5},
+		{"(*PkgName).Type", Method, 5},
+		{"(*Pointer).Elem", Method, 5},
+		{"(*Pointer).String", Method, 5},
+		{"(*Pointer).Underlying", Method, 5},
+		{"(*Scope).Child", Method, 5},
+		{"(*Scope).Children", Method, 24},
+		{"(*Scope).Contains", Method, 5},
+		{"(*Scope).End", Method, 5},
+		{"(*Scope).Innermost", Method, 5},
+		{"(*Scope).Insert", Method, 5},
+		{"(*Scope).Len", Method, 5},
+		{"(*Scope).Lookup", Method, 5},
+		{"(*Scope).LookupParent", Method, 5},
+		{"(*Scope).Names", Method, 5},
+		{"(*Scope).NumChildren", Method, 5},
+		{"(*Scope).Parent", Method, 5},
+		{"(*Scope).Pos", Method, 5},
+		{"(*Scope).String", Method, 5},
+		{"(*Scope).WriteTo", Method, 5},
+		{"(*Selection).Index", Method, 5},
+		{"(*Selection).Indirect", Method, 5},
+		{"(*Selection).Kind", Method, 5},
+		{"(*Selection).Obj", Method, 5},
+		{"(*Selection).Recv", Method, 5},
+		{"(*Selection).String", Method, 5},
+		{"(*Selection).Type", Method, 5},
+		{"(*Signature).Params", Method, 5},
+		{"(*Signature).Recv", Method, 5},
+		{"(*Signature).RecvTypeParams", Method, 18},
+		{"(*Signature).Results", Method, 5},
+		{"(*Signature).String", Method, 5},
+		{"(*Signature).TypeParams", Method, 18},
+		{"(*Signature).Underlying", Method, 5},
+		{"(*Signature).Variadic", Method, 5},
+		{"(*Slice).Elem", Method, 5},
+		{"(*Slice).String", Method, 5},
+		{"(*Slice).Underlying", Method, 5},
+		{"(*StdSizes).Alignof", Method, 5},
+		{"(*StdSizes).Offsetsof", Method, 5},
+		{"(*StdSizes).Sizeof", Method, 5},
+		{"(*Struct).Field", Method, 5},
+		{"(*Struct).Fields", Method, 24},
+		{"(*Struct).NumFields", Method, 5},
+		{"(*Struct).String", Method, 5},
+		{"(*Struct).Tag", Method, 5},
+		{"(*Struct).Underlying", Method, 5},
+		{"(*Term).String", Method, 18},
+		{"(*Term).Tilde", Method, 18},
+		{"(*Term).Type", Method, 18},
+		{"(*Tuple).At", Method, 5},
+		{"(*Tuple).Len", Method, 5},
+		{"(*Tuple).String", Method, 5},
+		{"(*Tuple).Underlying", Method, 5},
+		{"(*Tuple).Variables", Method, 24},
+		{"(*TypeList).At", Method, 18},
+		{"(*TypeList).Len", Method, 18},
+		{"(*TypeList).Types", Method, 24},
+		{"(*TypeName).Exported", Method, 5},
+		{"(*TypeName).Id", Method, 5},
+		{"(*TypeName).IsAlias", Method, 9},
+		{"(*TypeName).Name", Method, 5},
+		{"(*TypeName).Parent", Method, 5},
+		{"(*TypeName).Pkg", Method, 5},
+		{"(*TypeName).Pos", Method, 5},
+		{"(*TypeName).String", Method, 5},
+		{"(*TypeName).Type", Method, 5},
+		{"(*TypeParam).Constraint", Method, 18},
+		{"(*TypeParam).Index", Method, 18},
+		{"(*TypeParam).Obj", Method, 18},
+		{"(*TypeParam).SetConstraint", Method, 18},
+		{"(*TypeParam).String", Method, 18},
+		{"(*TypeParam).Underlying", Method, 18},
+		{"(*TypeParamList).At", Method, 18},
+		{"(*TypeParamList).Len", Method, 18},
+		{"(*TypeParamList).TypeParams", Method, 24},
+		{"(*Union).Len", Method, 18},
+		{"(*Union).String", Method, 18},
+		{"(*Union).Term", Method, 18},
+		{"(*Union).Terms", Method, 24},
+		{"(*Union).Underlying", Method, 18},
+		{"(*Var).Anonymous", Method, 5},
+		{"(*Var).Embedded", Method, 11},
+		{"(*Var).Exported", Method, 5},
+		{"(*Var).Id", Method, 5},
+		{"(*Var).IsField", Method, 5},
+		{"(*Var).Name", Method, 5},
+		{"(*Var).Origin", Method, 19},
+		{"(*Var).Parent", Method, 5},
+		{"(*Var).Pkg", Method, 5},
+		{"(*Var).Pos", Method, 5},
+		{"(*Var).String", Method, 5},
+		{"(*Var).Type", Method, 5},
+		{"(Checker).ObjectOf", Method, 5},
+		{"(Checker).PkgNameOf", Method, 22},
+		{"(Checker).TypeOf", Method, 5},
+		{"(Error).Error", Method, 5},
+		{"(TypeAndValue).Addressable", Method, 5},
+		{"(TypeAndValue).Assignable", Method, 5},
+		{"(TypeAndValue).HasOk", Method, 5},
+		{"(TypeAndValue).IsBuiltin", Method, 5},
+		{"(TypeAndValue).IsNil", Method, 5},
+		{"(TypeAndValue).IsType", Method, 5},
+		{"(TypeAndValue).IsValue", Method, 5},
+		{"(TypeAndValue).IsVoid", Method, 5},
+		{"Alias", Type, 22},
+		{"ArgumentError", Type, 18},
+		{"ArgumentError.Err", Field, 18},
+		{"ArgumentError.Index", Field, 18},
+		{"Array", Type, 5},
+		{"AssertableTo", Func, 5},
+		{"AssignableTo", Func, 5},
+		{"Basic", Type, 5},
+		{"BasicInfo", Type, 5},
+		{"BasicKind", Type, 5},
+		{"Bool", Const, 5},
+		{"Builtin", Type, 5},
+		{"Byte", Const, 5},
+		{"Chan", Type, 5},
+		{"ChanDir", Type, 5},
+		{"CheckExpr", Func, 13},
+		{"Checker", Type, 5},
+		{"Checker.Info", Field, 5},
+		{"Comparable", Func, 5},
+		{"Complex128", Const, 5},
+		{"Complex64", Const, 5},
+		{"Config", Type, 5},
+		{"Config.Context", Field, 18},
+		{"Config.DisableUnusedImportCheck", Field, 5},
+		{"Config.Error", Field, 5},
+		{"Config.FakeImportC", Field, 5},
+		{"Config.GoVersion", Field, 18},
+		{"Config.IgnoreFuncBodies", Field, 5},
+		{"Config.Importer", Field, 5},
+		{"Config.Sizes", Field, 5},
+		{"Const", Type, 5},
+		{"Context", Type, 18},
+		{"ConvertibleTo", Func, 5},
+		{"DefPredeclaredTestFuncs", Func, 5},
+		{"Default", Func, 8},
+		{"Error", Type, 5},
+		{"Error.Fset", Field, 5},
+		{"Error.Msg", Field, 5},
+		{"Error.Pos", Field, 5},
+		{"Error.Soft", Field, 5},
+		{"Eval", Func, 5},
+		{"ExprString", Func, 5},
+		{"FieldVal", Const, 5},
+		{"Float32", Const, 5},
+		{"Float64", Const, 5},
+		{"Func", Type, 5},
+		{"Id", Func, 5},
+		{"Identical", Func, 5},
+		{"IdenticalIgnoreTags", Func, 8},
+		{"Implements", Func, 5},
+		{"ImportMode", Type, 6},
+		{"Importer", Type, 5},
+		{"ImporterFrom", Type, 6},
+		{"Info", Type, 5},
+		{"Info.Defs", Field, 5},
+		{"Info.FileVersions", Field, 22},
+		{"Info.Implicits", Field, 5},
+		{"Info.InitOrder", Field, 5},
+		{"Info.Instances", Field, 18},
+		{"Info.Scopes", Field, 5},
+		{"Info.Selections", Field, 5},
+		{"Info.Types", Field, 5},
+		{"Info.Uses", Field, 5},
+		{"Initializer", Type, 5},
+		{"Initializer.Lhs", Field, 5},
+		{"Initializer.Rhs", Field, 5},
+		{"Instance", Type, 18},
+		{"Instance.Type", Field, 18},
+		{"Instance.TypeArgs", Field, 18},
+		{"Instantiate", Func, 18},
+		{"Int", Const, 5},
+		{"Int16", Const, 5},
+		{"Int32", Const, 5},
+		{"Int64", Const, 5},
+		{"Int8", Const, 5},
+		{"Interface", Type, 5},
+		{"Invalid", Const, 5},
+		{"IsBoolean", Const, 5},
+		{"IsComplex", Const, 5},
+		{"IsConstType", Const, 5},
+		{"IsFloat", Const, 5},
+		{"IsInteger", Const, 5},
+		{"IsInterface", Func, 5},
+		{"IsNumeric", Const, 5},
+		{"IsOrdered", Const, 5},
+		{"IsString", Const, 5},
+		{"IsUnsigned", Const, 5},
+		{"IsUntyped", Const, 5},
+		{"Label", Type, 5},
+		{"LookupFieldOrMethod", Func, 5},
+		{"Map", Type, 5},
+		{"MethodExpr", Const, 5},
+		{"MethodSet", Type, 5},
+		{"MethodVal", Const, 5},
+		{"MissingMethod", Func, 5},
+		{"Named", Type, 5},
+		{"NewAlias", Func, 22},
+		{"NewArray", Func, 5},
+		{"NewChan", Func, 5},
+		{"NewChecker", Func, 5},
+		{"NewConst", Func, 5},
+		{"NewContext", Func, 18},
+		{"NewField", Func, 5},
+		{"NewFunc", Func, 5},
+		{"NewInterface", Func, 5},
+		{"NewInterfaceType", Func, 11},
+		{"NewLabel", Func, 5},
+		{"NewMap", Func, 5},
+		{"NewMethodSet", Func, 5},
+		{"NewNamed", Func, 5},
+		{"NewPackage", Func, 5},
+		{"NewParam", Func, 5},
+		{"NewPkgName", Func, 5},
+		{"NewPointer", Func, 5},
+		{"NewScope", Func, 5},
+		{"NewSignature", Func, 5},
+		{"NewSignatureType", Func, 18},
+		{"NewSlice", Func, 5},
+		{"NewStruct", Func, 5},
+		{"NewTerm", Func, 18},
+		{"NewTuple", Func, 5},
+		{"NewTypeName", Func, 5},
+		{"NewTypeParam", Func, 18},
+		{"NewUnion", Func, 18},
+		{"NewVar", Func, 5},
+		{"Nil", Type, 5},
+		{"Object", Type, 5},
+		{"ObjectString", Func, 5},
+		{"Package", Type, 5},
+		{"PkgName", Type, 5},
+		{"Pointer", Type, 5},
+		{"Qualifier", Type, 5},
+		{"RecvOnly", Const, 5},
+		{"RelativeTo", Func, 5},
+		{"Rune", Const, 5},
+		{"Satisfies", Func, 20},
+		{"Scope", Type, 5},
+		{"Selection", Type, 5},
+		{"SelectionKind", Type, 5},
+		{"SelectionString", Func, 5},
+		{"SendOnly", Const, 5},
+		{"SendRecv", Const, 5},
+		{"Signature", Type, 5},
+		{"Sizes", Type, 5},
+		{"SizesFor", Func, 9},
+		{"Slice", Type, 5},
+		{"StdSizes", Type, 5},
+		{"StdSizes.MaxAlign", Field, 5},
+		{"StdSizes.WordSize", Field, 5},
+		{"String", Const, 5},
+		{"Struct", Type, 5},
+		{"Term", Type, 18},
+		{"Tuple", Type, 5},
+		{"Typ", Var, 5},
+		{"Type", Type, 5},
+		{"TypeAndValue", Type, 5},
+		{"TypeAndValue.Type", Field, 5},
+		{"TypeAndValue.Value", Field, 5},
+		{"TypeList", Type, 18},
+		{"TypeName", Type, 5},
+		{"TypeParam", Type, 18},
+		{"TypeParamList", Type, 18},
+		{"TypeString", Func, 5},
+		{"Uint", Const, 5},
+		{"Uint16", Const, 5},
+		{"Uint32", Const, 5},
+		{"Uint64", Const, 5},
+		{"Uint8", Const, 5},
+		{"Uintptr", Const, 5},
+		{"Unalias", Func, 22},
+		{"Union", Type, 18},
+		{"Universe", Var, 5},
+		{"Unsafe", Var, 5},
+		{"UnsafePointer", Const, 5},
+		{"UntypedBool", Const, 5},
+		{"UntypedComplex", Const, 5},
+		{"UntypedFloat", Const, 5},
+		{"UntypedInt", Const, 5},
+		{"UntypedNil", Const, 5},
+		{"UntypedRune", Const, 5},
+		{"UntypedString", Const, 5},
+		{"Var", Type, 5},
+		{"WriteExpr", Func, 5},
+		{"WriteSignature", Func, 5},
+		{"WriteType", Func, 5},
 	},
 	"go/version": {
-		{"Compare", Func, 22, "func(x string, y string) int"},
-		{"IsValid", Func, 22, "func(x string) bool"},
-		{"Lang", Func, 22, "func(x string) string"},
+		{"Compare", Func, 22},
+		{"IsValid", Func, 22},
+		{"Lang", Func, 22},
 	},
 	"hash": {
-		{"Hash", Type, 0, ""},
-		{"Hash32", Type, 0, ""},
-		{"Hash64", Type, 0, ""},
+		{"Hash", Type, 0},
+		{"Hash32", Type, 0},
+		{"Hash64", Type, 0},
 	},
 	"hash/adler32": {
-		{"Checksum", Func, 0, "func(data []byte) uint32"},
-		{"New", Func, 0, "func() hash.Hash32"},
-		{"Size", Const, 0, ""},
+		{"Checksum", Func, 0},
+		{"New", Func, 0},
+		{"Size", Const, 0},
 	},
 	"hash/crc32": {
-		{"Castagnoli", Const, 0, ""},
-		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint32"},
-		{"ChecksumIEEE", Func, 0, "func(data []byte) uint32"},
-		{"IEEE", Const, 0, ""},
-		{"IEEETable", Var, 0, ""},
-		{"Koopman", Const, 0, ""},
-		{"MakeTable", Func, 0, "func(poly uint32) *Table"},
-		{"New", Func, 0, "func(tab *Table) hash.Hash32"},
-		{"NewIEEE", Func, 0, "func() hash.Hash32"},
-		{"Size", Const, 0, ""},
-		{"Table", Type, 0, ""},
-		{"Update", Func, 0, "func(crc uint32, tab *Table, p []byte) uint32"},
+		{"Castagnoli", Const, 0},
+		{"Checksum", Func, 0},
+		{"ChecksumIEEE", Func, 0},
+		{"IEEE", Const, 0},
+		{"IEEETable", Var, 0},
+		{"Koopman", Const, 0},
+		{"MakeTable", Func, 0},
+		{"New", Func, 0},
+		{"NewIEEE", Func, 0},
+		{"Size", Const, 0},
+		{"Table", Type, 0},
+		{"Update", Func, 0},
 	},
 	"hash/crc64": {
-		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint64"},
-		{"ECMA", Const, 0, ""},
-		{"ISO", Const, 0, ""},
-		{"MakeTable", Func, 0, "func(poly uint64) *Table"},
-		{"New", Func, 0, "func(tab *Table) hash.Hash64"},
-		{"Size", Const, 0, ""},
-		{"Table", Type, 0, ""},
-		{"Update", Func, 0, "func(crc uint64, tab *Table, p []byte) uint64"},
+		{"Checksum", Func, 0},
+		{"ECMA", Const, 0},
+		{"ISO", Const, 0},
+		{"MakeTable", Func, 0},
+		{"New", Func, 0},
+		{"Size", Const, 0},
+		{"Table", Type, 0},
+		{"Update", Func, 0},
 	},
 	"hash/fnv": {
-		{"New128", Func, 9, "func() hash.Hash"},
-		{"New128a", Func, 9, "func() hash.Hash"},
-		{"New32", Func, 0, "func() hash.Hash32"},
-		{"New32a", Func, 0, "func() hash.Hash32"},
-		{"New64", Func, 0, "func() hash.Hash64"},
-		{"New64a", Func, 0, "func() hash.Hash64"},
+		{"New128", Func, 9},
+		{"New128a", Func, 9},
+		{"New32", Func, 0},
+		{"New32a", Func, 0},
+		{"New64", Func, 0},
+		{"New64a", Func, 0},
 	},
 	"hash/maphash": {
-		{"(*Hash).BlockSize", Method, 14, ""},
-		{"(*Hash).Reset", Method, 14, ""},
-		{"(*Hash).Seed", Method, 14, ""},
-		{"(*Hash).SetSeed", Method, 14, ""},
-		{"(*Hash).Size", Method, 14, ""},
-		{"(*Hash).Sum", Method, 14, ""},
-		{"(*Hash).Sum64", Method, 14, ""},
-		{"(*Hash).Write", Method, 14, ""},
-		{"(*Hash).WriteByte", Method, 14, ""},
-		{"(*Hash).WriteString", Method, 14, ""},
-		{"Bytes", Func, 19, "func(seed Seed, b []byte) uint64"},
-		{"Comparable", Func, 24, "func[T comparable](seed Seed, v T) uint64"},
-		{"Hash", Type, 14, ""},
-		{"MakeSeed", Func, 14, "func() Seed"},
-		{"Seed", Type, 14, ""},
-		{"String", Func, 19, "func(seed Seed, s string) uint64"},
-		{"WriteComparable", Func, 24, "func[T comparable](h *Hash, x T)"},
+		{"(*Hash).BlockSize", Method, 14},
+		{"(*Hash).Reset", Method, 14},
+		{"(*Hash).Seed", Method, 14},
+		{"(*Hash).SetSeed", Method, 14},
+		{"(*Hash).Size", Method, 14},
+		{"(*Hash).Sum", Method, 14},
+		{"(*Hash).Sum64", Method, 14},
+		{"(*Hash).Write", Method, 14},
+		{"(*Hash).WriteByte", Method, 14},
+		{"(*Hash).WriteString", Method, 14},
+		{"Bytes", Func, 19},
+		{"Comparable", Func, 24},
+		{"Hash", Type, 14},
+		{"MakeSeed", Func, 14},
+		{"Seed", Type, 14},
+		{"String", Func, 19},
+		{"WriteComparable", Func, 24},
 	},
 	"html": {
-		{"EscapeString", Func, 0, "func(s string) string"},
-		{"UnescapeString", Func, 0, "func(s string) string"},
+		{"EscapeString", Func, 0},
+		{"UnescapeString", Func, 0},
 	},
 	"html/template": {
-		{"(*Error).Error", Method, 0, ""},
-		{"(*Template).AddParseTree", Method, 0, ""},
-		{"(*Template).Clone", Method, 0, ""},
-		{"(*Template).DefinedTemplates", Method, 6, ""},
-		{"(*Template).Delims", Method, 0, ""},
-		{"(*Template).Execute", Method, 0, ""},
-		{"(*Template).ExecuteTemplate", Method, 0, ""},
-		{"(*Template).Funcs", Method, 0, ""},
-		{"(*Template).Lookup", Method, 0, ""},
-		{"(*Template).Name", Method, 0, ""},
-		{"(*Template).New", Method, 0, ""},
-		{"(*Template).Option", Method, 5, ""},
-		{"(*Template).Parse", Method, 0, ""},
-		{"(*Template).ParseFS", Method, 16, ""},
-		{"(*Template).ParseFiles", Method, 0, ""},
-		{"(*Template).ParseGlob", Method, 0, ""},
-		{"(*Template).Templates", Method, 0, ""},
-		{"CSS", Type, 0, ""},
-		{"ErrAmbigContext", Const, 0, ""},
-		{"ErrBadHTML", Const, 0, ""},
-		{"ErrBranchEnd", Const, 0, ""},
-		{"ErrEndContext", Const, 0, ""},
-		{"ErrJSTemplate", Const, 21, ""},
-		{"ErrNoSuchTemplate", Const, 0, ""},
-		{"ErrOutputContext", Const, 0, ""},
-		{"ErrPartialCharset", Const, 0, ""},
-		{"ErrPartialEscape", Const, 0, ""},
-		{"ErrPredefinedEscaper", Const, 9, ""},
-		{"ErrRangeLoopReentry", Const, 0, ""},
-		{"ErrSlashAmbig", Const, 0, ""},
-		{"Error", Type, 0, ""},
-		{"Error.Description", Field, 0, ""},
-		{"Error.ErrorCode", Field, 0, ""},
-		{"Error.Line", Field, 0, ""},
-		{"Error.Name", Field, 0, ""},
-		{"Error.Node", Field, 4, ""},
-		{"ErrorCode", Type, 0, ""},
-		{"FuncMap", Type, 0, ""},
-		{"HTML", Type, 0, ""},
-		{"HTMLAttr", Type, 0, ""},
-		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
-		{"HTMLEscapeString", Func, 0, "func(s string) string"},
-		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
-		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
-		{"JS", Type, 0, ""},
-		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
-		{"JSEscapeString", Func, 0, "func(s string) string"},
-		{"JSEscaper", Func, 0, "func(args ...any) string"},
-		{"JSStr", Type, 0, ""},
-		{"Must", Func, 0, "func(t *Template, err error) *Template"},
-		{"New", Func, 0, "func(name string) *Template"},
-		{"OK", Const, 0, ""},
-		{"ParseFS", Func, 16, "func(fs fs.FS, patterns ...string) (*Template, error)"},
-		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
-		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
-		{"Srcset", Type, 10, ""},
-		{"Template", Type, 0, ""},
-		{"Template.Tree", Field, 2, ""},
-		{"URL", Type, 0, ""},
-		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
+		{"(*Error).Error", Method, 0},
+		{"(*Template).AddParseTree", Method, 0},
+		{"(*Template).Clone", Method, 0},
+		{"(*Template).DefinedTemplates", Method, 6},
+		{"(*Template).Delims", Method, 0},
+		{"(*Template).Execute", Method, 0},
+		{"(*Template).ExecuteTemplate", Method, 0},
+		{"(*Template).Funcs", Method, 0},
+		{"(*Template).Lookup", Method, 0},
+		{"(*Template).Name", Method, 0},
+		{"(*Template).New", Method, 0},
+		{"(*Template).Option", Method, 5},
+		{"(*Template).Parse", Method, 0},
+		{"(*Template).ParseFS", Method, 16},
+		{"(*Template).ParseFiles", Method, 0},
+		{"(*Template).ParseGlob", Method, 0},
+		{"(*Template).Templates", Method, 0},
+		{"CSS", Type, 0},
+		{"ErrAmbigContext", Const, 0},
+		{"ErrBadHTML", Const, 0},
+		{"ErrBranchEnd", Const, 0},
+		{"ErrEndContext", Const, 0},
+		{"ErrJSTemplate", Const, 21},
+		{"ErrNoSuchTemplate", Const, 0},
+		{"ErrOutputContext", Const, 0},
+		{"ErrPartialCharset", Const, 0},
+		{"ErrPartialEscape", Const, 0},
+		{"ErrPredefinedEscaper", Const, 9},
+		{"ErrRangeLoopReentry", Const, 0},
+		{"ErrSlashAmbig", Const, 0},
+		{"Error", Type, 0},
+		{"Error.Description", Field, 0},
+		{"Error.ErrorCode", Field, 0},
+		{"Error.Line", Field, 0},
+		{"Error.Name", Field, 0},
+		{"Error.Node", Field, 4},
+		{"ErrorCode", Type, 0},
+		{"FuncMap", Type, 0},
+		{"HTML", Type, 0},
+		{"HTMLAttr", Type, 0},
+		{"HTMLEscape", Func, 0},
+		{"HTMLEscapeString", Func, 0},
+		{"HTMLEscaper", Func, 0},
+		{"IsTrue", Func, 6},
+		{"JS", Type, 0},
+		{"JSEscape", Func, 0},
+		{"JSEscapeString", Func, 0},
+		{"JSEscaper", Func, 0},
+		{"JSStr", Type, 0},
+		{"Must", Func, 0},
+		{"New", Func, 0},
+		{"OK", Const, 0},
+		{"ParseFS", Func, 16},
+		{"ParseFiles", Func, 0},
+		{"ParseGlob", Func, 0},
+		{"Srcset", Type, 10},
+		{"Template", Type, 0},
+		{"Template.Tree", Field, 2},
+		{"URL", Type, 0},
+		{"URLQueryEscaper", Func, 0},
 	},
 	"image": {
-		{"(*Alpha).AlphaAt", Method, 4, ""},
-		{"(*Alpha).At", Method, 0, ""},
-		{"(*Alpha).Bounds", Method, 0, ""},
-		{"(*Alpha).ColorModel", Method, 0, ""},
-		{"(*Alpha).Opaque", Method, 0, ""},
-		{"(*Alpha).PixOffset", Method, 0, ""},
-		{"(*Alpha).RGBA64At", Method, 17, ""},
-		{"(*Alpha).Set", Method, 0, ""},
-		{"(*Alpha).SetAlpha", Method, 0, ""},
-		{"(*Alpha).SetRGBA64", Method, 17, ""},
-		{"(*Alpha).SubImage", Method, 0, ""},
-		{"(*Alpha16).Alpha16At", Method, 4, ""},
-		{"(*Alpha16).At", Method, 0, ""},
-		{"(*Alpha16).Bounds", Method, 0, ""},
-		{"(*Alpha16).ColorModel", Method, 0, ""},
-		{"(*Alpha16).Opaque", Method, 0, ""},
-		{"(*Alpha16).PixOffset", Method, 0, ""},
-		{"(*Alpha16).RGBA64At", Method, 17, ""},
-		{"(*Alpha16).Set", Method, 0, ""},
-		{"(*Alpha16).SetAlpha16", Method, 0, ""},
-		{"(*Alpha16).SetRGBA64", Method, 17, ""},
-		{"(*Alpha16).SubImage", Method, 0, ""},
-		{"(*CMYK).At", Method, 5, ""},
-		{"(*CMYK).Bounds", Method, 5, ""},
-		{"(*CMYK).CMYKAt", Method, 5, ""},
-		{"(*CMYK).ColorModel", Method, 5, ""},
-		{"(*CMYK).Opaque", Method, 5, ""},
-		{"(*CMYK).PixOffset", Method, 5, ""},
-		{"(*CMYK).RGBA64At", Method, 17, ""},
-		{"(*CMYK).Set", Method, 5, ""},
-		{"(*CMYK).SetCMYK", Method, 5, ""},
-		{"(*CMYK).SetRGBA64", Method, 17, ""},
-		{"(*CMYK).SubImage", Method, 5, ""},
-		{"(*Gray).At", Method, 0, ""},
-		{"(*Gray).Bounds", Method, 0, ""},
-		{"(*Gray).ColorModel", Method, 0, ""},
-		{"(*Gray).GrayAt", Method, 4, ""},
-		{"(*Gray).Opaque", Method, 0, ""},
-		{"(*Gray).PixOffset", Method, 0, ""},
-		{"(*Gray).RGBA64At", Method, 17, ""},
-		{"(*Gray).Set", Method, 0, ""},
-		{"(*Gray).SetGray", Method, 0, ""},
-		{"(*Gray).SetRGBA64", Method, 17, ""},
-		{"(*Gray).SubImage", Method, 0, ""},
-		{"(*Gray16).At", Method, 0, ""},
-		{"(*Gray16).Bounds", Method, 0, ""},
-		{"(*Gray16).ColorModel", Method, 0, ""},
-		{"(*Gray16).Gray16At", Method, 4, ""},
-		{"(*Gray16).Opaque", Method, 0, ""},
-		{"(*Gray16).PixOffset", Method, 0, ""},
-		{"(*Gray16).RGBA64At", Method, 17, ""},
-		{"(*Gray16).Set", Method, 0, ""},
-		{"(*Gray16).SetGray16", Method, 0, ""},
-		{"(*Gray16).SetRGBA64", Method, 17, ""},
-		{"(*Gray16).SubImage", Method, 0, ""},
-		{"(*NRGBA).At", Method, 0, ""},
-		{"(*NRGBA).Bounds", Method, 0, ""},
-		{"(*NRGBA).ColorModel", Method, 0, ""},
-		{"(*NRGBA).NRGBAAt", Method, 4, ""},
-		{"(*NRGBA).Opaque", Method, 0, ""},
-		{"(*NRGBA).PixOffset", Method, 0, ""},
-		{"(*NRGBA).RGBA64At", Method, 17, ""},
-		{"(*NRGBA).Set", Method, 0, ""},
-		{"(*NRGBA).SetNRGBA", Method, 0, ""},
-		{"(*NRGBA).SetRGBA64", Method, 17, ""},
-		{"(*NRGBA).SubImage", Method, 0, ""},
-		{"(*NRGBA64).At", Method, 0, ""},
-		{"(*NRGBA64).Bounds", Method, 0, ""},
-		{"(*NRGBA64).ColorModel", Method, 0, ""},
-		{"(*NRGBA64).NRGBA64At", Method, 4, ""},
-		{"(*NRGBA64).Opaque", Method, 0, ""},
-		{"(*NRGBA64).PixOffset", Method, 0, ""},
-		{"(*NRGBA64).RGBA64At", Method, 17, ""},
-		{"(*NRGBA64).Set", Method, 0, ""},
-		{"(*NRGBA64).SetNRGBA64", Method, 0, ""},
-		{"(*NRGBA64).SetRGBA64", Method, 17, ""},
-		{"(*NRGBA64).SubImage", Method, 0, ""},
-		{"(*NYCbCrA).AOffset", Method, 6, ""},
-		{"(*NYCbCrA).At", Method, 6, ""},
-		{"(*NYCbCrA).Bounds", Method, 6, ""},
-		{"(*NYCbCrA).COffset", Method, 6, ""},
-		{"(*NYCbCrA).ColorModel", Method, 6, ""},
-		{"(*NYCbCrA).NYCbCrAAt", Method, 6, ""},
-		{"(*NYCbCrA).Opaque", Method, 6, ""},
-		{"(*NYCbCrA).RGBA64At", Method, 17, ""},
-		{"(*NYCbCrA).SubImage", Method, 6, ""},
-		{"(*NYCbCrA).YCbCrAt", Method, 6, ""},
-		{"(*NYCbCrA).YOffset", Method, 6, ""},
-		{"(*Paletted).At", Method, 0, ""},
-		{"(*Paletted).Bounds", Method, 0, ""},
-		{"(*Paletted).ColorIndexAt", Method, 0, ""},
-		{"(*Paletted).ColorModel", Method, 0, ""},
-		{"(*Paletted).Opaque", Method, 0, ""},
-		{"(*Paletted).PixOffset", Method, 0, ""},
-		{"(*Paletted).RGBA64At", Method, 17, ""},
-		{"(*Paletted).Set", Method, 0, ""},
-		{"(*Paletted).SetColorIndex", Method, 0, ""},
-		{"(*Paletted).SetRGBA64", Method, 17, ""},
-		{"(*Paletted).SubImage", Method, 0, ""},
-		{"(*RGBA).At", Method, 0, ""},
-		{"(*RGBA).Bounds", Method, 0, ""},
-		{"(*RGBA).ColorModel", Method, 0, ""},
-		{"(*RGBA).Opaque", Method, 0, ""},
-		{"(*RGBA).PixOffset", Method, 0, ""},
-		{"(*RGBA).RGBA64At", Method, 17, ""},
-		{"(*RGBA).RGBAAt", Method, 4, ""},
-		{"(*RGBA).Set", Method, 0, ""},
-		{"(*RGBA).SetRGBA", Method, 0, ""},
-		{"(*RGBA).SetRGBA64", Method, 17, ""},
-		{"(*RGBA).SubImage", Method, 0, ""},
-		{"(*RGBA64).At", Method, 0, ""},
-		{"(*RGBA64).Bounds", Method, 0, ""},
-		{"(*RGBA64).ColorModel", Method, 0, ""},
-		{"(*RGBA64).Opaque", Method, 0, ""},
-		{"(*RGBA64).PixOffset", Method, 0, ""},
-		{"(*RGBA64).RGBA64At", Method, 4, ""},
-		{"(*RGBA64).Set", Method, 0, ""},
-		{"(*RGBA64).SetRGBA64", Method, 0, ""},
-		{"(*RGBA64).SubImage", Method, 0, ""},
-		{"(*Uniform).At", Method, 0, ""},
-		{"(*Uniform).Bounds", Method, 0, ""},
-		{"(*Uniform).ColorModel", Method, 0, ""},
-		{"(*Uniform).Convert", Method, 0, ""},
-		{"(*Uniform).Opaque", Method, 0, ""},
-		{"(*Uniform).RGBA", Method, 0, ""},
-		{"(*Uniform).RGBA64At", Method, 17, ""},
-		{"(*YCbCr).At", Method, 0, ""},
-		{"(*YCbCr).Bounds", Method, 0, ""},
-		{"(*YCbCr).COffset", Method, 0, ""},
-		{"(*YCbCr).ColorModel", Method, 0, ""},
-		{"(*YCbCr).Opaque", Method, 0, ""},
-		{"(*YCbCr).RGBA64At", Method, 17, ""},
-		{"(*YCbCr).SubImage", Method, 0, ""},
-		{"(*YCbCr).YCbCrAt", Method, 4, ""},
-		{"(*YCbCr).YOffset", Method, 0, ""},
-		{"(Point).Add", Method, 0, ""},
-		{"(Point).Div", Method, 0, ""},
-		{"(Point).Eq", Method, 0, ""},
-		{"(Point).In", Method, 0, ""},
-		{"(Point).Mod", Method, 0, ""},
-		{"(Point).Mul", Method, 0, ""},
-		{"(Point).String", Method, 0, ""},
-		{"(Point).Sub", Method, 0, ""},
-		{"(Rectangle).Add", Method, 0, ""},
-		{"(Rectangle).At", Method, 5, ""},
-		{"(Rectangle).Bounds", Method, 5, ""},
-		{"(Rectangle).Canon", Method, 0, ""},
-		{"(Rectangle).ColorModel", Method, 5, ""},
-		{"(Rectangle).Dx", Method, 0, ""},
-		{"(Rectangle).Dy", Method, 0, ""},
-		{"(Rectangle).Empty", Method, 0, ""},
-		{"(Rectangle).Eq", Method, 0, ""},
-		{"(Rectangle).In", Method, 0, ""},
-		{"(Rectangle).Inset", Method, 0, ""},
-		{"(Rectangle).Intersect", Method, 0, ""},
-		{"(Rectangle).Overlaps", Method, 0, ""},
-		{"(Rectangle).RGBA64At", Method, 17, ""},
-		{"(Rectangle).Size", Method, 0, ""},
-		{"(Rectangle).String", Method, 0, ""},
-		{"(Rectangle).Sub", Method, 0, ""},
-		{"(Rectangle).Union", Method, 0, ""},
-		{"(YCbCrSubsampleRatio).String", Method, 0, ""},
-		{"Alpha", Type, 0, ""},
-		{"Alpha.Pix", Field, 0, ""},
-		{"Alpha.Rect", Field, 0, ""},
-		{"Alpha.Stride", Field, 0, ""},
-		{"Alpha16", Type, 0, ""},
-		{"Alpha16.Pix", Field, 0, ""},
-		{"Alpha16.Rect", Field, 0, ""},
-		{"Alpha16.Stride", Field, 0, ""},
-		{"Black", Var, 0, ""},
-		{"CMYK", Type, 5, ""},
-		{"CMYK.Pix", Field, 5, ""},
-		{"CMYK.Rect", Field, 5, ""},
-		{"CMYK.Stride", Field, 5, ""},
-		{"Config", Type, 0, ""},
-		{"Config.ColorModel", Field, 0, ""},
-		{"Config.Height", Field, 0, ""},
-		{"Config.Width", Field, 0, ""},
-		{"Decode", Func, 0, "func(r io.Reader) (Image, string, error)"},
-		{"DecodeConfig", Func, 0, "func(r io.Reader) (Config, string, error)"},
-		{"ErrFormat", Var, 0, ""},
-		{"Gray", Type, 0, ""},
-		{"Gray.Pix", Field, 0, ""},
-		{"Gray.Rect", Field, 0, ""},
-		{"Gray.Stride", Field, 0, ""},
-		{"Gray16", Type, 0, ""},
-		{"Gray16.Pix", Field, 0, ""},
-		{"Gray16.Rect", Field, 0, ""},
-		{"Gray16.Stride", Field, 0, ""},
-		{"Image", Type, 0, ""},
-		{"NRGBA", Type, 0, ""},
-		{"NRGBA.Pix", Field, 0, ""},
-		{"NRGBA.Rect", Field, 0, ""},
-		{"NRGBA.Stride", Field, 0, ""},
-		{"NRGBA64", Type, 0, ""},
-		{"NRGBA64.Pix", Field, 0, ""},
-		{"NRGBA64.Rect", Field, 0, ""},
-		{"NRGBA64.Stride", Field, 0, ""},
-		{"NYCbCrA", Type, 6, ""},
-		{"NYCbCrA.A", Field, 6, ""},
-		{"NYCbCrA.AStride", Field, 6, ""},
-		{"NYCbCrA.YCbCr", Field, 6, ""},
-		{"NewAlpha", Func, 0, "func(r Rectangle) *Alpha"},
-		{"NewAlpha16", Func, 0, "func(r Rectangle) *Alpha16"},
-		{"NewCMYK", Func, 5, "func(r Rectangle) *CMYK"},
-		{"NewGray", Func, 0, "func(r Rectangle) *Gray"},
-		{"NewGray16", Func, 0, "func(r Rectangle) *Gray16"},
-		{"NewNRGBA", Func, 0, "func(r Rectangle) *NRGBA"},
-		{"NewNRGBA64", Func, 0, "func(r Rectangle) *NRGBA64"},
-		{"NewNYCbCrA", Func, 6, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *NYCbCrA"},
-		{"NewPaletted", Func, 0, "func(r Rectangle, p color.Palette) *Paletted"},
-		{"NewRGBA", Func, 0, "func(r Rectangle) *RGBA"},
-		{"NewRGBA64", Func, 0, "func(r Rectangle) *RGBA64"},
-		{"NewUniform", Func, 0, "func(c color.Color) *Uniform"},
-		{"NewYCbCr", Func, 0, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr"},
-		{"Opaque", Var, 0, ""},
-		{"Paletted", Type, 0, ""},
-		{"Paletted.Palette", Field, 0, ""},
-		{"Paletted.Pix", Field, 0, ""},
-		{"Paletted.Rect", Field, 0, ""},
-		{"Paletted.Stride", Field, 0, ""},
-		{"PalettedImage", Type, 0, ""},
-		{"Point", Type, 0, ""},
-		{"Point.X", Field, 0, ""},
-		{"Point.Y", Field, 0, ""},
-		{"Pt", Func, 0, "func(X int, Y int) Point"},
-		{"RGBA", Type, 0, ""},
-		{"RGBA.Pix", Field, 0, ""},
-		{"RGBA.Rect", Field, 0, ""},
-		{"RGBA.Stride", Field, 0, ""},
-		{"RGBA64", Type, 0, ""},
-		{"RGBA64.Pix", Field, 0, ""},
-		{"RGBA64.Rect", Field, 0, ""},
-		{"RGBA64.Stride", Field, 0, ""},
-		{"RGBA64Image", Type, 17, ""},
-		{"Rect", Func, 0, "func(x0 int, y0 int, x1 int, y1 int) Rectangle"},
-		{"Rectangle", Type, 0, ""},
-		{"Rectangle.Max", Field, 0, ""},
-		{"Rectangle.Min", Field, 0, ""},
-		{"RegisterFormat", Func, 0, "func(name string, magic string, decode func(io.Reader) (Image, error), decodeConfig func(io.Reader) (Config, error))"},
-		{"Transparent", Var, 0, ""},
-		{"Uniform", Type, 0, ""},
-		{"Uniform.C", Field, 0, ""},
-		{"White", Var, 0, ""},
-		{"YCbCr", Type, 0, ""},
-		{"YCbCr.CStride", Field, 0, ""},
-		{"YCbCr.Cb", Field, 0, ""},
-		{"YCbCr.Cr", Field, 0, ""},
-		{"YCbCr.Rect", Field, 0, ""},
-		{"YCbCr.SubsampleRatio", Field, 0, ""},
-		{"YCbCr.Y", Field, 0, ""},
-		{"YCbCr.YStride", Field, 0, ""},
-		{"YCbCrSubsampleRatio", Type, 0, ""},
-		{"YCbCrSubsampleRatio410", Const, 5, ""},
-		{"YCbCrSubsampleRatio411", Const, 5, ""},
-		{"YCbCrSubsampleRatio420", Const, 0, ""},
-		{"YCbCrSubsampleRatio422", Const, 0, ""},
-		{"YCbCrSubsampleRatio440", Const, 1, ""},
-		{"YCbCrSubsampleRatio444", Const, 0, ""},
-		{"ZP", Var, 0, ""},
-		{"ZR", Var, 0, ""},
+		{"(*Alpha).AlphaAt", Method, 4},
+		{"(*Alpha).At", Method, 0},
+		{"(*Alpha).Bounds", Method, 0},
+		{"(*Alpha).ColorModel", Method, 0},
+		{"(*Alpha).Opaque", Method, 0},
+		{"(*Alpha).PixOffset", Method, 0},
+		{"(*Alpha).RGBA64At", Method, 17},
+		{"(*Alpha).Set", Method, 0},
+		{"(*Alpha).SetAlpha", Method, 0},
+		{"(*Alpha).SetRGBA64", Method, 17},
+		{"(*Alpha).SubImage", Method, 0},
+		{"(*Alpha16).Alpha16At", Method, 4},
+		{"(*Alpha16).At", Method, 0},
+		{"(*Alpha16).Bounds", Method, 0},
+		{"(*Alpha16).ColorModel", Method, 0},
+		{"(*Alpha16).Opaque", Method, 0},
+		{"(*Alpha16).PixOffset", Method, 0},
+		{"(*Alpha16).RGBA64At", Method, 17},
+		{"(*Alpha16).Set", Method, 0},
+		{"(*Alpha16).SetAlpha16", Method, 0},
+		{"(*Alpha16).SetRGBA64", Method, 17},
+		{"(*Alpha16).SubImage", Method, 0},
+		{"(*CMYK).At", Method, 5},
+		{"(*CMYK).Bounds", Method, 5},
+		{"(*CMYK).CMYKAt", Method, 5},
+		{"(*CMYK).ColorModel", Method, 5},
+		{"(*CMYK).Opaque", Method, 5},
+		{"(*CMYK).PixOffset", Method, 5},
+		{"(*CMYK).RGBA64At", Method, 17},
+		{"(*CMYK).Set", Method, 5},
+		{"(*CMYK).SetCMYK", Method, 5},
+		{"(*CMYK).SetRGBA64", Method, 17},
+		{"(*CMYK).SubImage", Method, 5},
+		{"(*Gray).At", Method, 0},
+		{"(*Gray).Bounds", Method, 0},
+		{"(*Gray).ColorModel", Method, 0},
+		{"(*Gray).GrayAt", Method, 4},
+		{"(*Gray).Opaque", Method, 0},
+		{"(*Gray).PixOffset", Method, 0},
+		{"(*Gray).RGBA64At", Method, 17},
+		{"(*Gray).Set", Method, 0},
+		{"(*Gray).SetGray", Method, 0},
+		{"(*Gray).SetRGBA64", Method, 17},
+		{"(*Gray).SubImage", Method, 0},
+		{"(*Gray16).At", Method, 0},
+		{"(*Gray16).Bounds", Method, 0},
+		{"(*Gray16).ColorModel", Method, 0},
+		{"(*Gray16).Gray16At", Method, 4},
+		{"(*Gray16).Opaque", Method, 0},
+		{"(*Gray16).PixOffset", Method, 0},
+		{"(*Gray16).RGBA64At", Method, 17},
+		{"(*Gray16).Set", Method, 0},
+		{"(*Gray16).SetGray16", Method, 0},
+		{"(*Gray16).SetRGBA64", Method, 17},
+		{"(*Gray16).SubImage", Method, 0},
+		{"(*NRGBA).At", Method, 0},
+		{"(*NRGBA).Bounds", Method, 0},
+		{"(*NRGBA).ColorModel", Method, 0},
+		{"(*NRGBA).NRGBAAt", Method, 4},
+		{"(*NRGBA).Opaque", Method, 0},
+		{"(*NRGBA).PixOffset", Method, 0},
+		{"(*NRGBA).RGBA64At", Method, 17},
+		{"(*NRGBA).Set", Method, 0},
+		{"(*NRGBA).SetNRGBA", Method, 0},
+		{"(*NRGBA).SetRGBA64", Method, 17},
+		{"(*NRGBA).SubImage", Method, 0},
+		{"(*NRGBA64).At", Method, 0},
+		{"(*NRGBA64).Bounds", Method, 0},
+		{"(*NRGBA64).ColorModel", Method, 0},
+		{"(*NRGBA64).NRGBA64At", Method, 4},
+		{"(*NRGBA64).Opaque", Method, 0},
+		{"(*NRGBA64).PixOffset", Method, 0},
+		{"(*NRGBA64).RGBA64At", Method, 17},
+		{"(*NRGBA64).Set", Method, 0},
+		{"(*NRGBA64).SetNRGBA64", Method, 0},
+		{"(*NRGBA64).SetRGBA64", Method, 17},
+		{"(*NRGBA64).SubImage", Method, 0},
+		{"(*NYCbCrA).AOffset", Method, 6},
+		{"(*NYCbCrA).At", Method, 6},
+		{"(*NYCbCrA).Bounds", Method, 6},
+		{"(*NYCbCrA).COffset", Method, 6},
+		{"(*NYCbCrA).ColorModel", Method, 6},
+		{"(*NYCbCrA).NYCbCrAAt", Method, 6},
+		{"(*NYCbCrA).Opaque", Method, 6},
+		{"(*NYCbCrA).RGBA64At", Method, 17},
+		{"(*NYCbCrA).SubImage", Method, 6},
+		{"(*NYCbCrA).YCbCrAt", Method, 6},
+		{"(*NYCbCrA).YOffset", Method, 6},
+		{"(*Paletted).At", Method, 0},
+		{"(*Paletted).Bounds", Method, 0},
+		{"(*Paletted).ColorIndexAt", Method, 0},
+		{"(*Paletted).ColorModel", Method, 0},
+		{"(*Paletted).Opaque", Method, 0},
+		{"(*Paletted).PixOffset", Method, 0},
+		{"(*Paletted).RGBA64At", Method, 17},
+		{"(*Paletted).Set", Method, 0},
+		{"(*Paletted).SetColorIndex", Method, 0},
+		{"(*Paletted).SetRGBA64", Method, 17},
+		{"(*Paletted).SubImage", Method, 0},
+		{"(*RGBA).At", Method, 0},
+		{"(*RGBA).Bounds", Method, 0},
+		{"(*RGBA).ColorModel", Method, 0},
+		{"(*RGBA).Opaque", Method, 0},
+		{"(*RGBA).PixOffset", Method, 0},
+		{"(*RGBA).RGBA64At", Method, 17},
+		{"(*RGBA).RGBAAt", Method, 4},
+		{"(*RGBA).Set", Method, 0},
+		{"(*RGBA).SetRGBA", Method, 0},
+		{"(*RGBA).SetRGBA64", Method, 17},
+		{"(*RGBA).SubImage", Method, 0},
+		{"(*RGBA64).At", Method, 0},
+		{"(*RGBA64).Bounds", Method, 0},
+		{"(*RGBA64).ColorModel", Method, 0},
+		{"(*RGBA64).Opaque", Method, 0},
+		{"(*RGBA64).PixOffset", Method, 0},
+		{"(*RGBA64).RGBA64At", Method, 4},
+		{"(*RGBA64).Set", Method, 0},
+		{"(*RGBA64).SetRGBA64", Method, 0},
+		{"(*RGBA64).SubImage", Method, 0},
+		{"(*Uniform).At", Method, 0},
+		{"(*Uniform).Bounds", Method, 0},
+		{"(*Uniform).ColorModel", Method, 0},
+		{"(*Uniform).Convert", Method, 0},
+		{"(*Uniform).Opaque", Method, 0},
+		{"(*Uniform).RGBA", Method, 0},
+		{"(*Uniform).RGBA64At", Method, 17},
+		{"(*YCbCr).At", Method, 0},
+		{"(*YCbCr).Bounds", Method, 0},
+		{"(*YCbCr).COffset", Method, 0},
+		{"(*YCbCr).ColorModel", Method, 0},
+		{"(*YCbCr).Opaque", Method, 0},
+		{"(*YCbCr).RGBA64At", Method, 17},
+		{"(*YCbCr).SubImage", Method, 0},
+		{"(*YCbCr).YCbCrAt", Method, 4},
+		{"(*YCbCr).YOffset", Method, 0},
+		{"(Point).Add", Method, 0},
+		{"(Point).Div", Method, 0},
+		{"(Point).Eq", Method, 0},
+		{"(Point).In", Method, 0},
+		{"(Point).Mod", Method, 0},
+		{"(Point).Mul", Method, 0},
+		{"(Point).String", Method, 0},
+		{"(Point).Sub", Method, 0},
+		{"(Rectangle).Add", Method, 0},
+		{"(Rectangle).At", Method, 5},
+		{"(Rectangle).Bounds", Method, 5},
+		{"(Rectangle).Canon", Method, 0},
+		{"(Rectangle).ColorModel", Method, 5},
+		{"(Rectangle).Dx", Method, 0},
+		{"(Rectangle).Dy", Method, 0},
+		{"(Rectangle).Empty", Method, 0},
+		{"(Rectangle).Eq", Method, 0},
+		{"(Rectangle).In", Method, 0},
+		{"(Rectangle).Inset", Method, 0},
+		{"(Rectangle).Intersect", Method, 0},
+		{"(Rectangle).Overlaps", Method, 0},
+		{"(Rectangle).RGBA64At", Method, 17},
+		{"(Rectangle).Size", Method, 0},
+		{"(Rectangle).String", Method, 0},
+		{"(Rectangle).Sub", Method, 0},
+		{"(Rectangle).Union", Method, 0},
+		{"(YCbCrSubsampleRatio).String", Method, 0},
+		{"Alpha", Type, 0},
+		{"Alpha.Pix", Field, 0},
+		{"Alpha.Rect", Field, 0},
+		{"Alpha.Stride", Field, 0},
+		{"Alpha16", Type, 0},
+		{"Alpha16.Pix", Field, 0},
+		{"Alpha16.Rect", Field, 0},
+		{"Alpha16.Stride", Field, 0},
+		{"Black", Var, 0},
+		{"CMYK", Type, 5},
+		{"CMYK.Pix", Field, 5},
+		{"CMYK.Rect", Field, 5},
+		{"CMYK.Stride", Field, 5},
+		{"Config", Type, 0},
+		{"Config.ColorModel", Field, 0},
+		{"Config.Height", Field, 0},
+		{"Config.Width", Field, 0},
+		{"Decode", Func, 0},
+		{"DecodeConfig", Func, 0},
+		{"ErrFormat", Var, 0},
+		{"Gray", Type, 0},
+		{"Gray.Pix", Field, 0},
+		{"Gray.Rect", Field, 0},
+		{"Gray.Stride", Field, 0},
+		{"Gray16", Type, 0},
+		{"Gray16.Pix", Field, 0},
+		{"Gray16.Rect", Field, 0},
+		{"Gray16.Stride", Field, 0},
+		{"Image", Type, 0},
+		{"NRGBA", Type, 0},
+		{"NRGBA.Pix", Field, 0},
+		{"NRGBA.Rect", Field, 0},
+		{"NRGBA.Stride", Field, 0},
+		{"NRGBA64", Type, 0},
+		{"NRGBA64.Pix", Field, 0},
+		{"NRGBA64.Rect", Field, 0},
+		{"NRGBA64.Stride", Field, 0},
+		{"NYCbCrA", Type, 6},
+		{"NYCbCrA.A", Field, 6},
+		{"NYCbCrA.AStride", Field, 6},
+		{"NYCbCrA.YCbCr", Field, 6},
+		{"NewAlpha", Func, 0},
+		{"NewAlpha16", Func, 0},
+		{"NewCMYK", Func, 5},
+		{"NewGray", Func, 0},
+		{"NewGray16", Func, 0},
+		{"NewNRGBA", Func, 0},
+		{"NewNRGBA64", Func, 0},
+		{"NewNYCbCrA", Func, 6},
+		{"NewPaletted", Func, 0},
+		{"NewRGBA", Func, 0},
+		{"NewRGBA64", Func, 0},
+		{"NewUniform", Func, 0},
+		{"NewYCbCr", Func, 0},
+		{"Opaque", Var, 0},
+		{"Paletted", Type, 0},
+		{"Paletted.Palette", Field, 0},
+		{"Paletted.Pix", Field, 0},
+		{"Paletted.Rect", Field, 0},
+		{"Paletted.Stride", Field, 0},
+		{"PalettedImage", Type, 0},
+		{"Point", Type, 0},
+		{"Point.X", Field, 0},
+		{"Point.Y", Field, 0},
+		{"Pt", Func, 0},
+		{"RGBA", Type, 0},
+		{"RGBA.Pix", Field, 0},
+		{"RGBA.Rect", Field, 0},
+		{"RGBA.Stride", Field, 0},
+		{"RGBA64", Type, 0},
+		{"RGBA64.Pix", Field, 0},
+		{"RGBA64.Rect", Field, 0},
+		{"RGBA64.Stride", Field, 0},
+		{"RGBA64Image", Type, 17},
+		{"Rect", Func, 0},
+		{"Rectangle", Type, 0},
+		{"Rectangle.Max", Field, 0},
+		{"Rectangle.Min", Field, 0},
+		{"RegisterFormat", Func, 0},
+		{"Transparent", Var, 0},
+		{"Uniform", Type, 0},
+		{"Uniform.C", Field, 0},
+		{"White", Var, 0},
+		{"YCbCr", Type, 0},
+		{"YCbCr.CStride", Field, 0},
+		{"YCbCr.Cb", Field, 0},
+		{"YCbCr.Cr", Field, 0},
+		{"YCbCr.Rect", Field, 0},
+		{"YCbCr.SubsampleRatio", Field, 0},
+		{"YCbCr.Y", Field, 0},
+		{"YCbCr.YStride", Field, 0},
+		{"YCbCrSubsampleRatio", Type, 0},
+		{"YCbCrSubsampleRatio410", Const, 5},
+		{"YCbCrSubsampleRatio411", Const, 5},
+		{"YCbCrSubsampleRatio420", Const, 0},
+		{"YCbCrSubsampleRatio422", Const, 0},
+		{"YCbCrSubsampleRatio440", Const, 1},
+		{"YCbCrSubsampleRatio444", Const, 0},
+		{"ZP", Var, 0},
+		{"ZR", Var, 0},
 	},
 	"image/color": {
-		{"(Alpha).RGBA", Method, 0, ""},
-		{"(Alpha16).RGBA", Method, 0, ""},
-		{"(CMYK).RGBA", Method, 5, ""},
-		{"(Gray).RGBA", Method, 0, ""},
-		{"(Gray16).RGBA", Method, 0, ""},
-		{"(NRGBA).RGBA", Method, 0, ""},
-		{"(NRGBA64).RGBA", Method, 0, ""},
-		{"(NYCbCrA).RGBA", Method, 6, ""},
-		{"(Palette).Convert", Method, 0, ""},
-		{"(Palette).Index", Method, 0, ""},
-		{"(RGBA).RGBA", Method, 0, ""},
-		{"(RGBA64).RGBA", Method, 0, ""},
-		{"(YCbCr).RGBA", Method, 0, ""},
-		{"Alpha", Type, 0, ""},
-		{"Alpha.A", Field, 0, ""},
-		{"Alpha16", Type, 0, ""},
-		{"Alpha16.A", Field, 0, ""},
-		{"Alpha16Model", Var, 0, ""},
-		{"AlphaModel", Var, 0, ""},
-		{"Black", Var, 0, ""},
-		{"CMYK", Type, 5, ""},
-		{"CMYK.C", Field, 5, ""},
-		{"CMYK.K", Field, 5, ""},
-		{"CMYK.M", Field, 5, ""},
-		{"CMYK.Y", Field, 5, ""},
-		{"CMYKModel", Var, 5, ""},
-		{"CMYKToRGB", Func, 5, "func(c uint8, m uint8, y uint8, k uint8) (uint8, uint8, uint8)"},
-		{"Color", Type, 0, ""},
-		{"Gray", Type, 0, ""},
-		{"Gray.Y", Field, 0, ""},
-		{"Gray16", Type, 0, ""},
-		{"Gray16.Y", Field, 0, ""},
-		{"Gray16Model", Var, 0, ""},
-		{"GrayModel", Var, 0, ""},
-		{"Model", Type, 0, ""},
-		{"ModelFunc", Func, 0, "func(f func(Color) Color) Model"},
-		{"NRGBA", Type, 0, ""},
-		{"NRGBA.A", Field, 0, ""},
-		{"NRGBA.B", Field, 0, ""},
-		{"NRGBA.G", Field, 0, ""},
-		{"NRGBA.R", Field, 0, ""},
-		{"NRGBA64", Type, 0, ""},
-		{"NRGBA64.A", Field, 0, ""},
-		{"NRGBA64.B", Field, 0, ""},
-		{"NRGBA64.G", Field, 0, ""},
-		{"NRGBA64.R", Field, 0, ""},
-		{"NRGBA64Model", Var, 0, ""},
-		{"NRGBAModel", Var, 0, ""},
-		{"NYCbCrA", Type, 6, ""},
-		{"NYCbCrA.A", Field, 6, ""},
-		{"NYCbCrA.YCbCr", Field, 6, ""},
-		{"NYCbCrAModel", Var, 6, ""},
-		{"Opaque", Var, 0, ""},
-		{"Palette", Type, 0, ""},
-		{"RGBA", Type, 0, ""},
-		{"RGBA.A", Field, 0, ""},
-		{"RGBA.B", Field, 0, ""},
-		{"RGBA.G", Field, 0, ""},
-		{"RGBA.R", Field, 0, ""},
-		{"RGBA64", Type, 0, ""},
-		{"RGBA64.A", Field, 0, ""},
-		{"RGBA64.B", Field, 0, ""},
-		{"RGBA64.G", Field, 0, ""},
-		{"RGBA64.R", Field, 0, ""},
-		{"RGBA64Model", Var, 0, ""},
-		{"RGBAModel", Var, 0, ""},
-		{"RGBToCMYK", Func, 5, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8, uint8)"},
-		{"RGBToYCbCr", Func, 0, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8)"},
-		{"Transparent", Var, 0, ""},
-		{"White", Var, 0, ""},
-		{"YCbCr", Type, 0, ""},
-		{"YCbCr.Cb", Field, 0, ""},
-		{"YCbCr.Cr", Field, 0, ""},
-		{"YCbCr.Y", Field, 0, ""},
-		{"YCbCrModel", Var, 0, ""},
-		{"YCbCrToRGB", Func, 0, "func(y uint8, cb uint8, cr uint8) (uint8, uint8, uint8)"},
+		{"(Alpha).RGBA", Method, 0},
+		{"(Alpha16).RGBA", Method, 0},
+		{"(CMYK).RGBA", Method, 5},
+		{"(Gray).RGBA", Method, 0},
+		{"(Gray16).RGBA", Method, 0},
+		{"(NRGBA).RGBA", Method, 0},
+		{"(NRGBA64).RGBA", Method, 0},
+		{"(NYCbCrA).RGBA", Method, 6},
+		{"(Palette).Convert", Method, 0},
+		{"(Palette).Index", Method, 0},
+		{"(RGBA).RGBA", Method, 0},
+		{"(RGBA64).RGBA", Method, 0},
+		{"(YCbCr).RGBA", Method, 0},
+		{"Alpha", Type, 0},
+		{"Alpha.A", Field, 0},
+		{"Alpha16", Type, 0},
+		{"Alpha16.A", Field, 0},
+		{"Alpha16Model", Var, 0},
+		{"AlphaModel", Var, 0},
+		{"Black", Var, 0},
+		{"CMYK", Type, 5},
+		{"CMYK.C", Field, 5},
+		{"CMYK.K", Field, 5},
+		{"CMYK.M", Field, 5},
+		{"CMYK.Y", Field, 5},
+		{"CMYKModel", Var, 5},
+		{"CMYKToRGB", Func, 5},
+		{"Color", Type, 0},
+		{"Gray", Type, 0},
+		{"Gray.Y", Field, 0},
+		{"Gray16", Type, 0},
+		{"Gray16.Y", Field, 0},
+		{"Gray16Model", Var, 0},
+		{"GrayModel", Var, 0},
+		{"Model", Type, 0},
+		{"ModelFunc", Func, 0},
+		{"NRGBA", Type, 0},
+		{"NRGBA.A", Field, 0},
+		{"NRGBA.B", Field, 0},
+		{"NRGBA.G", Field, 0},
+		{"NRGBA.R", Field, 0},
+		{"NRGBA64", Type, 0},
+		{"NRGBA64.A", Field, 0},
+		{"NRGBA64.B", Field, 0},
+		{"NRGBA64.G", Field, 0},
+		{"NRGBA64.R", Field, 0},
+		{"NRGBA64Model", Var, 0},
+		{"NRGBAModel", Var, 0},
+		{"NYCbCrA", Type, 6},
+		{"NYCbCrA.A", Field, 6},
+		{"NYCbCrA.YCbCr", Field, 6},
+		{"NYCbCrAModel", Var, 6},
+		{"Opaque", Var, 0},
+		{"Palette", Type, 0},
+		{"RGBA", Type, 0},
+		{"RGBA.A", Field, 0},
+		{"RGBA.B", Field, 0},
+		{"RGBA.G", Field, 0},
+		{"RGBA.R", Field, 0},
+		{"RGBA64", Type, 0},
+		{"RGBA64.A", Field, 0},
+		{"RGBA64.B", Field, 0},
+		{"RGBA64.G", Field, 0},
+		{"RGBA64.R", Field, 0},
+		{"RGBA64Model", Var, 0},
+		{"RGBAModel", Var, 0},
+		{"RGBToCMYK", Func, 5},
+		{"RGBToYCbCr", Func, 0},
+		{"Transparent", Var, 0},
+		{"White", Var, 0},
+		{"YCbCr", Type, 0},
+		{"YCbCr.Cb", Field, 0},
+		{"YCbCr.Cr", Field, 0},
+		{"YCbCr.Y", Field, 0},
+		{"YCbCrModel", Var, 0},
+		{"YCbCrToRGB", Func, 0},
 	},
 	"image/color/palette": {
-		{"Plan9", Var, 2, ""},
-		{"WebSafe", Var, 2, ""},
+		{"Plan9", Var, 2},
+		{"WebSafe", Var, 2},
 	},
 	"image/draw": {
-		{"(Op).Draw", Method, 2, ""},
-		{"Draw", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)"},
-		{"DrawMask", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)"},
-		{"Drawer", Type, 2, ""},
-		{"FloydSteinberg", Var, 2, ""},
-		{"Image", Type, 0, ""},
-		{"Op", Type, 0, ""},
-		{"Over", Const, 0, ""},
-		{"Quantizer", Type, 2, ""},
-		{"RGBA64Image", Type, 17, ""},
-		{"Src", Const, 0, ""},
+		{"(Op).Draw", Method, 2},
+		{"Draw", Func, 0},
+		{"DrawMask", Func, 0},
+		{"Drawer", Type, 2},
+		{"FloydSteinberg", Var, 2},
+		{"Image", Type, 0},
+		{"Op", Type, 0},
+		{"Over", Const, 0},
+		{"Quantizer", Type, 2},
+		{"RGBA64Image", Type, 17},
+		{"Src", Const, 0},
 	},
 	"image/gif": {
-		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
-		{"DecodeAll", Func, 0, "func(r io.Reader) (*GIF, error)"},
-		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
-		{"DisposalBackground", Const, 5, ""},
-		{"DisposalNone", Const, 5, ""},
-		{"DisposalPrevious", Const, 5, ""},
-		{"Encode", Func, 2, "func(w io.Writer, m image.Image, o *Options) error"},
-		{"EncodeAll", Func, 2, "func(w io.Writer, g *GIF) error"},
-		{"GIF", Type, 0, ""},
-		{"GIF.BackgroundIndex", Field, 5, ""},
-		{"GIF.Config", Field, 5, ""},
-		{"GIF.Delay", Field, 0, ""},
-		{"GIF.Disposal", Field, 5, ""},
-		{"GIF.Image", Field, 0, ""},
-		{"GIF.LoopCount", Field, 0, ""},
-		{"Options", Type, 2, ""},
-		{"Options.Drawer", Field, 2, ""},
-		{"Options.NumColors", Field, 2, ""},
-		{"Options.Quantizer", Field, 2, ""},
+		{"Decode", Func, 0},
+		{"DecodeAll", Func, 0},
+		{"DecodeConfig", Func, 0},
+		{"DisposalBackground", Const, 5},
+		{"DisposalNone", Const, 5},
+		{"DisposalPrevious", Const, 5},
+		{"Encode", Func, 2},
+		{"EncodeAll", Func, 2},
+		{"GIF", Type, 0},
+		{"GIF.BackgroundIndex", Field, 5},
+		{"GIF.Config", Field, 5},
+		{"GIF.Delay", Field, 0},
+		{"GIF.Disposal", Field, 5},
+		{"GIF.Image", Field, 0},
+		{"GIF.LoopCount", Field, 0},
+		{"Options", Type, 2},
+		{"Options.Drawer", Field, 2},
+		{"Options.NumColors", Field, 2},
+		{"Options.Quantizer", Field, 2},
 	},
 	"image/jpeg": {
-		{"(FormatError).Error", Method, 0, ""},
-		{"(UnsupportedError).Error", Method, 0, ""},
-		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
-		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
-		{"DefaultQuality", Const, 0, ""},
-		{"Encode", Func, 0, "func(w io.Writer, m image.Image, o *Options) error"},
-		{"FormatError", Type, 0, ""},
-		{"Options", Type, 0, ""},
-		{"Options.Quality", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"UnsupportedError", Type, 0, ""},
+		{"(FormatError).Error", Method, 0},
+		{"(UnsupportedError).Error", Method, 0},
+		{"Decode", Func, 0},
+		{"DecodeConfig", Func, 0},
+		{"DefaultQuality", Const, 0},
+		{"Encode", Func, 0},
+		{"FormatError", Type, 0},
+		{"Options", Type, 0},
+		{"Options.Quality", Field, 0},
+		{"Reader", Type, 0},
+		{"UnsupportedError", Type, 0},
 	},
 	"image/png": {
-		{"(*Encoder).Encode", Method, 4, ""},
-		{"(FormatError).Error", Method, 0, ""},
-		{"(UnsupportedError).Error", Method, 0, ""},
-		{"BestCompression", Const, 4, ""},
-		{"BestSpeed", Const, 4, ""},
-		{"CompressionLevel", Type, 4, ""},
-		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
-		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
-		{"DefaultCompression", Const, 4, ""},
-		{"Encode", Func, 0, "func(w io.Writer, m image.Image) error"},
-		{"Encoder", Type, 4, ""},
-		{"Encoder.BufferPool", Field, 9, ""},
-		{"Encoder.CompressionLevel", Field, 4, ""},
-		{"EncoderBuffer", Type, 9, ""},
-		{"EncoderBufferPool", Type, 9, ""},
-		{"FormatError", Type, 0, ""},
-		{"NoCompression", Const, 4, ""},
-		{"UnsupportedError", Type, 0, ""},
+		{"(*Encoder).Encode", Method, 4},
+		{"(FormatError).Error", Method, 0},
+		{"(UnsupportedError).Error", Method, 0},
+		{"BestCompression", Const, 4},
+		{"BestSpeed", Const, 4},
+		{"CompressionLevel", Type, 4},
+		{"Decode", Func, 0},
+		{"DecodeConfig", Func, 0},
+		{"DefaultCompression", Const, 4},
+		{"Encode", Func, 0},
+		{"Encoder", Type, 4},
+		{"Encoder.BufferPool", Field, 9},
+		{"Encoder.CompressionLevel", Field, 4},
+		{"EncoderBuffer", Type, 9},
+		{"EncoderBufferPool", Type, 9},
+		{"FormatError", Type, 0},
+		{"NoCompression", Const, 4},
+		{"UnsupportedError", Type, 0},
 	},
 	"index/suffixarray": {
-		{"(*Index).Bytes", Method, 0, ""},
-		{"(*Index).FindAllIndex", Method, 0, ""},
-		{"(*Index).Lookup", Method, 0, ""},
-		{"(*Index).Read", Method, 0, ""},
-		{"(*Index).Write", Method, 0, ""},
-		{"Index", Type, 0, ""},
-		{"New", Func, 0, "func(data []byte) *Index"},
+		{"(*Index).Bytes", Method, 0},
+		{"(*Index).FindAllIndex", Method, 0},
+		{"(*Index).Lookup", Method, 0},
+		{"(*Index).Read", Method, 0},
+		{"(*Index).Write", Method, 0},
+		{"Index", Type, 0},
+		{"New", Func, 0},
 	},
 	"io": {
-		{"(*LimitedReader).Read", Method, 0, ""},
-		{"(*OffsetWriter).Seek", Method, 20, ""},
-		{"(*OffsetWriter).Write", Method, 20, ""},
-		{"(*OffsetWriter).WriteAt", Method, 20, ""},
-		{"(*PipeReader).Close", Method, 0, ""},
-		{"(*PipeReader).CloseWithError", Method, 0, ""},
-		{"(*PipeReader).Read", Method, 0, ""},
-		{"(*PipeWriter).Close", Method, 0, ""},
-		{"(*PipeWriter).CloseWithError", Method, 0, ""},
-		{"(*PipeWriter).Write", Method, 0, ""},
-		{"(*SectionReader).Outer", Method, 22, ""},
-		{"(*SectionReader).Read", Method, 0, ""},
-		{"(*SectionReader).ReadAt", Method, 0, ""},
-		{"(*SectionReader).Seek", Method, 0, ""},
-		{"(*SectionReader).Size", Method, 0, ""},
-		{"ByteReader", Type, 0, ""},
-		{"ByteScanner", Type, 0, ""},
-		{"ByteWriter", Type, 1, ""},
-		{"Closer", Type, 0, ""},
-		{"Copy", Func, 0, "func(dst Writer, src Reader) (written int64, err error)"},
-		{"CopyBuffer", Func, 5, "func(dst Writer, src Reader, buf []byte) (written int64, err error)"},
-		{"CopyN", Func, 0, "func(dst Writer, src Reader, n int64) (written int64, err error)"},
-		{"Discard", Var, 16, ""},
-		{"EOF", Var, 0, ""},
-		{"ErrClosedPipe", Var, 0, ""},
-		{"ErrNoProgress", Var, 1, ""},
-		{"ErrShortBuffer", Var, 0, ""},
-		{"ErrShortWrite", Var, 0, ""},
-		{"ErrUnexpectedEOF", Var, 0, ""},
-		{"LimitReader", Func, 0, "func(r Reader, n int64) Reader"},
-		{"LimitedReader", Type, 0, ""},
-		{"LimitedReader.N", Field, 0, ""},
-		{"LimitedReader.R", Field, 0, ""},
-		{"MultiReader", Func, 0, "func(readers ...Reader) Reader"},
-		{"MultiWriter", Func, 0, "func(writers ...Writer) Writer"},
-		{"NewOffsetWriter", Func, 20, "func(w WriterAt, off int64) *OffsetWriter"},
-		{"NewSectionReader", Func, 0, "func(r ReaderAt, off int64, n int64) *SectionReader"},
-		{"NopCloser", Func, 16, "func(r Reader) ReadCloser"},
-		{"OffsetWriter", Type, 20, ""},
-		{"Pipe", Func, 0, "func() (*PipeReader, *PipeWriter)"},
-		{"PipeReader", Type, 0, ""},
-		{"PipeWriter", Type, 0, ""},
-		{"ReadAll", Func, 16, "func(r Reader) ([]byte, error)"},
-		{"ReadAtLeast", Func, 0, "func(r Reader, buf []byte, min int) (n int, err error)"},
-		{"ReadCloser", Type, 0, ""},
-		{"ReadFull", Func, 0, "func(r Reader, buf []byte) (n int, err error)"},
-		{"ReadSeekCloser", Type, 16, ""},
-		{"ReadSeeker", Type, 0, ""},
-		{"ReadWriteCloser", Type, 0, ""},
-		{"ReadWriteSeeker", Type, 0, ""},
-		{"ReadWriter", Type, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"ReaderAt", Type, 0, ""},
-		{"ReaderFrom", Type, 0, ""},
-		{"RuneReader", Type, 0, ""},
-		{"RuneScanner", Type, 0, ""},
-		{"SectionReader", Type, 0, ""},
-		{"SeekCurrent", Const, 7, ""},
-		{"SeekEnd", Const, 7, ""},
-		{"SeekStart", Const, 7, ""},
-		{"Seeker", Type, 0, ""},
-		{"StringWriter", Type, 12, ""},
-		{"TeeReader", Func, 0, "func(r Reader, w Writer) Reader"},
-		{"WriteCloser", Type, 0, ""},
-		{"WriteSeeker", Type, 0, ""},
-		{"WriteString", Func, 0, "func(w Writer, s string) (n int, err error)"},
-		{"Writer", Type, 0, ""},
-		{"WriterAt", Type, 0, ""},
-		{"WriterTo", Type, 0, ""},
+		{"(*LimitedReader).Read", Method, 0},
+		{"(*OffsetWriter).Seek", Method, 20},
+		{"(*OffsetWriter).Write", Method, 20},
+		{"(*OffsetWriter).WriteAt", Method, 20},
+		{"(*PipeReader).Close", Method, 0},
+		{"(*PipeReader).CloseWithError", Method, 0},
+		{"(*PipeReader).Read", Method, 0},
+		{"(*PipeWriter).Close", Method, 0},
+		{"(*PipeWriter).CloseWithError", Method, 0},
+		{"(*PipeWriter).Write", Method, 0},
+		{"(*SectionReader).Outer", Method, 22},
+		{"(*SectionReader).Read", Method, 0},
+		{"(*SectionReader).ReadAt", Method, 0},
+		{"(*SectionReader).Seek", Method, 0},
+		{"(*SectionReader).Size", Method, 0},
+		{"ByteReader", Type, 0},
+		{"ByteScanner", Type, 0},
+		{"ByteWriter", Type, 1},
+		{"Closer", Type, 0},
+		{"Copy", Func, 0},
+		{"CopyBuffer", Func, 5},
+		{"CopyN", Func, 0},
+		{"Discard", Var, 16},
+		{"EOF", Var, 0},
+		{"ErrClosedPipe", Var, 0},
+		{"ErrNoProgress", Var, 1},
+		{"ErrShortBuffer", Var, 0},
+		{"ErrShortWrite", Var, 0},
+		{"ErrUnexpectedEOF", Var, 0},
+		{"LimitReader", Func, 0},
+		{"LimitedReader", Type, 0},
+		{"LimitedReader.N", Field, 0},
+		{"LimitedReader.R", Field, 0},
+		{"MultiReader", Func, 0},
+		{"MultiWriter", Func, 0},
+		{"NewOffsetWriter", Func, 20},
+		{"NewSectionReader", Func, 0},
+		{"NopCloser", Func, 16},
+		{"OffsetWriter", Type, 20},
+		{"Pipe", Func, 0},
+		{"PipeReader", Type, 0},
+		{"PipeWriter", Type, 0},
+		{"ReadAll", Func, 16},
+		{"ReadAtLeast", Func, 0},
+		{"ReadCloser", Type, 0},
+		{"ReadFull", Func, 0},
+		{"ReadSeekCloser", Type, 16},
+		{"ReadSeeker", Type, 0},
+		{"ReadWriteCloser", Type, 0},
+		{"ReadWriteSeeker", Type, 0},
+		{"ReadWriter", Type, 0},
+		{"Reader", Type, 0},
+		{"ReaderAt", Type, 0},
+		{"ReaderFrom", Type, 0},
+		{"RuneReader", Type, 0},
+		{"RuneScanner", Type, 0},
+		{"SectionReader", Type, 0},
+		{"SeekCurrent", Const, 7},
+		{"SeekEnd", Const, 7},
+		{"SeekStart", Const, 7},
+		{"Seeker", Type, 0},
+		{"StringWriter", Type, 12},
+		{"TeeReader", Func, 0},
+		{"WriteCloser", Type, 0},
+		{"WriteSeeker", Type, 0},
+		{"WriteString", Func, 0},
+		{"Writer", Type, 0},
+		{"WriterAt", Type, 0},
+		{"WriterTo", Type, 0},
 	},
 	"io/fs": {
-		{"(*PathError).Error", Method, 16, ""},
-		{"(*PathError).Timeout", Method, 16, ""},
-		{"(*PathError).Unwrap", Method, 16, ""},
-		{"(FileMode).IsDir", Method, 16, ""},
-		{"(FileMode).IsRegular", Method, 16, ""},
-		{"(FileMode).Perm", Method, 16, ""},
-		{"(FileMode).String", Method, 16, ""},
-		{"(FileMode).Type", Method, 16, ""},
-		{"DirEntry", Type, 16, ""},
-		{"ErrClosed", Var, 16, ""},
-		{"ErrExist", Var, 16, ""},
-		{"ErrInvalid", Var, 16, ""},
-		{"ErrNotExist", Var, 16, ""},
-		{"ErrPermission", Var, 16, ""},
-		{"FS", Type, 16, ""},
-		{"File", Type, 16, ""},
-		{"FileInfo", Type, 16, ""},
-		{"FileInfoToDirEntry", Func, 17, "func(info FileInfo) DirEntry"},
-		{"FileMode", Type, 16, ""},
-		{"FormatDirEntry", Func, 21, "func(dir DirEntry) string"},
-		{"FormatFileInfo", Func, 21, "func(info FileInfo) string"},
-		{"Glob", Func, 16, "func(fsys FS, pattern string) (matches []string, err error)"},
-		{"GlobFS", Type, 16, ""},
-		{"Lstat", Func, 25, ""},
-		{"ModeAppend", Const, 16, ""},
-		{"ModeCharDevice", Const, 16, ""},
-		{"ModeDevice", Const, 16, ""},
-		{"ModeDir", Const, 16, ""},
-		{"ModeExclusive", Const, 16, ""},
-		{"ModeIrregular", Const, 16, ""},
-		{"ModeNamedPipe", Const, 16, ""},
-		{"ModePerm", Const, 16, ""},
-		{"ModeSetgid", Const, 16, ""},
-		{"ModeSetuid", Const, 16, ""},
-		{"ModeSocket", Const, 16, ""},
-		{"ModeSticky", Const, 16, ""},
-		{"ModeSymlink", Const, 16, ""},
-		{"ModeTemporary", Const, 16, ""},
-		{"ModeType", Const, 16, ""},
-		{"PathError", Type, 16, ""},
-		{"PathError.Err", Field, 16, ""},
-		{"PathError.Op", Field, 16, ""},
-		{"PathError.Path", Field, 16, ""},
-		{"ReadDir", Func, 16, "func(fsys FS, name string) ([]DirEntry, error)"},
-		{"ReadDirFS", Type, 16, ""},
-		{"ReadDirFile", Type, 16, ""},
-		{"ReadFile", Func, 16, "func(fsys FS, name string) ([]byte, error)"},
-		{"ReadFileFS", Type, 16, ""},
-		{"ReadLink", Func, 25, ""},
-		{"ReadLinkFS", Type, 25, ""},
-		{"SkipAll", Var, 20, ""},
-		{"SkipDir", Var, 16, ""},
-		{"Stat", Func, 16, "func(fsys FS, name string) (FileInfo, error)"},
-		{"StatFS", Type, 16, ""},
-		{"Sub", Func, 16, "func(fsys FS, dir string) (FS, error)"},
-		{"SubFS", Type, 16, ""},
-		{"ValidPath", Func, 16, "func(name string) bool"},
-		{"WalkDir", Func, 16, "func(fsys FS, root string, fn WalkDirFunc) error"},
-		{"WalkDirFunc", Type, 16, ""},
+		{"(*PathError).Error", Method, 16},
+		{"(*PathError).Timeout", Method, 16},
+		{"(*PathError).Unwrap", Method, 16},
+		{"(FileMode).IsDir", Method, 16},
+		{"(FileMode).IsRegular", Method, 16},
+		{"(FileMode).Perm", Method, 16},
+		{"(FileMode).String", Method, 16},
+		{"(FileMode).Type", Method, 16},
+		{"DirEntry", Type, 16},
+		{"ErrClosed", Var, 16},
+		{"ErrExist", Var, 16},
+		{"ErrInvalid", Var, 16},
+		{"ErrNotExist", Var, 16},
+		{"ErrPermission", Var, 16},
+		{"FS", Type, 16},
+		{"File", Type, 16},
+		{"FileInfo", Type, 16},
+		{"FileInfoToDirEntry", Func, 17},
+		{"FileMode", Type, 16},
+		{"FormatDirEntry", Func, 21},
+		{"FormatFileInfo", Func, 21},
+		{"Glob", Func, 16},
+		{"GlobFS", Type, 16},
+		{"Lstat", Func, 25},
+		{"ModeAppend", Const, 16},
+		{"ModeCharDevice", Const, 16},
+		{"ModeDevice", Const, 16},
+		{"ModeDir", Const, 16},
+		{"ModeExclusive", Const, 16},
+		{"ModeIrregular", Const, 16},
+		{"ModeNamedPipe", Const, 16},
+		{"ModePerm", Const, 16},
+		{"ModeSetgid", Const, 16},
+		{"ModeSetuid", Const, 16},
+		{"ModeSocket", Const, 16},
+		{"ModeSticky", Const, 16},
+		{"ModeSymlink", Const, 16},
+		{"ModeTemporary", Const, 16},
+		{"ModeType", Const, 16},
+		{"PathError", Type, 16},
+		{"PathError.Err", Field, 16},
+		{"PathError.Op", Field, 16},
+		{"PathError.Path", Field, 16},
+		{"ReadDir", Func, 16},
+		{"ReadDirFS", Type, 16},
+		{"ReadDirFile", Type, 16},
+		{"ReadFile", Func, 16},
+		{"ReadFileFS", Type, 16},
+		{"ReadLink", Func, 25},
+		{"ReadLinkFS", Type, 25},
+		{"SkipAll", Var, 20},
+		{"SkipDir", Var, 16},
+		{"Stat", Func, 16},
+		{"StatFS", Type, 16},
+		{"Sub", Func, 16},
+		{"SubFS", Type, 16},
+		{"ValidPath", Func, 16},
+		{"WalkDir", Func, 16},
+		{"WalkDirFunc", Type, 16},
 	},
 	"io/ioutil": {
-		{"Discard", Var, 0, ""},
-		{"NopCloser", Func, 0, "func(r io.Reader) io.ReadCloser"},
-		{"ReadAll", Func, 0, "func(r io.Reader) ([]byte, error)"},
-		{"ReadDir", Func, 0, "func(dirname string) ([]fs.FileInfo, error)"},
-		{"ReadFile", Func, 0, "func(filename string) ([]byte, error)"},
-		{"TempDir", Func, 0, "func(dir string, pattern string) (name string, err error)"},
-		{"TempFile", Func, 0, "func(dir string, pattern string) (f *os.File, err error)"},
-		{"WriteFile", Func, 0, "func(filename string, data []byte, perm fs.FileMode) error"},
+		{"Discard", Var, 0},
+		{"NopCloser", Func, 0},
+		{"ReadAll", Func, 0},
+		{"ReadDir", Func, 0},
+		{"ReadFile", Func, 0},
+		{"TempDir", Func, 0},
+		{"TempFile", Func, 0},
+		{"WriteFile", Func, 0},
 	},
 	"iter": {
-		{"Pull", Func, 23, "func[V any](seq Seq[V]) (next func() (V, bool), stop func())"},
-		{"Pull2", Func, 23, "func[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func())"},
-		{"Seq", Type, 23, ""},
-		{"Seq2", Type, 23, ""},
+		{"Pull", Func, 23},
+		{"Pull2", Func, 23},
+		{"Seq", Type, 23},
+		{"Seq2", Type, 23},
 	},
 	"log": {
-		{"(*Logger).Fatal", Method, 0, ""},
-		{"(*Logger).Fatalf", Method, 0, ""},
-		{"(*Logger).Fatalln", Method, 0, ""},
-		{"(*Logger).Flags", Method, 0, ""},
-		{"(*Logger).Output", Method, 0, ""},
-		{"(*Logger).Panic", Method, 0, ""},
-		{"(*Logger).Panicf", Method, 0, ""},
-		{"(*Logger).Panicln", Method, 0, ""},
-		{"(*Logger).Prefix", Method, 0, ""},
-		{"(*Logger).Print", Method, 0, ""},
-		{"(*Logger).Printf", Method, 0, ""},
-		{"(*Logger).Println", Method, 0, ""},
-		{"(*Logger).SetFlags", Method, 0, ""},
-		{"(*Logger).SetOutput", Method, 5, ""},
-		{"(*Logger).SetPrefix", Method, 0, ""},
-		{"(*Logger).Writer", Method, 12, ""},
-		{"Default", Func, 16, "func() *Logger"},
-		{"Fatal", Func, 0, "func(v ...any)"},
-		{"Fatalf", Func, 0, "func(format string, v ...any)"},
-		{"Fatalln", Func, 0, "func(v ...any)"},
-		{"Flags", Func, 0, "func() int"},
-		{"LUTC", Const, 5, ""},
-		{"Ldate", Const, 0, ""},
-		{"Llongfile", Const, 0, ""},
-		{"Lmicroseconds", Const, 0, ""},
-		{"Lmsgprefix", Const, 14, ""},
-		{"Logger", Type, 0, ""},
-		{"Lshortfile", Const, 0, ""},
-		{"LstdFlags", Const, 0, ""},
-		{"Ltime", Const, 0, ""},
-		{"New", Func, 0, "func(out io.Writer, prefix string, flag int) *Logger"},
-		{"Output", Func, 5, "func(calldepth int, s string) error"},
-		{"Panic", Func, 0, "func(v ...any)"},
-		{"Panicf", Func, 0, "func(format string, v ...any)"},
-		{"Panicln", Func, 0, "func(v ...any)"},
-		{"Prefix", Func, 0, "func() string"},
-		{"Print", Func, 0, "func(v ...any)"},
-		{"Printf", Func, 0, "func(format string, v ...any)"},
-		{"Println", Func, 0, "func(v ...any)"},
-		{"SetFlags", Func, 0, "func(flag int)"},
-		{"SetOutput", Func, 0, "func(w io.Writer)"},
-		{"SetPrefix", Func, 0, "func(prefix string)"},
-		{"Writer", Func, 13, "func() io.Writer"},
+		{"(*Logger).Fatal", Method, 0},
+		{"(*Logger).Fatalf", Method, 0},
+		{"(*Logger).Fatalln", Method, 0},
+		{"(*Logger).Flags", Method, 0},
+		{"(*Logger).Output", Method, 0},
+		{"(*Logger).Panic", Method, 0},
+		{"(*Logger).Panicf", Method, 0},
+		{"(*Logger).Panicln", Method, 0},
+		{"(*Logger).Prefix", Method, 0},
+		{"(*Logger).Print", Method, 0},
+		{"(*Logger).Printf", Method, 0},
+		{"(*Logger).Println", Method, 0},
+		{"(*Logger).SetFlags", Method, 0},
+		{"(*Logger).SetOutput", Method, 5},
+		{"(*Logger).SetPrefix", Method, 0},
+		{"(*Logger).Writer", Method, 12},
+		{"Default", Func, 16},
+		{"Fatal", Func, 0},
+		{"Fatalf", Func, 0},
+		{"Fatalln", Func, 0},
+		{"Flags", Func, 0},
+		{"LUTC", Const, 5},
+		{"Ldate", Const, 0},
+		{"Llongfile", Const, 0},
+		{"Lmicroseconds", Const, 0},
+		{"Lmsgprefix", Const, 14},
+		{"Logger", Type, 0},
+		{"Lshortfile", Const, 0},
+		{"LstdFlags", Const, 0},
+		{"Ltime", Const, 0},
+		{"New", Func, 0},
+		{"Output", Func, 5},
+		{"Panic", Func, 0},
+		{"Panicf", Func, 0},
+		{"Panicln", Func, 0},
+		{"Prefix", Func, 0},
+		{"Print", Func, 0},
+		{"Printf", Func, 0},
+		{"Println", Func, 0},
+		{"SetFlags", Func, 0},
+		{"SetOutput", Func, 0},
+		{"SetPrefix", Func, 0},
+		{"Writer", Func, 13},
 	},
 	"log/slog": {
-		{"(*JSONHandler).Enabled", Method, 21, ""},
-		{"(*JSONHandler).Handle", Method, 21, ""},
-		{"(*JSONHandler).WithAttrs", Method, 21, ""},
-		{"(*JSONHandler).WithGroup", Method, 21, ""},
-		{"(*Level).UnmarshalJSON", Method, 21, ""},
-		{"(*Level).UnmarshalText", Method, 21, ""},
-		{"(*LevelVar).AppendText", Method, 24, ""},
-		{"(*LevelVar).Level", Method, 21, ""},
-		{"(*LevelVar).MarshalText", Method, 21, ""},
-		{"(*LevelVar).Set", Method, 21, ""},
-		{"(*LevelVar).String", Method, 21, ""},
-		{"(*LevelVar).UnmarshalText", Method, 21, ""},
-		{"(*Logger).Debug", Method, 21, ""},
-		{"(*Logger).DebugContext", Method, 21, ""},
-		{"(*Logger).Enabled", Method, 21, ""},
-		{"(*Logger).Error", Method, 21, ""},
-		{"(*Logger).ErrorContext", Method, 21, ""},
-		{"(*Logger).Handler", Method, 21, ""},
-		{"(*Logger).Info", Method, 21, ""},
-		{"(*Logger).InfoContext", Method, 21, ""},
-		{"(*Logger).Log", Method, 21, ""},
-		{"(*Logger).LogAttrs", Method, 21, ""},
-		{"(*Logger).Warn", Method, 21, ""},
-		{"(*Logger).WarnContext", Method, 21, ""},
-		{"(*Logger).With", Method, 21, ""},
-		{"(*Logger).WithGroup", Method, 21, ""},
-		{"(*Record).Add", Method, 21, ""},
-		{"(*Record).AddAttrs", Method, 21, ""},
-		{"(*TextHandler).Enabled", Method, 21, ""},
-		{"(*TextHandler).Handle", Method, 21, ""},
-		{"(*TextHandler).WithAttrs", Method, 21, ""},
-		{"(*TextHandler).WithGroup", Method, 21, ""},
-		{"(Attr).Equal", Method, 21, ""},
-		{"(Attr).String", Method, 21, ""},
-		{"(Kind).String", Method, 21, ""},
-		{"(Level).AppendText", Method, 24, ""},
-		{"(Level).Level", Method, 21, ""},
-		{"(Level).MarshalJSON", Method, 21, ""},
-		{"(Level).MarshalText", Method, 21, ""},
-		{"(Level).String", Method, 21, ""},
-		{"(Record).Attrs", Method, 21, ""},
-		{"(Record).Clone", Method, 21, ""},
-		{"(Record).NumAttrs", Method, 21, ""},
-		{"(Value).Any", Method, 21, ""},
-		{"(Value).Bool", Method, 21, ""},
-		{"(Value).Duration", Method, 21, ""},
-		{"(Value).Equal", Method, 21, ""},
-		{"(Value).Float64", Method, 21, ""},
-		{"(Value).Group", Method, 21, ""},
-		{"(Value).Int64", Method, 21, ""},
-		{"(Value).Kind", Method, 21, ""},
-		{"(Value).LogValuer", Method, 21, ""},
-		{"(Value).Resolve", Method, 21, ""},
-		{"(Value).String", Method, 21, ""},
-		{"(Value).Time", Method, 21, ""},
-		{"(Value).Uint64", Method, 21, ""},
-		{"Any", Func, 21, "func(key string, value any) Attr"},
-		{"AnyValue", Func, 21, "func(v any) Value"},
-		{"Attr", Type, 21, ""},
-		{"Attr.Key", Field, 21, ""},
-		{"Attr.Value", Field, 21, ""},
-		{"Bool", Func, 21, "func(key string, v bool) Attr"},
-		{"BoolValue", Func, 21, "func(v bool) Value"},
-		{"Debug", Func, 21, "func(msg string, args ...any)"},
-		{"DebugContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
-		{"Default", Func, 21, "func() *Logger"},
-		{"DiscardHandler", Var, 24, ""},
-		{"Duration", Func, 21, "func(key string, v time.Duration) Attr"},
-		{"DurationValue", Func, 21, "func(v time.Duration) Value"},
-		{"Error", Func, 21, "func(msg string, args ...any)"},
-		{"ErrorContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
-		{"Float64", Func, 21, "func(key string, v float64) Attr"},
-		{"Float64Value", Func, 21, "func(v float64) Value"},
-		{"Group", Func, 21, "func(key string, args ...any) Attr"},
-		{"GroupValue", Func, 21, "func(as ...Attr) Value"},
-		{"Handler", Type, 21, ""},
-		{"HandlerOptions", Type, 21, ""},
-		{"HandlerOptions.AddSource", Field, 21, ""},
-		{"HandlerOptions.Level", Field, 21, ""},
-		{"HandlerOptions.ReplaceAttr", Field, 21, ""},
-		{"Info", Func, 21, "func(msg string, args ...any)"},
-		{"InfoContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
-		{"Int", Func, 21, "func(key string, value int) Attr"},
-		{"Int64", Func, 21, "func(key string, value int64) Attr"},
-		{"Int64Value", Func, 21, "func(v int64) Value"},
-		{"IntValue", Func, 21, "func(v int) Value"},
-		{"JSONHandler", Type, 21, ""},
-		{"Kind", Type, 21, ""},
-		{"KindAny", Const, 21, ""},
-		{"KindBool", Const, 21, ""},
-		{"KindDuration", Const, 21, ""},
-		{"KindFloat64", Const, 21, ""},
-		{"KindGroup", Const, 21, ""},
-		{"KindInt64", Const, 21, ""},
-		{"KindLogValuer", Const, 21, ""},
-		{"KindString", Const, 21, ""},
-		{"KindTime", Const, 21, ""},
-		{"KindUint64", Const, 21, ""},
-		{"Level", Type, 21, ""},
-		{"LevelDebug", Const, 21, ""},
-		{"LevelError", Const, 21, ""},
-		{"LevelInfo", Const, 21, ""},
-		{"LevelKey", Const, 21, ""},
-		{"LevelVar", Type, 21, ""},
-		{"LevelWarn", Const, 21, ""},
-		{"Leveler", Type, 21, ""},
-		{"Log", Func, 21, "func(ctx context.Context, level Level, msg string, args ...any)"},
-		{"LogAttrs", Func, 21, "func(ctx context.Context, level Level, msg string, attrs ...Attr)"},
-		{"LogValuer", Type, 21, ""},
-		{"Logger", Type, 21, ""},
-		{"MessageKey", Const, 21, ""},
-		{"New", Func, 21, "func(h Handler) *Logger"},
-		{"NewJSONHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *JSONHandler"},
-		{"NewLogLogger", Func, 21, "func(h Handler, level Level) *log.Logger"},
-		{"NewRecord", Func, 21, "func(t time.Time, level Level, msg string, pc uintptr) Record"},
-		{"NewTextHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *TextHandler"},
-		{"Record", Type, 21, ""},
-		{"Record.Level", Field, 21, ""},
-		{"Record.Message", Field, 21, ""},
-		{"Record.PC", Field, 21, ""},
-		{"Record.Time", Field, 21, ""},
-		{"SetDefault", Func, 21, "func(l *Logger)"},
-		{"SetLogLoggerLevel", Func, 22, "func(level Level) (oldLevel Level)"},
-		{"Source", Type, 21, ""},
-		{"Source.File", Field, 21, ""},
-		{"Source.Function", Field, 21, ""},
-		{"Source.Line", Field, 21, ""},
-		{"SourceKey", Const, 21, ""},
-		{"String", Func, 21, "func(key string, value string) Attr"},
-		{"StringValue", Func, 21, "func(value string) Value"},
-		{"TextHandler", Type, 21, ""},
-		{"Time", Func, 21, "func(key string, v time.Time) Attr"},
-		{"TimeKey", Const, 21, ""},
-		{"TimeValue", Func, 21, "func(v time.Time) Value"},
-		{"Uint64", Func, 21, "func(key string, v uint64) Attr"},
-		{"Uint64Value", Func, 21, "func(v uint64) Value"},
-		{"Value", Type, 21, ""},
-		{"Warn", Func, 21, "func(msg string, args ...any)"},
-		{"WarnContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
-		{"With", Func, 21, "func(args ...any) *Logger"},
+		{"(*JSONHandler).Enabled", Method, 21},
+		{"(*JSONHandler).Handle", Method, 21},
+		{"(*JSONHandler).WithAttrs", Method, 21},
+		{"(*JSONHandler).WithGroup", Method, 21},
+		{"(*Level).UnmarshalJSON", Method, 21},
+		{"(*Level).UnmarshalText", Method, 21},
+		{"(*LevelVar).AppendText", Method, 24},
+		{"(*LevelVar).Level", Method, 21},
+		{"(*LevelVar).MarshalText", Method, 21},
+		{"(*LevelVar).Set", Method, 21},
+		{"(*LevelVar).String", Method, 21},
+		{"(*LevelVar).UnmarshalText", Method, 21},
+		{"(*Logger).Debug", Method, 21},
+		{"(*Logger).DebugContext", Method, 21},
+		{"(*Logger).Enabled", Method, 21},
+		{"(*Logger).Error", Method, 21},
+		{"(*Logger).ErrorContext", Method, 21},
+		{"(*Logger).Handler", Method, 21},
+		{"(*Logger).Info", Method, 21},
+		{"(*Logger).InfoContext", Method, 21},
+		{"(*Logger).Log", Method, 21},
+		{"(*Logger).LogAttrs", Method, 21},
+		{"(*Logger).Warn", Method, 21},
+		{"(*Logger).WarnContext", Method, 21},
+		{"(*Logger).With", Method, 21},
+		{"(*Logger).WithGroup", Method, 21},
+		{"(*Record).Add", Method, 21},
+		{"(*Record).AddAttrs", Method, 21},
+		{"(*TextHandler).Enabled", Method, 21},
+		{"(*TextHandler).Handle", Method, 21},
+		{"(*TextHandler).WithAttrs", Method, 21},
+		{"(*TextHandler).WithGroup", Method, 21},
+		{"(Attr).Equal", Method, 21},
+		{"(Attr).String", Method, 21},
+		{"(Kind).String", Method, 21},
+		{"(Level).AppendText", Method, 24},
+		{"(Level).Level", Method, 21},
+		{"(Level).MarshalJSON", Method, 21},
+		{"(Level).MarshalText", Method, 21},
+		{"(Level).String", Method, 21},
+		{"(Record).Attrs", Method, 21},
+		{"(Record).Clone", Method, 21},
+		{"(Record).NumAttrs", Method, 21},
+		{"(Value).Any", Method, 21},
+		{"(Value).Bool", Method, 21},
+		{"(Value).Duration", Method, 21},
+		{"(Value).Equal", Method, 21},
+		{"(Value).Float64", Method, 21},
+		{"(Value).Group", Method, 21},
+		{"(Value).Int64", Method, 21},
+		{"(Value).Kind", Method, 21},
+		{"(Value).LogValuer", Method, 21},
+		{"(Value).Resolve", Method, 21},
+		{"(Value).String", Method, 21},
+		{"(Value).Time", Method, 21},
+		{"(Value).Uint64", Method, 21},
+		{"Any", Func, 21},
+		{"AnyValue", Func, 21},
+		{"Attr", Type, 21},
+		{"Attr.Key", Field, 21},
+		{"Attr.Value", Field, 21},
+		{"Bool", Func, 21},
+		{"BoolValue", Func, 21},
+		{"Debug", Func, 21},
+		{"DebugContext", Func, 21},
+		{"Default", Func, 21},
+		{"DiscardHandler", Var, 24},
+		{"Duration", Func, 21},
+		{"DurationValue", Func, 21},
+		{"Error", Func, 21},
+		{"ErrorContext", Func, 21},
+		{"Float64", Func, 21},
+		{"Float64Value", Func, 21},
+		{"Group", Func, 21},
+		{"GroupValue", Func, 21},
+		{"Handler", Type, 21},
+		{"HandlerOptions", Type, 21},
+		{"HandlerOptions.AddSource", Field, 21},
+		{"HandlerOptions.Level", Field, 21},
+		{"HandlerOptions.ReplaceAttr", Field, 21},
+		{"Info", Func, 21},
+		{"InfoContext", Func, 21},
+		{"Int", Func, 21},
+		{"Int64", Func, 21},
+		{"Int64Value", Func, 21},
+		{"IntValue", Func, 21},
+		{"JSONHandler", Type, 21},
+		{"Kind", Type, 21},
+		{"KindAny", Const, 21},
+		{"KindBool", Const, 21},
+		{"KindDuration", Const, 21},
+		{"KindFloat64", Const, 21},
+		{"KindGroup", Const, 21},
+		{"KindInt64", Const, 21},
+		{"KindLogValuer", Const, 21},
+		{"KindString", Const, 21},
+		{"KindTime", Const, 21},
+		{"KindUint64", Const, 21},
+		{"Level", Type, 21},
+		{"LevelDebug", Const, 21},
+		{"LevelError", Const, 21},
+		{"LevelInfo", Const, 21},
+		{"LevelKey", Const, 21},
+		{"LevelVar", Type, 21},
+		{"LevelWarn", Const, 21},
+		{"Leveler", Type, 21},
+		{"Log", Func, 21},
+		{"LogAttrs", Func, 21},
+		{"LogValuer", Type, 21},
+		{"Logger", Type, 21},
+		{"MessageKey", Const, 21},
+		{"New", Func, 21},
+		{"NewJSONHandler", Func, 21},
+		{"NewLogLogger", Func, 21},
+		{"NewRecord", Func, 21},
+		{"NewTextHandler", Func, 21},
+		{"Record", Type, 21},
+		{"Record.Level", Field, 21},
+		{"Record.Message", Field, 21},
+		{"Record.PC", Field, 21},
+		{"Record.Time", Field, 21},
+		{"SetDefault", Func, 21},
+		{"SetLogLoggerLevel", Func, 22},
+		{"Source", Type, 21},
+		{"Source.File", Field, 21},
+		{"Source.Function", Field, 21},
+		{"Source.Line", Field, 21},
+		{"SourceKey", Const, 21},
+		{"String", Func, 21},
+		{"StringValue", Func, 21},
+		{"TextHandler", Type, 21},
+		{"Time", Func, 21},
+		{"TimeKey", Const, 21},
+		{"TimeValue", Func, 21},
+		{"Uint64", Func, 21},
+		{"Uint64Value", Func, 21},
+		{"Value", Type, 21},
+		{"Warn", Func, 21},
+		{"WarnContext", Func, 21},
+		{"With", Func, 21},
 	},
 	"log/syslog": {
-		{"(*Writer).Alert", Method, 0, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).Crit", Method, 0, ""},
-		{"(*Writer).Debug", Method, 0, ""},
-		{"(*Writer).Emerg", Method, 0, ""},
-		{"(*Writer).Err", Method, 0, ""},
-		{"(*Writer).Info", Method, 0, ""},
-		{"(*Writer).Notice", Method, 0, ""},
-		{"(*Writer).Warning", Method, 0, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"Dial", Func, 0, "func(network string, raddr string, priority Priority, tag string) (*Writer, error)"},
-		{"LOG_ALERT", Const, 0, ""},
-		{"LOG_AUTH", Const, 1, ""},
-		{"LOG_AUTHPRIV", Const, 1, ""},
-		{"LOG_CRIT", Const, 0, ""},
-		{"LOG_CRON", Const, 1, ""},
-		{"LOG_DAEMON", Const, 1, ""},
-		{"LOG_DEBUG", Const, 0, ""},
-		{"LOG_EMERG", Const, 0, ""},
-		{"LOG_ERR", Const, 0, ""},
-		{"LOG_FTP", Const, 1, ""},
-		{"LOG_INFO", Const, 0, ""},
-		{"LOG_KERN", Const, 1, ""},
-		{"LOG_LOCAL0", Const, 1, ""},
-		{"LOG_LOCAL1", Const, 1, ""},
-		{"LOG_LOCAL2", Const, 1, ""},
-		{"LOG_LOCAL3", Const, 1, ""},
-		{"LOG_LOCAL4", Const, 1, ""},
-		{"LOG_LOCAL5", Const, 1, ""},
-		{"LOG_LOCAL6", Const, 1, ""},
-		{"LOG_LOCAL7", Const, 1, ""},
-		{"LOG_LPR", Const, 1, ""},
-		{"LOG_MAIL", Const, 1, ""},
-		{"LOG_NEWS", Const, 1, ""},
-		{"LOG_NOTICE", Const, 0, ""},
-		{"LOG_SYSLOG", Const, 1, ""},
-		{"LOG_USER", Const, 1, ""},
-		{"LOG_UUCP", Const, 1, ""},
-		{"LOG_WARNING", Const, 0, ""},
-		{"New", Func, 0, "func(priority Priority, tag string) (*Writer, error)"},
-		{"NewLogger", Func, 0, "func(p Priority, logFlag int) (*log.Logger, error)"},
-		{"Priority", Type, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*Writer).Alert", Method, 0},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).Crit", Method, 0},
+		{"(*Writer).Debug", Method, 0},
+		{"(*Writer).Emerg", Method, 0},
+		{"(*Writer).Err", Method, 0},
+		{"(*Writer).Info", Method, 0},
+		{"(*Writer).Notice", Method, 0},
+		{"(*Writer).Warning", Method, 0},
+		{"(*Writer).Write", Method, 0},
+		{"Dial", Func, 0},
+		{"LOG_ALERT", Const, 0},
+		{"LOG_AUTH", Const, 1},
+		{"LOG_AUTHPRIV", Const, 1},
+		{"LOG_CRIT", Const, 0},
+		{"LOG_CRON", Const, 1},
+		{"LOG_DAEMON", Const, 1},
+		{"LOG_DEBUG", Const, 0},
+		{"LOG_EMERG", Const, 0},
+		{"LOG_ERR", Const, 0},
+		{"LOG_FTP", Const, 1},
+		{"LOG_INFO", Const, 0},
+		{"LOG_KERN", Const, 1},
+		{"LOG_LOCAL0", Const, 1},
+		{"LOG_LOCAL1", Const, 1},
+		{"LOG_LOCAL2", Const, 1},
+		{"LOG_LOCAL3", Const, 1},
+		{"LOG_LOCAL4", Const, 1},
+		{"LOG_LOCAL5", Const, 1},
+		{"LOG_LOCAL6", Const, 1},
+		{"LOG_LOCAL7", Const, 1},
+		{"LOG_LPR", Const, 1},
+		{"LOG_MAIL", Const, 1},
+		{"LOG_NEWS", Const, 1},
+		{"LOG_NOTICE", Const, 0},
+		{"LOG_SYSLOG", Const, 1},
+		{"LOG_USER", Const, 1},
+		{"LOG_UUCP", Const, 1},
+		{"LOG_WARNING", Const, 0},
+		{"New", Func, 0},
+		{"NewLogger", Func, 0},
+		{"Priority", Type, 0},
+		{"Writer", Type, 0},
 	},
 	"maps": {
-		{"All", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq2[K, V]"},
-		{"Clone", Func, 21, "func[M ~map[K]V, K comparable, V any](m M) M"},
-		{"Collect", Func, 23, "func[K comparable, V any](seq iter.Seq2[K, V]) map[K]V"},
-		{"Copy", Func, 21, "func[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)"},
-		{"DeleteFunc", Func, 21, "func[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)"},
-		{"Equal", Func, 21, "func[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool"},
-		{"EqualFunc", Func, 21, "func[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool"},
-		{"Insert", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map, seq iter.Seq2[K, V])"},
-		{"Keys", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[K]"},
-		{"Values", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[V]"},
+		{"All", Func, 23},
+		{"Clone", Func, 21},
+		{"Collect", Func, 23},
+		{"Copy", Func, 21},
+		{"DeleteFunc", Func, 21},
+		{"Equal", Func, 21},
+		{"EqualFunc", Func, 21},
+		{"Insert", Func, 23},
+		{"Keys", Func, 23},
+		{"Values", Func, 23},
 	},
 	"math": {
-		{"Abs", Func, 0, "func(x float64) float64"},
-		{"Acos", Func, 0, "func(x float64) float64"},
-		{"Acosh", Func, 0, "func(x float64) float64"},
-		{"Asin", Func, 0, "func(x float64) float64"},
-		{"Asinh", Func, 0, "func(x float64) float64"},
-		{"Atan", Func, 0, "func(x float64) float64"},
-		{"Atan2", Func, 0, "func(y float64, x float64) float64"},
-		{"Atanh", Func, 0, "func(x float64) float64"},
-		{"Cbrt", Func, 0, "func(x float64) float64"},
-		{"Ceil", Func, 0, "func(x float64) float64"},
-		{"Copysign", Func, 0, "func(f float64, sign float64) float64"},
-		{"Cos", Func, 0, "func(x float64) float64"},
-		{"Cosh", Func, 0, "func(x float64) float64"},
-		{"Dim", Func, 0, "func(x float64, y float64) float64"},
-		{"E", Const, 0, ""},
-		{"Erf", Func, 0, "func(x float64) float64"},
-		{"Erfc", Func, 0, "func(x float64) float64"},
-		{"Erfcinv", Func, 10, "func(x float64) float64"},
-		{"Erfinv", Func, 10, "func(x float64) float64"},
-		{"Exp", Func, 0, "func(x float64) float64"},
-		{"Exp2", Func, 0, "func(x float64) float64"},
-		{"Expm1", Func, 0, "func(x float64) float64"},
-		{"FMA", Func, 14, "func(x float64, y float64, z float64) float64"},
-		{"Float32bits", Func, 0, "func(f float32) uint32"},
-		{"Float32frombits", Func, 0, "func(b uint32) float32"},
-		{"Float64bits", Func, 0, "func(f float64) uint64"},
-		{"Float64frombits", Func, 0, "func(b uint64) float64"},
-		{"Floor", Func, 0, "func(x float64) float64"},
-		{"Frexp", Func, 0, "func(f float64) (frac float64, exp int)"},
-		{"Gamma", Func, 0, "func(x float64) float64"},
-		{"Hypot", Func, 0, "func(p float64, q float64) float64"},
-		{"Ilogb", Func, 0, "func(x float64) int"},
-		{"Inf", Func, 0, "func(sign int) float64"},
-		{"IsInf", Func, 0, "func(f float64, sign int) bool"},
-		{"IsNaN", Func, 0, "func(f float64) (is bool)"},
-		{"J0", Func, 0, "func(x float64) float64"},
-		{"J1", Func, 0, "func(x float64) float64"},
-		{"Jn", Func, 0, "func(n int, x float64) float64"},
-		{"Ldexp", Func, 0, "func(frac float64, exp int) float64"},
-		{"Lgamma", Func, 0, "func(x float64) (lgamma float64, sign int)"},
-		{"Ln10", Const, 0, ""},
-		{"Ln2", Const, 0, ""},
-		{"Log", Func, 0, "func(x float64) float64"},
-		{"Log10", Func, 0, "func(x float64) float64"},
-		{"Log10E", Const, 0, ""},
-		{"Log1p", Func, 0, "func(x float64) float64"},
-		{"Log2", Func, 0, "func(x float64) float64"},
-		{"Log2E", Const, 0, ""},
-		{"Logb", Func, 0, "func(x float64) float64"},
-		{"Max", Func, 0, "func(x float64, y float64) float64"},
-		{"MaxFloat32", Const, 0, ""},
-		{"MaxFloat64", Const, 0, ""},
-		{"MaxInt", Const, 17, ""},
-		{"MaxInt16", Const, 0, ""},
-		{"MaxInt32", Const, 0, ""},
-		{"MaxInt64", Const, 0, ""},
-		{"MaxInt8", Const, 0, ""},
-		{"MaxUint", Const, 17, ""},
-		{"MaxUint16", Const, 0, ""},
-		{"MaxUint32", Const, 0, ""},
-		{"MaxUint64", Const, 0, ""},
-		{"MaxUint8", Const, 0, ""},
-		{"Min", Func, 0, "func(x float64, y float64) float64"},
-		{"MinInt", Const, 17, ""},
-		{"MinInt16", Const, 0, ""},
-		{"MinInt32", Const, 0, ""},
-		{"MinInt64", Const, 0, ""},
-		{"MinInt8", Const, 0, ""},
-		{"Mod", Func, 0, "func(x float64, y float64) float64"},
-		{"Modf", Func, 0, "func(f float64) (int float64, frac float64)"},
-		{"NaN", Func, 0, "func() float64"},
-		{"Nextafter", Func, 0, "func(x float64, y float64) (r float64)"},
-		{"Nextafter32", Func, 4, "func(x float32, y float32) (r float32)"},
-		{"Phi", Const, 0, ""},
-		{"Pi", Const, 0, ""},
-		{"Pow", Func, 0, "func(x float64, y float64) float64"},
-		{"Pow10", Func, 0, "func(n int) float64"},
-		{"Remainder", Func, 0, "func(x float64, y float64) float64"},
-		{"Round", Func, 10, "func(x float64) float64"},
-		{"RoundToEven", Func, 10, "func(x float64) float64"},
-		{"Signbit", Func, 0, "func(x float64) bool"},
-		{"Sin", Func, 0, "func(x float64) float64"},
-		{"Sincos", Func, 0, "func(x float64) (sin float64, cos float64)"},
-		{"Sinh", Func, 0, "func(x float64) float64"},
-		{"SmallestNonzeroFloat32", Const, 0, ""},
-		{"SmallestNonzeroFloat64", Const, 0, ""},
-		{"Sqrt", Func, 0, "func(x float64) float64"},
-		{"Sqrt2", Const, 0, ""},
-		{"SqrtE", Const, 0, ""},
-		{"SqrtPhi", Const, 0, ""},
-		{"SqrtPi", Const, 0, ""},
-		{"Tan", Func, 0, "func(x float64) float64"},
-		{"Tanh", Func, 0, "func(x float64) float64"},
-		{"Trunc", Func, 0, "func(x float64) float64"},
-		{"Y0", Func, 0, "func(x float64) float64"},
-		{"Y1", Func, 0, "func(x float64) float64"},
-		{"Yn", Func, 0, "func(n int, x float64) float64"},
+		{"Abs", Func, 0},
+		{"Acos", Func, 0},
+		{"Acosh", Func, 0},
+		{"Asin", Func, 0},
+		{"Asinh", Func, 0},
+		{"Atan", Func, 0},
+		{"Atan2", Func, 0},
+		{"Atanh", Func, 0},
+		{"Cbrt", Func, 0},
+		{"Ceil", Func, 0},
+		{"Copysign", Func, 0},
+		{"Cos", Func, 0},
+		{"Cosh", Func, 0},
+		{"Dim", Func, 0},
+		{"E", Const, 0},
+		{"Erf", Func, 0},
+		{"Erfc", Func, 0},
+		{"Erfcinv", Func, 10},
+		{"Erfinv", Func, 10},
+		{"Exp", Func, 0},
+		{"Exp2", Func, 0},
+		{"Expm1", Func, 0},
+		{"FMA", Func, 14},
+		{"Float32bits", Func, 0},
+		{"Float32frombits", Func, 0},
+		{"Float64bits", Func, 0},
+		{"Float64frombits", Func, 0},
+		{"Floor", Func, 0},
+		{"Frexp", Func, 0},
+		{"Gamma", Func, 0},
+		{"Hypot", Func, 0},
+		{"Ilogb", Func, 0},
+		{"Inf", Func, 0},
+		{"IsInf", Func, 0},
+		{"IsNaN", Func, 0},
+		{"J0", Func, 0},
+		{"J1", Func, 0},
+		{"Jn", Func, 0},
+		{"Ldexp", Func, 0},
+		{"Lgamma", Func, 0},
+		{"Ln10", Const, 0},
+		{"Ln2", Const, 0},
+		{"Log", Func, 0},
+		{"Log10", Func, 0},
+		{"Log10E", Const, 0},
+		{"Log1p", Func, 0},
+		{"Log2", Func, 0},
+		{"Log2E", Const, 0},
+		{"Logb", Func, 0},
+		{"Max", Func, 0},
+		{"MaxFloat32", Const, 0},
+		{"MaxFloat64", Const, 0},
+		{"MaxInt", Const, 17},
+		{"MaxInt16", Const, 0},
+		{"MaxInt32", Const, 0},
+		{"MaxInt64", Const, 0},
+		{"MaxInt8", Const, 0},
+		{"MaxUint", Const, 17},
+		{"MaxUint16", Const, 0},
+		{"MaxUint32", Const, 0},
+		{"MaxUint64", Const, 0},
+		{"MaxUint8", Const, 0},
+		{"Min", Func, 0},
+		{"MinInt", Const, 17},
+		{"MinInt16", Const, 0},
+		{"MinInt32", Const, 0},
+		{"MinInt64", Const, 0},
+		{"MinInt8", Const, 0},
+		{"Mod", Func, 0},
+		{"Modf", Func, 0},
+		{"NaN", Func, 0},
+		{"Nextafter", Func, 0},
+		{"Nextafter32", Func, 4},
+		{"Phi", Const, 0},
+		{"Pi", Const, 0},
+		{"Pow", Func, 0},
+		{"Pow10", Func, 0},
+		{"Remainder", Func, 0},
+		{"Round", Func, 10},
+		{"RoundToEven", Func, 10},
+		{"Signbit", Func, 0},
+		{"Sin", Func, 0},
+		{"Sincos", Func, 0},
+		{"Sinh", Func, 0},
+		{"SmallestNonzeroFloat32", Const, 0},
+		{"SmallestNonzeroFloat64", Const, 0},
+		{"Sqrt", Func, 0},
+		{"Sqrt2", Const, 0},
+		{"SqrtE", Const, 0},
+		{"SqrtPhi", Const, 0},
+		{"SqrtPi", Const, 0},
+		{"Tan", Func, 0},
+		{"Tanh", Func, 0},
+		{"Trunc", Func, 0},
+		{"Y0", Func, 0},
+		{"Y1", Func, 0},
+		{"Yn", Func, 0},
 	},
 	"math/big": {
-		{"(*Float).Abs", Method, 5, ""},
-		{"(*Float).Acc", Method, 5, ""},
-		{"(*Float).Add", Method, 5, ""},
-		{"(*Float).Append", Method, 5, ""},
-		{"(*Float).AppendText", Method, 24, ""},
-		{"(*Float).Cmp", Method, 5, ""},
-		{"(*Float).Copy", Method, 5, ""},
-		{"(*Float).Float32", Method, 5, ""},
-		{"(*Float).Float64", Method, 5, ""},
-		{"(*Float).Format", Method, 5, ""},
-		{"(*Float).GobDecode", Method, 7, ""},
-		{"(*Float).GobEncode", Method, 7, ""},
-		{"(*Float).Int", Method, 5, ""},
-		{"(*Float).Int64", Method, 5, ""},
-		{"(*Float).IsInf", Method, 5, ""},
-		{"(*Float).IsInt", Method, 5, ""},
-		{"(*Float).MantExp", Method, 5, ""},
-		{"(*Float).MarshalText", Method, 6, ""},
-		{"(*Float).MinPrec", Method, 5, ""},
-		{"(*Float).Mode", Method, 5, ""},
-		{"(*Float).Mul", Method, 5, ""},
-		{"(*Float).Neg", Method, 5, ""},
-		{"(*Float).Parse", Method, 5, ""},
-		{"(*Float).Prec", Method, 5, ""},
-		{"(*Float).Quo", Method, 5, ""},
-		{"(*Float).Rat", Method, 5, ""},
-		{"(*Float).Scan", Method, 8, ""},
-		{"(*Float).Set", Method, 5, ""},
-		{"(*Float).SetFloat64", Method, 5, ""},
-		{"(*Float).SetInf", Method, 5, ""},
-		{"(*Float).SetInt", Method, 5, ""},
-		{"(*Float).SetInt64", Method, 5, ""},
-		{"(*Float).SetMantExp", Method, 5, ""},
-		{"(*Float).SetMode", Method, 5, ""},
-		{"(*Float).SetPrec", Method, 5, ""},
-		{"(*Float).SetRat", Method, 5, ""},
-		{"(*Float).SetString", Method, 5, ""},
-		{"(*Float).SetUint64", Method, 5, ""},
-		{"(*Float).Sign", Method, 5, ""},
-		{"(*Float).Signbit", Method, 5, ""},
-		{"(*Float).Sqrt", Method, 10, ""},
-		{"(*Float).String", Method, 5, ""},
-		{"(*Float).Sub", Method, 5, ""},
-		{"(*Float).Text", Method, 5, ""},
-		{"(*Float).Uint64", Method, 5, ""},
-		{"(*Float).UnmarshalText", Method, 6, ""},
-		{"(*Int).Abs", Method, 0, ""},
-		{"(*Int).Add", Method, 0, ""},
-		{"(*Int).And", Method, 0, ""},
-		{"(*Int).AndNot", Method, 0, ""},
-		{"(*Int).Append", Method, 6, ""},
-		{"(*Int).AppendText", Method, 24, ""},
-		{"(*Int).Binomial", Method, 0, ""},
-		{"(*Int).Bit", Method, 0, ""},
-		{"(*Int).BitLen", Method, 0, ""},
-		{"(*Int).Bits", Method, 0, ""},
-		{"(*Int).Bytes", Method, 0, ""},
-		{"(*Int).Cmp", Method, 0, ""},
-		{"(*Int).CmpAbs", Method, 10, ""},
-		{"(*Int).Div", Method, 0, ""},
-		{"(*Int).DivMod", Method, 0, ""},
-		{"(*Int).Exp", Method, 0, ""},
-		{"(*Int).FillBytes", Method, 15, ""},
-		{"(*Int).Float64", Method, 21, ""},
-		{"(*Int).Format", Method, 0, ""},
-		{"(*Int).GCD", Method, 0, ""},
-		{"(*Int).GobDecode", Method, 0, ""},
-		{"(*Int).GobEncode", Method, 0, ""},
-		{"(*Int).Int64", Method, 0, ""},
-		{"(*Int).IsInt64", Method, 9, ""},
-		{"(*Int).IsUint64", Method, 9, ""},
-		{"(*Int).Lsh", Method, 0, ""},
-		{"(*Int).MarshalJSON", Method, 1, ""},
-		{"(*Int).MarshalText", Method, 3, ""},
-		{"(*Int).Mod", Method, 0, ""},
-		{"(*Int).ModInverse", Method, 0, ""},
-		{"(*Int).ModSqrt", Method, 5, ""},
-		{"(*Int).Mul", Method, 0, ""},
-		{"(*Int).MulRange", Method, 0, ""},
-		{"(*Int).Neg", Method, 0, ""},
-		{"(*Int).Not", Method, 0, ""},
-		{"(*Int).Or", Method, 0, ""},
-		{"(*Int).ProbablyPrime", Method, 0, ""},
-		{"(*Int).Quo", Method, 0, ""},
-		{"(*Int).QuoRem", Method, 0, ""},
-		{"(*Int).Rand", Method, 0, ""},
-		{"(*Int).Rem", Method, 0, ""},
-		{"(*Int).Rsh", Method, 0, ""},
-		{"(*Int).Scan", Method, 0, ""},
-		{"(*Int).Set", Method, 0, ""},
-		{"(*Int).SetBit", Method, 0, ""},
-		{"(*Int).SetBits", Method, 0, ""},
-		{"(*Int).SetBytes", Method, 0, ""},
-		{"(*Int).SetInt64", Method, 0, ""},
-		{"(*Int).SetString", Method, 0, ""},
-		{"(*Int).SetUint64", Method, 1, ""},
-		{"(*Int).Sign", Method, 0, ""},
-		{"(*Int).Sqrt", Method, 8, ""},
-		{"(*Int).String", Method, 0, ""},
-		{"(*Int).Sub", Method, 0, ""},
-		{"(*Int).Text", Method, 6, ""},
-		{"(*Int).TrailingZeroBits", Method, 13, ""},
-		{"(*Int).Uint64", Method, 1, ""},
-		{"(*Int).UnmarshalJSON", Method, 1, ""},
-		{"(*Int).UnmarshalText", Method, 3, ""},
-		{"(*Int).Xor", Method, 0, ""},
-		{"(*Rat).Abs", Method, 0, ""},
-		{"(*Rat).Add", Method, 0, ""},
-		{"(*Rat).AppendText", Method, 24, ""},
-		{"(*Rat).Cmp", Method, 0, ""},
-		{"(*Rat).Denom", Method, 0, ""},
-		{"(*Rat).Float32", Method, 4, ""},
-		{"(*Rat).Float64", Method, 1, ""},
-		{"(*Rat).FloatPrec", Method, 22, ""},
-		{"(*Rat).FloatString", Method, 0, ""},
-		{"(*Rat).GobDecode", Method, 0, ""},
-		{"(*Rat).GobEncode", Method, 0, ""},
-		{"(*Rat).Inv", Method, 0, ""},
-		{"(*Rat).IsInt", Method, 0, ""},
-		{"(*Rat).MarshalText", Method, 3, ""},
-		{"(*Rat).Mul", Method, 0, ""},
-		{"(*Rat).Neg", Method, 0, ""},
-		{"(*Rat).Num", Method, 0, ""},
-		{"(*Rat).Quo", Method, 0, ""},
-		{"(*Rat).RatString", Method, 0, ""},
-		{"(*Rat).Scan", Method, 0, ""},
-		{"(*Rat).Set", Method, 0, ""},
-		{"(*Rat).SetFloat64", Method, 1, ""},
-		{"(*Rat).SetFrac", Method, 0, ""},
-		{"(*Rat).SetFrac64", Method, 0, ""},
-		{"(*Rat).SetInt", Method, 0, ""},
-		{"(*Rat).SetInt64", Method, 0, ""},
-		{"(*Rat).SetString", Method, 0, ""},
-		{"(*Rat).SetUint64", Method, 13, ""},
-		{"(*Rat).Sign", Method, 0, ""},
-		{"(*Rat).String", Method, 0, ""},
-		{"(*Rat).Sub", Method, 0, ""},
-		{"(*Rat).UnmarshalText", Method, 3, ""},
-		{"(Accuracy).String", Method, 5, ""},
-		{"(ErrNaN).Error", Method, 5, ""},
-		{"(RoundingMode).String", Method, 5, ""},
-		{"Above", Const, 5, ""},
-		{"Accuracy", Type, 5, ""},
-		{"AwayFromZero", Const, 5, ""},
-		{"Below", Const, 5, ""},
-		{"ErrNaN", Type, 5, ""},
-		{"Exact", Const, 5, ""},
-		{"Float", Type, 5, ""},
-		{"Int", Type, 0, ""},
-		{"Jacobi", Func, 5, "func(x *Int, y *Int) int"},
-		{"MaxBase", Const, 0, ""},
-		{"MaxExp", Const, 5, ""},
-		{"MaxPrec", Const, 5, ""},
-		{"MinExp", Const, 5, ""},
-		{"NewFloat", Func, 5, "func(x float64) *Float"},
-		{"NewInt", Func, 0, "func(x int64) *Int"},
-		{"NewRat", Func, 0, "func(a int64, b int64) *Rat"},
-		{"ParseFloat", Func, 5, "func(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)"},
-		{"Rat", Type, 0, ""},
-		{"RoundingMode", Type, 5, ""},
-		{"ToNearestAway", Const, 5, ""},
-		{"ToNearestEven", Const, 5, ""},
-		{"ToNegativeInf", Const, 5, ""},
-		{"ToPositiveInf", Const, 5, ""},
-		{"ToZero", Const, 5, ""},
-		{"Word", Type, 0, ""},
+		{"(*Float).Abs", Method, 5},
+		{"(*Float).Acc", Method, 5},
+		{"(*Float).Add", Method, 5},
+		{"(*Float).Append", Method, 5},
+		{"(*Float).AppendText", Method, 24},
+		{"(*Float).Cmp", Method, 5},
+		{"(*Float).Copy", Method, 5},
+		{"(*Float).Float32", Method, 5},
+		{"(*Float).Float64", Method, 5},
+		{"(*Float).Format", Method, 5},
+		{"(*Float).GobDecode", Method, 7},
+		{"(*Float).GobEncode", Method, 7},
+		{"(*Float).Int", Method, 5},
+		{"(*Float).Int64", Method, 5},
+		{"(*Float).IsInf", Method, 5},
+		{"(*Float).IsInt", Method, 5},
+		{"(*Float).MantExp", Method, 5},
+		{"(*Float).MarshalText", Method, 6},
+		{"(*Float).MinPrec", Method, 5},
+		{"(*Float).Mode", Method, 5},
+		{"(*Float).Mul", Method, 5},
+		{"(*Float).Neg", Method, 5},
+		{"(*Float).Parse", Method, 5},
+		{"(*Float).Prec", Method, 5},
+		{"(*Float).Quo", Method, 5},
+		{"(*Float).Rat", Method, 5},
+		{"(*Float).Scan", Method, 8},
+		{"(*Float).Set", Method, 5},
+		{"(*Float).SetFloat64", Method, 5},
+		{"(*Float).SetInf", Method, 5},
+		{"(*Float).SetInt", Method, 5},
+		{"(*Float).SetInt64", Method, 5},
+		{"(*Float).SetMantExp", Method, 5},
+		{"(*Float).SetMode", Method, 5},
+		{"(*Float).SetPrec", Method, 5},
+		{"(*Float).SetRat", Method, 5},
+		{"(*Float).SetString", Method, 5},
+		{"(*Float).SetUint64", Method, 5},
+		{"(*Float).Sign", Method, 5},
+		{"(*Float).Signbit", Method, 5},
+		{"(*Float).Sqrt", Method, 10},
+		{"(*Float).String", Method, 5},
+		{"(*Float).Sub", Method, 5},
+		{"(*Float).Text", Method, 5},
+		{"(*Float).Uint64", Method, 5},
+		{"(*Float).UnmarshalText", Method, 6},
+		{"(*Int).Abs", Method, 0},
+		{"(*Int).Add", Method, 0},
+		{"(*Int).And", Method, 0},
+		{"(*Int).AndNot", Method, 0},
+		{"(*Int).Append", Method, 6},
+		{"(*Int).AppendText", Method, 24},
+		{"(*Int).Binomial", Method, 0},
+		{"(*Int).Bit", Method, 0},
+		{"(*Int).BitLen", Method, 0},
+		{"(*Int).Bits", Method, 0},
+		{"(*Int).Bytes", Method, 0},
+		{"(*Int).Cmp", Method, 0},
+		{"(*Int).CmpAbs", Method, 10},
+		{"(*Int).Div", Method, 0},
+		{"(*Int).DivMod", Method, 0},
+		{"(*Int).Exp", Method, 0},
+		{"(*Int).FillBytes", Method, 15},
+		{"(*Int).Float64", Method, 21},
+		{"(*Int).Format", Method, 0},
+		{"(*Int).GCD", Method, 0},
+		{"(*Int).GobDecode", Method, 0},
+		{"(*Int).GobEncode", Method, 0},
+		{"(*Int).Int64", Method, 0},
+		{"(*Int).IsInt64", Method, 9},
+		{"(*Int).IsUint64", Method, 9},
+		{"(*Int).Lsh", Method, 0},
+		{"(*Int).MarshalJSON", Method, 1},
+		{"(*Int).MarshalText", Method, 3},
+		{"(*Int).Mod", Method, 0},
+		{"(*Int).ModInverse", Method, 0},
+		{"(*Int).ModSqrt", Method, 5},
+		{"(*Int).Mul", Method, 0},
+		{"(*Int).MulRange", Method, 0},
+		{"(*Int).Neg", Method, 0},
+		{"(*Int).Not", Method, 0},
+		{"(*Int).Or", Method, 0},
+		{"(*Int).ProbablyPrime", Method, 0},
+		{"(*Int).Quo", Method, 0},
+		{"(*Int).QuoRem", Method, 0},
+		{"(*Int).Rand", Method, 0},
+		{"(*Int).Rem", Method, 0},
+		{"(*Int).Rsh", Method, 0},
+		{"(*Int).Scan", Method, 0},
+		{"(*Int).Set", Method, 0},
+		{"(*Int).SetBit", Method, 0},
+		{"(*Int).SetBits", Method, 0},
+		{"(*Int).SetBytes", Method, 0},
+		{"(*Int).SetInt64", Method, 0},
+		{"(*Int).SetString", Method, 0},
+		{"(*Int).SetUint64", Method, 1},
+		{"(*Int).Sign", Method, 0},
+		{"(*Int).Sqrt", Method, 8},
+		{"(*Int).String", Method, 0},
+		{"(*Int).Sub", Method, 0},
+		{"(*Int).Text", Method, 6},
+		{"(*Int).TrailingZeroBits", Method, 13},
+		{"(*Int).Uint64", Method, 1},
+		{"(*Int).UnmarshalJSON", Method, 1},
+		{"(*Int).UnmarshalText", Method, 3},
+		{"(*Int).Xor", Method, 0},
+		{"(*Rat).Abs", Method, 0},
+		{"(*Rat).Add", Method, 0},
+		{"(*Rat).AppendText", Method, 24},
+		{"(*Rat).Cmp", Method, 0},
+		{"(*Rat).Denom", Method, 0},
+		{"(*Rat).Float32", Method, 4},
+		{"(*Rat).Float64", Method, 1},
+		{"(*Rat).FloatPrec", Method, 22},
+		{"(*Rat).FloatString", Method, 0},
+		{"(*Rat).GobDecode", Method, 0},
+		{"(*Rat).GobEncode", Method, 0},
+		{"(*Rat).Inv", Method, 0},
+		{"(*Rat).IsInt", Method, 0},
+		{"(*Rat).MarshalText", Method, 3},
+		{"(*Rat).Mul", Method, 0},
+		{"(*Rat).Neg", Method, 0},
+		{"(*Rat).Num", Method, 0},
+		{"(*Rat).Quo", Method, 0},
+		{"(*Rat).RatString", Method, 0},
+		{"(*Rat).Scan", Method, 0},
+		{"(*Rat).Set", Method, 0},
+		{"(*Rat).SetFloat64", Method, 1},
+		{"(*Rat).SetFrac", Method, 0},
+		{"(*Rat).SetFrac64", Method, 0},
+		{"(*Rat).SetInt", Method, 0},
+		{"(*Rat).SetInt64", Method, 0},
+		{"(*Rat).SetString", Method, 0},
+		{"(*Rat).SetUint64", Method, 13},
+		{"(*Rat).Sign", Method, 0},
+		{"(*Rat).String", Method, 0},
+		{"(*Rat).Sub", Method, 0},
+		{"(*Rat).UnmarshalText", Method, 3},
+		{"(Accuracy).String", Method, 5},
+		{"(ErrNaN).Error", Method, 5},
+		{"(RoundingMode).String", Method, 5},
+		{"Above", Const, 5},
+		{"Accuracy", Type, 5},
+		{"AwayFromZero", Const, 5},
+		{"Below", Const, 5},
+		{"ErrNaN", Type, 5},
+		{"Exact", Const, 5},
+		{"Float", Type, 5},
+		{"Int", Type, 0},
+		{"Jacobi", Func, 5},
+		{"MaxBase", Const, 0},
+		{"MaxExp", Const, 5},
+		{"MaxPrec", Const, 5},
+		{"MinExp", Const, 5},
+		{"NewFloat", Func, 5},
+		{"NewInt", Func, 0},
+		{"NewRat", Func, 0},
+		{"ParseFloat", Func, 5},
+		{"Rat", Type, 0},
+		{"RoundingMode", Type, 5},
+		{"ToNearestAway", Const, 5},
+		{"ToNearestEven", Const, 5},
+		{"ToNegativeInf", Const, 5},
+		{"ToPositiveInf", Const, 5},
+		{"ToZero", Const, 5},
+		{"Word", Type, 0},
 	},
 	"math/bits": {
-		{"Add", Func, 12, "func(x uint, y uint, carry uint) (sum uint, carryOut uint)"},
-		{"Add32", Func, 12, "func(x uint32, y uint32, carry uint32) (sum uint32, carryOut uint32)"},
-		{"Add64", Func, 12, "func(x uint64, y uint64, carry uint64) (sum uint64, carryOut uint64)"},
-		{"Div", Func, 12, "func(hi uint, lo uint, y uint) (quo uint, rem uint)"},
-		{"Div32", Func, 12, "func(hi uint32, lo uint32, y uint32) (quo uint32, rem uint32)"},
-		{"Div64", Func, 12, "func(hi uint64, lo uint64, y uint64) (quo uint64, rem uint64)"},
-		{"LeadingZeros", Func, 9, "func(x uint) int"},
-		{"LeadingZeros16", Func, 9, "func(x uint16) int"},
-		{"LeadingZeros32", Func, 9, "func(x uint32) int"},
-		{"LeadingZeros64", Func, 9, "func(x uint64) int"},
-		{"LeadingZeros8", Func, 9, "func(x uint8) int"},
-		{"Len", Func, 9, "func(x uint) int"},
-		{"Len16", Func, 9, "func(x uint16) (n int)"},
-		{"Len32", Func, 9, "func(x uint32) (n int)"},
-		{"Len64", Func, 9, "func(x uint64) (n int)"},
-		{"Len8", Func, 9, "func(x uint8) int"},
-		{"Mul", Func, 12, "func(x uint, y uint) (hi uint, lo uint)"},
-		{"Mul32", Func, 12, "func(x uint32, y uint32) (hi uint32, lo uint32)"},
-		{"Mul64", Func, 12, "func(x uint64, y uint64) (hi uint64, lo uint64)"},
-		{"OnesCount", Func, 9, "func(x uint) int"},
-		{"OnesCount16", Func, 9, "func(x uint16) int"},
-		{"OnesCount32", Func, 9, "func(x uint32) int"},
-		{"OnesCount64", Func, 9, "func(x uint64) int"},
-		{"OnesCount8", Func, 9, "func(x uint8) int"},
-		{"Rem", Func, 14, "func(hi uint, lo uint, y uint) uint"},
-		{"Rem32", Func, 14, "func(hi uint32, lo uint32, y uint32) uint32"},
-		{"Rem64", Func, 14, "func(hi uint64, lo uint64, y uint64) uint64"},
-		{"Reverse", Func, 9, "func(x uint) uint"},
-		{"Reverse16", Func, 9, "func(x uint16) uint16"},
-		{"Reverse32", Func, 9, "func(x uint32) uint32"},
-		{"Reverse64", Func, 9, "func(x uint64) uint64"},
-		{"Reverse8", Func, 9, "func(x uint8) uint8"},
-		{"ReverseBytes", Func, 9, "func(x uint) uint"},
-		{"ReverseBytes16", Func, 9, "func(x uint16) uint16"},
-		{"ReverseBytes32", Func, 9, "func(x uint32) uint32"},
-		{"ReverseBytes64", Func, 9, "func(x uint64) uint64"},
-		{"RotateLeft", Func, 9, "func(x uint, k int) uint"},
-		{"RotateLeft16", Func, 9, "func(x uint16, k int) uint16"},
-		{"RotateLeft32", Func, 9, "func(x uint32, k int) uint32"},
-		{"RotateLeft64", Func, 9, "func(x uint64, k int) uint64"},
-		{"RotateLeft8", Func, 9, "func(x uint8, k int) uint8"},
-		{"Sub", Func, 12, "func(x uint, y uint, borrow uint) (diff uint, borrowOut uint)"},
-		{"Sub32", Func, 12, "func(x uint32, y uint32, borrow uint32) (diff uint32, borrowOut uint32)"},
-		{"Sub64", Func, 12, "func(x uint64, y uint64, borrow uint64) (diff uint64, borrowOut uint64)"},
-		{"TrailingZeros", Func, 9, "func(x uint) int"},
-		{"TrailingZeros16", Func, 9, "func(x uint16) int"},
-		{"TrailingZeros32", Func, 9, "func(x uint32) int"},
-		{"TrailingZeros64", Func, 9, "func(x uint64) int"},
-		{"TrailingZeros8", Func, 9, "func(x uint8) int"},
-		{"UintSize", Const, 9, ""},
+		{"Add", Func, 12},
+		{"Add32", Func, 12},
+		{"Add64", Func, 12},
+		{"Div", Func, 12},
+		{"Div32", Func, 12},
+		{"Div64", Func, 12},
+		{"LeadingZeros", Func, 9},
+		{"LeadingZeros16", Func, 9},
+		{"LeadingZeros32", Func, 9},
+		{"LeadingZeros64", Func, 9},
+		{"LeadingZeros8", Func, 9},
+		{"Len", Func, 9},
+		{"Len16", Func, 9},
+		{"Len32", Func, 9},
+		{"Len64", Func, 9},
+		{"Len8", Func, 9},
+		{"Mul", Func, 12},
+		{"Mul32", Func, 12},
+		{"Mul64", Func, 12},
+		{"OnesCount", Func, 9},
+		{"OnesCount16", Func, 9},
+		{"OnesCount32", Func, 9},
+		{"OnesCount64", Func, 9},
+		{"OnesCount8", Func, 9},
+		{"Rem", Func, 14},
+		{"Rem32", Func, 14},
+		{"Rem64", Func, 14},
+		{"Reverse", Func, 9},
+		{"Reverse16", Func, 9},
+		{"Reverse32", Func, 9},
+		{"Reverse64", Func, 9},
+		{"Reverse8", Func, 9},
+		{"ReverseBytes", Func, 9},
+		{"ReverseBytes16", Func, 9},
+		{"ReverseBytes32", Func, 9},
+		{"ReverseBytes64", Func, 9},
+		{"RotateLeft", Func, 9},
+		{"RotateLeft16", Func, 9},
+		{"RotateLeft32", Func, 9},
+		{"RotateLeft64", Func, 9},
+		{"RotateLeft8", Func, 9},
+		{"Sub", Func, 12},
+		{"Sub32", Func, 12},
+		{"Sub64", Func, 12},
+		{"TrailingZeros", Func, 9},
+		{"TrailingZeros16", Func, 9},
+		{"TrailingZeros32", Func, 9},
+		{"TrailingZeros64", Func, 9},
+		{"TrailingZeros8", Func, 9},
+		{"UintSize", Const, 9},
 	},
 	"math/cmplx": {
-		{"Abs", Func, 0, "func(x complex128) float64"},
-		{"Acos", Func, 0, "func(x complex128) complex128"},
-		{"Acosh", Func, 0, "func(x complex128) complex128"},
-		{"Asin", Func, 0, "func(x complex128) complex128"},
-		{"Asinh", Func, 0, "func(x complex128) complex128"},
-		{"Atan", Func, 0, "func(x complex128) complex128"},
-		{"Atanh", Func, 0, "func(x complex128) complex128"},
-		{"Conj", Func, 0, "func(x complex128) complex128"},
-		{"Cos", Func, 0, "func(x complex128) complex128"},
-		{"Cosh", Func, 0, "func(x complex128) complex128"},
-		{"Cot", Func, 0, "func(x complex128) complex128"},
-		{"Exp", Func, 0, "func(x complex128) complex128"},
-		{"Inf", Func, 0, "func() complex128"},
-		{"IsInf", Func, 0, "func(x complex128) bool"},
-		{"IsNaN", Func, 0, "func(x complex128) bool"},
-		{"Log", Func, 0, "func(x complex128) complex128"},
-		{"Log10", Func, 0, "func(x complex128) complex128"},
-		{"NaN", Func, 0, "func() complex128"},
-		{"Phase", Func, 0, "func(x complex128) float64"},
-		{"Polar", Func, 0, "func(x complex128) (r float64, θ float64)"},
-		{"Pow", Func, 0, "func(x complex128, y complex128) complex128"},
-		{"Rect", Func, 0, "func(r float64, θ float64) complex128"},
-		{"Sin", Func, 0, "func(x complex128) complex128"},
-		{"Sinh", Func, 0, "func(x complex128) complex128"},
-		{"Sqrt", Func, 0, "func(x complex128) complex128"},
-		{"Tan", Func, 0, "func(x complex128) complex128"},
-		{"Tanh", Func, 0, "func(x complex128) complex128"},
+		{"Abs", Func, 0},
+		{"Acos", Func, 0},
+		{"Acosh", Func, 0},
+		{"Asin", Func, 0},
+		{"Asinh", Func, 0},
+		{"Atan", Func, 0},
+		{"Atanh", Func, 0},
+		{"Conj", Func, 0},
+		{"Cos", Func, 0},
+		{"Cosh", Func, 0},
+		{"Cot", Func, 0},
+		{"Exp", Func, 0},
+		{"Inf", Func, 0},
+		{"IsInf", Func, 0},
+		{"IsNaN", Func, 0},
+		{"Log", Func, 0},
+		{"Log10", Func, 0},
+		{"NaN", Func, 0},
+		{"Phase", Func, 0},
+		{"Polar", Func, 0},
+		{"Pow", Func, 0},
+		{"Rect", Func, 0},
+		{"Sin", Func, 0},
+		{"Sinh", Func, 0},
+		{"Sqrt", Func, 0},
+		{"Tan", Func, 0},
+		{"Tanh", Func, 0},
 	},
 	"math/rand": {
-		{"(*Rand).ExpFloat64", Method, 0, ""},
-		{"(*Rand).Float32", Method, 0, ""},
-		{"(*Rand).Float64", Method, 0, ""},
-		{"(*Rand).Int", Method, 0, ""},
-		{"(*Rand).Int31", Method, 0, ""},
-		{"(*Rand).Int31n", Method, 0, ""},
-		{"(*Rand).Int63", Method, 0, ""},
-		{"(*Rand).Int63n", Method, 0, ""},
-		{"(*Rand).Intn", Method, 0, ""},
-		{"(*Rand).NormFloat64", Method, 0, ""},
-		{"(*Rand).Perm", Method, 0, ""},
-		{"(*Rand).Read", Method, 6, ""},
-		{"(*Rand).Seed", Method, 0, ""},
-		{"(*Rand).Shuffle", Method, 10, ""},
-		{"(*Rand).Uint32", Method, 0, ""},
-		{"(*Rand).Uint64", Method, 8, ""},
-		{"(*Zipf).Uint64", Method, 0, ""},
-		{"ExpFloat64", Func, 0, "func() float64"},
-		{"Float32", Func, 0, "func() float32"},
-		{"Float64", Func, 0, "func() float64"},
-		{"Int", Func, 0, "func() int"},
-		{"Int31", Func, 0, "func() int32"},
-		{"Int31n", Func, 0, "func(n int32) int32"},
-		{"Int63", Func, 0, "func() int64"},
-		{"Int63n", Func, 0, "func(n int64) int64"},
-		{"Intn", Func, 0, "func(n int) int"},
-		{"New", Func, 0, "func(src Source) *Rand"},
-		{"NewSource", Func, 0, "func(seed int64) Source"},
-		{"NewZipf", Func, 0, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
-		{"NormFloat64", Func, 0, "func() float64"},
-		{"Perm", Func, 0, "func(n int) []int"},
-		{"Rand", Type, 0, ""},
-		{"Read", Func, 6, "func(p []byte) (n int, err error)"},
-		{"Seed", Func, 0, "func(seed int64)"},
-		{"Shuffle", Func, 10, "func(n int, swap func(i int, j int))"},
-		{"Source", Type, 0, ""},
-		{"Source64", Type, 8, ""},
-		{"Uint32", Func, 0, "func() uint32"},
-		{"Uint64", Func, 8, "func() uint64"},
-		{"Zipf", Type, 0, ""},
+		{"(*Rand).ExpFloat64", Method, 0},
+		{"(*Rand).Float32", Method, 0},
+		{"(*Rand).Float64", Method, 0},
+		{"(*Rand).Int", Method, 0},
+		{"(*Rand).Int31", Method, 0},
+		{"(*Rand).Int31n", Method, 0},
+		{"(*Rand).Int63", Method, 0},
+		{"(*Rand).Int63n", Method, 0},
+		{"(*Rand).Intn", Method, 0},
+		{"(*Rand).NormFloat64", Method, 0},
+		{"(*Rand).Perm", Method, 0},
+		{"(*Rand).Read", Method, 6},
+		{"(*Rand).Seed", Method, 0},
+		{"(*Rand).Shuffle", Method, 10},
+		{"(*Rand).Uint32", Method, 0},
+		{"(*Rand).Uint64", Method, 8},
+		{"(*Zipf).Uint64", Method, 0},
+		{"ExpFloat64", Func, 0},
+		{"Float32", Func, 0},
+		{"Float64", Func, 0},
+		{"Int", Func, 0},
+		{"Int31", Func, 0},
+		{"Int31n", Func, 0},
+		{"Int63", Func, 0},
+		{"Int63n", Func, 0},
+		{"Intn", Func, 0},
+		{"New", Func, 0},
+		{"NewSource", Func, 0},
+		{"NewZipf", Func, 0},
+		{"NormFloat64", Func, 0},
+		{"Perm", Func, 0},
+		{"Rand", Type, 0},
+		{"Read", Func, 6},
+		{"Seed", Func, 0},
+		{"Shuffle", Func, 10},
+		{"Source", Type, 0},
+		{"Source64", Type, 8},
+		{"Uint32", Func, 0},
+		{"Uint64", Func, 8},
+		{"Zipf", Type, 0},
 	},
 	"math/rand/v2": {
-		{"(*ChaCha8).AppendBinary", Method, 24, ""},
-		{"(*ChaCha8).MarshalBinary", Method, 22, ""},
-		{"(*ChaCha8).Read", Method, 23, ""},
-		{"(*ChaCha8).Seed", Method, 22, ""},
-		{"(*ChaCha8).Uint64", Method, 22, ""},
-		{"(*ChaCha8).UnmarshalBinary", Method, 22, ""},
-		{"(*PCG).AppendBinary", Method, 24, ""},
-		{"(*PCG).MarshalBinary", Method, 22, ""},
-		{"(*PCG).Seed", Method, 22, ""},
-		{"(*PCG).Uint64", Method, 22, ""},
-		{"(*PCG).UnmarshalBinary", Method, 22, ""},
-		{"(*Rand).ExpFloat64", Method, 22, ""},
-		{"(*Rand).Float32", Method, 22, ""},
-		{"(*Rand).Float64", Method, 22, ""},
-		{"(*Rand).Int", Method, 22, ""},
-		{"(*Rand).Int32", Method, 22, ""},
-		{"(*Rand).Int32N", Method, 22, ""},
-		{"(*Rand).Int64", Method, 22, ""},
-		{"(*Rand).Int64N", Method, 22, ""},
-		{"(*Rand).IntN", Method, 22, ""},
-		{"(*Rand).NormFloat64", Method, 22, ""},
-		{"(*Rand).Perm", Method, 22, ""},
-		{"(*Rand).Shuffle", Method, 22, ""},
-		{"(*Rand).Uint", Method, 23, ""},
-		{"(*Rand).Uint32", Method, 22, ""},
-		{"(*Rand).Uint32N", Method, 22, ""},
-		{"(*Rand).Uint64", Method, 22, ""},
-		{"(*Rand).Uint64N", Method, 22, ""},
-		{"(*Rand).UintN", Method, 22, ""},
-		{"(*Zipf).Uint64", Method, 22, ""},
-		{"ChaCha8", Type, 22, ""},
-		{"ExpFloat64", Func, 22, "func() float64"},
-		{"Float32", Func, 22, "func() float32"},
-		{"Float64", Func, 22, "func() float64"},
-		{"Int", Func, 22, "func() int"},
-		{"Int32", Func, 22, "func() int32"},
-		{"Int32N", Func, 22, "func(n int32) int32"},
-		{"Int64", Func, 22, "func() int64"},
-		{"Int64N", Func, 22, "func(n int64) int64"},
-		{"IntN", Func, 22, "func(n int) int"},
-		{"N", Func, 22, "func[Int intType](n Int) Int"},
-		{"New", Func, 22, "func(src Source) *Rand"},
-		{"NewChaCha8", Func, 22, "func(seed [32]byte) *ChaCha8"},
-		{"NewPCG", Func, 22, "func(seed1 uint64, seed2 uint64) *PCG"},
-		{"NewZipf", Func, 22, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
-		{"NormFloat64", Func, 22, "func() float64"},
-		{"PCG", Type, 22, ""},
-		{"Perm", Func, 22, "func(n int) []int"},
-		{"Rand", Type, 22, ""},
-		{"Shuffle", Func, 22, "func(n int, swap func(i int, j int))"},
-		{"Source", Type, 22, ""},
-		{"Uint", Func, 23, "func() uint"},
-		{"Uint32", Func, 22, "func() uint32"},
-		{"Uint32N", Func, 22, "func(n uint32) uint32"},
-		{"Uint64", Func, 22, "func() uint64"},
-		{"Uint64N", Func, 22, "func(n uint64) uint64"},
-		{"UintN", Func, 22, "func(n uint) uint"},
-		{"Zipf", Type, 22, ""},
+		{"(*ChaCha8).AppendBinary", Method, 24},
+		{"(*ChaCha8).MarshalBinary", Method, 22},
+		{"(*ChaCha8).Read", Method, 23},
+		{"(*ChaCha8).Seed", Method, 22},
+		{"(*ChaCha8).Uint64", Method, 22},
+		{"(*ChaCha8).UnmarshalBinary", Method, 22},
+		{"(*PCG).AppendBinary", Method, 24},
+		{"(*PCG).MarshalBinary", Method, 22},
+		{"(*PCG).Seed", Method, 22},
+		{"(*PCG).Uint64", Method, 22},
+		{"(*PCG).UnmarshalBinary", Method, 22},
+		{"(*Rand).ExpFloat64", Method, 22},
+		{"(*Rand).Float32", Method, 22},
+		{"(*Rand).Float64", Method, 22},
+		{"(*Rand).Int", Method, 22},
+		{"(*Rand).Int32", Method, 22},
+		{"(*Rand).Int32N", Method, 22},
+		{"(*Rand).Int64", Method, 22},
+		{"(*Rand).Int64N", Method, 22},
+		{"(*Rand).IntN", Method, 22},
+		{"(*Rand).NormFloat64", Method, 22},
+		{"(*Rand).Perm", Method, 22},
+		{"(*Rand).Shuffle", Method, 22},
+		{"(*Rand).Uint", Method, 23},
+		{"(*Rand).Uint32", Method, 22},
+		{"(*Rand).Uint32N", Method, 22},
+		{"(*Rand).Uint64", Method, 22},
+		{"(*Rand).Uint64N", Method, 22},
+		{"(*Rand).UintN", Method, 22},
+		{"(*Zipf).Uint64", Method, 22},
+		{"ChaCha8", Type, 22},
+		{"ExpFloat64", Func, 22},
+		{"Float32", Func, 22},
+		{"Float64", Func, 22},
+		{"Int", Func, 22},
+		{"Int32", Func, 22},
+		{"Int32N", Func, 22},
+		{"Int64", Func, 22},
+		{"Int64N", Func, 22},
+		{"IntN", Func, 22},
+		{"N", Func, 22},
+		{"New", Func, 22},
+		{"NewChaCha8", Func, 22},
+		{"NewPCG", Func, 22},
+		{"NewZipf", Func, 22},
+		{"NormFloat64", Func, 22},
+		{"PCG", Type, 22},
+		{"Perm", Func, 22},
+		{"Rand", Type, 22},
+		{"Shuffle", Func, 22},
+		{"Source", Type, 22},
+		{"Uint", Func, 23},
+		{"Uint32", Func, 22},
+		{"Uint32N", Func, 22},
+		{"Uint64", Func, 22},
+		{"Uint64N", Func, 22},
+		{"UintN", Func, 22},
+		{"Zipf", Type, 22},
 	},
 	"mime": {
-		{"(*WordDecoder).Decode", Method, 5, ""},
-		{"(*WordDecoder).DecodeHeader", Method, 5, ""},
-		{"(WordEncoder).Encode", Method, 5, ""},
-		{"AddExtensionType", Func, 0, "func(ext string, typ string) error"},
-		{"BEncoding", Const, 5, ""},
-		{"ErrInvalidMediaParameter", Var, 9, ""},
-		{"ExtensionsByType", Func, 5, "func(typ string) ([]string, error)"},
-		{"FormatMediaType", Func, 0, "func(t string, param map[string]string) string"},
-		{"ParseMediaType", Func, 0, "func(v string) (mediatype string, params map[string]string, err error)"},
-		{"QEncoding", Const, 5, ""},
-		{"TypeByExtension", Func, 0, "func(ext string) string"},
-		{"WordDecoder", Type, 5, ""},
-		{"WordDecoder.CharsetReader", Field, 5, ""},
-		{"WordEncoder", Type, 5, ""},
+		{"(*WordDecoder).Decode", Method, 5},
+		{"(*WordDecoder).DecodeHeader", Method, 5},
+		{"(WordEncoder).Encode", Method, 5},
+		{"AddExtensionType", Func, 0},
+		{"BEncoding", Const, 5},
+		{"ErrInvalidMediaParameter", Var, 9},
+		{"ExtensionsByType", Func, 5},
+		{"FormatMediaType", Func, 0},
+		{"ParseMediaType", Func, 0},
+		{"QEncoding", Const, 5},
+		{"TypeByExtension", Func, 0},
+		{"WordDecoder", Type, 5},
+		{"WordDecoder.CharsetReader", Field, 5},
+		{"WordEncoder", Type, 5},
 	},
 	"mime/multipart": {
-		{"(*FileHeader).Open", Method, 0, ""},
-		{"(*Form).RemoveAll", Method, 0, ""},
-		{"(*Part).Close", Method, 0, ""},
-		{"(*Part).FileName", Method, 0, ""},
-		{"(*Part).FormName", Method, 0, ""},
-		{"(*Part).Read", Method, 0, ""},
-		{"(*Reader).NextPart", Method, 0, ""},
-		{"(*Reader).NextRawPart", Method, 14, ""},
-		{"(*Reader).ReadForm", Method, 0, ""},
-		{"(*Writer).Boundary", Method, 0, ""},
-		{"(*Writer).Close", Method, 0, ""},
-		{"(*Writer).CreateFormField", Method, 0, ""},
-		{"(*Writer).CreateFormFile", Method, 0, ""},
-		{"(*Writer).CreatePart", Method, 0, ""},
-		{"(*Writer).FormDataContentType", Method, 0, ""},
-		{"(*Writer).SetBoundary", Method, 1, ""},
-		{"(*Writer).WriteField", Method, 0, ""},
-		{"ErrMessageTooLarge", Var, 9, ""},
-		{"File", Type, 0, ""},
-		{"FileContentDisposition", Func, 25, ""},
-		{"FileHeader", Type, 0, ""},
-		{"FileHeader.Filename", Field, 0, ""},
-		{"FileHeader.Header", Field, 0, ""},
-		{"FileHeader.Size", Field, 9, ""},
-		{"Form", Type, 0, ""},
-		{"Form.File", Field, 0, ""},
-		{"Form.Value", Field, 0, ""},
-		{"NewReader", Func, 0, "func(r io.Reader, boundary string) *Reader"},
-		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
-		{"Part", Type, 0, ""},
-		{"Part.Header", Field, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*FileHeader).Open", Method, 0},
+		{"(*Form).RemoveAll", Method, 0},
+		{"(*Part).Close", Method, 0},
+		{"(*Part).FileName", Method, 0},
+		{"(*Part).FormName", Method, 0},
+		{"(*Part).Read", Method, 0},
+		{"(*Reader).NextPart", Method, 0},
+		{"(*Reader).NextRawPart", Method, 14},
+		{"(*Reader).ReadForm", Method, 0},
+		{"(*Writer).Boundary", Method, 0},
+		{"(*Writer).Close", Method, 0},
+		{"(*Writer).CreateFormField", Method, 0},
+		{"(*Writer).CreateFormFile", Method, 0},
+		{"(*Writer).CreatePart", Method, 0},
+		{"(*Writer).FormDataContentType", Method, 0},
+		{"(*Writer).SetBoundary", Method, 1},
+		{"(*Writer).WriteField", Method, 0},
+		{"ErrMessageTooLarge", Var, 9},
+		{"File", Type, 0},
+		{"FileHeader", Type, 0},
+		{"FileHeader.Filename", Field, 0},
+		{"FileHeader.Header", Field, 0},
+		{"FileHeader.Size", Field, 9},
+		{"Form", Type, 0},
+		{"Form.File", Field, 0},
+		{"Form.Value", Field, 0},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"Part", Type, 0},
+		{"Part.Header", Field, 0},
+		{"Reader", Type, 0},
+		{"Writer", Type, 0},
 	},
 	"mime/quotedprintable": {
-		{"(*Reader).Read", Method, 5, ""},
-		{"(*Writer).Close", Method, 5, ""},
-		{"(*Writer).Write", Method, 5, ""},
-		{"NewReader", Func, 5, "func(r io.Reader) *Reader"},
-		{"NewWriter", Func, 5, "func(w io.Writer) *Writer"},
-		{"Reader", Type, 5, ""},
-		{"Writer", Type, 5, ""},
-		{"Writer.Binary", Field, 5, ""},
+		{"(*Reader).Read", Method, 5},
+		{"(*Writer).Close", Method, 5},
+		{"(*Writer).Write", Method, 5},
+		{"NewReader", Func, 5},
+		{"NewWriter", Func, 5},
+		{"Reader", Type, 5},
+		{"Writer", Type, 5},
+		{"Writer.Binary", Field, 5},
 	},
 	"net": {
-		{"(*AddrError).Error", Method, 0, ""},
-		{"(*AddrError).Temporary", Method, 0, ""},
-		{"(*AddrError).Timeout", Method, 0, ""},
-		{"(*Buffers).Read", Method, 8, ""},
-		{"(*Buffers).WriteTo", Method, 8, ""},
-		{"(*DNSConfigError).Error", Method, 0, ""},
-		{"(*DNSConfigError).Temporary", Method, 0, ""},
-		{"(*DNSConfigError).Timeout", Method, 0, ""},
-		{"(*DNSConfigError).Unwrap", Method, 13, ""},
-		{"(*DNSError).Error", Method, 0, ""},
-		{"(*DNSError).Temporary", Method, 0, ""},
-		{"(*DNSError).Timeout", Method, 0, ""},
-		{"(*DNSError).Unwrap", Method, 23, ""},
-		{"(*Dialer).Dial", Method, 1, ""},
-		{"(*Dialer).DialContext", Method, 7, ""},
-		{"(*Dialer).MultipathTCP", Method, 21, ""},
-		{"(*Dialer).SetMultipathTCP", Method, 21, ""},
-		{"(*IP).UnmarshalText", Method, 2, ""},
-		{"(*IPAddr).Network", Method, 0, ""},
-		{"(*IPAddr).String", Method, 0, ""},
-		{"(*IPConn).Close", Method, 0, ""},
-		{"(*IPConn).File", Method, 0, ""},
-		{"(*IPConn).LocalAddr", Method, 0, ""},
-		{"(*IPConn).Read", Method, 0, ""},
-		{"(*IPConn).ReadFrom", Method, 0, ""},
-		{"(*IPConn).ReadFromIP", Method, 0, ""},
-		{"(*IPConn).ReadMsgIP", Method, 1, ""},
-		{"(*IPConn).RemoteAddr", Method, 0, ""},
-		{"(*IPConn).SetDeadline", Method, 0, ""},
-		{"(*IPConn).SetReadBuffer", Method, 0, ""},
-		{"(*IPConn).SetReadDeadline", Method, 0, ""},
-		{"(*IPConn).SetWriteBuffer", Method, 0, ""},
-		{"(*IPConn).SetWriteDeadline", Method, 0, ""},
-		{"(*IPConn).SyscallConn", Method, 9, ""},
-		{"(*IPConn).Write", Method, 0, ""},
-		{"(*IPConn).WriteMsgIP", Method, 1, ""},
-		{"(*IPConn).WriteTo", Method, 0, ""},
-		{"(*IPConn).WriteToIP", Method, 0, ""},
-		{"(*IPNet).Contains", Method, 0, ""},
-		{"(*IPNet).Network", Method, 0, ""},
-		{"(*IPNet).String", Method, 0, ""},
-		{"(*Interface).Addrs", Method, 0, ""},
-		{"(*Interface).MulticastAddrs", Method, 0, ""},
-		{"(*ListenConfig).Listen", Method, 11, ""},
-		{"(*ListenConfig).ListenPacket", Method, 11, ""},
-		{"(*ListenConfig).MultipathTCP", Method, 21, ""},
-		{"(*ListenConfig).SetMultipathTCP", Method, 21, ""},
-		{"(*OpError).Error", Method, 0, ""},
-		{"(*OpError).Temporary", Method, 0, ""},
-		{"(*OpError).Timeout", Method, 0, ""},
-		{"(*OpError).Unwrap", Method, 13, ""},
-		{"(*ParseError).Error", Method, 0, ""},
-		{"(*ParseError).Temporary", Method, 17, ""},
-		{"(*ParseError).Timeout", Method, 17, ""},
-		{"(*Resolver).LookupAddr", Method, 8, ""},
-		{"(*Resolver).LookupCNAME", Method, 8, ""},
-		{"(*Resolver).LookupHost", Method, 8, ""},
-		{"(*Resolver).LookupIP", Method, 15, ""},
-		{"(*Resolver).LookupIPAddr", Method, 8, ""},
-		{"(*Resolver).LookupMX", Method, 8, ""},
-		{"(*Resolver).LookupNS", Method, 8, ""},
-		{"(*Resolver).LookupNetIP", Method, 18, ""},
-		{"(*Resolver).LookupPort", Method, 8, ""},
-		{"(*Resolver).LookupSRV", Method, 8, ""},
-		{"(*Resolver).LookupTXT", Method, 8, ""},
-		{"(*TCPAddr).AddrPort", Method, 18, ""},
-		{"(*TCPAddr).Network", Method, 0, ""},
-		{"(*TCPAddr).String", Method, 0, ""},
-		{"(*TCPConn).Close", Method, 0, ""},
-		{"(*TCPConn).CloseRead", Method, 0, ""},
-		{"(*TCPConn).CloseWrite", Method, 0, ""},
-		{"(*TCPConn).File", Method, 0, ""},
-		{"(*TCPConn).LocalAddr", Method, 0, ""},
-		{"(*TCPConn).MultipathTCP", Method, 21, ""},
-		{"(*TCPConn).Read", Method, 0, ""},
-		{"(*TCPConn).ReadFrom", Method, 0, ""},
-		{"(*TCPConn).RemoteAddr", Method, 0, ""},
-		{"(*TCPConn).SetDeadline", Method, 0, ""},
-		{"(*TCPConn).SetKeepAlive", Method, 0, ""},
-		{"(*TCPConn).SetKeepAliveConfig", Method, 23, ""},
-		{"(*TCPConn).SetKeepAlivePeriod", Method, 2, ""},
-		{"(*TCPConn).SetLinger", Method, 0, ""},
-		{"(*TCPConn).SetNoDelay", Method, 0, ""},
-		{"(*TCPConn).SetReadBuffer", Method, 0, ""},
-		{"(*TCPConn).SetReadDeadline", Method, 0, ""},
-		{"(*TCPConn).SetWriteBuffer", Method, 0, ""},
-		{"(*TCPConn).SetWriteDeadline", Method, 0, ""},
-		{"(*TCPConn).SyscallConn", Method, 9, ""},
-		{"(*TCPConn).Write", Method, 0, ""},
-		{"(*TCPConn).WriteTo", Method, 22, ""},
-		{"(*TCPListener).Accept", Method, 0, ""},
-		{"(*TCPListener).AcceptTCP", Method, 0, ""},
-		{"(*TCPListener).Addr", Method, 0, ""},
-		{"(*TCPListener).Close", Method, 0, ""},
-		{"(*TCPListener).File", Method, 0, ""},
-		{"(*TCPListener).SetDeadline", Method, 0, ""},
-		{"(*TCPListener).SyscallConn", Method, 10, ""},
-		{"(*UDPAddr).AddrPort", Method, 18, ""},
-		{"(*UDPAddr).Network", Method, 0, ""},
-		{"(*UDPAddr).String", Method, 0, ""},
-		{"(*UDPConn).Close", Method, 0, ""},
-		{"(*UDPConn).File", Method, 0, ""},
-		{"(*UDPConn).LocalAddr", Method, 0, ""},
-		{"(*UDPConn).Read", Method, 0, ""},
-		{"(*UDPConn).ReadFrom", Method, 0, ""},
-		{"(*UDPConn).ReadFromUDP", Method, 0, ""},
-		{"(*UDPConn).ReadFromUDPAddrPort", Method, 18, ""},
-		{"(*UDPConn).ReadMsgUDP", Method, 1, ""},
-		{"(*UDPConn).ReadMsgUDPAddrPort", Method, 18, ""},
-		{"(*UDPConn).RemoteAddr", Method, 0, ""},
-		{"(*UDPConn).SetDeadline", Method, 0, ""},
-		{"(*UDPConn).SetReadBuffer", Method, 0, ""},
-		{"(*UDPConn).SetReadDeadline", Method, 0, ""},
-		{"(*UDPConn).SetWriteBuffer", Method, 0, ""},
-		{"(*UDPConn).SetWriteDeadline", Method, 0, ""},
-		{"(*UDPConn).SyscallConn", Method, 9, ""},
-		{"(*UDPConn).Write", Method, 0, ""},
-		{"(*UDPConn).WriteMsgUDP", Method, 1, ""},
-		{"(*UDPConn).WriteMsgUDPAddrPort", Method, 18, ""},
-		{"(*UDPConn).WriteTo", Method, 0, ""},
-		{"(*UDPConn).WriteToUDP", Method, 0, ""},
-		{"(*UDPConn).WriteToUDPAddrPort", Method, 18, ""},
-		{"(*UnixAddr).Network", Method, 0, ""},
-		{"(*UnixAddr).String", Method, 0, ""},
-		{"(*UnixConn).Close", Method, 0, ""},
-		{"(*UnixConn).CloseRead", Method, 1, ""},
-		{"(*UnixConn).CloseWrite", Method, 1, ""},
-		{"(*UnixConn).File", Method, 0, ""},
-		{"(*UnixConn).LocalAddr", Method, 0, ""},
-		{"(*UnixConn).Read", Method, 0, ""},
-		{"(*UnixConn).ReadFrom", Method, 0, ""},
-		{"(*UnixConn).ReadFromUnix", Method, 0, ""},
-		{"(*UnixConn).ReadMsgUnix", Method, 0, ""},
-		{"(*UnixConn).RemoteAddr", Method, 0, ""},
-		{"(*UnixConn).SetDeadline", Method, 0, ""},
-		{"(*UnixConn).SetReadBuffer", Method, 0, ""},
-		{"(*UnixConn).SetReadDeadline", Method, 0, ""},
-		{"(*UnixConn).SetWriteBuffer", Method, 0, ""},
-		{"(*UnixConn).SetWriteDeadline", Method, 0, ""},
-		{"(*UnixConn).SyscallConn", Method, 9, ""},
-		{"(*UnixConn).Write", Method, 0, ""},
-		{"(*UnixConn).WriteMsgUnix", Method, 0, ""},
-		{"(*UnixConn).WriteTo", Method, 0, ""},
-		{"(*UnixConn).WriteToUnix", Method, 0, ""},
-		{"(*UnixListener).Accept", Method, 0, ""},
-		{"(*UnixListener).AcceptUnix", Method, 0, ""},
-		{"(*UnixListener).Addr", Method, 0, ""},
-		{"(*UnixListener).Close", Method, 0, ""},
-		{"(*UnixListener).File", Method, 0, ""},
-		{"(*UnixListener).SetDeadline", Method, 0, ""},
-		{"(*UnixListener).SetUnlinkOnClose", Method, 8, ""},
-		{"(*UnixListener).SyscallConn", Method, 10, ""},
-		{"(Flags).String", Method, 0, ""},
-		{"(HardwareAddr).String", Method, 0, ""},
-		{"(IP).AppendText", Method, 24, ""},
-		{"(IP).DefaultMask", Method, 0, ""},
-		{"(IP).Equal", Method, 0, ""},
-		{"(IP).IsGlobalUnicast", Method, 0, ""},
-		{"(IP).IsInterfaceLocalMulticast", Method, 0, ""},
-		{"(IP).IsLinkLocalMulticast", Method, 0, ""},
-		{"(IP).IsLinkLocalUnicast", Method, 0, ""},
-		{"(IP).IsLoopback", Method, 0, ""},
-		{"(IP).IsMulticast", Method, 0, ""},
-		{"(IP).IsPrivate", Method, 17, ""},
-		{"(IP).IsUnspecified", Method, 0, ""},
-		{"(IP).MarshalText", Method, 2, ""},
-		{"(IP).Mask", Method, 0, ""},
-		{"(IP).String", Method, 0, ""},
-		{"(IP).To16", Method, 0, ""},
-		{"(IP).To4", Method, 0, ""},
-		{"(IPMask).Size", Method, 0, ""},
-		{"(IPMask).String", Method, 0, ""},
-		{"(InvalidAddrError).Error", Method, 0, ""},
-		{"(InvalidAddrError).Temporary", Method, 0, ""},
-		{"(InvalidAddrError).Timeout", Method, 0, ""},
-		{"(UnknownNetworkError).Error", Method, 0, ""},
-		{"(UnknownNetworkError).Temporary", Method, 0, ""},
-		{"(UnknownNetworkError).Timeout", Method, 0, ""},
-		{"Addr", Type, 0, ""},
-		{"AddrError", Type, 0, ""},
-		{"AddrError.Addr", Field, 0, ""},
-		{"AddrError.Err", Field, 0, ""},
-		{"Buffers", Type, 8, ""},
-		{"CIDRMask", Func, 0, "func(ones int, bits int) IPMask"},
-		{"Conn", Type, 0, ""},
-		{"DNSConfigError", Type, 0, ""},
-		{"DNSConfigError.Err", Field, 0, ""},
-		{"DNSError", Type, 0, ""},
-		{"DNSError.Err", Field, 0, ""},
-		{"DNSError.IsNotFound", Field, 13, ""},
-		{"DNSError.IsTemporary", Field, 6, ""},
-		{"DNSError.IsTimeout", Field, 0, ""},
-		{"DNSError.Name", Field, 0, ""},
-		{"DNSError.Server", Field, 0, ""},
-		{"DNSError.UnwrapErr", Field, 23, ""},
-		{"DefaultResolver", Var, 8, ""},
-		{"Dial", Func, 0, "func(network string, address string) (Conn, error)"},
-		{"DialIP", Func, 0, "func(network string, laddr *IPAddr, raddr *IPAddr) (*IPConn, error)"},
-		{"DialTCP", Func, 0, "func(network string, laddr *TCPAddr, raddr *TCPAddr) (*TCPConn, error)"},
-		{"DialTimeout", Func, 0, "func(network string, address string, timeout time.Duration) (Conn, error)"},
-		{"DialUDP", Func, 0, "func(network string, laddr *UDPAddr, raddr *UDPAddr) (*UDPConn, error)"},
-		{"DialUnix", Func, 0, "func(network string, laddr *UnixAddr, raddr *UnixAddr) (*UnixConn, error)"},
-		{"Dialer", Type, 1, ""},
-		{"Dialer.Cancel", Field, 6, ""},
-		{"Dialer.Control", Field, 11, ""},
-		{"Dialer.ControlContext", Field, 20, ""},
-		{"Dialer.Deadline", Field, 1, ""},
-		{"Dialer.DualStack", Field, 2, ""},
-		{"Dialer.FallbackDelay", Field, 5, ""},
-		{"Dialer.KeepAlive", Field, 3, ""},
-		{"Dialer.KeepAliveConfig", Field, 23, ""},
-		{"Dialer.LocalAddr", Field, 1, ""},
-		{"Dialer.Resolver", Field, 8, ""},
-		{"Dialer.Timeout", Field, 1, ""},
-		{"ErrClosed", Var, 16, ""},
-		{"ErrWriteToConnected", Var, 0, ""},
-		{"Error", Type, 0, ""},
-		{"FileConn", Func, 0, "func(f *os.File) (c Conn, err error)"},
-		{"FileListener", Func, 0, "func(f *os.File) (ln Listener, err error)"},
-		{"FilePacketConn", Func, 0, "func(f *os.File) (c PacketConn, err error)"},
-		{"FlagBroadcast", Const, 0, ""},
-		{"FlagLoopback", Const, 0, ""},
-		{"FlagMulticast", Const, 0, ""},
-		{"FlagPointToPoint", Const, 0, ""},
-		{"FlagRunning", Const, 20, ""},
-		{"FlagUp", Const, 0, ""},
-		{"Flags", Type, 0, ""},
-		{"HardwareAddr", Type, 0, ""},
-		{"IP", Type, 0, ""},
-		{"IPAddr", Type, 0, ""},
-		{"IPAddr.IP", Field, 0, ""},
-		{"IPAddr.Zone", Field, 1, ""},
-		{"IPConn", Type, 0, ""},
-		{"IPMask", Type, 0, ""},
-		{"IPNet", Type, 0, ""},
-		{"IPNet.IP", Field, 0, ""},
-		{"IPNet.Mask", Field, 0, ""},
-		{"IPv4", Func, 0, "func(a byte, b byte, c byte, d byte) IP"},
-		{"IPv4Mask", Func, 0, "func(a byte, b byte, c byte, d byte) IPMask"},
-		{"IPv4allrouter", Var, 0, ""},
-		{"IPv4allsys", Var, 0, ""},
-		{"IPv4bcast", Var, 0, ""},
-		{"IPv4len", Const, 0, ""},
-		{"IPv4zero", Var, 0, ""},
-		{"IPv6interfacelocalallnodes", Var, 0, ""},
-		{"IPv6len", Const, 0, ""},
-		{"IPv6linklocalallnodes", Var, 0, ""},
-		{"IPv6linklocalallrouters", Var, 0, ""},
-		{"IPv6loopback", Var, 0, ""},
-		{"IPv6unspecified", Var, 0, ""},
-		{"IPv6zero", Var, 0, ""},
-		{"Interface", Type, 0, ""},
-		{"Interface.Flags", Field, 0, ""},
-		{"Interface.HardwareAddr", Field, 0, ""},
-		{"Interface.Index", Field, 0, ""},
-		{"Interface.MTU", Field, 0, ""},
-		{"Interface.Name", Field, 0, ""},
-		{"InterfaceAddrs", Func, 0, "func() ([]Addr, error)"},
-		{"InterfaceByIndex", Func, 0, "func(index int) (*Interface, error)"},
-		{"InterfaceByName", Func, 0, "func(name string) (*Interface, error)"},
-		{"Interfaces", Func, 0, "func() ([]Interface, error)"},
-		{"InvalidAddrError", Type, 0, ""},
-		{"JoinHostPort", Func, 0, "func(host string, port string) string"},
-		{"KeepAliveConfig", Type, 23, ""},
-		{"KeepAliveConfig.Count", Field, 23, ""},
-		{"KeepAliveConfig.Enable", Field, 23, ""},
-		{"KeepAliveConfig.Idle", Field, 23, ""},
-		{"KeepAliveConfig.Interval", Field, 23, ""},
-		{"Listen", Func, 0, "func(network string, address string) (Listener, error)"},
-		{"ListenConfig", Type, 11, ""},
-		{"ListenConfig.Control", Field, 11, ""},
-		{"ListenConfig.KeepAlive", Field, 13, ""},
-		{"ListenConfig.KeepAliveConfig", Field, 23, ""},
-		{"ListenIP", Func, 0, "func(network string, laddr *IPAddr) (*IPConn, error)"},
-		{"ListenMulticastUDP", Func, 0, "func(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)"},
-		{"ListenPacket", Func, 0, "func(network string, address string) (PacketConn, error)"},
-		{"ListenTCP", Func, 0, "func(network string, laddr *TCPAddr) (*TCPListener, error)"},
-		{"ListenUDP", Func, 0, "func(network string, laddr *UDPAddr) (*UDPConn, error)"},
-		{"ListenUnix", Func, 0, "func(network string, laddr *UnixAddr) (*UnixListener, error)"},
-		{"ListenUnixgram", Func, 0, "func(network string, laddr *UnixAddr) (*UnixConn, error)"},
-		{"Listener", Type, 0, ""},
-		{"LookupAddr", Func, 0, "func(addr string) (names []string, err error)"},
-		{"LookupCNAME", Func, 0, "func(host string) (cname string, err error)"},
-		{"LookupHost", Func, 0, "func(host string) (addrs []string, err error)"},
-		{"LookupIP", Func, 0, "func(host string) ([]IP, error)"},
-		{"LookupMX", Func, 0, "func(name string) ([]*MX, error)"},
-		{"LookupNS", Func, 1, "func(name string) ([]*NS, error)"},
-		{"LookupPort", Func, 0, "func(network string, service string) (port int, err error)"},
-		{"LookupSRV", Func, 0, "func(service string, proto string, name string) (cname string, addrs []*SRV, err error)"},
-		{"LookupTXT", Func, 0, "func(name string) ([]string, error)"},
-		{"MX", Type, 0, ""},
-		{"MX.Host", Field, 0, ""},
-		{"MX.Pref", Field, 0, ""},
-		{"NS", Type, 1, ""},
-		{"NS.Host", Field, 1, ""},
-		{"OpError", Type, 0, ""},
-		{"OpError.Addr", Field, 0, ""},
-		{"OpError.Err", Field, 0, ""},
-		{"OpError.Net", Field, 0, ""},
-		{"OpError.Op", Field, 0, ""},
-		{"OpError.Source", Field, 5, ""},
-		{"PacketConn", Type, 0, ""},
-		{"ParseCIDR", Func, 0, "func(s string) (IP, *IPNet, error)"},
-		{"ParseError", Type, 0, ""},
-		{"ParseError.Text", Field, 0, ""},
-		{"ParseError.Type", Field, 0, ""},
-		{"ParseIP", Func, 0, "func(s string) IP"},
-		{"ParseMAC", Func, 0, "func(s string) (hw HardwareAddr, err error)"},
-		{"Pipe", Func, 0, "func() (Conn, Conn)"},
-		{"ResolveIPAddr", Func, 0, "func(network string, address string) (*IPAddr, error)"},
-		{"ResolveTCPAddr", Func, 0, "func(network string, address string) (*TCPAddr, error)"},
-		{"ResolveUDPAddr", Func, 0, "func(network string, address string) (*UDPAddr, error)"},
-		{"ResolveUnixAddr", Func, 0, "func(network string, address string) (*UnixAddr, error)"},
-		{"Resolver", Type, 8, ""},
-		{"Resolver.Dial", Field, 9, ""},
-		{"Resolver.PreferGo", Field, 8, ""},
-		{"Resolver.StrictErrors", Field, 9, ""},
-		{"SRV", Type, 0, ""},
-		{"SRV.Port", Field, 0, ""},
-		{"SRV.Priority", Field, 0, ""},
-		{"SRV.Target", Field, 0, ""},
-		{"SRV.Weight", Field, 0, ""},
-		{"SplitHostPort", Func, 0, "func(hostport string) (host string, port string, err error)"},
-		{"TCPAddr", Type, 0, ""},
-		{"TCPAddr.IP", Field, 0, ""},
-		{"TCPAddr.Port", Field, 0, ""},
-		{"TCPAddr.Zone", Field, 1, ""},
-		{"TCPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *TCPAddr"},
-		{"TCPConn", Type, 0, ""},
-		{"TCPListener", Type, 0, ""},
-		{"UDPAddr", Type, 0, ""},
-		{"UDPAddr.IP", Field, 0, ""},
-		{"UDPAddr.Port", Field, 0, ""},
-		{"UDPAddr.Zone", Field, 1, ""},
-		{"UDPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *UDPAddr"},
-		{"UDPConn", Type, 0, ""},
-		{"UnixAddr", Type, 0, ""},
-		{"UnixAddr.Name", Field, 0, ""},
-		{"UnixAddr.Net", Field, 0, ""},
-		{"UnixConn", Type, 0, ""},
-		{"UnixListener", Type, 0, ""},
-		{"UnknownNetworkError", Type, 0, ""},
+		{"(*AddrError).Error", Method, 0},
+		{"(*AddrError).Temporary", Method, 0},
+		{"(*AddrError).Timeout", Method, 0},
+		{"(*Buffers).Read", Method, 8},
+		{"(*Buffers).WriteTo", Method, 8},
+		{"(*DNSConfigError).Error", Method, 0},
+		{"(*DNSConfigError).Temporary", Method, 0},
+		{"(*DNSConfigError).Timeout", Method, 0},
+		{"(*DNSConfigError).Unwrap", Method, 13},
+		{"(*DNSError).Error", Method, 0},
+		{"(*DNSError).Temporary", Method, 0},
+		{"(*DNSError).Timeout", Method, 0},
+		{"(*DNSError).Unwrap", Method, 23},
+		{"(*Dialer).Dial", Method, 1},
+		{"(*Dialer).DialContext", Method, 7},
+		{"(*Dialer).MultipathTCP", Method, 21},
+		{"(*Dialer).SetMultipathTCP", Method, 21},
+		{"(*IP).UnmarshalText", Method, 2},
+		{"(*IPAddr).Network", Method, 0},
+		{"(*IPAddr).String", Method, 0},
+		{"(*IPConn).Close", Method, 0},
+		{"(*IPConn).File", Method, 0},
+		{"(*IPConn).LocalAddr", Method, 0},
+		{"(*IPConn).Read", Method, 0},
+		{"(*IPConn).ReadFrom", Method, 0},
+		{"(*IPConn).ReadFromIP", Method, 0},
+		{"(*IPConn).ReadMsgIP", Method, 1},
+		{"(*IPConn).RemoteAddr", Method, 0},
+		{"(*IPConn).SetDeadline", Method, 0},
+		{"(*IPConn).SetReadBuffer", Method, 0},
+		{"(*IPConn).SetReadDeadline", Method, 0},
+		{"(*IPConn).SetWriteBuffer", Method, 0},
+		{"(*IPConn).SetWriteDeadline", Method, 0},
+		{"(*IPConn).SyscallConn", Method, 9},
+		{"(*IPConn).Write", Method, 0},
+		{"(*IPConn).WriteMsgIP", Method, 1},
+		{"(*IPConn).WriteTo", Method, 0},
+		{"(*IPConn).WriteToIP", Method, 0},
+		{"(*IPNet).Contains", Method, 0},
+		{"(*IPNet).Network", Method, 0},
+		{"(*IPNet).String", Method, 0},
+		{"(*Interface).Addrs", Method, 0},
+		{"(*Interface).MulticastAddrs", Method, 0},
+		{"(*ListenConfig).Listen", Method, 11},
+		{"(*ListenConfig).ListenPacket", Method, 11},
+		{"(*ListenConfig).MultipathTCP", Method, 21},
+		{"(*ListenConfig).SetMultipathTCP", Method, 21},
+		{"(*OpError).Error", Method, 0},
+		{"(*OpError).Temporary", Method, 0},
+		{"(*OpError).Timeout", Method, 0},
+		{"(*OpError).Unwrap", Method, 13},
+		{"(*ParseError).Error", Method, 0},
+		{"(*ParseError).Temporary", Method, 17},
+		{"(*ParseError).Timeout", Method, 17},
+		{"(*Resolver).LookupAddr", Method, 8},
+		{"(*Resolver).LookupCNAME", Method, 8},
+		{"(*Resolver).LookupHost", Method, 8},
+		{"(*Resolver).LookupIP", Method, 15},
+		{"(*Resolver).LookupIPAddr", Method, 8},
+		{"(*Resolver).LookupMX", Method, 8},
+		{"(*Resolver).LookupNS", Method, 8},
+		{"(*Resolver).LookupNetIP", Method, 18},
+		{"(*Resolver).LookupPort", Method, 8},
+		{"(*Resolver).LookupSRV", Method, 8},
+		{"(*Resolver).LookupTXT", Method, 8},
+		{"(*TCPAddr).AddrPort", Method, 18},
+		{"(*TCPAddr).Network", Method, 0},
+		{"(*TCPAddr).String", Method, 0},
+		{"(*TCPConn).Close", Method, 0},
+		{"(*TCPConn).CloseRead", Method, 0},
+		{"(*TCPConn).CloseWrite", Method, 0},
+		{"(*TCPConn).File", Method, 0},
+		{"(*TCPConn).LocalAddr", Method, 0},
+		{"(*TCPConn).MultipathTCP", Method, 21},
+		{"(*TCPConn).Read", Method, 0},
+		{"(*TCPConn).ReadFrom", Method, 0},
+		{"(*TCPConn).RemoteAddr", Method, 0},
+		{"(*TCPConn).SetDeadline", Method, 0},
+		{"(*TCPConn).SetKeepAlive", Method, 0},
+		{"(*TCPConn).SetKeepAliveConfig", Method, 23},
+		{"(*TCPConn).SetKeepAlivePeriod", Method, 2},
+		{"(*TCPConn).SetLinger", Method, 0},
+		{"(*TCPConn).SetNoDelay", Method, 0},
+		{"(*TCPConn).SetReadBuffer", Method, 0},
+		{"(*TCPConn).SetReadDeadline", Method, 0},
+		{"(*TCPConn).SetWriteBuffer", Method, 0},
+		{"(*TCPConn).SetWriteDeadline", Method, 0},
+		{"(*TCPConn).SyscallConn", Method, 9},
+		{"(*TCPConn).Write", Method, 0},
+		{"(*TCPConn).WriteTo", Method, 22},
+		{"(*TCPListener).Accept", Method, 0},
+		{"(*TCPListener).AcceptTCP", Method, 0},
+		{"(*TCPListener).Addr", Method, 0},
+		{"(*TCPListener).Close", Method, 0},
+		{"(*TCPListener).File", Method, 0},
+		{"(*TCPListener).SetDeadline", Method, 0},
+		{"(*TCPListener).SyscallConn", Method, 10},
+		{"(*UDPAddr).AddrPort", Method, 18},
+		{"(*UDPAddr).Network", Method, 0},
+		{"(*UDPAddr).String", Method, 0},
+		{"(*UDPConn).Close", Method, 0},
+		{"(*UDPConn).File", Method, 0},
+		{"(*UDPConn).LocalAddr", Method, 0},
+		{"(*UDPConn).Read", Method, 0},
+		{"(*UDPConn).ReadFrom", Method, 0},
+		{"(*UDPConn).ReadFromUDP", Method, 0},
+		{"(*UDPConn).ReadFromUDPAddrPort", Method, 18},
+		{"(*UDPConn).ReadMsgUDP", Method, 1},
+		{"(*UDPConn).ReadMsgUDPAddrPort", Method, 18},
+		{"(*UDPConn).RemoteAddr", Method, 0},
+		{"(*UDPConn).SetDeadline", Method, 0},
+		{"(*UDPConn).SetReadBuffer", Method, 0},
+		{"(*UDPConn).SetReadDeadline", Method, 0},
+		{"(*UDPConn).SetWriteBuffer", Method, 0},
+		{"(*UDPConn).SetWriteDeadline", Method, 0},
+		{"(*UDPConn).SyscallConn", Method, 9},
+		{"(*UDPConn).Write", Method, 0},
+		{"(*UDPConn).WriteMsgUDP", Method, 1},
+		{"(*UDPConn).WriteMsgUDPAddrPort", Method, 18},
+		{"(*UDPConn).WriteTo", Method, 0},
+		{"(*UDPConn).WriteToUDP", Method, 0},
+		{"(*UDPConn).WriteToUDPAddrPort", Method, 18},
+		{"(*UnixAddr).Network", Method, 0},
+		{"(*UnixAddr).String", Method, 0},
+		{"(*UnixConn).Close", Method, 0},
+		{"(*UnixConn).CloseRead", Method, 1},
+		{"(*UnixConn).CloseWrite", Method, 1},
+		{"(*UnixConn).File", Method, 0},
+		{"(*UnixConn).LocalAddr", Method, 0},
+		{"(*UnixConn).Read", Method, 0},
+		{"(*UnixConn).ReadFrom", Method, 0},
+		{"(*UnixConn).ReadFromUnix", Method, 0},
+		{"(*UnixConn).ReadMsgUnix", Method, 0},
+		{"(*UnixConn).RemoteAddr", Method, 0},
+		{"(*UnixConn).SetDeadline", Method, 0},
+		{"(*UnixConn).SetReadBuffer", Method, 0},
+		{"(*UnixConn).SetReadDeadline", Method, 0},
+		{"(*UnixConn).SetWriteBuffer", Method, 0},
+		{"(*UnixConn).SetWriteDeadline", Method, 0},
+		{"(*UnixConn).SyscallConn", Method, 9},
+		{"(*UnixConn).Write", Method, 0},
+		{"(*UnixConn).WriteMsgUnix", Method, 0},
+		{"(*UnixConn).WriteTo", Method, 0},
+		{"(*UnixConn).WriteToUnix", Method, 0},
+		{"(*UnixListener).Accept", Method, 0},
+		{"(*UnixListener).AcceptUnix", Method, 0},
+		{"(*UnixListener).Addr", Method, 0},
+		{"(*UnixListener).Close", Method, 0},
+		{"(*UnixListener).File", Method, 0},
+		{"(*UnixListener).SetDeadline", Method, 0},
+		{"(*UnixListener).SetUnlinkOnClose", Method, 8},
+		{"(*UnixListener).SyscallConn", Method, 10},
+		{"(Flags).String", Method, 0},
+		{"(HardwareAddr).String", Method, 0},
+		{"(IP).AppendText", Method, 24},
+		{"(IP).DefaultMask", Method, 0},
+		{"(IP).Equal", Method, 0},
+		{"(IP).IsGlobalUnicast", Method, 0},
+		{"(IP).IsInterfaceLocalMulticast", Method, 0},
+		{"(IP).IsLinkLocalMulticast", Method, 0},
+		{"(IP).IsLinkLocalUnicast", Method, 0},
+		{"(IP).IsLoopback", Method, 0},
+		{"(IP).IsMulticast", Method, 0},
+		{"(IP).IsPrivate", Method, 17},
+		{"(IP).IsUnspecified", Method, 0},
+		{"(IP).MarshalText", Method, 2},
+		{"(IP).Mask", Method, 0},
+		{"(IP).String", Method, 0},
+		{"(IP).To16", Method, 0},
+		{"(IP).To4", Method, 0},
+		{"(IPMask).Size", Method, 0},
+		{"(IPMask).String", Method, 0},
+		{"(InvalidAddrError).Error", Method, 0},
+		{"(InvalidAddrError).Temporary", Method, 0},
+		{"(InvalidAddrError).Timeout", Method, 0},
+		{"(UnknownNetworkError).Error", Method, 0},
+		{"(UnknownNetworkError).Temporary", Method, 0},
+		{"(UnknownNetworkError).Timeout", Method, 0},
+		{"Addr", Type, 0},
+		{"AddrError", Type, 0},
+		{"AddrError.Addr", Field, 0},
+		{"AddrError.Err", Field, 0},
+		{"Buffers", Type, 8},
+		{"CIDRMask", Func, 0},
+		{"Conn", Type, 0},
+		{"DNSConfigError", Type, 0},
+		{"DNSConfigError.Err", Field, 0},
+		{"DNSError", Type, 0},
+		{"DNSError.Err", Field, 0},
+		{"DNSError.IsNotFound", Field, 13},
+		{"DNSError.IsTemporary", Field, 6},
+		{"DNSError.IsTimeout", Field, 0},
+		{"DNSError.Name", Field, 0},
+		{"DNSError.Server", Field, 0},
+		{"DNSError.UnwrapErr", Field, 23},
+		{"DefaultResolver", Var, 8},
+		{"Dial", Func, 0},
+		{"DialIP", Func, 0},
+		{"DialTCP", Func, 0},
+		{"DialTimeout", Func, 0},
+		{"DialUDP", Func, 0},
+		{"DialUnix", Func, 0},
+		{"Dialer", Type, 1},
+		{"Dialer.Cancel", Field, 6},
+		{"Dialer.Control", Field, 11},
+		{"Dialer.ControlContext", Field, 20},
+		{"Dialer.Deadline", Field, 1},
+		{"Dialer.DualStack", Field, 2},
+		{"Dialer.FallbackDelay", Field, 5},
+		{"Dialer.KeepAlive", Field, 3},
+		{"Dialer.KeepAliveConfig", Field, 23},
+		{"Dialer.LocalAddr", Field, 1},
+		{"Dialer.Resolver", Field, 8},
+		{"Dialer.Timeout", Field, 1},
+		{"ErrClosed", Var, 16},
+		{"ErrWriteToConnected", Var, 0},
+		{"Error", Type, 0},
+		{"FileConn", Func, 0},
+		{"FileListener", Func, 0},
+		{"FilePacketConn", Func, 0},
+		{"FlagBroadcast", Const, 0},
+		{"FlagLoopback", Const, 0},
+		{"FlagMulticast", Const, 0},
+		{"FlagPointToPoint", Const, 0},
+		{"FlagRunning", Const, 20},
+		{"FlagUp", Const, 0},
+		{"Flags", Type, 0},
+		{"HardwareAddr", Type, 0},
+		{"IP", Type, 0},
+		{"IPAddr", Type, 0},
+		{"IPAddr.IP", Field, 0},
+		{"IPAddr.Zone", Field, 1},
+		{"IPConn", Type, 0},
+		{"IPMask", Type, 0},
+		{"IPNet", Type, 0},
+		{"IPNet.IP", Field, 0},
+		{"IPNet.Mask", Field, 0},
+		{"IPv4", Func, 0},
+		{"IPv4Mask", Func, 0},
+		{"IPv4allrouter", Var, 0},
+		{"IPv4allsys", Var, 0},
+		{"IPv4bcast", Var, 0},
+		{"IPv4len", Const, 0},
+		{"IPv4zero", Var, 0},
+		{"IPv6interfacelocalallnodes", Var, 0},
+		{"IPv6len", Const, 0},
+		{"IPv6linklocalallnodes", Var, 0},
+		{"IPv6linklocalallrouters", Var, 0},
+		{"IPv6loopback", Var, 0},
+		{"IPv6unspecified", Var, 0},
+		{"IPv6zero", Var, 0},
+		{"Interface", Type, 0},
+		{"Interface.Flags", Field, 0},
+		{"Interface.HardwareAddr", Field, 0},
+		{"Interface.Index", Field, 0},
+		{"Interface.MTU", Field, 0},
+		{"Interface.Name", Field, 0},
+		{"InterfaceAddrs", Func, 0},
+		{"InterfaceByIndex", Func, 0},
+		{"InterfaceByName", Func, 0},
+		{"Interfaces", Func, 0},
+		{"InvalidAddrError", Type, 0},
+		{"JoinHostPort", Func, 0},
+		{"KeepAliveConfig", Type, 23},
+		{"KeepAliveConfig.Count", Field, 23},
+		{"KeepAliveConfig.Enable", Field, 23},
+		{"KeepAliveConfig.Idle", Field, 23},
+		{"KeepAliveConfig.Interval", Field, 23},
+		{"Listen", Func, 0},
+		{"ListenConfig", Type, 11},
+		{"ListenConfig.Control", Field, 11},
+		{"ListenConfig.KeepAlive", Field, 13},
+		{"ListenConfig.KeepAliveConfig", Field, 23},
+		{"ListenIP", Func, 0},
+		{"ListenMulticastUDP", Func, 0},
+		{"ListenPacket", Func, 0},
+		{"ListenTCP", Func, 0},
+		{"ListenUDP", Func, 0},
+		{"ListenUnix", Func, 0},
+		{"ListenUnixgram", Func, 0},
+		{"Listener", Type, 0},
+		{"LookupAddr", Func, 0},
+		{"LookupCNAME", Func, 0},
+		{"LookupHost", Func, 0},
+		{"LookupIP", Func, 0},
+		{"LookupMX", Func, 0},
+		{"LookupNS", Func, 1},
+		{"LookupPort", Func, 0},
+		{"LookupSRV", Func, 0},
+		{"LookupTXT", Func, 0},
+		{"MX", Type, 0},
+		{"MX.Host", Field, 0},
+		{"MX.Pref", Field, 0},
+		{"NS", Type, 1},
+		{"NS.Host", Field, 1},
+		{"OpError", Type, 0},
+		{"OpError.Addr", Field, 0},
+		{"OpError.Err", Field, 0},
+		{"OpError.Net", Field, 0},
+		{"OpError.Op", Field, 0},
+		{"OpError.Source", Field, 5},
+		{"PacketConn", Type, 0},
+		{"ParseCIDR", Func, 0},
+		{"ParseError", Type, 0},
+		{"ParseError.Text", Field, 0},
+		{"ParseError.Type", Field, 0},
+		{"ParseIP", Func, 0},
+		{"ParseMAC", Func, 0},
+		{"Pipe", Func, 0},
+		{"ResolveIPAddr", Func, 0},
+		{"ResolveTCPAddr", Func, 0},
+		{"ResolveUDPAddr", Func, 0},
+		{"ResolveUnixAddr", Func, 0},
+		{"Resolver", Type, 8},
+		{"Resolver.Dial", Field, 9},
+		{"Resolver.PreferGo", Field, 8},
+		{"Resolver.StrictErrors", Field, 9},
+		{"SRV", Type, 0},
+		{"SRV.Port", Field, 0},
+		{"SRV.Priority", Field, 0},
+		{"SRV.Target", Field, 0},
+		{"SRV.Weight", Field, 0},
+		{"SplitHostPort", Func, 0},
+		{"TCPAddr", Type, 0},
+		{"TCPAddr.IP", Field, 0},
+		{"TCPAddr.Port", Field, 0},
+		{"TCPAddr.Zone", Field, 1},
+		{"TCPAddrFromAddrPort", Func, 18},
+		{"TCPConn", Type, 0},
+		{"TCPListener", Type, 0},
+		{"UDPAddr", Type, 0},
+		{"UDPAddr.IP", Field, 0},
+		{"UDPAddr.Port", Field, 0},
+		{"UDPAddr.Zone", Field, 1},
+		{"UDPAddrFromAddrPort", Func, 18},
+		{"UDPConn", Type, 0},
+		{"UnixAddr", Type, 0},
+		{"UnixAddr.Name", Field, 0},
+		{"UnixAddr.Net", Field, 0},
+		{"UnixConn", Type, 0},
+		{"UnixListener", Type, 0},
+		{"UnknownNetworkError", Type, 0},
 	},
 	"net/http": {
-		{"(*Client).CloseIdleConnections", Method, 12, ""},
-		{"(*Client).Do", Method, 0, ""},
-		{"(*Client).Get", Method, 0, ""},
-		{"(*Client).Head", Method, 0, ""},
-		{"(*Client).Post", Method, 0, ""},
-		{"(*Client).PostForm", Method, 0, ""},
-		{"(*Cookie).String", Method, 0, ""},
-		{"(*Cookie).Valid", Method, 18, ""},
-		{"(*MaxBytesError).Error", Method, 19, ""},
-		{"(*ProtocolError).Error", Method, 0, ""},
-		{"(*ProtocolError).Is", Method, 21, ""},
-		{"(*Protocols).SetHTTP1", Method, 24, ""},
-		{"(*Protocols).SetHTTP2", Method, 24, ""},
-		{"(*Protocols).SetUnencryptedHTTP2", Method, 24, ""},
-		{"(*Request).AddCookie", Method, 0, ""},
-		{"(*Request).BasicAuth", Method, 4, ""},
-		{"(*Request).Clone", Method, 13, ""},
-		{"(*Request).Context", Method, 7, ""},
-		{"(*Request).Cookie", Method, 0, ""},
-		{"(*Request).Cookies", Method, 0, ""},
-		{"(*Request).CookiesNamed", Method, 23, ""},
-		{"(*Request).FormFile", Method, 0, ""},
-		{"(*Request).FormValue", Method, 0, ""},
-		{"(*Request).MultipartReader", Method, 0, ""},
-		{"(*Request).ParseForm", Method, 0, ""},
-		{"(*Request).ParseMultipartForm", Method, 0, ""},
-		{"(*Request).PathValue", Method, 22, ""},
-		{"(*Request).PostFormValue", Method, 1, ""},
-		{"(*Request).ProtoAtLeast", Method, 0, ""},
-		{"(*Request).Referer", Method, 0, ""},
-		{"(*Request).SetBasicAuth", Method, 0, ""},
-		{"(*Request).SetPathValue", Method, 22, ""},
-		{"(*Request).UserAgent", Method, 0, ""},
-		{"(*Request).WithContext", Method, 7, ""},
-		{"(*Request).Write", Method, 0, ""},
-		{"(*Request).WriteProxy", Method, 0, ""},
-		{"(*Response).Cookies", Method, 0, ""},
-		{"(*Response).Location", Method, 0, ""},
-		{"(*Response).ProtoAtLeast", Method, 0, ""},
-		{"(*Response).Write", Method, 0, ""},
-		{"(*ResponseController).EnableFullDuplex", Method, 21, ""},
-		{"(*ResponseController).Flush", Method, 20, ""},
-		{"(*ResponseController).Hijack", Method, 20, ""},
-		{"(*ResponseController).SetReadDeadline", Method, 20, ""},
-		{"(*ResponseController).SetWriteDeadline", Method, 20, ""},
-		{"(*ServeMux).Handle", Method, 0, ""},
-		{"(*ServeMux).HandleFunc", Method, 0, ""},
-		{"(*ServeMux).Handler", Method, 1, ""},
-		{"(*ServeMux).ServeHTTP", Method, 0, ""},
-		{"(*Server).Close", Method, 8, ""},
-		{"(*Server).ListenAndServe", Method, 0, ""},
-		{"(*Server).ListenAndServeTLS", Method, 0, ""},
-		{"(*Server).RegisterOnShutdown", Method, 9, ""},
-		{"(*Server).Serve", Method, 0, ""},
-		{"(*Server).ServeTLS", Method, 9, ""},
-		{"(*Server).SetKeepAlivesEnabled", Method, 3, ""},
-		{"(*Server).Shutdown", Method, 8, ""},
-		{"(*Transport).CancelRequest", Method, 1, ""},
-		{"(*Transport).Clone", Method, 13, ""},
-		{"(*Transport).CloseIdleConnections", Method, 0, ""},
-		{"(*Transport).RegisterProtocol", Method, 0, ""},
-		{"(*Transport).RoundTrip", Method, 0, ""},
-		{"(ConnState).String", Method, 3, ""},
-		{"(Dir).Open", Method, 0, ""},
-		{"(HandlerFunc).ServeHTTP", Method, 0, ""},
-		{"(Header).Add", Method, 0, ""},
-		{"(Header).Clone", Method, 13, ""},
-		{"(Header).Del", Method, 0, ""},
-		{"(Header).Get", Method, 0, ""},
-		{"(Header).Set", Method, 0, ""},
-		{"(Header).Values", Method, 14, ""},
-		{"(Header).Write", Method, 0, ""},
-		{"(Header).WriteSubset", Method, 0, ""},
-		{"(Protocols).HTTP1", Method, 24, ""},
-		{"(Protocols).HTTP2", Method, 24, ""},
-		{"(Protocols).String", Method, 24, ""},
-		{"(Protocols).UnencryptedHTTP2", Method, 24, ""},
-		{"AllowQuerySemicolons", Func, 17, "func(h Handler) Handler"},
-		{"CanonicalHeaderKey", Func, 0, "func(s string) string"},
-		{"Client", Type, 0, ""},
-		{"Client.CheckRedirect", Field, 0, ""},
-		{"Client.Jar", Field, 0, ""},
-		{"Client.Timeout", Field, 3, ""},
-		{"Client.Transport", Field, 0, ""},
-		{"CloseNotifier", Type, 1, ""},
-		{"ConnState", Type, 3, ""},
-		{"Cookie", Type, 0, ""},
-		{"Cookie.Domain", Field, 0, ""},
-		{"Cookie.Expires", Field, 0, ""},
-		{"Cookie.HttpOnly", Field, 0, ""},
-		{"Cookie.MaxAge", Field, 0, ""},
-		{"Cookie.Name", Field, 0, ""},
-		{"Cookie.Partitioned", Field, 23, ""},
-		{"Cookie.Path", Field, 0, ""},
-		{"Cookie.Quoted", Field, 23, ""},
-		{"Cookie.Raw", Field, 0, ""},
-		{"Cookie.RawExpires", Field, 0, ""},
-		{"Cookie.SameSite", Field, 11, ""},
-		{"Cookie.Secure", Field, 0, ""},
-		{"Cookie.Unparsed", Field, 0, ""},
-		{"Cookie.Value", Field, 0, ""},
-		{"CookieJar", Type, 0, ""},
-		{"DefaultClient", Var, 0, ""},
-		{"DefaultMaxHeaderBytes", Const, 0, ""},
-		{"DefaultMaxIdleConnsPerHost", Const, 0, ""},
-		{"DefaultServeMux", Var, 0, ""},
-		{"DefaultTransport", Var, 0, ""},
-		{"DetectContentType", Func, 0, "func(data []byte) string"},
-		{"Dir", Type, 0, ""},
-		{"ErrAbortHandler", Var, 8, ""},
-		{"ErrBodyNotAllowed", Var, 0, ""},
-		{"ErrBodyReadAfterClose", Var, 0, ""},
-		{"ErrContentLength", Var, 0, ""},
-		{"ErrHandlerTimeout", Var, 0, ""},
-		{"ErrHeaderTooLong", Var, 0, ""},
-		{"ErrHijacked", Var, 0, ""},
-		{"ErrLineTooLong", Var, 0, ""},
-		{"ErrMissingBoundary", Var, 0, ""},
-		{"ErrMissingContentLength", Var, 0, ""},
-		{"ErrMissingFile", Var, 0, ""},
-		{"ErrNoCookie", Var, 0, ""},
-		{"ErrNoLocation", Var, 0, ""},
-		{"ErrNotMultipart", Var, 0, ""},
-		{"ErrNotSupported", Var, 0, ""},
-		{"ErrSchemeMismatch", Var, 21, ""},
-		{"ErrServerClosed", Var, 8, ""},
-		{"ErrShortBody", Var, 0, ""},
-		{"ErrSkipAltProtocol", Var, 6, ""},
-		{"ErrUnexpectedTrailer", Var, 0, ""},
-		{"ErrUseLastResponse", Var, 7, ""},
-		{"ErrWriteAfterFlush", Var, 0, ""},
-		{"Error", Func, 0, "func(w ResponseWriter, error string, code int)"},
-		{"FS", Func, 16, "func(fsys fs.FS) FileSystem"},
-		{"File", Type, 0, ""},
-		{"FileServer", Func, 0, "func(root FileSystem) Handler"},
-		{"FileServerFS", Func, 22, "func(root fs.FS) Handler"},
-		{"FileSystem", Type, 0, ""},
-		{"Flusher", Type, 0, ""},
-		{"Get", Func, 0, "func(url string) (resp *Response, err error)"},
-		{"HTTP2Config", Type, 24, ""},
-		{"HTTP2Config.CountError", Field, 24, ""},
-		{"HTTP2Config.MaxConcurrentStreams", Field, 24, ""},
-		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24, ""},
-		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24, ""},
-		{"HTTP2Config.MaxReadFrameSize", Field, 24, ""},
-		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24, ""},
-		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24, ""},
-		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24, ""},
-		{"HTTP2Config.PingTimeout", Field, 24, ""},
-		{"HTTP2Config.SendPingTimeout", Field, 24, ""},
-		{"HTTP2Config.WriteByteTimeout", Field, 24, ""},
-		{"Handle", Func, 0, "func(pattern string, handler Handler)"},
-		{"HandleFunc", Func, 0, "func(pattern string, handler func(ResponseWriter, *Request))"},
-		{"Handler", Type, 0, ""},
-		{"HandlerFunc", Type, 0, ""},
-		{"Head", Func, 0, "func(url string) (resp *Response, err error)"},
-		{"Header", Type, 0, ""},
-		{"Hijacker", Type, 0, ""},
-		{"ListenAndServe", Func, 0, "func(addr string, handler Handler) error"},
-		{"ListenAndServeTLS", Func, 0, "func(addr string, certFile string, keyFile string, handler Handler) error"},
-		{"LocalAddrContextKey", Var, 7, ""},
-		{"MaxBytesError", Type, 19, ""},
-		{"MaxBytesError.Limit", Field, 19, ""},
-		{"MaxBytesHandler", Func, 18, "func(h Handler, n int64) Handler"},
-		{"MaxBytesReader", Func, 0, "func(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser"},
-		{"MethodConnect", Const, 6, ""},
-		{"MethodDelete", Const, 6, ""},
-		{"MethodGet", Const, 6, ""},
-		{"MethodHead", Const, 6, ""},
-		{"MethodOptions", Const, 6, ""},
-		{"MethodPatch", Const, 6, ""},
-		{"MethodPost", Const, 6, ""},
-		{"MethodPut", Const, 6, ""},
-		{"MethodTrace", Const, 6, ""},
-		{"NewFileTransport", Func, 0, "func(fs FileSystem) RoundTripper"},
-		{"NewFileTransportFS", Func, 22, "func(fsys fs.FS) RoundTripper"},
-		{"NewRequest", Func, 0, "func(method string, url string, body io.Reader) (*Request, error)"},
-		{"NewRequestWithContext", Func, 13, "func(ctx context.Context, method string, url string, body io.Reader) (*Request, error)"},
-		{"NewResponseController", Func, 20, "func(rw ResponseWriter) *ResponseController"},
-		{"NewServeMux", Func, 0, "func() *ServeMux"},
-		{"NoBody", Var, 8, ""},
-		{"NotFound", Func, 0, "func(w ResponseWriter, r *Request)"},
-		{"NotFoundHandler", Func, 0, "func() Handler"},
-		{"ParseCookie", Func, 23, "func(line string) ([]*Cookie, error)"},
-		{"ParseHTTPVersion", Func, 0, "func(vers string) (major int, minor int, ok bool)"},
-		{"ParseSetCookie", Func, 23, "func(line string) (*Cookie, error)"},
-		{"ParseTime", Func, 1, "func(text string) (t time.Time, err error)"},
-		{"Post", Func, 0, "func(url string, contentType string, body io.Reader) (resp *Response, err error)"},
-		{"PostForm", Func, 0, "func(url string, data url.Values) (resp *Response, err error)"},
-		{"ProtocolError", Type, 0, ""},
-		{"ProtocolError.ErrorString", Field, 0, ""},
-		{"Protocols", Type, 24, ""},
-		{"ProxyFromEnvironment", Func, 0, "func(req *Request) (*url.URL, error)"},
-		{"ProxyURL", Func, 0, "func(fixedURL *url.URL) func(*Request) (*url.URL, error)"},
-		{"PushOptions", Type, 8, ""},
-		{"PushOptions.Header", Field, 8, ""},
-		{"PushOptions.Method", Field, 8, ""},
-		{"Pusher", Type, 8, ""},
-		{"ReadRequest", Func, 0, "func(b *bufio.Reader) (*Request, error)"},
-		{"ReadResponse", Func, 0, "func(r *bufio.Reader, req *Request) (*Response, error)"},
-		{"Redirect", Func, 0, "func(w ResponseWriter, r *Request, url string, code int)"},
-		{"RedirectHandler", Func, 0, "func(url string, code int) Handler"},
-		{"Request", Type, 0, ""},
-		{"Request.Body", Field, 0, ""},
-		{"Request.Cancel", Field, 5, ""},
-		{"Request.Close", Field, 0, ""},
-		{"Request.ContentLength", Field, 0, ""},
-		{"Request.Form", Field, 0, ""},
-		{"Request.GetBody", Field, 8, ""},
-		{"Request.Header", Field, 0, ""},
-		{"Request.Host", Field, 0, ""},
-		{"Request.Method", Field, 0, ""},
-		{"Request.MultipartForm", Field, 0, ""},
-		{"Request.Pattern", Field, 23, ""},
-		{"Request.PostForm", Field, 1, ""},
-		{"Request.Proto", Field, 0, ""},
-		{"Request.ProtoMajor", Field, 0, ""},
-		{"Request.ProtoMinor", Field, 0, ""},
-		{"Request.RemoteAddr", Field, 0, ""},
-		{"Request.RequestURI", Field, 0, ""},
-		{"Request.Response", Field, 7, ""},
-		{"Request.TLS", Field, 0, ""},
-		{"Request.Trailer", Field, 0, ""},
-		{"Request.TransferEncoding", Field, 0, ""},
-		{"Request.URL", Field, 0, ""},
-		{"Response", Type, 0, ""},
-		{"Response.Body", Field, 0, ""},
-		{"Response.Close", Field, 0, ""},
-		{"Response.ContentLength", Field, 0, ""},
-		{"Response.Header", Field, 0, ""},
-		{"Response.Proto", Field, 0, ""},
-		{"Response.ProtoMajor", Field, 0, ""},
-		{"Response.ProtoMinor", Field, 0, ""},
-		{"Response.Request", Field, 0, ""},
-		{"Response.Status", Field, 0, ""},
-		{"Response.StatusCode", Field, 0, ""},
-		{"Response.TLS", Field, 3, ""},
-		{"Response.Trailer", Field, 0, ""},
-		{"Response.TransferEncoding", Field, 0, ""},
-		{"Response.Uncompressed", Field, 7, ""},
-		{"ResponseController", Type, 20, ""},
-		{"ResponseWriter", Type, 0, ""},
-		{"RoundTripper", Type, 0, ""},
-		{"SameSite", Type, 11, ""},
-		{"SameSiteDefaultMode", Const, 11, ""},
-		{"SameSiteLaxMode", Const, 11, ""},
-		{"SameSiteNoneMode", Const, 13, ""},
-		{"SameSiteStrictMode", Const, 11, ""},
-		{"Serve", Func, 0, "func(l net.Listener, handler Handler) error"},
-		{"ServeContent", Func, 0, "func(w ResponseWriter, req *Request, name string, modtime time.Time, content io.ReadSeeker)"},
-		{"ServeFile", Func, 0, "func(w ResponseWriter, r *Request, name string)"},
-		{"ServeFileFS", Func, 22, "func(w ResponseWriter, r *Request, fsys fs.FS, name string)"},
-		{"ServeMux", Type, 0, ""},
-		{"ServeTLS", Func, 9, "func(l net.Listener, handler Handler, certFile string, keyFile string) error"},
-		{"Server", Type, 0, ""},
-		{"Server.Addr", Field, 0, ""},
-		{"Server.BaseContext", Field, 13, ""},
-		{"Server.ConnContext", Field, 13, ""},
-		{"Server.ConnState", Field, 3, ""},
-		{"Server.DisableGeneralOptionsHandler", Field, 20, ""},
-		{"Server.ErrorLog", Field, 3, ""},
-		{"Server.HTTP2", Field, 24, ""},
-		{"Server.Handler", Field, 0, ""},
-		{"Server.IdleTimeout", Field, 8, ""},
-		{"Server.MaxHeaderBytes", Field, 0, ""},
-		{"Server.Protocols", Field, 24, ""},
-		{"Server.ReadHeaderTimeout", Field, 8, ""},
-		{"Server.ReadTimeout", Field, 0, ""},
-		{"Server.TLSConfig", Field, 0, ""},
-		{"Server.TLSNextProto", Field, 1, ""},
-		{"Server.WriteTimeout", Field, 0, ""},
-		{"ServerContextKey", Var, 7, ""},
-		{"SetCookie", Func, 0, "func(w ResponseWriter, cookie *Cookie)"},
-		{"StateActive", Const, 3, ""},
-		{"StateClosed", Const, 3, ""},
-		{"StateHijacked", Const, 3, ""},
-		{"StateIdle", Const, 3, ""},
-		{"StateNew", Const, 3, ""},
-		{"StatusAccepted", Const, 0, ""},
-		{"StatusAlreadyReported", Const, 7, ""},
-		{"StatusBadGateway", Const, 0, ""},
-		{"StatusBadRequest", Const, 0, ""},
-		{"StatusConflict", Const, 0, ""},
-		{"StatusContinue", Const, 0, ""},
-		{"StatusCreated", Const, 0, ""},
-		{"StatusEarlyHints", Const, 13, ""},
-		{"StatusExpectationFailed", Const, 0, ""},
-		{"StatusFailedDependency", Const, 7, ""},
-		{"StatusForbidden", Const, 0, ""},
-		{"StatusFound", Const, 0, ""},
-		{"StatusGatewayTimeout", Const, 0, ""},
-		{"StatusGone", Const, 0, ""},
-		{"StatusHTTPVersionNotSupported", Const, 0, ""},
-		{"StatusIMUsed", Const, 7, ""},
-		{"StatusInsufficientStorage", Const, 7, ""},
-		{"StatusInternalServerError", Const, 0, ""},
-		{"StatusLengthRequired", Const, 0, ""},
-		{"StatusLocked", Const, 7, ""},
-		{"StatusLoopDetected", Const, 7, ""},
-		{"StatusMethodNotAllowed", Const, 0, ""},
-		{"StatusMisdirectedRequest", Const, 11, ""},
-		{"StatusMovedPermanently", Const, 0, ""},
-		{"StatusMultiStatus", Const, 7, ""},
-		{"StatusMultipleChoices", Const, 0, ""},
-		{"StatusNetworkAuthenticationRequired", Const, 6, ""},
-		{"StatusNoContent", Const, 0, ""},
-		{"StatusNonAuthoritativeInfo", Const, 0, ""},
-		{"StatusNotAcceptable", Const, 0, ""},
-		{"StatusNotExtended", Const, 7, ""},
-		{"StatusNotFound", Const, 0, ""},
-		{"StatusNotImplemented", Const, 0, ""},
-		{"StatusNotModified", Const, 0, ""},
-		{"StatusOK", Const, 0, ""},
-		{"StatusPartialContent", Const, 0, ""},
-		{"StatusPaymentRequired", Const, 0, ""},
-		{"StatusPermanentRedirect", Const, 7, ""},
-		{"StatusPreconditionFailed", Const, 0, ""},
-		{"StatusPreconditionRequired", Const, 6, ""},
-		{"StatusProcessing", Const, 7, ""},
-		{"StatusProxyAuthRequired", Const, 0, ""},
-		{"StatusRequestEntityTooLarge", Const, 0, ""},
-		{"StatusRequestHeaderFieldsTooLarge", Const, 6, ""},
-		{"StatusRequestTimeout", Const, 0, ""},
-		{"StatusRequestURITooLong", Const, 0, ""},
-		{"StatusRequestedRangeNotSatisfiable", Const, 0, ""},
-		{"StatusResetContent", Const, 0, ""},
-		{"StatusSeeOther", Const, 0, ""},
-		{"StatusServiceUnavailable", Const, 0, ""},
-		{"StatusSwitchingProtocols", Const, 0, ""},
-		{"StatusTeapot", Const, 0, ""},
-		{"StatusTemporaryRedirect", Const, 0, ""},
-		{"StatusText", Func, 0, "func(code int) string"},
-		{"StatusTooEarly", Const, 12, ""},
-		{"StatusTooManyRequests", Const, 6, ""},
-		{"StatusUnauthorized", Const, 0, ""},
-		{"StatusUnavailableForLegalReasons", Const, 6, ""},
-		{"StatusUnprocessableEntity", Const, 7, ""},
-		{"StatusUnsupportedMediaType", Const, 0, ""},
-		{"StatusUpgradeRequired", Const, 7, ""},
-		{"StatusUseProxy", Const, 0, ""},
-		{"StatusVariantAlsoNegotiates", Const, 7, ""},
-		{"StripPrefix", Func, 0, "func(prefix string, h Handler) Handler"},
-		{"TimeFormat", Const, 0, ""},
-		{"TimeoutHandler", Func, 0, "func(h Handler, dt time.Duration, msg string) Handler"},
-		{"TrailerPrefix", Const, 8, ""},
-		{"Transport", Type, 0, ""},
-		{"Transport.Dial", Field, 0, ""},
-		{"Transport.DialContext", Field, 7, ""},
-		{"Transport.DialTLS", Field, 4, ""},
-		{"Transport.DialTLSContext", Field, 14, ""},
-		{"Transport.DisableCompression", Field, 0, ""},
-		{"Transport.DisableKeepAlives", Field, 0, ""},
-		{"Transport.ExpectContinueTimeout", Field, 6, ""},
-		{"Transport.ForceAttemptHTTP2", Field, 13, ""},
-		{"Transport.GetProxyConnectHeader", Field, 16, ""},
-		{"Transport.HTTP2", Field, 24, ""},
-		{"Transport.IdleConnTimeout", Field, 7, ""},
-		{"Transport.MaxConnsPerHost", Field, 11, ""},
-		{"Transport.MaxIdleConns", Field, 7, ""},
-		{"Transport.MaxIdleConnsPerHost", Field, 0, ""},
-		{"Transport.MaxResponseHeaderBytes", Field, 7, ""},
-		{"Transport.OnProxyConnectResponse", Field, 20, ""},
-		{"Transport.Protocols", Field, 24, ""},
-		{"Transport.Proxy", Field, 0, ""},
-		{"Transport.ProxyConnectHeader", Field, 8, ""},
-		{"Transport.ReadBufferSize", Field, 13, ""},
-		{"Transport.ResponseHeaderTimeout", Field, 1, ""},
-		{"Transport.TLSClientConfig", Field, 0, ""},
-		{"Transport.TLSHandshakeTimeout", Field, 3, ""},
-		{"Transport.TLSNextProto", Field, 6, ""},
-		{"Transport.WriteBufferSize", Field, 13, ""},
+		{"(*Client).CloseIdleConnections", Method, 12},
+		{"(*Client).Do", Method, 0},
+		{"(*Client).Get", Method, 0},
+		{"(*Client).Head", Method, 0},
+		{"(*Client).Post", Method, 0},
+		{"(*Client).PostForm", Method, 0},
+		{"(*Cookie).String", Method, 0},
+		{"(*Cookie).Valid", Method, 18},
+		{"(*MaxBytesError).Error", Method, 19},
+		{"(*ProtocolError).Error", Method, 0},
+		{"(*ProtocolError).Is", Method, 21},
+		{"(*Protocols).SetHTTP1", Method, 24},
+		{"(*Protocols).SetHTTP2", Method, 24},
+		{"(*Protocols).SetUnencryptedHTTP2", Method, 24},
+		{"(*Request).AddCookie", Method, 0},
+		{"(*Request).BasicAuth", Method, 4},
+		{"(*Request).Clone", Method, 13},
+		{"(*Request).Context", Method, 7},
+		{"(*Request).Cookie", Method, 0},
+		{"(*Request).Cookies", Method, 0},
+		{"(*Request).CookiesNamed", Method, 23},
+		{"(*Request).FormFile", Method, 0},
+		{"(*Request).FormValue", Method, 0},
+		{"(*Request).MultipartReader", Method, 0},
+		{"(*Request).ParseForm", Method, 0},
+		{"(*Request).ParseMultipartForm", Method, 0},
+		{"(*Request).PathValue", Method, 22},
+		{"(*Request).PostFormValue", Method, 1},
+		{"(*Request).ProtoAtLeast", Method, 0},
+		{"(*Request).Referer", Method, 0},
+		{"(*Request).SetBasicAuth", Method, 0},
+		{"(*Request).SetPathValue", Method, 22},
+		{"(*Request).UserAgent", Method, 0},
+		{"(*Request).WithContext", Method, 7},
+		{"(*Request).Write", Method, 0},
+		{"(*Request).WriteProxy", Method, 0},
+		{"(*Response).Cookies", Method, 0},
+		{"(*Response).Location", Method, 0},
+		{"(*Response).ProtoAtLeast", Method, 0},
+		{"(*Response).Write", Method, 0},
+		{"(*ResponseController).EnableFullDuplex", Method, 21},
+		{"(*ResponseController).Flush", Method, 20},
+		{"(*ResponseController).Hijack", Method, 20},
+		{"(*ResponseController).SetReadDeadline", Method, 20},
+		{"(*ResponseController).SetWriteDeadline", Method, 20},
+		{"(*ServeMux).Handle", Method, 0},
+		{"(*ServeMux).HandleFunc", Method, 0},
+		{"(*ServeMux).Handler", Method, 1},
+		{"(*ServeMux).ServeHTTP", Method, 0},
+		{"(*Server).Close", Method, 8},
+		{"(*Server).ListenAndServe", Method, 0},
+		{"(*Server).ListenAndServeTLS", Method, 0},
+		{"(*Server).RegisterOnShutdown", Method, 9},
+		{"(*Server).Serve", Method, 0},
+		{"(*Server).ServeTLS", Method, 9},
+		{"(*Server).SetKeepAlivesEnabled", Method, 3},
+		{"(*Server).Shutdown", Method, 8},
+		{"(*Transport).CancelRequest", Method, 1},
+		{"(*Transport).Clone", Method, 13},
+		{"(*Transport).CloseIdleConnections", Method, 0},
+		{"(*Transport).RegisterProtocol", Method, 0},
+		{"(*Transport).RoundTrip", Method, 0},
+		{"(ConnState).String", Method, 3},
+		{"(Dir).Open", Method, 0},
+		{"(HandlerFunc).ServeHTTP", Method, 0},
+		{"(Header).Add", Method, 0},
+		{"(Header).Clone", Method, 13},
+		{"(Header).Del", Method, 0},
+		{"(Header).Get", Method, 0},
+		{"(Header).Set", Method, 0},
+		{"(Header).Values", Method, 14},
+		{"(Header).Write", Method, 0},
+		{"(Header).WriteSubset", Method, 0},
+		{"(Protocols).HTTP1", Method, 24},
+		{"(Protocols).HTTP2", Method, 24},
+		{"(Protocols).String", Method, 24},
+		{"(Protocols).UnencryptedHTTP2", Method, 24},
+		{"AllowQuerySemicolons", Func, 17},
+		{"CanonicalHeaderKey", Func, 0},
+		{"Client", Type, 0},
+		{"Client.CheckRedirect", Field, 0},
+		{"Client.Jar", Field, 0},
+		{"Client.Timeout", Field, 3},
+		{"Client.Transport", Field, 0},
+		{"CloseNotifier", Type, 1},
+		{"ConnState", Type, 3},
+		{"Cookie", Type, 0},
+		{"Cookie.Domain", Field, 0},
+		{"Cookie.Expires", Field, 0},
+		{"Cookie.HttpOnly", Field, 0},
+		{"Cookie.MaxAge", Field, 0},
+		{"Cookie.Name", Field, 0},
+		{"Cookie.Partitioned", Field, 23},
+		{"Cookie.Path", Field, 0},
+		{"Cookie.Quoted", Field, 23},
+		{"Cookie.Raw", Field, 0},
+		{"Cookie.RawExpires", Field, 0},
+		{"Cookie.SameSite", Field, 11},
+		{"Cookie.Secure", Field, 0},
+		{"Cookie.Unparsed", Field, 0},
+		{"Cookie.Value", Field, 0},
+		{"CookieJar", Type, 0},
+		{"DefaultClient", Var, 0},
+		{"DefaultMaxHeaderBytes", Const, 0},
+		{"DefaultMaxIdleConnsPerHost", Const, 0},
+		{"DefaultServeMux", Var, 0},
+		{"DefaultTransport", Var, 0},
+		{"DetectContentType", Func, 0},
+		{"Dir", Type, 0},
+		{"ErrAbortHandler", Var, 8},
+		{"ErrBodyNotAllowed", Var, 0},
+		{"ErrBodyReadAfterClose", Var, 0},
+		{"ErrContentLength", Var, 0},
+		{"ErrHandlerTimeout", Var, 0},
+		{"ErrHeaderTooLong", Var, 0},
+		{"ErrHijacked", Var, 0},
+		{"ErrLineTooLong", Var, 0},
+		{"ErrMissingBoundary", Var, 0},
+		{"ErrMissingContentLength", Var, 0},
+		{"ErrMissingFile", Var, 0},
+		{"ErrNoCookie", Var, 0},
+		{"ErrNoLocation", Var, 0},
+		{"ErrNotMultipart", Var, 0},
+		{"ErrNotSupported", Var, 0},
+		{"ErrSchemeMismatch", Var, 21},
+		{"ErrServerClosed", Var, 8},
+		{"ErrShortBody", Var, 0},
+		{"ErrSkipAltProtocol", Var, 6},
+		{"ErrUnexpectedTrailer", Var, 0},
+		{"ErrUseLastResponse", Var, 7},
+		{"ErrWriteAfterFlush", Var, 0},
+		{"Error", Func, 0},
+		{"FS", Func, 16},
+		{"File", Type, 0},
+		{"FileServer", Func, 0},
+		{"FileServerFS", Func, 22},
+		{"FileSystem", Type, 0},
+		{"Flusher", Type, 0},
+		{"Get", Func, 0},
+		{"HTTP2Config", Type, 24},
+		{"HTTP2Config.CountError", Field, 24},
+		{"HTTP2Config.MaxConcurrentStreams", Field, 24},
+		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24},
+		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24},
+		{"HTTP2Config.MaxReadFrameSize", Field, 24},
+		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24},
+		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24},
+		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24},
+		{"HTTP2Config.PingTimeout", Field, 24},
+		{"HTTP2Config.SendPingTimeout", Field, 24},
+		{"HTTP2Config.WriteByteTimeout", Field, 24},
+		{"Handle", Func, 0},
+		{"HandleFunc", Func, 0},
+		{"Handler", Type, 0},
+		{"HandlerFunc", Type, 0},
+		{"Head", Func, 0},
+		{"Header", Type, 0},
+		{"Hijacker", Type, 0},
+		{"ListenAndServe", Func, 0},
+		{"ListenAndServeTLS", Func, 0},
+		{"LocalAddrContextKey", Var, 7},
+		{"MaxBytesError", Type, 19},
+		{"MaxBytesError.Limit", Field, 19},
+		{"MaxBytesHandler", Func, 18},
+		{"MaxBytesReader", Func, 0},
+		{"MethodConnect", Const, 6},
+		{"MethodDelete", Const, 6},
+		{"MethodGet", Const, 6},
+		{"MethodHead", Const, 6},
+		{"MethodOptions", Const, 6},
+		{"MethodPatch", Const, 6},
+		{"MethodPost", Const, 6},
+		{"MethodPut", Const, 6},
+		{"MethodTrace", Const, 6},
+		{"NewFileTransport", Func, 0},
+		{"NewFileTransportFS", Func, 22},
+		{"NewRequest", Func, 0},
+		{"NewRequestWithContext", Func, 13},
+		{"NewResponseController", Func, 20},
+		{"NewServeMux", Func, 0},
+		{"NoBody", Var, 8},
+		{"NotFound", Func, 0},
+		{"NotFoundHandler", Func, 0},
+		{"ParseCookie", Func, 23},
+		{"ParseHTTPVersion", Func, 0},
+		{"ParseSetCookie", Func, 23},
+		{"ParseTime", Func, 1},
+		{"Post", Func, 0},
+		{"PostForm", Func, 0},
+		{"ProtocolError", Type, 0},
+		{"ProtocolError.ErrorString", Field, 0},
+		{"Protocols", Type, 24},
+		{"ProxyFromEnvironment", Func, 0},
+		{"ProxyURL", Func, 0},
+		{"PushOptions", Type, 8},
+		{"PushOptions.Header", Field, 8},
+		{"PushOptions.Method", Field, 8},
+		{"Pusher", Type, 8},
+		{"ReadRequest", Func, 0},
+		{"ReadResponse", Func, 0},
+		{"Redirect", Func, 0},
+		{"RedirectHandler", Func, 0},
+		{"Request", Type, 0},
+		{"Request.Body", Field, 0},
+		{"Request.Cancel", Field, 5},
+		{"Request.Close", Field, 0},
+		{"Request.ContentLength", Field, 0},
+		{"Request.Form", Field, 0},
+		{"Request.GetBody", Field, 8},
+		{"Request.Header", Field, 0},
+		{"Request.Host", Field, 0},
+		{"Request.Method", Field, 0},
+		{"Request.MultipartForm", Field, 0},
+		{"Request.Pattern", Field, 23},
+		{"Request.PostForm", Field, 1},
+		{"Request.Proto", Field, 0},
+		{"Request.ProtoMajor", Field, 0},
+		{"Request.ProtoMinor", Field, 0},
+		{"Request.RemoteAddr", Field, 0},
+		{"Request.RequestURI", Field, 0},
+		{"Request.Response", Field, 7},
+		{"Request.TLS", Field, 0},
+		{"Request.Trailer", Field, 0},
+		{"Request.TransferEncoding", Field, 0},
+		{"Request.URL", Field, 0},
+		{"Response", Type, 0},
+		{"Response.Body", Field, 0},
+		{"Response.Close", Field, 0},
+		{"Response.ContentLength", Field, 0},
+		{"Response.Header", Field, 0},
+		{"Response.Proto", Field, 0},
+		{"Response.ProtoMajor", Field, 0},
+		{"Response.ProtoMinor", Field, 0},
+		{"Response.Request", Field, 0},
+		{"Response.Status", Field, 0},
+		{"Response.StatusCode", Field, 0},
+		{"Response.TLS", Field, 3},
+		{"Response.Trailer", Field, 0},
+		{"Response.TransferEncoding", Field, 0},
+		{"Response.Uncompressed", Field, 7},
+		{"ResponseController", Type, 20},
+		{"ResponseWriter", Type, 0},
+		{"RoundTripper", Type, 0},
+		{"SameSite", Type, 11},
+		{"SameSiteDefaultMode", Const, 11},
+		{"SameSiteLaxMode", Const, 11},
+		{"SameSiteNoneMode", Const, 13},
+		{"SameSiteStrictMode", Const, 11},
+		{"Serve", Func, 0},
+		{"ServeContent", Func, 0},
+		{"ServeFile", Func, 0},
+		{"ServeFileFS", Func, 22},
+		{"ServeMux", Type, 0},
+		{"ServeTLS", Func, 9},
+		{"Server", Type, 0},
+		{"Server.Addr", Field, 0},
+		{"Server.BaseContext", Field, 13},
+		{"Server.ConnContext", Field, 13},
+		{"Server.ConnState", Field, 3},
+		{"Server.DisableGeneralOptionsHandler", Field, 20},
+		{"Server.ErrorLog", Field, 3},
+		{"Server.HTTP2", Field, 24},
+		{"Server.Handler", Field, 0},
+		{"Server.IdleTimeout", Field, 8},
+		{"Server.MaxHeaderBytes", Field, 0},
+		{"Server.Protocols", Field, 24},
+		{"Server.ReadHeaderTimeout", Field, 8},
+		{"Server.ReadTimeout", Field, 0},
+		{"Server.TLSConfig", Field, 0},
+		{"Server.TLSNextProto", Field, 1},
+		{"Server.WriteTimeout", Field, 0},
+		{"ServerContextKey", Var, 7},
+		{"SetCookie", Func, 0},
+		{"StateActive", Const, 3},
+		{"StateClosed", Const, 3},
+		{"StateHijacked", Const, 3},
+		{"StateIdle", Const, 3},
+		{"StateNew", Const, 3},
+		{"StatusAccepted", Const, 0},
+		{"StatusAlreadyReported", Const, 7},
+		{"StatusBadGateway", Const, 0},
+		{"StatusBadRequest", Const, 0},
+		{"StatusConflict", Const, 0},
+		{"StatusContinue", Const, 0},
+		{"StatusCreated", Const, 0},
+		{"StatusEarlyHints", Const, 13},
+		{"StatusExpectationFailed", Const, 0},
+		{"StatusFailedDependency", Const, 7},
+		{"StatusForbidden", Const, 0},
+		{"StatusFound", Const, 0},
+		{"StatusGatewayTimeout", Const, 0},
+		{"StatusGone", Const, 0},
+		{"StatusHTTPVersionNotSupported", Const, 0},
+		{"StatusIMUsed", Const, 7},
+		{"StatusInsufficientStorage", Const, 7},
+		{"StatusInternalServerError", Const, 0},
+		{"StatusLengthRequired", Const, 0},
+		{"StatusLocked", Const, 7},
+		{"StatusLoopDetected", Const, 7},
+		{"StatusMethodNotAllowed", Const, 0},
+		{"StatusMisdirectedRequest", Const, 11},
+		{"StatusMovedPermanently", Const, 0},
+		{"StatusMultiStatus", Const, 7},
+		{"StatusMultipleChoices", Const, 0},
+		{"StatusNetworkAuthenticationRequired", Const, 6},
+		{"StatusNoContent", Const, 0},
+		{"StatusNonAuthoritativeInfo", Const, 0},
+		{"StatusNotAcceptable", Const, 0},
+		{"StatusNotExtended", Const, 7},
+		{"StatusNotFound", Const, 0},
+		{"StatusNotImplemented", Const, 0},
+		{"StatusNotModified", Const, 0},
+		{"StatusOK", Const, 0},
+		{"StatusPartialContent", Const, 0},
+		{"StatusPaymentRequired", Const, 0},
+		{"StatusPermanentRedirect", Const, 7},
+		{"StatusPreconditionFailed", Const, 0},
+		{"StatusPreconditionRequired", Const, 6},
+		{"StatusProcessing", Const, 7},
+		{"StatusProxyAuthRequired", Const, 0},
+		{"StatusRequestEntityTooLarge", Const, 0},
+		{"StatusRequestHeaderFieldsTooLarge", Const, 6},
+		{"StatusRequestTimeout", Const, 0},
+		{"StatusRequestURITooLong", Const, 0},
+		{"StatusRequestedRangeNotSatisfiable", Const, 0},
+		{"StatusResetContent", Const, 0},
+		{"StatusSeeOther", Const, 0},
+		{"StatusServiceUnavailable", Const, 0},
+		{"StatusSwitchingProtocols", Const, 0},
+		{"StatusTeapot", Const, 0},
+		{"StatusTemporaryRedirect", Const, 0},
+		{"StatusText", Func, 0},
+		{"StatusTooEarly", Const, 12},
+		{"StatusTooManyRequests", Const, 6},
+		{"StatusUnauthorized", Const, 0},
+		{"StatusUnavailableForLegalReasons", Const, 6},
+		{"StatusUnprocessableEntity", Const, 7},
+		{"StatusUnsupportedMediaType", Const, 0},
+		{"StatusUpgradeRequired", Const, 7},
+		{"StatusUseProxy", Const, 0},
+		{"StatusVariantAlsoNegotiates", Const, 7},
+		{"StripPrefix", Func, 0},
+		{"TimeFormat", Const, 0},
+		{"TimeoutHandler", Func, 0},
+		{"TrailerPrefix", Const, 8},
+		{"Transport", Type, 0},
+		{"Transport.Dial", Field, 0},
+		{"Transport.DialContext", Field, 7},
+		{"Transport.DialTLS", Field, 4},
+		{"Transport.DialTLSContext", Field, 14},
+		{"Transport.DisableCompression", Field, 0},
+		{"Transport.DisableKeepAlives", Field, 0},
+		{"Transport.ExpectContinueTimeout", Field, 6},
+		{"Transport.ForceAttemptHTTP2", Field, 13},
+		{"Transport.GetProxyConnectHeader", Field, 16},
+		{"Transport.HTTP2", Field, 24},
+		{"Transport.IdleConnTimeout", Field, 7},
+		{"Transport.MaxConnsPerHost", Field, 11},
+		{"Transport.MaxIdleConns", Field, 7},
+		{"Transport.MaxIdleConnsPerHost", Field, 0},
+		{"Transport.MaxResponseHeaderBytes", Field, 7},
+		{"Transport.OnProxyConnectResponse", Field, 20},
+		{"Transport.Protocols", Field, 24},
+		{"Transport.Proxy", Field, 0},
+		{"Transport.ProxyConnectHeader", Field, 8},
+		{"Transport.ReadBufferSize", Field, 13},
+		{"Transport.ResponseHeaderTimeout", Field, 1},
+		{"Transport.TLSClientConfig", Field, 0},
+		{"Transport.TLSHandshakeTimeout", Field, 3},
+		{"Transport.TLSNextProto", Field, 6},
+		{"Transport.WriteBufferSize", Field, 13},
 	},
 	"net/http/cgi": {
-		{"(*Handler).ServeHTTP", Method, 0, ""},
-		{"Handler", Type, 0, ""},
-		{"Handler.Args", Field, 0, ""},
-		{"Handler.Dir", Field, 0, ""},
-		{"Handler.Env", Field, 0, ""},
-		{"Handler.InheritEnv", Field, 0, ""},
-		{"Handler.Logger", Field, 0, ""},
-		{"Handler.Path", Field, 0, ""},
-		{"Handler.PathLocationHandler", Field, 0, ""},
-		{"Handler.Root", Field, 0, ""},
-		{"Handler.Stderr", Field, 7, ""},
-		{"Request", Func, 0, "func() (*http.Request, error)"},
-		{"RequestFromMap", Func, 0, "func(params map[string]string) (*http.Request, error)"},
-		{"Serve", Func, 0, "func(handler http.Handler) error"},
+		{"(*Handler).ServeHTTP", Method, 0},
+		{"Handler", Type, 0},
+		{"Handler.Args", Field, 0},
+		{"Handler.Dir", Field, 0},
+		{"Handler.Env", Field, 0},
+		{"Handler.InheritEnv", Field, 0},
+		{"Handler.Logger", Field, 0},
+		{"Handler.Path", Field, 0},
+		{"Handler.PathLocationHandler", Field, 0},
+		{"Handler.Root", Field, 0},
+		{"Handler.Stderr", Field, 7},
+		{"Request", Func, 0},
+		{"RequestFromMap", Func, 0},
+		{"Serve", Func, 0},
 	},
 	"net/http/cookiejar": {
-		{"(*Jar).Cookies", Method, 1, ""},
-		{"(*Jar).SetCookies", Method, 1, ""},
-		{"Jar", Type, 1, ""},
-		{"New", Func, 1, "func(o *Options) (*Jar, error)"},
-		{"Options", Type, 1, ""},
-		{"Options.PublicSuffixList", Field, 1, ""},
-		{"PublicSuffixList", Type, 1, ""},
+		{"(*Jar).Cookies", Method, 1},
+		{"(*Jar).SetCookies", Method, 1},
+		{"Jar", Type, 1},
+		{"New", Func, 1},
+		{"Options", Type, 1},
+		{"Options.PublicSuffixList", Field, 1},
+		{"PublicSuffixList", Type, 1},
 	},
 	"net/http/fcgi": {
-		{"ErrConnClosed", Var, 5, ""},
-		{"ErrRequestAborted", Var, 5, ""},
-		{"ProcessEnv", Func, 9, "func(r *http.Request) map[string]string"},
-		{"Serve", Func, 0, "func(l net.Listener, handler http.Handler) error"},
+		{"ErrConnClosed", Var, 5},
+		{"ErrRequestAborted", Var, 5},
+		{"ProcessEnv", Func, 9},
+		{"Serve", Func, 0},
 	},
 	"net/http/httptest": {
-		{"(*ResponseRecorder).Flush", Method, 0, ""},
-		{"(*ResponseRecorder).Header", Method, 0, ""},
-		{"(*ResponseRecorder).Result", Method, 7, ""},
-		{"(*ResponseRecorder).Write", Method, 0, ""},
-		{"(*ResponseRecorder).WriteHeader", Method, 0, ""},
-		{"(*ResponseRecorder).WriteString", Method, 6, ""},
-		{"(*Server).Certificate", Method, 9, ""},
-		{"(*Server).Client", Method, 9, ""},
-		{"(*Server).Close", Method, 0, ""},
-		{"(*Server).CloseClientConnections", Method, 0, ""},
-		{"(*Server).Start", Method, 0, ""},
-		{"(*Server).StartTLS", Method, 0, ""},
-		{"DefaultRemoteAddr", Const, 0, ""},
-		{"NewRecorder", Func, 0, "func() *ResponseRecorder"},
-		{"NewRequest", Func, 7, "func(method string, target string, body io.Reader) *http.Request"},
-		{"NewRequestWithContext", Func, 23, "func(ctx context.Context, method string, target string, body io.Reader) *http.Request"},
-		{"NewServer", Func, 0, "func(handler http.Handler) *Server"},
-		{"NewTLSServer", Func, 0, "func(handler http.Handler) *Server"},
-		{"NewUnstartedServer", Func, 0, "func(handler http.Handler) *Server"},
-		{"ResponseRecorder", Type, 0, ""},
-		{"ResponseRecorder.Body", Field, 0, ""},
-		{"ResponseRecorder.Code", Field, 0, ""},
-		{"ResponseRecorder.Flushed", Field, 0, ""},
-		{"ResponseRecorder.HeaderMap", Field, 0, ""},
-		{"Server", Type, 0, ""},
-		{"Server.Config", Field, 0, ""},
-		{"Server.EnableHTTP2", Field, 14, ""},
-		{"Server.Listener", Field, 0, ""},
-		{"Server.TLS", Field, 0, ""},
-		{"Server.URL", Field, 0, ""},
+		{"(*ResponseRecorder).Flush", Method, 0},
+		{"(*ResponseRecorder).Header", Method, 0},
+		{"(*ResponseRecorder).Result", Method, 7},
+		{"(*ResponseRecorder).Write", Method, 0},
+		{"(*ResponseRecorder).WriteHeader", Method, 0},
+		{"(*ResponseRecorder).WriteString", Method, 6},
+		{"(*Server).Certificate", Method, 9},
+		{"(*Server).Client", Method, 9},
+		{"(*Server).Close", Method, 0},
+		{"(*Server).CloseClientConnections", Method, 0},
+		{"(*Server).Start", Method, 0},
+		{"(*Server).StartTLS", Method, 0},
+		{"DefaultRemoteAddr", Const, 0},
+		{"NewRecorder", Func, 0},
+		{"NewRequest", Func, 7},
+		{"NewRequestWithContext", Func, 23},
+		{"NewServer", Func, 0},
+		{"NewTLSServer", Func, 0},
+		{"NewUnstartedServer", Func, 0},
+		{"ResponseRecorder", Type, 0},
+		{"ResponseRecorder.Body", Field, 0},
+		{"ResponseRecorder.Code", Field, 0},
+		{"ResponseRecorder.Flushed", Field, 0},
+		{"ResponseRecorder.HeaderMap", Field, 0},
+		{"Server", Type, 0},
+		{"Server.Config", Field, 0},
+		{"Server.EnableHTTP2", Field, 14},
+		{"Server.Listener", Field, 0},
+		{"Server.TLS", Field, 0},
+		{"Server.URL", Field, 0},
 	},
 	"net/http/httptrace": {
-		{"ClientTrace", Type, 7, ""},
-		{"ClientTrace.ConnectDone", Field, 7, ""},
-		{"ClientTrace.ConnectStart", Field, 7, ""},
-		{"ClientTrace.DNSDone", Field, 7, ""},
-		{"ClientTrace.DNSStart", Field, 7, ""},
-		{"ClientTrace.GetConn", Field, 7, ""},
-		{"ClientTrace.Got100Continue", Field, 7, ""},
-		{"ClientTrace.Got1xxResponse", Field, 11, ""},
-		{"ClientTrace.GotConn", Field, 7, ""},
-		{"ClientTrace.GotFirstResponseByte", Field, 7, ""},
-		{"ClientTrace.PutIdleConn", Field, 7, ""},
-		{"ClientTrace.TLSHandshakeDone", Field, 8, ""},
-		{"ClientTrace.TLSHandshakeStart", Field, 8, ""},
-		{"ClientTrace.Wait100Continue", Field, 7, ""},
-		{"ClientTrace.WroteHeaderField", Field, 11, ""},
-		{"ClientTrace.WroteHeaders", Field, 7, ""},
-		{"ClientTrace.WroteRequest", Field, 7, ""},
-		{"ContextClientTrace", Func, 7, "func(ctx context.Context) *ClientTrace"},
-		{"DNSDoneInfo", Type, 7, ""},
-		{"DNSDoneInfo.Addrs", Field, 7, ""},
-		{"DNSDoneInfo.Coalesced", Field, 7, ""},
-		{"DNSDoneInfo.Err", Field, 7, ""},
-		{"DNSStartInfo", Type, 7, ""},
-		{"DNSStartInfo.Host", Field, 7, ""},
-		{"GotConnInfo", Type, 7, ""},
-		{"GotConnInfo.Conn", Field, 7, ""},
-		{"GotConnInfo.IdleTime", Field, 7, ""},
-		{"GotConnInfo.Reused", Field, 7, ""},
-		{"GotConnInfo.WasIdle", Field, 7, ""},
-		{"WithClientTrace", Func, 7, "func(ctx context.Context, trace *ClientTrace) context.Context"},
-		{"WroteRequestInfo", Type, 7, ""},
-		{"WroteRequestInfo.Err", Field, 7, ""},
+		{"ClientTrace", Type, 7},
+		{"ClientTrace.ConnectDone", Field, 7},
+		{"ClientTrace.ConnectStart", Field, 7},
+		{"ClientTrace.DNSDone", Field, 7},
+		{"ClientTrace.DNSStart", Field, 7},
+		{"ClientTrace.GetConn", Field, 7},
+		{"ClientTrace.Got100Continue", Field, 7},
+		{"ClientTrace.Got1xxResponse", Field, 11},
+		{"ClientTrace.GotConn", Field, 7},
+		{"ClientTrace.GotFirstResponseByte", Field, 7},
+		{"ClientTrace.PutIdleConn", Field, 7},
+		{"ClientTrace.TLSHandshakeDone", Field, 8},
+		{"ClientTrace.TLSHandshakeStart", Field, 8},
+		{"ClientTrace.Wait100Continue", Field, 7},
+		{"ClientTrace.WroteHeaderField", Field, 11},
+		{"ClientTrace.WroteHeaders", Field, 7},
+		{"ClientTrace.WroteRequest", Field, 7},
+		{"ContextClientTrace", Func, 7},
+		{"DNSDoneInfo", Type, 7},
+		{"DNSDoneInfo.Addrs", Field, 7},
+		{"DNSDoneInfo.Coalesced", Field, 7},
+		{"DNSDoneInfo.Err", Field, 7},
+		{"DNSStartInfo", Type, 7},
+		{"DNSStartInfo.Host", Field, 7},
+		{"GotConnInfo", Type, 7},
+		{"GotConnInfo.Conn", Field, 7},
+		{"GotConnInfo.IdleTime", Field, 7},
+		{"GotConnInfo.Reused", Field, 7},
+		{"GotConnInfo.WasIdle", Field, 7},
+		{"WithClientTrace", Func, 7},
+		{"WroteRequestInfo", Type, 7},
+		{"WroteRequestInfo.Err", Field, 7},
 	},
 	"net/http/httputil": {
-		{"(*ClientConn).Close", Method, 0, ""},
-		{"(*ClientConn).Do", Method, 0, ""},
-		{"(*ClientConn).Hijack", Method, 0, ""},
-		{"(*ClientConn).Pending", Method, 0, ""},
-		{"(*ClientConn).Read", Method, 0, ""},
-		{"(*ClientConn).Write", Method, 0, ""},
-		{"(*ProxyRequest).SetURL", Method, 20, ""},
-		{"(*ProxyRequest).SetXForwarded", Method, 20, ""},
-		{"(*ReverseProxy).ServeHTTP", Method, 0, ""},
-		{"(*ServerConn).Close", Method, 0, ""},
-		{"(*ServerConn).Hijack", Method, 0, ""},
-		{"(*ServerConn).Pending", Method, 0, ""},
-		{"(*ServerConn).Read", Method, 0, ""},
-		{"(*ServerConn).Write", Method, 0, ""},
-		{"BufferPool", Type, 6, ""},
-		{"ClientConn", Type, 0, ""},
-		{"DumpRequest", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
-		{"DumpRequestOut", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
-		{"DumpResponse", Func, 0, "func(resp *http.Response, body bool) ([]byte, error)"},
-		{"ErrClosed", Var, 0, ""},
-		{"ErrLineTooLong", Var, 0, ""},
-		{"ErrPersistEOF", Var, 0, ""},
-		{"ErrPipeline", Var, 0, ""},
-		{"NewChunkedReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"NewChunkedWriter", Func, 0, "func(w io.Writer) io.WriteCloser"},
-		{"NewClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
-		{"NewProxyClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
-		{"NewServerConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ServerConn"},
-		{"NewSingleHostReverseProxy", Func, 0, "func(target *url.URL) *ReverseProxy"},
-		{"ProxyRequest", Type, 20, ""},
-		{"ProxyRequest.In", Field, 20, ""},
-		{"ProxyRequest.Out", Field, 20, ""},
-		{"ReverseProxy", Type, 0, ""},
-		{"ReverseProxy.BufferPool", Field, 6, ""},
-		{"ReverseProxy.Director", Field, 0, ""},
-		{"ReverseProxy.ErrorHandler", Field, 11, ""},
-		{"ReverseProxy.ErrorLog", Field, 4, ""},
-		{"ReverseProxy.FlushInterval", Field, 0, ""},
-		{"ReverseProxy.ModifyResponse", Field, 8, ""},
-		{"ReverseProxy.Rewrite", Field, 20, ""},
-		{"ReverseProxy.Transport", Field, 0, ""},
-		{"ServerConn", Type, 0, ""},
+		{"(*ClientConn).Close", Method, 0},
+		{"(*ClientConn).Do", Method, 0},
+		{"(*ClientConn).Hijack", Method, 0},
+		{"(*ClientConn).Pending", Method, 0},
+		{"(*ClientConn).Read", Method, 0},
+		{"(*ClientConn).Write", Method, 0},
+		{"(*ProxyRequest).SetURL", Method, 20},
+		{"(*ProxyRequest).SetXForwarded", Method, 20},
+		{"(*ReverseProxy).ServeHTTP", Method, 0},
+		{"(*ServerConn).Close", Method, 0},
+		{"(*ServerConn).Hijack", Method, 0},
+		{"(*ServerConn).Pending", Method, 0},
+		{"(*ServerConn).Read", Method, 0},
+		{"(*ServerConn).Write", Method, 0},
+		{"BufferPool", Type, 6},
+		{"ClientConn", Type, 0},
+		{"DumpRequest", Func, 0},
+		{"DumpRequestOut", Func, 0},
+		{"DumpResponse", Func, 0},
+		{"ErrClosed", Var, 0},
+		{"ErrLineTooLong", Var, 0},
+		{"ErrPersistEOF", Var, 0},
+		{"ErrPipeline", Var, 0},
+		{"NewChunkedReader", Func, 0},
+		{"NewChunkedWriter", Func, 0},
+		{"NewClientConn", Func, 0},
+		{"NewProxyClientConn", Func, 0},
+		{"NewServerConn", Func, 0},
+		{"NewSingleHostReverseProxy", Func, 0},
+		{"ProxyRequest", Type, 20},
+		{"ProxyRequest.In", Field, 20},
+		{"ProxyRequest.Out", Field, 20},
+		{"ReverseProxy", Type, 0},
+		{"ReverseProxy.BufferPool", Field, 6},
+		{"ReverseProxy.Director", Field, 0},
+		{"ReverseProxy.ErrorHandler", Field, 11},
+		{"ReverseProxy.ErrorLog", Field, 4},
+		{"ReverseProxy.FlushInterval", Field, 0},
+		{"ReverseProxy.ModifyResponse", Field, 8},
+		{"ReverseProxy.Rewrite", Field, 20},
+		{"ReverseProxy.Transport", Field, 0},
+		{"ServerConn", Type, 0},
 	},
 	"net/http/pprof": {
-		{"Cmdline", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
-		{"Handler", Func, 0, "func(name string) http.Handler"},
-		{"Index", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
-		{"Profile", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
-		{"Symbol", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
-		{"Trace", Func, 5, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Cmdline", Func, 0},
+		{"Handler", Func, 0},
+		{"Index", Func, 0},
+		{"Profile", Func, 0},
+		{"Symbol", Func, 0},
+		{"Trace", Func, 5},
 	},
 	"net/mail": {
-		{"(*Address).String", Method, 0, ""},
-		{"(*AddressParser).Parse", Method, 5, ""},
-		{"(*AddressParser).ParseList", Method, 5, ""},
-		{"(Header).AddressList", Method, 0, ""},
-		{"(Header).Date", Method, 0, ""},
-		{"(Header).Get", Method, 0, ""},
-		{"Address", Type, 0, ""},
-		{"Address.Address", Field, 0, ""},
-		{"Address.Name", Field, 0, ""},
-		{"AddressParser", Type, 5, ""},
-		{"AddressParser.WordDecoder", Field, 5, ""},
-		{"ErrHeaderNotPresent", Var, 0, ""},
-		{"Header", Type, 0, ""},
-		{"Message", Type, 0, ""},
-		{"Message.Body", Field, 0, ""},
-		{"Message.Header", Field, 0, ""},
-		{"ParseAddress", Func, 1, "func(address string) (*Address, error)"},
-		{"ParseAddressList", Func, 1, "func(list string) ([]*Address, error)"},
-		{"ParseDate", Func, 8, "func(date string) (time.Time, error)"},
-		{"ReadMessage", Func, 0, "func(r io.Reader) (msg *Message, err error)"},
+		{"(*Address).String", Method, 0},
+		{"(*AddressParser).Parse", Method, 5},
+		{"(*AddressParser).ParseList", Method, 5},
+		{"(Header).AddressList", Method, 0},
+		{"(Header).Date", Method, 0},
+		{"(Header).Get", Method, 0},
+		{"Address", Type, 0},
+		{"Address.Address", Field, 0},
+		{"Address.Name", Field, 0},
+		{"AddressParser", Type, 5},
+		{"AddressParser.WordDecoder", Field, 5},
+		{"ErrHeaderNotPresent", Var, 0},
+		{"Header", Type, 0},
+		{"Message", Type, 0},
+		{"Message.Body", Field, 0},
+		{"Message.Header", Field, 0},
+		{"ParseAddress", Func, 1},
+		{"ParseAddressList", Func, 1},
+		{"ParseDate", Func, 8},
+		{"ReadMessage", Func, 0},
 	},
 	"net/netip": {
-		{"(*Addr).UnmarshalBinary", Method, 18, ""},
-		{"(*Addr).UnmarshalText", Method, 18, ""},
-		{"(*AddrPort).UnmarshalBinary", Method, 18, ""},
-		{"(*AddrPort).UnmarshalText", Method, 18, ""},
-		{"(*Prefix).UnmarshalBinary", Method, 18, ""},
-		{"(*Prefix).UnmarshalText", Method, 18, ""},
-		{"(Addr).AppendBinary", Method, 24, ""},
-		{"(Addr).AppendText", Method, 24, ""},
-		{"(Addr).AppendTo", Method, 18, ""},
-		{"(Addr).As16", Method, 18, ""},
-		{"(Addr).As4", Method, 18, ""},
-		{"(Addr).AsSlice", Method, 18, ""},
-		{"(Addr).BitLen", Method, 18, ""},
-		{"(Addr).Compare", Method, 18, ""},
-		{"(Addr).Is4", Method, 18, ""},
-		{"(Addr).Is4In6", Method, 18, ""},
-		{"(Addr).Is6", Method, 18, ""},
-		{"(Addr).IsGlobalUnicast", Method, 18, ""},
-		{"(Addr).IsInterfaceLocalMulticast", Method, 18, ""},
-		{"(Addr).IsLinkLocalMulticast", Method, 18, ""},
-		{"(Addr).IsLinkLocalUnicast", Method, 18, ""},
-		{"(Addr).IsLoopback", Method, 18, ""},
-		{"(Addr).IsMulticast", Method, 18, ""},
-		{"(Addr).IsPrivate", Method, 18, ""},
-		{"(Addr).IsUnspecified", Method, 18, ""},
-		{"(Addr).IsValid", Method, 18, ""},
-		{"(Addr).Less", Method, 18, ""},
-		{"(Addr).MarshalBinary", Method, 18, ""},
-		{"(Addr).MarshalText", Method, 18, ""},
-		{"(Addr).Next", Method, 18, ""},
-		{"(Addr).Prefix", Method, 18, ""},
-		{"(Addr).Prev", Method, 18, ""},
-		{"(Addr).String", Method, 18, ""},
-		{"(Addr).StringExpanded", Method, 18, ""},
-		{"(Addr).Unmap", Method, 18, ""},
-		{"(Addr).WithZone", Method, 18, ""},
-		{"(Addr).Zone", Method, 18, ""},
-		{"(AddrPort).Addr", Method, 18, ""},
-		{"(AddrPort).AppendBinary", Method, 24, ""},
-		{"(AddrPort).AppendText", Method, 24, ""},
-		{"(AddrPort).AppendTo", Method, 18, ""},
-		{"(AddrPort).Compare", Method, 22, ""},
-		{"(AddrPort).IsValid", Method, 18, ""},
-		{"(AddrPort).MarshalBinary", Method, 18, ""},
-		{"(AddrPort).MarshalText", Method, 18, ""},
-		{"(AddrPort).Port", Method, 18, ""},
-		{"(AddrPort).String", Method, 18, ""},
-		{"(Prefix).Addr", Method, 18, ""},
-		{"(Prefix).AppendBinary", Method, 24, ""},
-		{"(Prefix).AppendText", Method, 24, ""},
-		{"(Prefix).AppendTo", Method, 18, ""},
-		{"(Prefix).Bits", Method, 18, ""},
-		{"(Prefix).Contains", Method, 18, ""},
-		{"(Prefix).IsSingleIP", Method, 18, ""},
-		{"(Prefix).IsValid", Method, 18, ""},
-		{"(Prefix).MarshalBinary", Method, 18, ""},
-		{"(Prefix).MarshalText", Method, 18, ""},
-		{"(Prefix).Masked", Method, 18, ""},
-		{"(Prefix).Overlaps", Method, 18, ""},
-		{"(Prefix).String", Method, 18, ""},
-		{"Addr", Type, 18, ""},
-		{"AddrFrom16", Func, 18, "func(addr [16]byte) Addr"},
-		{"AddrFrom4", Func, 18, "func(addr [4]byte) Addr"},
-		{"AddrFromSlice", Func, 18, "func(slice []byte) (ip Addr, ok bool)"},
-		{"AddrPort", Type, 18, ""},
-		{"AddrPortFrom", Func, 18, "func(ip Addr, port uint16) AddrPort"},
-		{"IPv4Unspecified", Func, 18, "func() Addr"},
-		{"IPv6LinkLocalAllNodes", Func, 18, "func() Addr"},
-		{"IPv6LinkLocalAllRouters", Func, 20, "func() Addr"},
-		{"IPv6Loopback", Func, 20, "func() Addr"},
-		{"IPv6Unspecified", Func, 18, "func() Addr"},
-		{"MustParseAddr", Func, 18, "func(s string) Addr"},
-		{"MustParseAddrPort", Func, 18, "func(s string) AddrPort"},
-		{"MustParsePrefix", Func, 18, "func(s string) Prefix"},
-		{"ParseAddr", Func, 18, "func(s string) (Addr, error)"},
-		{"ParseAddrPort", Func, 18, "func(s string) (AddrPort, error)"},
-		{"ParsePrefix", Func, 18, "func(s string) (Prefix, error)"},
-		{"Prefix", Type, 18, ""},
-		{"PrefixFrom", Func, 18, "func(ip Addr, bits int) Prefix"},
+		{"(*Addr).UnmarshalBinary", Method, 18},
+		{"(*Addr).UnmarshalText", Method, 18},
+		{"(*AddrPort).UnmarshalBinary", Method, 18},
+		{"(*AddrPort).UnmarshalText", Method, 18},
+		{"(*Prefix).UnmarshalBinary", Method, 18},
+		{"(*Prefix).UnmarshalText", Method, 18},
+		{"(Addr).AppendBinary", Method, 24},
+		{"(Addr).AppendText", Method, 24},
+		{"(Addr).AppendTo", Method, 18},
+		{"(Addr).As16", Method, 18},
+		{"(Addr).As4", Method, 18},
+		{"(Addr).AsSlice", Method, 18},
+		{"(Addr).BitLen", Method, 18},
+		{"(Addr).Compare", Method, 18},
+		{"(Addr).Is4", Method, 18},
+		{"(Addr).Is4In6", Method, 18},
+		{"(Addr).Is6", Method, 18},
+		{"(Addr).IsGlobalUnicast", Method, 18},
+		{"(Addr).IsInterfaceLocalMulticast", Method, 18},
+		{"(Addr).IsLinkLocalMulticast", Method, 18},
+		{"(Addr).IsLinkLocalUnicast", Method, 18},
+		{"(Addr).IsLoopback", Method, 18},
+		{"(Addr).IsMulticast", Method, 18},
+		{"(Addr).IsPrivate", Method, 18},
+		{"(Addr).IsUnspecified", Method, 18},
+		{"(Addr).IsValid", Method, 18},
+		{"(Addr).Less", Method, 18},
+		{"(Addr).MarshalBinary", Method, 18},
+		{"(Addr).MarshalText", Method, 18},
+		{"(Addr).Next", Method, 18},
+		{"(Addr).Prefix", Method, 18},
+		{"(Addr).Prev", Method, 18},
+		{"(Addr).String", Method, 18},
+		{"(Addr).StringExpanded", Method, 18},
+		{"(Addr).Unmap", Method, 18},
+		{"(Addr).WithZone", Method, 18},
+		{"(Addr).Zone", Method, 18},
+		{"(AddrPort).Addr", Method, 18},
+		{"(AddrPort).AppendBinary", Method, 24},
+		{"(AddrPort).AppendText", Method, 24},
+		{"(AddrPort).AppendTo", Method, 18},
+		{"(AddrPort).Compare", Method, 22},
+		{"(AddrPort).IsValid", Method, 18},
+		{"(AddrPort).MarshalBinary", Method, 18},
+		{"(AddrPort).MarshalText", Method, 18},
+		{"(AddrPort).Port", Method, 18},
+		{"(AddrPort).String", Method, 18},
+		{"(Prefix).Addr", Method, 18},
+		{"(Prefix).AppendBinary", Method, 24},
+		{"(Prefix).AppendText", Method, 24},
+		{"(Prefix).AppendTo", Method, 18},
+		{"(Prefix).Bits", Method, 18},
+		{"(Prefix).Contains", Method, 18},
+		{"(Prefix).IsSingleIP", Method, 18},
+		{"(Prefix).IsValid", Method, 18},
+		{"(Prefix).MarshalBinary", Method, 18},
+		{"(Prefix).MarshalText", Method, 18},
+		{"(Prefix).Masked", Method, 18},
+		{"(Prefix).Overlaps", Method, 18},
+		{"(Prefix).String", Method, 18},
+		{"Addr", Type, 18},
+		{"AddrFrom16", Func, 18},
+		{"AddrFrom4", Func, 18},
+		{"AddrFromSlice", Func, 18},
+		{"AddrPort", Type, 18},
+		{"AddrPortFrom", Func, 18},
+		{"IPv4Unspecified", Func, 18},
+		{"IPv6LinkLocalAllNodes", Func, 18},
+		{"IPv6LinkLocalAllRouters", Func, 20},
+		{"IPv6Loopback", Func, 20},
+		{"IPv6Unspecified", Func, 18},
+		{"MustParseAddr", Func, 18},
+		{"MustParseAddrPort", Func, 18},
+		{"MustParsePrefix", Func, 18},
+		{"ParseAddr", Func, 18},
+		{"ParseAddrPort", Func, 18},
+		{"ParsePrefix", Func, 18},
+		{"Prefix", Type, 18},
+		{"PrefixFrom", Func, 18},
 	},
 	"net/rpc": {
-		{"(*Client).Call", Method, 0, ""},
-		{"(*Client).Close", Method, 0, ""},
-		{"(*Client).Go", Method, 0, ""},
-		{"(*Server).Accept", Method, 0, ""},
-		{"(*Server).HandleHTTP", Method, 0, ""},
-		{"(*Server).Register", Method, 0, ""},
-		{"(*Server).RegisterName", Method, 0, ""},
-		{"(*Server).ServeCodec", Method, 0, ""},
-		{"(*Server).ServeConn", Method, 0, ""},
-		{"(*Server).ServeHTTP", Method, 0, ""},
-		{"(*Server).ServeRequest", Method, 0, ""},
-		{"(ServerError).Error", Method, 0, ""},
-		{"Accept", Func, 0, "func(lis net.Listener)"},
-		{"Call", Type, 0, ""},
-		{"Call.Args", Field, 0, ""},
-		{"Call.Done", Field, 0, ""},
-		{"Call.Error", Field, 0, ""},
-		{"Call.Reply", Field, 0, ""},
-		{"Call.ServiceMethod", Field, 0, ""},
-		{"Client", Type, 0, ""},
-		{"ClientCodec", Type, 0, ""},
-		{"DefaultDebugPath", Const, 0, ""},
-		{"DefaultRPCPath", Const, 0, ""},
-		{"DefaultServer", Var, 0, ""},
-		{"Dial", Func, 0, "func(network string, address string) (*Client, error)"},
-		{"DialHTTP", Func, 0, "func(network string, address string) (*Client, error)"},
-		{"DialHTTPPath", Func, 0, "func(network string, address string, path string) (*Client, error)"},
-		{"ErrShutdown", Var, 0, ""},
-		{"HandleHTTP", Func, 0, "func()"},
-		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *Client"},
-		{"NewClientWithCodec", Func, 0, "func(codec ClientCodec) *Client"},
-		{"NewServer", Func, 0, "func() *Server"},
-		{"Register", Func, 0, "func(rcvr any) error"},
-		{"RegisterName", Func, 0, "func(name string, rcvr any) error"},
-		{"Request", Type, 0, ""},
-		{"Request.Seq", Field, 0, ""},
-		{"Request.ServiceMethod", Field, 0, ""},
-		{"Response", Type, 0, ""},
-		{"Response.Error", Field, 0, ""},
-		{"Response.Seq", Field, 0, ""},
-		{"Response.ServiceMethod", Field, 0, ""},
-		{"ServeCodec", Func, 0, "func(codec ServerCodec)"},
-		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
-		{"ServeRequest", Func, 0, "func(codec ServerCodec) error"},
-		{"Server", Type, 0, ""},
-		{"ServerCodec", Type, 0, ""},
-		{"ServerError", Type, 0, ""},
+		{"(*Client).Call", Method, 0},
+		{"(*Client).Close", Method, 0},
+		{"(*Client).Go", Method, 0},
+		{"(*Server).Accept", Method, 0},
+		{"(*Server).HandleHTTP", Method, 0},
+		{"(*Server).Register", Method, 0},
+		{"(*Server).RegisterName", Method, 0},
+		{"(*Server).ServeCodec", Method, 0},
+		{"(*Server).ServeConn", Method, 0},
+		{"(*Server).ServeHTTP", Method, 0},
+		{"(*Server).ServeRequest", Method, 0},
+		{"(ServerError).Error", Method, 0},
+		{"Accept", Func, 0},
+		{"Call", Type, 0},
+		{"Call.Args", Field, 0},
+		{"Call.Done", Field, 0},
+		{"Call.Error", Field, 0},
+		{"Call.Reply", Field, 0},
+		{"Call.ServiceMethod", Field, 0},
+		{"Client", Type, 0},
+		{"ClientCodec", Type, 0},
+		{"DefaultDebugPath", Const, 0},
+		{"DefaultRPCPath", Const, 0},
+		{"DefaultServer", Var, 0},
+		{"Dial", Func, 0},
+		{"DialHTTP", Func, 0},
+		{"DialHTTPPath", Func, 0},
+		{"ErrShutdown", Var, 0},
+		{"HandleHTTP", Func, 0},
+		{"NewClient", Func, 0},
+		{"NewClientWithCodec", Func, 0},
+		{"NewServer", Func, 0},
+		{"Register", Func, 0},
+		{"RegisterName", Func, 0},
+		{"Request", Type, 0},
+		{"Request.Seq", Field, 0},
+		{"Request.ServiceMethod", Field, 0},
+		{"Response", Type, 0},
+		{"Response.Error", Field, 0},
+		{"Response.Seq", Field, 0},
+		{"Response.ServiceMethod", Field, 0},
+		{"ServeCodec", Func, 0},
+		{"ServeConn", Func, 0},
+		{"ServeRequest", Func, 0},
+		{"Server", Type, 0},
+		{"ServerCodec", Type, 0},
+		{"ServerError", Type, 0},
 	},
 	"net/rpc/jsonrpc": {
-		{"Dial", Func, 0, "func(network string, address string) (*rpc.Client, error)"},
-		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *rpc.Client"},
-		{"NewClientCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ClientCodec"},
-		{"NewServerCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ServerCodec"},
-		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
+		{"Dial", Func, 0},
+		{"NewClient", Func, 0},
+		{"NewClientCodec", Func, 0},
+		{"NewServerCodec", Func, 0},
+		{"ServeConn", Func, 0},
 	},
 	"net/smtp": {
-		{"(*Client).Auth", Method, 0, ""},
-		{"(*Client).Close", Method, 2, ""},
-		{"(*Client).Data", Method, 0, ""},
-		{"(*Client).Extension", Method, 0, ""},
-		{"(*Client).Hello", Method, 1, ""},
-		{"(*Client).Mail", Method, 0, ""},
-		{"(*Client).Noop", Method, 10, ""},
-		{"(*Client).Quit", Method, 0, ""},
-		{"(*Client).Rcpt", Method, 0, ""},
-		{"(*Client).Reset", Method, 0, ""},
-		{"(*Client).StartTLS", Method, 0, ""},
-		{"(*Client).TLSConnectionState", Method, 5, ""},
-		{"(*Client).Verify", Method, 0, ""},
-		{"Auth", Type, 0, ""},
-		{"CRAMMD5Auth", Func, 0, "func(username string, secret string) Auth"},
-		{"Client", Type, 0, ""},
-		{"Client.Text", Field, 0, ""},
-		{"Dial", Func, 0, "func(addr string) (*Client, error)"},
-		{"NewClient", Func, 0, "func(conn net.Conn, host string) (*Client, error)"},
-		{"PlainAuth", Func, 0, "func(identity string, username string, password string, host string) Auth"},
-		{"SendMail", Func, 0, "func(addr string, a Auth, from string, to []string, msg []byte) error"},
-		{"ServerInfo", Type, 0, ""},
-		{"ServerInfo.Auth", Field, 0, ""},
-		{"ServerInfo.Name", Field, 0, ""},
-		{"ServerInfo.TLS", Field, 0, ""},
+		{"(*Client).Auth", Method, 0},
+		{"(*Client).Close", Method, 2},
+		{"(*Client).Data", Method, 0},
+		{"(*Client).Extension", Method, 0},
+		{"(*Client).Hello", Method, 1},
+		{"(*Client).Mail", Method, 0},
+		{"(*Client).Noop", Method, 10},
+		{"(*Client).Quit", Method, 0},
+		{"(*Client).Rcpt", Method, 0},
+		{"(*Client).Reset", Method, 0},
+		{"(*Client).StartTLS", Method, 0},
+		{"(*Client).TLSConnectionState", Method, 5},
+		{"(*Client).Verify", Method, 0},
+		{"Auth", Type, 0},
+		{"CRAMMD5Auth", Func, 0},
+		{"Client", Type, 0},
+		{"Client.Text", Field, 0},
+		{"Dial", Func, 0},
+		{"NewClient", Func, 0},
+		{"PlainAuth", Func, 0},
+		{"SendMail", Func, 0},
+		{"ServerInfo", Type, 0},
+		{"ServerInfo.Auth", Field, 0},
+		{"ServerInfo.Name", Field, 0},
+		{"ServerInfo.TLS", Field, 0},
 	},
 	"net/textproto": {
-		{"(*Conn).Close", Method, 0, ""},
-		{"(*Conn).Cmd", Method, 0, ""},
-		{"(*Conn).DotReader", Method, 0, ""},
-		{"(*Conn).DotWriter", Method, 0, ""},
-		{"(*Conn).EndRequest", Method, 0, ""},
-		{"(*Conn).EndResponse", Method, 0, ""},
-		{"(*Conn).Next", Method, 0, ""},
-		{"(*Conn).PrintfLine", Method, 0, ""},
-		{"(*Conn).ReadCodeLine", Method, 0, ""},
-		{"(*Conn).ReadContinuedLine", Method, 0, ""},
-		{"(*Conn).ReadContinuedLineBytes", Method, 0, ""},
-		{"(*Conn).ReadDotBytes", Method, 0, ""},
-		{"(*Conn).ReadDotLines", Method, 0, ""},
-		{"(*Conn).ReadLine", Method, 0, ""},
-		{"(*Conn).ReadLineBytes", Method, 0, ""},
-		{"(*Conn).ReadMIMEHeader", Method, 0, ""},
-		{"(*Conn).ReadResponse", Method, 0, ""},
-		{"(*Conn).StartRequest", Method, 0, ""},
-		{"(*Conn).StartResponse", Method, 0, ""},
-		{"(*Error).Error", Method, 0, ""},
-		{"(*Pipeline).EndRequest", Method, 0, ""},
-		{"(*Pipeline).EndResponse", Method, 0, ""},
-		{"(*Pipeline).Next", Method, 0, ""},
-		{"(*Pipeline).StartRequest", Method, 0, ""},
-		{"(*Pipeline).StartResponse", Method, 0, ""},
-		{"(*Reader).DotReader", Method, 0, ""},
-		{"(*Reader).ReadCodeLine", Method, 0, ""},
-		{"(*Reader).ReadContinuedLine", Method, 0, ""},
-		{"(*Reader).ReadContinuedLineBytes", Method, 0, ""},
-		{"(*Reader).ReadDotBytes", Method, 0, ""},
-		{"(*Reader).ReadDotLines", Method, 0, ""},
-		{"(*Reader).ReadLine", Method, 0, ""},
-		{"(*Reader).ReadLineBytes", Method, 0, ""},
-		{"(*Reader).ReadMIMEHeader", Method, 0, ""},
-		{"(*Reader).ReadResponse", Method, 0, ""},
-		{"(*Writer).DotWriter", Method, 0, ""},
-		{"(*Writer).PrintfLine", Method, 0, ""},
-		{"(MIMEHeader).Add", Method, 0, ""},
-		{"(MIMEHeader).Del", Method, 0, ""},
-		{"(MIMEHeader).Get", Method, 0, ""},
-		{"(MIMEHeader).Set", Method, 0, ""},
-		{"(MIMEHeader).Values", Method, 14, ""},
-		{"(ProtocolError).Error", Method, 0, ""},
-		{"CanonicalMIMEHeaderKey", Func, 0, "func(s string) string"},
-		{"Conn", Type, 0, ""},
-		{"Conn.Pipeline", Field, 0, ""},
-		{"Conn.Reader", Field, 0, ""},
-		{"Conn.Writer", Field, 0, ""},
-		{"Dial", Func, 0, "func(network string, addr string) (*Conn, error)"},
-		{"Error", Type, 0, ""},
-		{"Error.Code", Field, 0, ""},
-		{"Error.Msg", Field, 0, ""},
-		{"MIMEHeader", Type, 0, ""},
-		{"NewConn", Func, 0, "func(conn io.ReadWriteCloser) *Conn"},
-		{"NewReader", Func, 0, "func(r *bufio.Reader) *Reader"},
-		{"NewWriter", Func, 0, "func(w *bufio.Writer) *Writer"},
-		{"Pipeline", Type, 0, ""},
-		{"ProtocolError", Type, 0, ""},
-		{"Reader", Type, 0, ""},
-		{"Reader.R", Field, 0, ""},
-		{"TrimBytes", Func, 1, "func(b []byte) []byte"},
-		{"TrimString", Func, 1, "func(s string) string"},
-		{"Writer", Type, 0, ""},
-		{"Writer.W", Field, 0, ""},
+		{"(*Conn).Close", Method, 0},
+		{"(*Conn).Cmd", Method, 0},
+		{"(*Conn).DotReader", Method, 0},
+		{"(*Conn).DotWriter", Method, 0},
+		{"(*Conn).EndRequest", Method, 0},
+		{"(*Conn).EndResponse", Method, 0},
+		{"(*Conn).Next", Method, 0},
+		{"(*Conn).PrintfLine", Method, 0},
+		{"(*Conn).ReadCodeLine", Method, 0},
+		{"(*Conn).ReadContinuedLine", Method, 0},
+		{"(*Conn).ReadContinuedLineBytes", Method, 0},
+		{"(*Conn).ReadDotBytes", Method, 0},
+		{"(*Conn).ReadDotLines", Method, 0},
+		{"(*Conn).ReadLine", Method, 0},
+		{"(*Conn).ReadLineBytes", Method, 0},
+		{"(*Conn).ReadMIMEHeader", Method, 0},
+		{"(*Conn).ReadResponse", Method, 0},
+		{"(*Conn).StartRequest", Method, 0},
+		{"(*Conn).StartResponse", Method, 0},
+		{"(*Error).Error", Method, 0},
+		{"(*Pipeline).EndRequest", Method, 0},
+		{"(*Pipeline).EndResponse", Method, 0},
+		{"(*Pipeline).Next", Method, 0},
+		{"(*Pipeline).StartRequest", Method, 0},
+		{"(*Pipeline).StartResponse", Method, 0},
+		{"(*Reader).DotReader", Method, 0},
+		{"(*Reader).ReadCodeLine", Method, 0},
+		{"(*Reader).ReadContinuedLine", Method, 0},
+		{"(*Reader).ReadContinuedLineBytes", Method, 0},
+		{"(*Reader).ReadDotBytes", Method, 0},
+		{"(*Reader).ReadDotLines", Method, 0},
+		{"(*Reader).ReadLine", Method, 0},
+		{"(*Reader).ReadLineBytes", Method, 0},
+		{"(*Reader).ReadMIMEHeader", Method, 0},
+		{"(*Reader).ReadResponse", Method, 0},
+		{"(*Writer).DotWriter", Method, 0},
+		{"(*Writer).PrintfLine", Method, 0},
+		{"(MIMEHeader).Add", Method, 0},
+		{"(MIMEHeader).Del", Method, 0},
+		{"(MIMEHeader).Get", Method, 0},
+		{"(MIMEHeader).Set", Method, 0},
+		{"(MIMEHeader).Values", Method, 14},
+		{"(ProtocolError).Error", Method, 0},
+		{"CanonicalMIMEHeaderKey", Func, 0},
+		{"Conn", Type, 0},
+		{"Conn.Pipeline", Field, 0},
+		{"Conn.Reader", Field, 0},
+		{"Conn.Writer", Field, 0},
+		{"Dial", Func, 0},
+		{"Error", Type, 0},
+		{"Error.Code", Field, 0},
+		{"Error.Msg", Field, 0},
+		{"MIMEHeader", Type, 0},
+		{"NewConn", Func, 0},
+		{"NewReader", Func, 0},
+		{"NewWriter", Func, 0},
+		{"Pipeline", Type, 0},
+		{"ProtocolError", Type, 0},
+		{"Reader", Type, 0},
+		{"Reader.R", Field, 0},
+		{"TrimBytes", Func, 1},
+		{"TrimString", Func, 1},
+		{"Writer", Type, 0},
+		{"Writer.W", Field, 0},
 	},
 	"net/url": {
-		{"(*Error).Error", Method, 0, ""},
-		{"(*Error).Temporary", Method, 6, ""},
-		{"(*Error).Timeout", Method, 6, ""},
-		{"(*Error).Unwrap", Method, 13, ""},
-		{"(*URL).AppendBinary", Method, 24, ""},
-		{"(*URL).EscapedFragment", Method, 15, ""},
-		{"(*URL).EscapedPath", Method, 5, ""},
-		{"(*URL).Hostname", Method, 8, ""},
-		{"(*URL).IsAbs", Method, 0, ""},
-		{"(*URL).JoinPath", Method, 19, ""},
-		{"(*URL).MarshalBinary", Method, 8, ""},
-		{"(*URL).Parse", Method, 0, ""},
-		{"(*URL).Port", Method, 8, ""},
-		{"(*URL).Query", Method, 0, ""},
-		{"(*URL).Redacted", Method, 15, ""},
-		{"(*URL).RequestURI", Method, 0, ""},
-		{"(*URL).ResolveReference", Method, 0, ""},
-		{"(*URL).String", Method, 0, ""},
-		{"(*URL).UnmarshalBinary", Method, 8, ""},
-		{"(*Userinfo).Password", Method, 0, ""},
-		{"(*Userinfo).String", Method, 0, ""},
-		{"(*Userinfo).Username", Method, 0, ""},
-		{"(EscapeError).Error", Method, 0, ""},
-		{"(InvalidHostError).Error", Method, 6, ""},
-		{"(Values).Add", Method, 0, ""},
-		{"(Values).Del", Method, 0, ""},
-		{"(Values).Encode", Method, 0, ""},
-		{"(Values).Get", Method, 0, ""},
-		{"(Values).Has", Method, 17, ""},
-		{"(Values).Set", Method, 0, ""},
-		{"Error", Type, 0, ""},
-		{"Error.Err", Field, 0, ""},
-		{"Error.Op", Field, 0, ""},
-		{"Error.URL", Field, 0, ""},
-		{"EscapeError", Type, 0, ""},
-		{"InvalidHostError", Type, 6, ""},
-		{"JoinPath", Func, 19, "func(base string, elem ...string) (result string, err error)"},
-		{"Parse", Func, 0, "func(rawURL string) (*URL, error)"},
-		{"ParseQuery", Func, 0, "func(query string) (Values, error)"},
-		{"ParseRequestURI", Func, 0, "func(rawURL string) (*URL, error)"},
-		{"PathEscape", Func, 8, "func(s string) string"},
-		{"PathUnescape", Func, 8, "func(s string) (string, error)"},
-		{"QueryEscape", Func, 0, "func(s string) string"},
-		{"QueryUnescape", Func, 0, "func(s string) (string, error)"},
-		{"URL", Type, 0, ""},
-		{"URL.ForceQuery", Field, 7, ""},
-		{"URL.Fragment", Field, 0, ""},
-		{"URL.Host", Field, 0, ""},
-		{"URL.OmitHost", Field, 19, ""},
-		{"URL.Opaque", Field, 0, ""},
-		{"URL.Path", Field, 0, ""},
-		{"URL.RawFragment", Field, 15, ""},
-		{"URL.RawPath", Field, 5, ""},
-		{"URL.RawQuery", Field, 0, ""},
-		{"URL.Scheme", Field, 0, ""},
-		{"URL.User", Field, 0, ""},
-		{"User", Func, 0, "func(username string) *Userinfo"},
-		{"UserPassword", Func, 0, "func(username string, password string) *Userinfo"},
-		{"Userinfo", Type, 0, ""},
-		{"Values", Type, 0, ""},
+		{"(*Error).Error", Method, 0},
+		{"(*Error).Temporary", Method, 6},
+		{"(*Error).Timeout", Method, 6},
+		{"(*Error).Unwrap", Method, 13},
+		{"(*URL).AppendBinary", Method, 24},
+		{"(*URL).EscapedFragment", Method, 15},
+		{"(*URL).EscapedPath", Method, 5},
+		{"(*URL).Hostname", Method, 8},
+		{"(*URL).IsAbs", Method, 0},
+		{"(*URL).JoinPath", Method, 19},
+		{"(*URL).MarshalBinary", Method, 8},
+		{"(*URL).Parse", Method, 0},
+		{"(*URL).Port", Method, 8},
+		{"(*URL).Query", Method, 0},
+		{"(*URL).Redacted", Method, 15},
+		{"(*URL).RequestURI", Method, 0},
+		{"(*URL).ResolveReference", Method, 0},
+		{"(*URL).String", Method, 0},
+		{"(*URL).UnmarshalBinary", Method, 8},
+		{"(*Userinfo).Password", Method, 0},
+		{"(*Userinfo).String", Method, 0},
+		{"(*Userinfo).Username", Method, 0},
+		{"(EscapeError).Error", Method, 0},
+		{"(InvalidHostError).Error", Method, 6},
+		{"(Values).Add", Method, 0},
+		{"(Values).Del", Method, 0},
+		{"(Values).Encode", Method, 0},
+		{"(Values).Get", Method, 0},
+		{"(Values).Has", Method, 17},
+		{"(Values).Set", Method, 0},
+		{"Error", Type, 0},
+		{"Error.Err", Field, 0},
+		{"Error.Op", Field, 0},
+		{"Error.URL", Field, 0},
+		{"EscapeError", Type, 0},
+		{"InvalidHostError", Type, 6},
+		{"JoinPath", Func, 19},
+		{"Parse", Func, 0},
+		{"ParseQuery", Func, 0},
+		{"ParseRequestURI", Func, 0},
+		{"PathEscape", Func, 8},
+		{"PathUnescape", Func, 8},
+		{"QueryEscape", Func, 0},
+		{"QueryUnescape", Func, 0},
+		{"URL", Type, 0},
+		{"URL.ForceQuery", Field, 7},
+		{"URL.Fragment", Field, 0},
+		{"URL.Host", Field, 0},
+		{"URL.OmitHost", Field, 19},
+		{"URL.Opaque", Field, 0},
+		{"URL.Path", Field, 0},
+		{"URL.RawFragment", Field, 15},
+		{"URL.RawPath", Field, 5},
+		{"URL.RawQuery", Field, 0},
+		{"URL.Scheme", Field, 0},
+		{"URL.User", Field, 0},
+		{"User", Func, 0},
+		{"UserPassword", Func, 0},
+		{"Userinfo", Type, 0},
+		{"Values", Type, 0},
 	},
 	"os": {
-		{"(*File).Chdir", Method, 0, ""},
-		{"(*File).Chmod", Method, 0, ""},
-		{"(*File).Chown", Method, 0, ""},
-		{"(*File).Close", Method, 0, ""},
-		{"(*File).Fd", Method, 0, ""},
-		{"(*File).Name", Method, 0, ""},
-		{"(*File).Read", Method, 0, ""},
-		{"(*File).ReadAt", Method, 0, ""},
-		{"(*File).ReadDir", Method, 16, ""},
-		{"(*File).ReadFrom", Method, 15, ""},
-		{"(*File).Readdir", Method, 0, ""},
-		{"(*File).Readdirnames", Method, 0, ""},
-		{"(*File).Seek", Method, 0, ""},
-		{"(*File).SetDeadline", Method, 10, ""},
-		{"(*File).SetReadDeadline", Method, 10, ""},
-		{"(*File).SetWriteDeadline", Method, 10, ""},
-		{"(*File).Stat", Method, 0, ""},
-		{"(*File).Sync", Method, 0, ""},
-		{"(*File).SyscallConn", Method, 12, ""},
-		{"(*File).Truncate", Method, 0, ""},
-		{"(*File).Write", Method, 0, ""},
-		{"(*File).WriteAt", Method, 0, ""},
-		{"(*File).WriteString", Method, 0, ""},
-		{"(*File).WriteTo", Method, 22, ""},
-		{"(*LinkError).Error", Method, 0, ""},
-		{"(*LinkError).Unwrap", Method, 13, ""},
-		{"(*PathError).Error", Method, 0, ""},
-		{"(*PathError).Timeout", Method, 10, ""},
-		{"(*PathError).Unwrap", Method, 13, ""},
-		{"(*Process).Kill", Method, 0, ""},
-		{"(*Process).Release", Method, 0, ""},
-		{"(*Process).Signal", Method, 0, ""},
-		{"(*Process).Wait", Method, 0, ""},
-		{"(*ProcessState).ExitCode", Method, 12, ""},
-		{"(*ProcessState).Exited", Method, 0, ""},
-		{"(*ProcessState).Pid", Method, 0, ""},
-		{"(*ProcessState).String", Method, 0, ""},
-		{"(*ProcessState).Success", Method, 0, ""},
-		{"(*ProcessState).Sys", Method, 0, ""},
-		{"(*ProcessState).SysUsage", Method, 0, ""},
-		{"(*ProcessState).SystemTime", Method, 0, ""},
-		{"(*ProcessState).UserTime", Method, 0, ""},
-		{"(*Root).Chmod", Method, 25, ""},
-		{"(*Root).Chown", Method, 25, ""},
-		{"(*Root).Chtimes", Method, 25, ""},
-		{"(*Root).Close", Method, 24, ""},
-		{"(*Root).Create", Method, 24, ""},
-		{"(*Root).FS", Method, 24, ""},
-		{"(*Root).Lchown", Method, 25, ""},
-		{"(*Root).Link", Method, 25, ""},
-		{"(*Root).Lstat", Method, 24, ""},
-		{"(*Root).Mkdir", Method, 24, ""},
-		{"(*Root).Name", Method, 24, ""},
-		{"(*Root).Open", Method, 24, ""},
-		{"(*Root).OpenFile", Method, 24, ""},
-		{"(*Root).OpenRoot", Method, 24, ""},
-		{"(*Root).Readlink", Method, 25, ""},
-		{"(*Root).Remove", Method, 24, ""},
-		{"(*Root).Rename", Method, 25, ""},
-		{"(*Root).Stat", Method, 24, ""},
-		{"(*Root).Symlink", Method, 25, ""},
-		{"(*SyscallError).Error", Method, 0, ""},
-		{"(*SyscallError).Timeout", Method, 10, ""},
-		{"(*SyscallError).Unwrap", Method, 13, ""},
-		{"(FileMode).IsDir", Method, 0, ""},
-		{"(FileMode).IsRegular", Method, 1, ""},
-		{"(FileMode).Perm", Method, 0, ""},
-		{"(FileMode).String", Method, 0, ""},
-		{"Args", Var, 0, ""},
-		{"Chdir", Func, 0, "func(dir string) error"},
-		{"Chmod", Func, 0, "func(name string, mode FileMode) error"},
-		{"Chown", Func, 0, "func(name string, uid int, gid int) error"},
-		{"Chtimes", Func, 0, "func(name string, atime time.Time, mtime time.Time) error"},
-		{"Clearenv", Func, 0, "func()"},
-		{"CopyFS", Func, 23, "func(dir string, fsys fs.FS) error"},
-		{"Create", Func, 0, "func(name string) (*File, error)"},
-		{"CreateTemp", Func, 16, "func(dir string, pattern string) (*File, error)"},
-		{"DevNull", Const, 0, ""},
-		{"DirEntry", Type, 16, ""},
-		{"DirFS", Func, 16, "func(dir string) fs.FS"},
-		{"Environ", Func, 0, "func() []string"},
-		{"ErrClosed", Var, 8, ""},
-		{"ErrDeadlineExceeded", Var, 15, ""},
-		{"ErrExist", Var, 0, ""},
-		{"ErrInvalid", Var, 0, ""},
-		{"ErrNoDeadline", Var, 10, ""},
-		{"ErrNotExist", Var, 0, ""},
-		{"ErrPermission", Var, 0, ""},
-		{"ErrProcessDone", Var, 16, ""},
-		{"Executable", Func, 8, "func() (string, error)"},
-		{"Exit", Func, 0, "func(code int)"},
-		{"Expand", Func, 0, "func(s string, mapping func(string) string) string"},
-		{"ExpandEnv", Func, 0, "func(s string) string"},
-		{"File", Type, 0, ""},
-		{"FileInfo", Type, 0, ""},
-		{"FileMode", Type, 0, ""},
-		{"FindProcess", Func, 0, "func(pid int) (*Process, error)"},
-		{"Getegid", Func, 0, "func() int"},
-		{"Getenv", Func, 0, "func(key string) string"},
-		{"Geteuid", Func, 0, "func() int"},
-		{"Getgid", Func, 0, "func() int"},
-		{"Getgroups", Func, 0, "func() ([]int, error)"},
-		{"Getpagesize", Func, 0, "func() int"},
-		{"Getpid", Func, 0, "func() int"},
-		{"Getppid", Func, 0, "func() int"},
-		{"Getuid", Func, 0, "func() int"},
-		{"Getwd", Func, 0, "func() (dir string, err error)"},
-		{"Hostname", Func, 0, "func() (name string, err error)"},
-		{"Interrupt", Var, 0, ""},
-		{"IsExist", Func, 0, "func(err error) bool"},
-		{"IsNotExist", Func, 0, "func(err error) bool"},
-		{"IsPathSeparator", Func, 0, "func(c uint8) bool"},
-		{"IsPermission", Func, 0, "func(err error) bool"},
-		{"IsTimeout", Func, 10, "func(err error) bool"},
-		{"Kill", Var, 0, ""},
-		{"Lchown", Func, 0, "func(name string, uid int, gid int) error"},
-		{"Link", Func, 0, "func(oldname string, newname string) error"},
-		{"LinkError", Type, 0, ""},
-		{"LinkError.Err", Field, 0, ""},
-		{"LinkError.New", Field, 0, ""},
-		{"LinkError.Old", Field, 0, ""},
-		{"LinkError.Op", Field, 0, ""},
-		{"LookupEnv", Func, 5, "func(key string) (string, bool)"},
-		{"Lstat", Func, 0, "func(name string) (FileInfo, error)"},
-		{"Mkdir", Func, 0, "func(name string, perm FileMode) error"},
-		{"MkdirAll", Func, 0, "func(path string, perm FileMode) error"},
-		{"MkdirTemp", Func, 16, "func(dir string, pattern string) (string, error)"},
-		{"ModeAppend", Const, 0, ""},
-		{"ModeCharDevice", Const, 0, ""},
-		{"ModeDevice", Const, 0, ""},
-		{"ModeDir", Const, 0, ""},
-		{"ModeExclusive", Const, 0, ""},
-		{"ModeIrregular", Const, 11, ""},
-		{"ModeNamedPipe", Const, 0, ""},
-		{"ModePerm", Const, 0, ""},
-		{"ModeSetgid", Const, 0, ""},
-		{"ModeSetuid", Const, 0, ""},
-		{"ModeSocket", Const, 0, ""},
-		{"ModeSticky", Const, 0, ""},
-		{"ModeSymlink", Const, 0, ""},
-		{"ModeTemporary", Const, 0, ""},
-		{"ModeType", Const, 0, ""},
-		{"NewFile", Func, 0, "func(fd uintptr, name string) *File"},
-		{"NewSyscallError", Func, 0, "func(syscall string, err error) error"},
-		{"O_APPEND", Const, 0, ""},
-		{"O_CREATE", Const, 0, ""},
-		{"O_EXCL", Const, 0, ""},
-		{"O_RDONLY", Const, 0, ""},
-		{"O_RDWR", Const, 0, ""},
-		{"O_SYNC", Const, 0, ""},
-		{"O_TRUNC", Const, 0, ""},
-		{"O_WRONLY", Const, 0, ""},
-		{"Open", Func, 0, "func(name string) (*File, error)"},
-		{"OpenFile", Func, 0, "func(name string, flag int, perm FileMode) (*File, error)"},
-		{"OpenInRoot", Func, 24, "func(dir string, name string) (*File, error)"},
-		{"OpenRoot", Func, 24, "func(name string) (*Root, error)"},
-		{"PathError", Type, 0, ""},
-		{"PathError.Err", Field, 0, ""},
-		{"PathError.Op", Field, 0, ""},
-		{"PathError.Path", Field, 0, ""},
-		{"PathListSeparator", Const, 0, ""},
-		{"PathSeparator", Const, 0, ""},
-		{"Pipe", Func, 0, "func() (r *File, w *File, err error)"},
-		{"ProcAttr", Type, 0, ""},
-		{"ProcAttr.Dir", Field, 0, ""},
-		{"ProcAttr.Env", Field, 0, ""},
-		{"ProcAttr.Files", Field, 0, ""},
-		{"ProcAttr.Sys", Field, 0, ""},
-		{"Process", Type, 0, ""},
-		{"Process.Pid", Field, 0, ""},
-		{"ProcessState", Type, 0, ""},
-		{"ReadDir", Func, 16, "func(name string) ([]DirEntry, error)"},
-		{"ReadFile", Func, 16, "func(name string) ([]byte, error)"},
-		{"Readlink", Func, 0, "func(name string) (string, error)"},
-		{"Remove", Func, 0, "func(name string) error"},
-		{"RemoveAll", Func, 0, "func(path string) error"},
-		{"Rename", Func, 0, "func(oldpath string, newpath string) error"},
-		{"Root", Type, 24, ""},
-		{"SEEK_CUR", Const, 0, ""},
-		{"SEEK_END", Const, 0, ""},
-		{"SEEK_SET", Const, 0, ""},
-		{"SameFile", Func, 0, "func(fi1 FileInfo, fi2 FileInfo) bool"},
-		{"Setenv", Func, 0, "func(key string, value string) error"},
-		{"Signal", Type, 0, ""},
-		{"StartProcess", Func, 0, "func(name string, argv []string, attr *ProcAttr) (*Process, error)"},
-		{"Stat", Func, 0, "func(name string) (FileInfo, error)"},
-		{"Stderr", Var, 0, ""},
-		{"Stdin", Var, 0, ""},
-		{"Stdout", Var, 0, ""},
-		{"Symlink", Func, 0, "func(oldname string, newname string) error"},
-		{"SyscallError", Type, 0, ""},
-		{"SyscallError.Err", Field, 0, ""},
-		{"SyscallError.Syscall", Field, 0, ""},
-		{"TempDir", Func, 0, "func() string"},
-		{"Truncate", Func, 0, "func(name string, size int64) error"},
-		{"Unsetenv", Func, 4, "func(key string) error"},
-		{"UserCacheDir", Func, 11, "func() (string, error)"},
-		{"UserConfigDir", Func, 13, "func() (string, error)"},
-		{"UserHomeDir", Func, 12, "func() (string, error)"},
-		{"WriteFile", Func, 16, "func(name string, data []byte, perm FileMode) error"},
+		{"(*File).Chdir", Method, 0},
+		{"(*File).Chmod", Method, 0},
+		{"(*File).Chown", Method, 0},
+		{"(*File).Close", Method, 0},
+		{"(*File).Fd", Method, 0},
+		{"(*File).Name", Method, 0},
+		{"(*File).Read", Method, 0},
+		{"(*File).ReadAt", Method, 0},
+		{"(*File).ReadDir", Method, 16},
+		{"(*File).ReadFrom", Method, 15},
+		{"(*File).Readdir", Method, 0},
+		{"(*File).Readdirnames", Method, 0},
+		{"(*File).Seek", Method, 0},
+		{"(*File).SetDeadline", Method, 10},
+		{"(*File).SetReadDeadline", Method, 10},
+		{"(*File).SetWriteDeadline", Method, 10},
+		{"(*File).Stat", Method, 0},
+		{"(*File).Sync", Method, 0},
+		{"(*File).SyscallConn", Method, 12},
+		{"(*File).Truncate", Method, 0},
+		{"(*File).Write", Method, 0},
+		{"(*File).WriteAt", Method, 0},
+		{"(*File).WriteString", Method, 0},
+		{"(*File).WriteTo", Method, 22},
+		{"(*LinkError).Error", Method, 0},
+		{"(*LinkError).Unwrap", Method, 13},
+		{"(*PathError).Error", Method, 0},
+		{"(*PathError).Timeout", Method, 10},
+		{"(*PathError).Unwrap", Method, 13},
+		{"(*Process).Kill", Method, 0},
+		{"(*Process).Release", Method, 0},
+		{"(*Process).Signal", Method, 0},
+		{"(*Process).Wait", Method, 0},
+		{"(*ProcessState).ExitCode", Method, 12},
+		{"(*ProcessState).Exited", Method, 0},
+		{"(*ProcessState).Pid", Method, 0},
+		{"(*ProcessState).String", Method, 0},
+		{"(*ProcessState).Success", Method, 0},
+		{"(*ProcessState).Sys", Method, 0},
+		{"(*ProcessState).SysUsage", Method, 0},
+		{"(*ProcessState).SystemTime", Method, 0},
+		{"(*ProcessState).UserTime", Method, 0},
+		{"(*Root).Chmod", Method, 25},
+		{"(*Root).Chown", Method, 25},
+		{"(*Root).Close", Method, 24},
+		{"(*Root).Create", Method, 24},
+		{"(*Root).FS", Method, 24},
+		{"(*Root).Lstat", Method, 24},
+		{"(*Root).Mkdir", Method, 24},
+		{"(*Root).Name", Method, 24},
+		{"(*Root).Open", Method, 24},
+		{"(*Root).OpenFile", Method, 24},
+		{"(*Root).OpenRoot", Method, 24},
+		{"(*Root).Remove", Method, 24},
+		{"(*Root).Stat", Method, 24},
+		{"(*SyscallError).Error", Method, 0},
+		{"(*SyscallError).Timeout", Method, 10},
+		{"(*SyscallError).Unwrap", Method, 13},
+		{"(FileMode).IsDir", Method, 0},
+		{"(FileMode).IsRegular", Method, 1},
+		{"(FileMode).Perm", Method, 0},
+		{"(FileMode).String", Method, 0},
+		{"Args", Var, 0},
+		{"Chdir", Func, 0},
+		{"Chmod", Func, 0},
+		{"Chown", Func, 0},
+		{"Chtimes", Func, 0},
+		{"Clearenv", Func, 0},
+		{"CopyFS", Func, 23},
+		{"Create", Func, 0},
+		{"CreateTemp", Func, 16},
+		{"DevNull", Const, 0},
+		{"DirEntry", Type, 16},
+		{"DirFS", Func, 16},
+		{"Environ", Func, 0},
+		{"ErrClosed", Var, 8},
+		{"ErrDeadlineExceeded", Var, 15},
+		{"ErrExist", Var, 0},
+		{"ErrInvalid", Var, 0},
+		{"ErrNoDeadline", Var, 10},
+		{"ErrNotExist", Var, 0},
+		{"ErrPermission", Var, 0},
+		{"ErrProcessDone", Var, 16},
+		{"Executable", Func, 8},
+		{"Exit", Func, 0},
+		{"Expand", Func, 0},
+		{"ExpandEnv", Func, 0},
+		{"File", Type, 0},
+		{"FileInfo", Type, 0},
+		{"FileMode", Type, 0},
+		{"FindProcess", Func, 0},
+		{"Getegid", Func, 0},
+		{"Getenv", Func, 0},
+		{"Geteuid", Func, 0},
+		{"Getgid", Func, 0},
+		{"Getgroups", Func, 0},
+		{"Getpagesize", Func, 0},
+		{"Getpid", Func, 0},
+		{"Getppid", Func, 0},
+		{"Getuid", Func, 0},
+		{"Getwd", Func, 0},
+		{"Hostname", Func, 0},
+		{"Interrupt", Var, 0},
+		{"IsExist", Func, 0},
+		{"IsNotExist", Func, 0},
+		{"IsPathSeparator", Func, 0},
+		{"IsPermission", Func, 0},
+		{"IsTimeout", Func, 10},
+		{"Kill", Var, 0},
+		{"Lchown", Func, 0},
+		{"Link", Func, 0},
+		{"LinkError", Type, 0},
+		{"LinkError.Err", Field, 0},
+		{"LinkError.New", Field, 0},
+		{"LinkError.Old", Field, 0},
+		{"LinkError.Op", Field, 0},
+		{"LookupEnv", Func, 5},
+		{"Lstat", Func, 0},
+		{"Mkdir", Func, 0},
+		{"MkdirAll", Func, 0},
+		{"MkdirTemp", Func, 16},
+		{"ModeAppend", Const, 0},
+		{"ModeCharDevice", Const, 0},
+		{"ModeDevice", Const, 0},
+		{"ModeDir", Const, 0},
+		{"ModeExclusive", Const, 0},
+		{"ModeIrregular", Const, 11},
+		{"ModeNamedPipe", Const, 0},
+		{"ModePerm", Const, 0},
+		{"ModeSetgid", Const, 0},
+		{"ModeSetuid", Const, 0},
+		{"ModeSocket", Const, 0},
+		{"ModeSticky", Const, 0},
+		{"ModeSymlink", Const, 0},
+		{"ModeTemporary", Const, 0},
+		{"ModeType", Const, 0},
+		{"NewFile", Func, 0},
+		{"NewSyscallError", Func, 0},
+		{"O_APPEND", Const, 0},
+		{"O_CREATE", Const, 0},
+		{"O_EXCL", Const, 0},
+		{"O_RDONLY", Const, 0},
+		{"O_RDWR", Const, 0},
+		{"O_SYNC", Const, 0},
+		{"O_TRUNC", Const, 0},
+		{"O_WRONLY", Const, 0},
+		{"Open", Func, 0},
+		{"OpenFile", Func, 0},
+		{"OpenInRoot", Func, 24},
+		{"OpenRoot", Func, 24},
+		{"PathError", Type, 0},
+		{"PathError.Err", Field, 0},
+		{"PathError.Op", Field, 0},
+		{"PathError.Path", Field, 0},
+		{"PathListSeparator", Const, 0},
+		{"PathSeparator", Const, 0},
+		{"Pipe", Func, 0},
+		{"ProcAttr", Type, 0},
+		{"ProcAttr.Dir", Field, 0},
+		{"ProcAttr.Env", Field, 0},
+		{"ProcAttr.Files", Field, 0},
+		{"ProcAttr.Sys", Field, 0},
+		{"Process", Type, 0},
+		{"Process.Pid", Field, 0},
+		{"ProcessState", Type, 0},
+		{"ReadDir", Func, 16},
+		{"ReadFile", Func, 16},
+		{"Readlink", Func, 0},
+		{"Remove", Func, 0},
+		{"RemoveAll", Func, 0},
+		{"Rename", Func, 0},
+		{"Root", Type, 24},
+		{"SEEK_CUR", Const, 0},
+		{"SEEK_END", Const, 0},
+		{"SEEK_SET", Const, 0},
+		{"SameFile", Func, 0},
+		{"Setenv", Func, 0},
+		{"Signal", Type, 0},
+		{"StartProcess", Func, 0},
+		{"Stat", Func, 0},
+		{"Stderr", Var, 0},
+		{"Stdin", Var, 0},
+		{"Stdout", Var, 0},
+		{"Symlink", Func, 0},
+		{"SyscallError", Type, 0},
+		{"SyscallError.Err", Field, 0},
+		{"SyscallError.Syscall", Field, 0},
+		{"TempDir", Func, 0},
+		{"Truncate", Func, 0},
+		{"Unsetenv", Func, 4},
+		{"UserCacheDir", Func, 11},
+		{"UserConfigDir", Func, 13},
+		{"UserHomeDir", Func, 12},
+		{"WriteFile", Func, 16},
 	},
 	"os/exec": {
-		{"(*Cmd).CombinedOutput", Method, 0, ""},
-		{"(*Cmd).Environ", Method, 19, ""},
-		{"(*Cmd).Output", Method, 0, ""},
-		{"(*Cmd).Run", Method, 0, ""},
-		{"(*Cmd).Start", Method, 0, ""},
-		{"(*Cmd).StderrPipe", Method, 0, ""},
-		{"(*Cmd).StdinPipe", Method, 0, ""},
-		{"(*Cmd).StdoutPipe", Method, 0, ""},
-		{"(*Cmd).String", Method, 13, ""},
-		{"(*Cmd).Wait", Method, 0, ""},
-		{"(*Error).Error", Method, 0, ""},
-		{"(*Error).Unwrap", Method, 13, ""},
-		{"(*ExitError).Error", Method, 0, ""},
-		{"(ExitError).ExitCode", Method, 12, ""},
-		{"(ExitError).Exited", Method, 0, ""},
-		{"(ExitError).Pid", Method, 0, ""},
-		{"(ExitError).String", Method, 0, ""},
-		{"(ExitError).Success", Method, 0, ""},
-		{"(ExitError).Sys", Method, 0, ""},
-		{"(ExitError).SysUsage", Method, 0, ""},
-		{"(ExitError).SystemTime", Method, 0, ""},
-		{"(ExitError).UserTime", Method, 0, ""},
-		{"Cmd", Type, 0, ""},
-		{"Cmd.Args", Field, 0, ""},
-		{"Cmd.Cancel", Field, 20, ""},
-		{"Cmd.Dir", Field, 0, ""},
-		{"Cmd.Env", Field, 0, ""},
-		{"Cmd.Err", Field, 19, ""},
-		{"Cmd.ExtraFiles", Field, 0, ""},
-		{"Cmd.Path", Field, 0, ""},
-		{"Cmd.Process", Field, 0, ""},
-		{"Cmd.ProcessState", Field, 0, ""},
-		{"Cmd.Stderr", Field, 0, ""},
-		{"Cmd.Stdin", Field, 0, ""},
-		{"Cmd.Stdout", Field, 0, ""},
-		{"Cmd.SysProcAttr", Field, 0, ""},
-		{"Cmd.WaitDelay", Field, 20, ""},
-		{"Command", Func, 0, "func(name string, arg ...string) *Cmd"},
-		{"CommandContext", Func, 7, "func(ctx context.Context, name string, arg ...string) *Cmd"},
-		{"ErrDot", Var, 19, ""},
-		{"ErrNotFound", Var, 0, ""},
-		{"ErrWaitDelay", Var, 20, ""},
-		{"Error", Type, 0, ""},
-		{"Error.Err", Field, 0, ""},
-		{"Error.Name", Field, 0, ""},
-		{"ExitError", Type, 0, ""},
-		{"ExitError.ProcessState", Field, 0, ""},
-		{"ExitError.Stderr", Field, 6, ""},
-		{"LookPath", Func, 0, "func(file string) (string, error)"},
+		{"(*Cmd).CombinedOutput", Method, 0},
+		{"(*Cmd).Environ", Method, 19},
+		{"(*Cmd).Output", Method, 0},
+		{"(*Cmd).Run", Method, 0},
+		{"(*Cmd).Start", Method, 0},
+		{"(*Cmd).StderrPipe", Method, 0},
+		{"(*Cmd).StdinPipe", Method, 0},
+		{"(*Cmd).StdoutPipe", Method, 0},
+		{"(*Cmd).String", Method, 13},
+		{"(*Cmd).Wait", Method, 0},
+		{"(*Error).Error", Method, 0},
+		{"(*Error).Unwrap", Method, 13},
+		{"(*ExitError).Error", Method, 0},
+		{"(ExitError).ExitCode", Method, 12},
+		{"(ExitError).Exited", Method, 0},
+		{"(ExitError).Pid", Method, 0},
+		{"(ExitError).String", Method, 0},
+		{"(ExitError).Success", Method, 0},
+		{"(ExitError).Sys", Method, 0},
+		{"(ExitError).SysUsage", Method, 0},
+		{"(ExitError).SystemTime", Method, 0},
+		{"(ExitError).UserTime", Method, 0},
+		{"Cmd", Type, 0},
+		{"Cmd.Args", Field, 0},
+		{"Cmd.Cancel", Field, 20},
+		{"Cmd.Dir", Field, 0},
+		{"Cmd.Env", Field, 0},
+		{"Cmd.Err", Field, 19},
+		{"Cmd.ExtraFiles", Field, 0},
+		{"Cmd.Path", Field, 0},
+		{"Cmd.Process", Field, 0},
+		{"Cmd.ProcessState", Field, 0},
+		{"Cmd.Stderr", Field, 0},
+		{"Cmd.Stdin", Field, 0},
+		{"Cmd.Stdout", Field, 0},
+		{"Cmd.SysProcAttr", Field, 0},
+		{"Cmd.WaitDelay", Field, 20},
+		{"Command", Func, 0},
+		{"CommandContext", Func, 7},
+		{"ErrDot", Var, 19},
+		{"ErrNotFound", Var, 0},
+		{"ErrWaitDelay", Var, 20},
+		{"Error", Type, 0},
+		{"Error.Err", Field, 0},
+		{"Error.Name", Field, 0},
+		{"ExitError", Type, 0},
+		{"ExitError.ProcessState", Field, 0},
+		{"ExitError.Stderr", Field, 6},
+		{"LookPath", Func, 0},
 	},
 	"os/signal": {
-		{"Ignore", Func, 5, "func(sig ...os.Signal)"},
-		{"Ignored", Func, 11, "func(sig os.Signal) bool"},
-		{"Notify", Func, 0, "func(c chan<- os.Signal, sig ...os.Signal)"},
-		{"NotifyContext", Func, 16, "func(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc)"},
-		{"Reset", Func, 5, "func(sig ...os.Signal)"},
-		{"Stop", Func, 1, "func(c chan<- os.Signal)"},
+		{"Ignore", Func, 5},
+		{"Ignored", Func, 11},
+		{"Notify", Func, 0},
+		{"NotifyContext", Func, 16},
+		{"Reset", Func, 5},
+		{"Stop", Func, 1},
 	},
 	"os/user": {
-		{"(*User).GroupIds", Method, 7, ""},
-		{"(UnknownGroupError).Error", Method, 7, ""},
-		{"(UnknownGroupIdError).Error", Method, 7, ""},
-		{"(UnknownUserError).Error", Method, 0, ""},
-		{"(UnknownUserIdError).Error", Method, 0, ""},
-		{"Current", Func, 0, "func() (*User, error)"},
-		{"Group", Type, 7, ""},
-		{"Group.Gid", Field, 7, ""},
-		{"Group.Name", Field, 7, ""},
-		{"Lookup", Func, 0, "func(username string) (*User, error)"},
-		{"LookupGroup", Func, 7, "func(name string) (*Group, error)"},
-		{"LookupGroupId", Func, 7, "func(gid string) (*Group, error)"},
-		{"LookupId", Func, 0, "func(uid string) (*User, error)"},
-		{"UnknownGroupError", Type, 7, ""},
-		{"UnknownGroupIdError", Type, 7, ""},
-		{"UnknownUserError", Type, 0, ""},
-		{"UnknownUserIdError", Type, 0, ""},
-		{"User", Type, 0, ""},
-		{"User.Gid", Field, 0, ""},
-		{"User.HomeDir", Field, 0, ""},
-		{"User.Name", Field, 0, ""},
-		{"User.Uid", Field, 0, ""},
-		{"User.Username", Field, 0, ""},
+		{"(*User).GroupIds", Method, 7},
+		{"(UnknownGroupError).Error", Method, 7},
+		{"(UnknownGroupIdError).Error", Method, 7},
+		{"(UnknownUserError).Error", Method, 0},
+		{"(UnknownUserIdError).Error", Method, 0},
+		{"Current", Func, 0},
+		{"Group", Type, 7},
+		{"Group.Gid", Field, 7},
+		{"Group.Name", Field, 7},
+		{"Lookup", Func, 0},
+		{"LookupGroup", Func, 7},
+		{"LookupGroupId", Func, 7},
+		{"LookupId", Func, 0},
+		{"UnknownGroupError", Type, 7},
+		{"UnknownGroupIdError", Type, 7},
+		{"UnknownUserError", Type, 0},
+		{"UnknownUserIdError", Type, 0},
+		{"User", Type, 0},
+		{"User.Gid", Field, 0},
+		{"User.HomeDir", Field, 0},
+		{"User.Name", Field, 0},
+		{"User.Uid", Field, 0},
+		{"User.Username", Field, 0},
 	},
 	"path": {
-		{"Base", Func, 0, "func(path string) string"},
-		{"Clean", Func, 0, "func(path string) string"},
-		{"Dir", Func, 0, "func(path string) string"},
-		{"ErrBadPattern", Var, 0, ""},
-		{"Ext", Func, 0, "func(path string) string"},
-		{"IsAbs", Func, 0, "func(path string) bool"},
-		{"Join", Func, 0, "func(elem ...string) string"},
-		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
-		{"Split", Func, 0, "func(path string) (dir string, file string)"},
+		{"Base", Func, 0},
+		{"Clean", Func, 0},
+		{"Dir", Func, 0},
+		{"ErrBadPattern", Var, 0},
+		{"Ext", Func, 0},
+		{"IsAbs", Func, 0},
+		{"Join", Func, 0},
+		{"Match", Func, 0},
+		{"Split", Func, 0},
 	},
 	"path/filepath": {
-		{"Abs", Func, 0, "func(path string) (string, error)"},
-		{"Base", Func, 0, "func(path string) string"},
-		{"Clean", Func, 0, "func(path string) string"},
-		{"Dir", Func, 0, "func(path string) string"},
-		{"ErrBadPattern", Var, 0, ""},
-		{"EvalSymlinks", Func, 0, "func(path string) (string, error)"},
-		{"Ext", Func, 0, "func(path string) string"},
-		{"FromSlash", Func, 0, "func(path string) string"},
-		{"Glob", Func, 0, "func(pattern string) (matches []string, err error)"},
-		{"HasPrefix", Func, 0, "func(p string, prefix string) bool"},
-		{"IsAbs", Func, 0, "func(path string) bool"},
-		{"IsLocal", Func, 20, "func(path string) bool"},
-		{"Join", Func, 0, "func(elem ...string) string"},
-		{"ListSeparator", Const, 0, ""},
-		{"Localize", Func, 23, "func(path string) (string, error)"},
-		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
-		{"Rel", Func, 0, "func(basepath string, targpath string) (string, error)"},
-		{"Separator", Const, 0, ""},
-		{"SkipAll", Var, 20, ""},
-		{"SkipDir", Var, 0, ""},
-		{"Split", Func, 0, "func(path string) (dir string, file string)"},
-		{"SplitList", Func, 0, "func(path string) []string"},
-		{"ToSlash", Func, 0, "func(path string) string"},
-		{"VolumeName", Func, 0, "func(path string) string"},
-		{"Walk", Func, 0, "func(root string, fn WalkFunc) error"},
-		{"WalkDir", Func, 16, "func(root string, fn fs.WalkDirFunc) error"},
-		{"WalkFunc", Type, 0, ""},
+		{"Abs", Func, 0},
+		{"Base", Func, 0},
+		{"Clean", Func, 0},
+		{"Dir", Func, 0},
+		{"ErrBadPattern", Var, 0},
+		{"EvalSymlinks", Func, 0},
+		{"Ext", Func, 0},
+		{"FromSlash", Func, 0},
+		{"Glob", Func, 0},
+		{"HasPrefix", Func, 0},
+		{"IsAbs", Func, 0},
+		{"IsLocal", Func, 20},
+		{"Join", Func, 0},
+		{"ListSeparator", Const, 0},
+		{"Localize", Func, 23},
+		{"Match", Func, 0},
+		{"Rel", Func, 0},
+		{"Separator", Const, 0},
+		{"SkipAll", Var, 20},
+		{"SkipDir", Var, 0},
+		{"Split", Func, 0},
+		{"SplitList", Func, 0},
+		{"ToSlash", Func, 0},
+		{"VolumeName", Func, 0},
+		{"Walk", Func, 0},
+		{"WalkDir", Func, 16},
+		{"WalkFunc", Type, 0},
 	},
 	"plugin": {
-		{"(*Plugin).Lookup", Method, 8, ""},
-		{"Open", Func, 8, "func(path string) (*Plugin, error)"},
-		{"Plugin", Type, 8, ""},
-		{"Symbol", Type, 8, ""},
+		{"(*Plugin).Lookup", Method, 8},
+		{"Open", Func, 8},
+		{"Plugin", Type, 8},
+		{"Symbol", Type, 8},
 	},
 	"reflect": {
-		{"(*MapIter).Key", Method, 12, ""},
-		{"(*MapIter).Next", Method, 12, ""},
-		{"(*MapIter).Reset", Method, 18, ""},
-		{"(*MapIter).Value", Method, 12, ""},
-		{"(*ValueError).Error", Method, 0, ""},
-		{"(ChanDir).String", Method, 0, ""},
-		{"(Kind).String", Method, 0, ""},
-		{"(Method).IsExported", Method, 17, ""},
-		{"(StructField).IsExported", Method, 17, ""},
-		{"(StructTag).Get", Method, 0, ""},
-		{"(StructTag).Lookup", Method, 7, ""},
-		{"(Value).Addr", Method, 0, ""},
-		{"(Value).Bool", Method, 0, ""},
-		{"(Value).Bytes", Method, 0, ""},
-		{"(Value).Call", Method, 0, ""},
-		{"(Value).CallSlice", Method, 0, ""},
-		{"(Value).CanAddr", Method, 0, ""},
-		{"(Value).CanComplex", Method, 18, ""},
-		{"(Value).CanConvert", Method, 17, ""},
-		{"(Value).CanFloat", Method, 18, ""},
-		{"(Value).CanInt", Method, 18, ""},
-		{"(Value).CanInterface", Method, 0, ""},
-		{"(Value).CanSet", Method, 0, ""},
-		{"(Value).CanUint", Method, 18, ""},
-		{"(Value).Cap", Method, 0, ""},
-		{"(Value).Clear", Method, 21, ""},
-		{"(Value).Close", Method, 0, ""},
-		{"(Value).Comparable", Method, 20, ""},
-		{"(Value).Complex", Method, 0, ""},
-		{"(Value).Convert", Method, 1, ""},
-		{"(Value).Elem", Method, 0, ""},
-		{"(Value).Equal", Method, 20, ""},
-		{"(Value).Field", Method, 0, ""},
-		{"(Value).FieldByIndex", Method, 0, ""},
-		{"(Value).FieldByIndexErr", Method, 18, ""},
-		{"(Value).FieldByName", Method, 0, ""},
-		{"(Value).FieldByNameFunc", Method, 0, ""},
-		{"(Value).Float", Method, 0, ""},
-		{"(Value).Grow", Method, 20, ""},
-		{"(Value).Index", Method, 0, ""},
-		{"(Value).Int", Method, 0, ""},
-		{"(Value).Interface", Method, 0, ""},
-		{"(Value).InterfaceData", Method, 0, ""},
-		{"(Value).IsNil", Method, 0, ""},
-		{"(Value).IsValid", Method, 0, ""},
-		{"(Value).IsZero", Method, 13, ""},
-		{"(Value).Kind", Method, 0, ""},
-		{"(Value).Len", Method, 0, ""},
-		{"(Value).MapIndex", Method, 0, ""},
-		{"(Value).MapKeys", Method, 0, ""},
-		{"(Value).MapRange", Method, 12, ""},
-		{"(Value).Method", Method, 0, ""},
-		{"(Value).MethodByName", Method, 0, ""},
-		{"(Value).NumField", Method, 0, ""},
-		{"(Value).NumMethod", Method, 0, ""},
-		{"(Value).OverflowComplex", Method, 0, ""},
-		{"(Value).OverflowFloat", Method, 0, ""},
-		{"(Value).OverflowInt", Method, 0, ""},
-		{"(Value).OverflowUint", Method, 0, ""},
-		{"(Value).Pointer", Method, 0, ""},
-		{"(Value).Recv", Method, 0, ""},
-		{"(Value).Send", Method, 0, ""},
-		{"(Value).Seq", Method, 23, ""},
-		{"(Value).Seq2", Method, 23, ""},
-		{"(Value).Set", Method, 0, ""},
-		{"(Value).SetBool", Method, 0, ""},
-		{"(Value).SetBytes", Method, 0, ""},
-		{"(Value).SetCap", Method, 2, ""},
-		{"(Value).SetComplex", Method, 0, ""},
-		{"(Value).SetFloat", Method, 0, ""},
-		{"(Value).SetInt", Method, 0, ""},
-		{"(Value).SetIterKey", Method, 18, ""},
-		{"(Value).SetIterValue", Method, 18, ""},
-		{"(Value).SetLen", Method, 0, ""},
-		{"(Value).SetMapIndex", Method, 0, ""},
-		{"(Value).SetPointer", Method, 0, ""},
-		{"(Value).SetString", Method, 0, ""},
-		{"(Value).SetUint", Method, 0, ""},
-		{"(Value).SetZero", Method, 20, ""},
-		{"(Value).Slice", Method, 0, ""},
-		{"(Value).Slice3", Method, 2, ""},
-		{"(Value).String", Method, 0, ""},
-		{"(Value).TryRecv", Method, 0, ""},
-		{"(Value).TrySend", Method, 0, ""},
-		{"(Value).Type", Method, 0, ""},
-		{"(Value).Uint", Method, 0, ""},
-		{"(Value).UnsafeAddr", Method, 0, ""},
-		{"(Value).UnsafePointer", Method, 18, ""},
-		{"Append", Func, 0, "func(s Value, x ...Value) Value"},
-		{"AppendSlice", Func, 0, "func(s Value, t Value) Value"},
-		{"Array", Const, 0, ""},
-		{"ArrayOf", Func, 5, "func(length int, elem Type) Type"},
-		{"Bool", Const, 0, ""},
-		{"BothDir", Const, 0, ""},
-		{"Chan", Const, 0, ""},
-		{"ChanDir", Type, 0, ""},
-		{"ChanOf", Func, 1, "func(dir ChanDir, t Type) Type"},
-		{"Complex128", Const, 0, ""},
-		{"Complex64", Const, 0, ""},
-		{"Copy", Func, 0, "func(dst Value, src Value) int"},
-		{"DeepEqual", Func, 0, "func(x any, y any) bool"},
-		{"Float32", Const, 0, ""},
-		{"Float64", Const, 0, ""},
-		{"Func", Const, 0, ""},
-		{"FuncOf", Func, 5, "func(in []Type, out []Type, variadic bool) Type"},
-		{"Indirect", Func, 0, "func(v Value) Value"},
-		{"Int", Const, 0, ""},
-		{"Int16", Const, 0, ""},
-		{"Int32", Const, 0, ""},
-		{"Int64", Const, 0, ""},
-		{"Int8", Const, 0, ""},
-		{"Interface", Const, 0, ""},
-		{"Invalid", Const, 0, ""},
-		{"Kind", Type, 0, ""},
-		{"MakeChan", Func, 0, "func(typ Type, buffer int) Value"},
-		{"MakeFunc", Func, 1, "func(typ Type, fn func(args []Value) (results []Value)) Value"},
-		{"MakeMap", Func, 0, "func(typ Type) Value"},
-		{"MakeMapWithSize", Func, 9, "func(typ Type, n int) Value"},
-		{"MakeSlice", Func, 0, "func(typ Type, len int, cap int) Value"},
-		{"Map", Const, 0, ""},
-		{"MapIter", Type, 12, ""},
-		{"MapOf", Func, 1, "func(key Type, elem Type) Type"},
-		{"Method", Type, 0, ""},
-		{"Method.Func", Field, 0, ""},
-		{"Method.Index", Field, 0, ""},
-		{"Method.Name", Field, 0, ""},
-		{"Method.PkgPath", Field, 0, ""},
-		{"Method.Type", Field, 0, ""},
-		{"New", Func, 0, "func(typ Type) Value"},
-		{"NewAt", Func, 0, "func(typ Type, p unsafe.Pointer) Value"},
-		{"Pointer", Const, 18, ""},
-		{"PointerTo", Func, 18, "func(t Type) Type"},
-		{"Ptr", Const, 0, ""},
-		{"PtrTo", Func, 0, "func(t Type) Type"},
-		{"RecvDir", Const, 0, ""},
-		{"Select", Func, 1, "func(cases []SelectCase) (chosen int, recv Value, recvOK bool)"},
-		{"SelectCase", Type, 1, ""},
-		{"SelectCase.Chan", Field, 1, ""},
-		{"SelectCase.Dir", Field, 1, ""},
-		{"SelectCase.Send", Field, 1, ""},
-		{"SelectDefault", Const, 1, ""},
-		{"SelectDir", Type, 1, ""},
-		{"SelectRecv", Const, 1, ""},
-		{"SelectSend", Const, 1, ""},
-		{"SendDir", Const, 0, ""},
-		{"Slice", Const, 0, ""},
-		{"SliceAt", Func, 23, "func(typ Type, p unsafe.Pointer, n int) Value"},
-		{"SliceHeader", Type, 0, ""},
-		{"SliceHeader.Cap", Field, 0, ""},
-		{"SliceHeader.Data", Field, 0, ""},
-		{"SliceHeader.Len", Field, 0, ""},
-		{"SliceOf", Func, 1, "func(t Type) Type"},
-		{"String", Const, 0, ""},
-		{"StringHeader", Type, 0, ""},
-		{"StringHeader.Data", Field, 0, ""},
-		{"StringHeader.Len", Field, 0, ""},
-		{"Struct", Const, 0, ""},
-		{"StructField", Type, 0, ""},
-		{"StructField.Anonymous", Field, 0, ""},
-		{"StructField.Index", Field, 0, ""},
-		{"StructField.Name", Field, 0, ""},
-		{"StructField.Offset", Field, 0, ""},
-		{"StructField.PkgPath", Field, 0, ""},
-		{"StructField.Tag", Field, 0, ""},
-		{"StructField.Type", Field, 0, ""},
-		{"StructOf", Func, 7, "func(fields []StructField) Type"},
-		{"StructTag", Type, 0, ""},
-		{"Swapper", Func, 8, "func(slice any) func(i int, j int)"},
-		{"Type", Type, 0, ""},
-		{"TypeFor", Func, 22, "func[T any]() Type"},
-		{"TypeOf", Func, 0, "func(i any) Type"},
-		{"Uint", Const, 0, ""},
-		{"Uint16", Const, 0, ""},
-		{"Uint32", Const, 0, ""},
-		{"Uint64", Const, 0, ""},
-		{"Uint8", Const, 0, ""},
-		{"Uintptr", Const, 0, ""},
-		{"UnsafePointer", Const, 0, ""},
-		{"Value", Type, 0, ""},
-		{"ValueError", Type, 0, ""},
-		{"ValueError.Kind", Field, 0, ""},
-		{"ValueError.Method", Field, 0, ""},
-		{"ValueOf", Func, 0, "func(i any) Value"},
-		{"VisibleFields", Func, 17, "func(t Type) []StructField"},
-		{"Zero", Func, 0, "func(typ Type) Value"},
+		{"(*MapIter).Key", Method, 12},
+		{"(*MapIter).Next", Method, 12},
+		{"(*MapIter).Reset", Method, 18},
+		{"(*MapIter).Value", Method, 12},
+		{"(*ValueError).Error", Method, 0},
+		{"(ChanDir).String", Method, 0},
+		{"(Kind).String", Method, 0},
+		{"(Method).IsExported", Method, 17},
+		{"(StructField).IsExported", Method, 17},
+		{"(StructTag).Get", Method, 0},
+		{"(StructTag).Lookup", Method, 7},
+		{"(Value).Addr", Method, 0},
+		{"(Value).Bool", Method, 0},
+		{"(Value).Bytes", Method, 0},
+		{"(Value).Call", Method, 0},
+		{"(Value).CallSlice", Method, 0},
+		{"(Value).CanAddr", Method, 0},
+		{"(Value).CanComplex", Method, 18},
+		{"(Value).CanConvert", Method, 17},
+		{"(Value).CanFloat", Method, 18},
+		{"(Value).CanInt", Method, 18},
+		{"(Value).CanInterface", Method, 0},
+		{"(Value).CanSet", Method, 0},
+		{"(Value).CanUint", Method, 18},
+		{"(Value).Cap", Method, 0},
+		{"(Value).Clear", Method, 21},
+		{"(Value).Close", Method, 0},
+		{"(Value).Comparable", Method, 20},
+		{"(Value).Complex", Method, 0},
+		{"(Value).Convert", Method, 1},
+		{"(Value).Elem", Method, 0},
+		{"(Value).Equal", Method, 20},
+		{"(Value).Field", Method, 0},
+		{"(Value).FieldByIndex", Method, 0},
+		{"(Value).FieldByIndexErr", Method, 18},
+		{"(Value).FieldByName", Method, 0},
+		{"(Value).FieldByNameFunc", Method, 0},
+		{"(Value).Float", Method, 0},
+		{"(Value).Grow", Method, 20},
+		{"(Value).Index", Method, 0},
+		{"(Value).Int", Method, 0},
+		{"(Value).Interface", Method, 0},
+		{"(Value).InterfaceData", Method, 0},
+		{"(Value).IsNil", Method, 0},
+		{"(Value).IsValid", Method, 0},
+		{"(Value).IsZero", Method, 13},
+		{"(Value).Kind", Method, 0},
+		{"(Value).Len", Method, 0},
+		{"(Value).MapIndex", Method, 0},
+		{"(Value).MapKeys", Method, 0},
+		{"(Value).MapRange", Method, 12},
+		{"(Value).Method", Method, 0},
+		{"(Value).MethodByName", Method, 0},
+		{"(Value).NumField", Method, 0},
+		{"(Value).NumMethod", Method, 0},
+		{"(Value).OverflowComplex", Method, 0},
+		{"(Value).OverflowFloat", Method, 0},
+		{"(Value).OverflowInt", Method, 0},
+		{"(Value).OverflowUint", Method, 0},
+		{"(Value).Pointer", Method, 0},
+		{"(Value).Recv", Method, 0},
+		{"(Value).Send", Method, 0},
+		{"(Value).Seq", Method, 23},
+		{"(Value).Seq2", Method, 23},
+		{"(Value).Set", Method, 0},
+		{"(Value).SetBool", Method, 0},
+		{"(Value).SetBytes", Method, 0},
+		{"(Value).SetCap", Method, 2},
+		{"(Value).SetComplex", Method, 0},
+		{"(Value).SetFloat", Method, 0},
+		{"(Value).SetInt", Method, 0},
+		{"(Value).SetIterKey", Method, 18},
+		{"(Value).SetIterValue", Method, 18},
+		{"(Value).SetLen", Method, 0},
+		{"(Value).SetMapIndex", Method, 0},
+		{"(Value).SetPointer", Method, 0},
+		{"(Value).SetString", Method, 0},
+		{"(Value).SetUint", Method, 0},
+		{"(Value).SetZero", Method, 20},
+		{"(Value).Slice", Method, 0},
+		{"(Value).Slice3", Method, 2},
+		{"(Value).String", Method, 0},
+		{"(Value).TryRecv", Method, 0},
+		{"(Value).TrySend", Method, 0},
+		{"(Value).Type", Method, 0},
+		{"(Value).Uint", Method, 0},
+		{"(Value).UnsafeAddr", Method, 0},
+		{"(Value).UnsafePointer", Method, 18},
+		{"Append", Func, 0},
+		{"AppendSlice", Func, 0},
+		{"Array", Const, 0},
+		{"ArrayOf", Func, 5},
+		{"Bool", Const, 0},
+		{"BothDir", Const, 0},
+		{"Chan", Const, 0},
+		{"ChanDir", Type, 0},
+		{"ChanOf", Func, 1},
+		{"Complex128", Const, 0},
+		{"Complex64", Const, 0},
+		{"Copy", Func, 0},
+		{"DeepEqual", Func, 0},
+		{"Float32", Const, 0},
+		{"Float64", Const, 0},
+		{"Func", Const, 0},
+		{"FuncOf", Func, 5},
+		{"Indirect", Func, 0},
+		{"Int", Const, 0},
+		{"Int16", Const, 0},
+		{"Int32", Const, 0},
+		{"Int64", Const, 0},
+		{"Int8", Const, 0},
+		{"Interface", Const, 0},
+		{"Invalid", Const, 0},
+		{"Kind", Type, 0},
+		{"MakeChan", Func, 0},
+		{"MakeFunc", Func, 1},
+		{"MakeMap", Func, 0},
+		{"MakeMapWithSize", Func, 9},
+		{"MakeSlice", Func, 0},
+		{"Map", Const, 0},
+		{"MapIter", Type, 12},
+		{"MapOf", Func, 1},
+		{"Method", Type, 0},
+		{"Method.Func", Field, 0},
+		{"Method.Index", Field, 0},
+		{"Method.Name", Field, 0},
+		{"Method.PkgPath", Field, 0},
+		{"Method.Type", Field, 0},
+		{"New", Func, 0},
+		{"NewAt", Func, 0},
+		{"Pointer", Const, 18},
+		{"PointerTo", Func, 18},
+		{"Ptr", Const, 0},
+		{"PtrTo", Func, 0},
+		{"RecvDir", Const, 0},
+		{"Select", Func, 1},
+		{"SelectCase", Type, 1},
+		{"SelectCase.Chan", Field, 1},
+		{"SelectCase.Dir", Field, 1},
+		{"SelectCase.Send", Field, 1},
+		{"SelectDefault", Const, 1},
+		{"SelectDir", Type, 1},
+		{"SelectRecv", Const, 1},
+		{"SelectSend", Const, 1},
+		{"SendDir", Const, 0},
+		{"Slice", Const, 0},
+		{"SliceAt", Func, 23},
+		{"SliceHeader", Type, 0},
+		{"SliceHeader.Cap", Field, 0},
+		{"SliceHeader.Data", Field, 0},
+		{"SliceHeader.Len", Field, 0},
+		{"SliceOf", Func, 1},
+		{"String", Const, 0},
+		{"StringHeader", Type, 0},
+		{"StringHeader.Data", Field, 0},
+		{"StringHeader.Len", Field, 0},
+		{"Struct", Const, 0},
+		{"StructField", Type, 0},
+		{"StructField.Anonymous", Field, 0},
+		{"StructField.Index", Field, 0},
+		{"StructField.Name", Field, 0},
+		{"StructField.Offset", Field, 0},
+		{"StructField.PkgPath", Field, 0},
+		{"StructField.Tag", Field, 0},
+		{"StructField.Type", Field, 0},
+		{"StructOf", Func, 7},
+		{"StructTag", Type, 0},
+		{"Swapper", Func, 8},
+		{"Type", Type, 0},
+		{"TypeFor", Func, 22},
+		{"TypeOf", Func, 0},
+		{"Uint", Const, 0},
+		{"Uint16", Const, 0},
+		{"Uint32", Const, 0},
+		{"Uint64", Const, 0},
+		{"Uint8", Const, 0},
+		{"Uintptr", Const, 0},
+		{"UnsafePointer", Const, 0},
+		{"Value", Type, 0},
+		{"ValueError", Type, 0},
+		{"ValueError.Kind", Field, 0},
+		{"ValueError.Method", Field, 0},
+		{"ValueOf", Func, 0},
+		{"VisibleFields", Func, 17},
+		{"Zero", Func, 0},
 	},
 	"regexp": {
-		{"(*Regexp).AppendText", Method, 24, ""},
-		{"(*Regexp).Copy", Method, 6, ""},
-		{"(*Regexp).Expand", Method, 0, ""},
-		{"(*Regexp).ExpandString", Method, 0, ""},
-		{"(*Regexp).Find", Method, 0, ""},
-		{"(*Regexp).FindAll", Method, 0, ""},
-		{"(*Regexp).FindAllIndex", Method, 0, ""},
-		{"(*Regexp).FindAllString", Method, 0, ""},
-		{"(*Regexp).FindAllStringIndex", Method, 0, ""},
-		{"(*Regexp).FindAllStringSubmatch", Method, 0, ""},
-		{"(*Regexp).FindAllStringSubmatchIndex", Method, 0, ""},
-		{"(*Regexp).FindAllSubmatch", Method, 0, ""},
-		{"(*Regexp).FindAllSubmatchIndex", Method, 0, ""},
-		{"(*Regexp).FindIndex", Method, 0, ""},
-		{"(*Regexp).FindReaderIndex", Method, 0, ""},
-		{"(*Regexp).FindReaderSubmatchIndex", Method, 0, ""},
-		{"(*Regexp).FindString", Method, 0, ""},
-		{"(*Regexp).FindStringIndex", Method, 0, ""},
-		{"(*Regexp).FindStringSubmatch", Method, 0, ""},
-		{"(*Regexp).FindStringSubmatchIndex", Method, 0, ""},
-		{"(*Regexp).FindSubmatch", Method, 0, ""},
-		{"(*Regexp).FindSubmatchIndex", Method, 0, ""},
-		{"(*Regexp).LiteralPrefix", Method, 0, ""},
-		{"(*Regexp).Longest", Method, 1, ""},
-		{"(*Regexp).MarshalText", Method, 21, ""},
-		{"(*Regexp).Match", Method, 0, ""},
-		{"(*Regexp).MatchReader", Method, 0, ""},
-		{"(*Regexp).MatchString", Method, 0, ""},
-		{"(*Regexp).NumSubexp", Method, 0, ""},
-		{"(*Regexp).ReplaceAll", Method, 0, ""},
-		{"(*Regexp).ReplaceAllFunc", Method, 0, ""},
-		{"(*Regexp).ReplaceAllLiteral", Method, 0, ""},
-		{"(*Regexp).ReplaceAllLiteralString", Method, 0, ""},
-		{"(*Regexp).ReplaceAllString", Method, 0, ""},
-		{"(*Regexp).ReplaceAllStringFunc", Method, 0, ""},
-		{"(*Regexp).Split", Method, 1, ""},
-		{"(*Regexp).String", Method, 0, ""},
-		{"(*Regexp).SubexpIndex", Method, 15, ""},
-		{"(*Regexp).SubexpNames", Method, 0, ""},
-		{"(*Regexp).UnmarshalText", Method, 21, ""},
-		{"Compile", Func, 0, "func(expr string) (*Regexp, error)"},
-		{"CompilePOSIX", Func, 0, "func(expr string) (*Regexp, error)"},
-		{"Match", Func, 0, "func(pattern string, b []byte) (matched bool, err error)"},
-		{"MatchReader", Func, 0, "func(pattern string, r io.RuneReader) (matched bool, err error)"},
-		{"MatchString", Func, 0, "func(pattern string, s string) (matched bool, err error)"},
-		{"MustCompile", Func, 0, "func(str string) *Regexp"},
-		{"MustCompilePOSIX", Func, 0, "func(str string) *Regexp"},
-		{"QuoteMeta", Func, 0, "func(s string) string"},
-		{"Regexp", Type, 0, ""},
+		{"(*Regexp).AppendText", Method, 24},
+		{"(*Regexp).Copy", Method, 6},
+		{"(*Regexp).Expand", Method, 0},
+		{"(*Regexp).ExpandString", Method, 0},
+		{"(*Regexp).Find", Method, 0},
+		{"(*Regexp).FindAll", Method, 0},
+		{"(*Regexp).FindAllIndex", Method, 0},
+		{"(*Regexp).FindAllString", Method, 0},
+		{"(*Regexp).FindAllStringIndex", Method, 0},
+		{"(*Regexp).FindAllStringSubmatch", Method, 0},
+		{"(*Regexp).FindAllStringSubmatchIndex", Method, 0},
+		{"(*Regexp).FindAllSubmatch", Method, 0},
+		{"(*Regexp).FindAllSubmatchIndex", Method, 0},
+		{"(*Regexp).FindIndex", Method, 0},
+		{"(*Regexp).FindReaderIndex", Method, 0},
+		{"(*Regexp).FindReaderSubmatchIndex", Method, 0},
+		{"(*Regexp).FindString", Method, 0},
+		{"(*Regexp).FindStringIndex", Method, 0},
+		{"(*Regexp).FindStringSubmatch", Method, 0},
+		{"(*Regexp).FindStringSubmatchIndex", Method, 0},
+		{"(*Regexp).FindSubmatch", Method, 0},
+		{"(*Regexp).FindSubmatchIndex", Method, 0},
+		{"(*Regexp).LiteralPrefix", Method, 0},
+		{"(*Regexp).Longest", Method, 1},
+		{"(*Regexp).MarshalText", Method, 21},
+		{"(*Regexp).Match", Method, 0},
+		{"(*Regexp).MatchReader", Method, 0},
+		{"(*Regexp).MatchString", Method, 0},
+		{"(*Regexp).NumSubexp", Method, 0},
+		{"(*Regexp).ReplaceAll", Method, 0},
+		{"(*Regexp).ReplaceAllFunc", Method, 0},
+		{"(*Regexp).ReplaceAllLiteral", Method, 0},
+		{"(*Regexp).ReplaceAllLiteralString", Method, 0},
+		{"(*Regexp).ReplaceAllString", Method, 0},
+		{"(*Regexp).ReplaceAllStringFunc", Method, 0},
+		{"(*Regexp).Split", Method, 1},
+		{"(*Regexp).String", Method, 0},
+		{"(*Regexp).SubexpIndex", Method, 15},
+		{"(*Regexp).SubexpNames", Method, 0},
+		{"(*Regexp).UnmarshalText", Method, 21},
+		{"Compile", Func, 0},
+		{"CompilePOSIX", Func, 0},
+		{"Match", Func, 0},
+		{"MatchReader", Func, 0},
+		{"MatchString", Func, 0},
+		{"MustCompile", Func, 0},
+		{"MustCompilePOSIX", Func, 0},
+		{"QuoteMeta", Func, 0},
+		{"Regexp", Type, 0},
 	},
 	"regexp/syntax": {
-		{"(*Error).Error", Method, 0, ""},
-		{"(*Inst).MatchEmptyWidth", Method, 0, ""},
-		{"(*Inst).MatchRune", Method, 0, ""},
-		{"(*Inst).MatchRunePos", Method, 3, ""},
-		{"(*Inst).String", Method, 0, ""},
-		{"(*Prog).Prefix", Method, 0, ""},
-		{"(*Prog).StartCond", Method, 0, ""},
-		{"(*Prog).String", Method, 0, ""},
-		{"(*Regexp).CapNames", Method, 0, ""},
-		{"(*Regexp).Equal", Method, 0, ""},
-		{"(*Regexp).MaxCap", Method, 0, ""},
-		{"(*Regexp).Simplify", Method, 0, ""},
-		{"(*Regexp).String", Method, 0, ""},
-		{"(ErrorCode).String", Method, 0, ""},
-		{"(InstOp).String", Method, 3, ""},
-		{"(Op).String", Method, 11, ""},
-		{"ClassNL", Const, 0, ""},
-		{"Compile", Func, 0, "func(re *Regexp) (*Prog, error)"},
-		{"DotNL", Const, 0, ""},
-		{"EmptyBeginLine", Const, 0, ""},
-		{"EmptyBeginText", Const, 0, ""},
-		{"EmptyEndLine", Const, 0, ""},
-		{"EmptyEndText", Const, 0, ""},
-		{"EmptyNoWordBoundary", Const, 0, ""},
-		{"EmptyOp", Type, 0, ""},
-		{"EmptyOpContext", Func, 0, "func(r1 rune, r2 rune) EmptyOp"},
-		{"EmptyWordBoundary", Const, 0, ""},
-		{"ErrInternalError", Const, 0, ""},
-		{"ErrInvalidCharClass", Const, 0, ""},
-		{"ErrInvalidCharRange", Const, 0, ""},
-		{"ErrInvalidEscape", Const, 0, ""},
-		{"ErrInvalidNamedCapture", Const, 0, ""},
-		{"ErrInvalidPerlOp", Const, 0, ""},
-		{"ErrInvalidRepeatOp", Const, 0, ""},
-		{"ErrInvalidRepeatSize", Const, 0, ""},
-		{"ErrInvalidUTF8", Const, 0, ""},
-		{"ErrLarge", Const, 20, ""},
-		{"ErrMissingBracket", Const, 0, ""},
-		{"ErrMissingParen", Const, 0, ""},
-		{"ErrMissingRepeatArgument", Const, 0, ""},
-		{"ErrNestingDepth", Const, 19, ""},
-		{"ErrTrailingBackslash", Const, 0, ""},
-		{"ErrUnexpectedParen", Const, 1, ""},
-		{"Error", Type, 0, ""},
-		{"Error.Code", Field, 0, ""},
-		{"Error.Expr", Field, 0, ""},
-		{"ErrorCode", Type, 0, ""},
-		{"Flags", Type, 0, ""},
-		{"FoldCase", Const, 0, ""},
-		{"Inst", Type, 0, ""},
-		{"Inst.Arg", Field, 0, ""},
-		{"Inst.Op", Field, 0, ""},
-		{"Inst.Out", Field, 0, ""},
-		{"Inst.Rune", Field, 0, ""},
-		{"InstAlt", Const, 0, ""},
-		{"InstAltMatch", Const, 0, ""},
-		{"InstCapture", Const, 0, ""},
-		{"InstEmptyWidth", Const, 0, ""},
-		{"InstFail", Const, 0, ""},
-		{"InstMatch", Const, 0, ""},
-		{"InstNop", Const, 0, ""},
-		{"InstOp", Type, 0, ""},
-		{"InstRune", Const, 0, ""},
-		{"InstRune1", Const, 0, ""},
-		{"InstRuneAny", Const, 0, ""},
-		{"InstRuneAnyNotNL", Const, 0, ""},
-		{"IsWordChar", Func, 0, "func(r rune) bool"},
-		{"Literal", Const, 0, ""},
-		{"MatchNL", Const, 0, ""},
-		{"NonGreedy", Const, 0, ""},
-		{"OneLine", Const, 0, ""},
-		{"Op", Type, 0, ""},
-		{"OpAlternate", Const, 0, ""},
-		{"OpAnyChar", Const, 0, ""},
-		{"OpAnyCharNotNL", Const, 0, ""},
-		{"OpBeginLine", Const, 0, ""},
-		{"OpBeginText", Const, 0, ""},
-		{"OpCapture", Const, 0, ""},
-		{"OpCharClass", Const, 0, ""},
-		{"OpConcat", Const, 0, ""},
-		{"OpEmptyMatch", Const, 0, ""},
-		{"OpEndLine", Const, 0, ""},
-		{"OpEndText", Const, 0, ""},
-		{"OpLiteral", Const, 0, ""},
-		{"OpNoMatch", Const, 0, ""},
-		{"OpNoWordBoundary", Const, 0, ""},
-		{"OpPlus", Const, 0, ""},
-		{"OpQuest", Const, 0, ""},
-		{"OpRepeat", Const, 0, ""},
-		{"OpStar", Const, 0, ""},
-		{"OpWordBoundary", Const, 0, ""},
-		{"POSIX", Const, 0, ""},
-		{"Parse", Func, 0, "func(s string, flags Flags) (*Regexp, error)"},
-		{"Perl", Const, 0, ""},
-		{"PerlX", Const, 0, ""},
-		{"Prog", Type, 0, ""},
-		{"Prog.Inst", Field, 0, ""},
-		{"Prog.NumCap", Field, 0, ""},
-		{"Prog.Start", Field, 0, ""},
-		{"Regexp", Type, 0, ""},
-		{"Regexp.Cap", Field, 0, ""},
-		{"Regexp.Flags", Field, 0, ""},
-		{"Regexp.Max", Field, 0, ""},
-		{"Regexp.Min", Field, 0, ""},
-		{"Regexp.Name", Field, 0, ""},
-		{"Regexp.Op", Field, 0, ""},
-		{"Regexp.Rune", Field, 0, ""},
-		{"Regexp.Rune0", Field, 0, ""},
-		{"Regexp.Sub", Field, 0, ""},
-		{"Regexp.Sub0", Field, 0, ""},
-		{"Simple", Const, 0, ""},
-		{"UnicodeGroups", Const, 0, ""},
-		{"WasDollar", Const, 0, ""},
+		{"(*Error).Error", Method, 0},
+		{"(*Inst).MatchEmptyWidth", Method, 0},
+		{"(*Inst).MatchRune", Method, 0},
+		{"(*Inst).MatchRunePos", Method, 3},
+		{"(*Inst).String", Method, 0},
+		{"(*Prog).Prefix", Method, 0},
+		{"(*Prog).StartCond", Method, 0},
+		{"(*Prog).String", Method, 0},
+		{"(*Regexp).CapNames", Method, 0},
+		{"(*Regexp).Equal", Method, 0},
+		{"(*Regexp).MaxCap", Method, 0},
+		{"(*Regexp).Simplify", Method, 0},
+		{"(*Regexp).String", Method, 0},
+		{"(ErrorCode).String", Method, 0},
+		{"(InstOp).String", Method, 3},
+		{"(Op).String", Method, 11},
+		{"ClassNL", Const, 0},
+		{"Compile", Func, 0},
+		{"DotNL", Const, 0},
+		{"EmptyBeginLine", Const, 0},
+		{"EmptyBeginText", Const, 0},
+		{"EmptyEndLine", Const, 0},
+		{"EmptyEndText", Const, 0},
+		{"EmptyNoWordBoundary", Const, 0},
+		{"EmptyOp", Type, 0},
+		{"EmptyOpContext", Func, 0},
+		{"EmptyWordBoundary", Const, 0},
+		{"ErrInternalError", Const, 0},
+		{"ErrInvalidCharClass", Const, 0},
+		{"ErrInvalidCharRange", Const, 0},
+		{"ErrInvalidEscape", Const, 0},
+		{"ErrInvalidNamedCapture", Const, 0},
+		{"ErrInvalidPerlOp", Const, 0},
+		{"ErrInvalidRepeatOp", Const, 0},
+		{"ErrInvalidRepeatSize", Const, 0},
+		{"ErrInvalidUTF8", Const, 0},
+		{"ErrLarge", Const, 20},
+		{"ErrMissingBracket", Const, 0},
+		{"ErrMissingParen", Const, 0},
+		{"ErrMissingRepeatArgument", Const, 0},
+		{"ErrNestingDepth", Const, 19},
+		{"ErrTrailingBackslash", Const, 0},
+		{"ErrUnexpectedParen", Const, 1},
+		{"Error", Type, 0},
+		{"Error.Code", Field, 0},
+		{"Error.Expr", Field, 0},
+		{"ErrorCode", Type, 0},
+		{"Flags", Type, 0},
+		{"FoldCase", Const, 0},
+		{"Inst", Type, 0},
+		{"Inst.Arg", Field, 0},
+		{"Inst.Op", Field, 0},
+		{"Inst.Out", Field, 0},
+		{"Inst.Rune", Field, 0},
+		{"InstAlt", Const, 0},
+		{"InstAltMatch", Const, 0},
+		{"InstCapture", Const, 0},
+		{"InstEmptyWidth", Const, 0},
+		{"InstFail", Const, 0},
+		{"InstMatch", Const, 0},
+		{"InstNop", Const, 0},
+		{"InstOp", Type, 0},
+		{"InstRune", Const, 0},
+		{"InstRune1", Const, 0},
+		{"InstRuneAny", Const, 0},
+		{"InstRuneAnyNotNL", Const, 0},
+		{"IsWordChar", Func, 0},
+		{"Literal", Const, 0},
+		{"MatchNL", Const, 0},
+		{"NonGreedy", Const, 0},
+		{"OneLine", Const, 0},
+		{"Op", Type, 0},
+		{"OpAlternate", Const, 0},
+		{"OpAnyChar", Const, 0},
+		{"OpAnyCharNotNL", Const, 0},
+		{"OpBeginLine", Const, 0},
+		{"OpBeginText", Const, 0},
+		{"OpCapture", Const, 0},
+		{"OpCharClass", Const, 0},
+		{"OpConcat", Const, 0},
+		{"OpEmptyMatch", Const, 0},
+		{"OpEndLine", Const, 0},
+		{"OpEndText", Const, 0},
+		{"OpLiteral", Const, 0},
+		{"OpNoMatch", Const, 0},
+		{"OpNoWordBoundary", Const, 0},
+		{"OpPlus", Const, 0},
+		{"OpQuest", Const, 0},
+		{"OpRepeat", Const, 0},
+		{"OpStar", Const, 0},
+		{"OpWordBoundary", Const, 0},
+		{"POSIX", Const, 0},
+		{"Parse", Func, 0},
+		{"Perl", Const, 0},
+		{"PerlX", Const, 0},
+		{"Prog", Type, 0},
+		{"Prog.Inst", Field, 0},
+		{"Prog.NumCap", Field, 0},
+		{"Prog.Start", Field, 0},
+		{"Regexp", Type, 0},
+		{"Regexp.Cap", Field, 0},
+		{"Regexp.Flags", Field, 0},
+		{"Regexp.Max", Field, 0},
+		{"Regexp.Min", Field, 0},
+		{"Regexp.Name", Field, 0},
+		{"Regexp.Op", Field, 0},
+		{"Regexp.Rune", Field, 0},
+		{"Regexp.Rune0", Field, 0},
+		{"Regexp.Sub", Field, 0},
+		{"Regexp.Sub0", Field, 0},
+		{"Simple", Const, 0},
+		{"UnicodeGroups", Const, 0},
+		{"WasDollar", Const, 0},
 	},
 	"runtime": {
-		{"(*BlockProfileRecord).Stack", Method, 1, ""},
-		{"(*Frames).Next", Method, 7, ""},
-		{"(*Func).Entry", Method, 0, ""},
-		{"(*Func).FileLine", Method, 0, ""},
-		{"(*Func).Name", Method, 0, ""},
-		{"(*MemProfileRecord).InUseBytes", Method, 0, ""},
-		{"(*MemProfileRecord).InUseObjects", Method, 0, ""},
-		{"(*MemProfileRecord).Stack", Method, 0, ""},
-		{"(*PanicNilError).Error", Method, 21, ""},
-		{"(*PanicNilError).RuntimeError", Method, 21, ""},
-		{"(*Pinner).Pin", Method, 21, ""},
-		{"(*Pinner).Unpin", Method, 21, ""},
-		{"(*StackRecord).Stack", Method, 0, ""},
-		{"(*TypeAssertionError).Error", Method, 0, ""},
-		{"(*TypeAssertionError).RuntimeError", Method, 0, ""},
-		{"(Cleanup).Stop", Method, 24, ""},
-		{"AddCleanup", Func, 24, "func[T, S any](ptr *T, cleanup func(S), arg S) Cleanup"},
-		{"BlockProfile", Func, 1, "func(p []BlockProfileRecord) (n int, ok bool)"},
-		{"BlockProfileRecord", Type, 1, ""},
-		{"BlockProfileRecord.Count", Field, 1, ""},
-		{"BlockProfileRecord.Cycles", Field, 1, ""},
-		{"BlockProfileRecord.StackRecord", Field, 1, ""},
-		{"Breakpoint", Func, 0, "func()"},
-		{"CPUProfile", Func, 0, "func() []byte"},
-		{"Caller", Func, 0, "func(skip int) (pc uintptr, file string, line int, ok bool)"},
-		{"Callers", Func, 0, "func(skip int, pc []uintptr) int"},
-		{"CallersFrames", Func, 7, "func(callers []uintptr) *Frames"},
-		{"Cleanup", Type, 24, ""},
-		{"Compiler", Const, 0, ""},
-		{"Error", Type, 0, ""},
-		{"Frame", Type, 7, ""},
-		{"Frame.Entry", Field, 7, ""},
-		{"Frame.File", Field, 7, ""},
-		{"Frame.Func", Field, 7, ""},
-		{"Frame.Function", Field, 7, ""},
-		{"Frame.Line", Field, 7, ""},
-		{"Frame.PC", Field, 7, ""},
-		{"Frames", Type, 7, ""},
-		{"Func", Type, 0, ""},
-		{"FuncForPC", Func, 0, "func(pc uintptr) *Func"},
-		{"GC", Func, 0, "func()"},
-		{"GOARCH", Const, 0, ""},
-		{"GOMAXPROCS", Func, 0, "func(n int) int"},
-		{"GOOS", Const, 0, ""},
-		{"GOROOT", Func, 0, "func() string"},
-		{"Goexit", Func, 0, "func()"},
-		{"GoroutineProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
-		{"Gosched", Func, 0, "func()"},
-		{"KeepAlive", Func, 7, "func(x any)"},
-		{"LockOSThread", Func, 0, "func()"},
-		{"MemProfile", Func, 0, "func(p []MemProfileRecord, inuseZero bool) (n int, ok bool)"},
-		{"MemProfileRate", Var, 0, ""},
-		{"MemProfileRecord", Type, 0, ""},
-		{"MemProfileRecord.AllocBytes", Field, 0, ""},
-		{"MemProfileRecord.AllocObjects", Field, 0, ""},
-		{"MemProfileRecord.FreeBytes", Field, 0, ""},
-		{"MemProfileRecord.FreeObjects", Field, 0, ""},
-		{"MemProfileRecord.Stack0", Field, 0, ""},
-		{"MemStats", Type, 0, ""},
-		{"MemStats.Alloc", Field, 0, ""},
-		{"MemStats.BuckHashSys", Field, 0, ""},
-		{"MemStats.BySize", Field, 0, ""},
-		{"MemStats.DebugGC", Field, 0, ""},
-		{"MemStats.EnableGC", Field, 0, ""},
-		{"MemStats.Frees", Field, 0, ""},
-		{"MemStats.GCCPUFraction", Field, 5, ""},
-		{"MemStats.GCSys", Field, 2, ""},
-		{"MemStats.HeapAlloc", Field, 0, ""},
-		{"MemStats.HeapIdle", Field, 0, ""},
-		{"MemStats.HeapInuse", Field, 0, ""},
-		{"MemStats.HeapObjects", Field, 0, ""},
-		{"MemStats.HeapReleased", Field, 0, ""},
-		{"MemStats.HeapSys", Field, 0, ""},
-		{"MemStats.LastGC", Field, 0, ""},
-		{"MemStats.Lookups", Field, 0, ""},
-		{"MemStats.MCacheInuse", Field, 0, ""},
-		{"MemStats.MCacheSys", Field, 0, ""},
-		{"MemStats.MSpanInuse", Field, 0, ""},
-		{"MemStats.MSpanSys", Field, 0, ""},
-		{"MemStats.Mallocs", Field, 0, ""},
-		{"MemStats.NextGC", Field, 0, ""},
-		{"MemStats.NumForcedGC", Field, 8, ""},
-		{"MemStats.NumGC", Field, 0, ""},
-		{"MemStats.OtherSys", Field, 2, ""},
-		{"MemStats.PauseEnd", Field, 4, ""},
-		{"MemStats.PauseNs", Field, 0, ""},
-		{"MemStats.PauseTotalNs", Field, 0, ""},
-		{"MemStats.StackInuse", Field, 0, ""},
-		{"MemStats.StackSys", Field, 0, ""},
-		{"MemStats.Sys", Field, 0, ""},
-		{"MemStats.TotalAlloc", Field, 0, ""},
-		{"MutexProfile", Func, 8, "func(p []BlockProfileRecord) (n int, ok bool)"},
-		{"NumCPU", Func, 0, "func() int"},
-		{"NumCgoCall", Func, 0, "func() int64"},
-		{"NumGoroutine", Func, 0, "func() int"},
-		{"PanicNilError", Type, 21, ""},
-		{"Pinner", Type, 21, ""},
-		{"ReadMemStats", Func, 0, "func(m *MemStats)"},
-		{"ReadTrace", Func, 5, "func() []byte"},
-		{"SetBlockProfileRate", Func, 1, "func(rate int)"},
-		{"SetCPUProfileRate", Func, 0, "func(hz int)"},
-		{"SetCgoTraceback", Func, 7, "func(version int, traceback unsafe.Pointer, context unsafe.Pointer, symbolizer unsafe.Pointer)"},
-		{"SetFinalizer", Func, 0, "func(obj any, finalizer any)"},
-		{"SetMutexProfileFraction", Func, 8, "func(rate int) int"},
-		{"Stack", Func, 0, "func(buf []byte, all bool) int"},
-		{"StackRecord", Type, 0, ""},
-		{"StackRecord.Stack0", Field, 0, ""},
-		{"StartTrace", Func, 5, "func() error"},
-		{"StopTrace", Func, 5, "func()"},
-		{"ThreadCreateProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
-		{"TypeAssertionError", Type, 0, ""},
-		{"UnlockOSThread", Func, 0, "func()"},
-		{"Version", Func, 0, "func() string"},
+		{"(*BlockProfileRecord).Stack", Method, 1},
+		{"(*Frames).Next", Method, 7},
+		{"(*Func).Entry", Method, 0},
+		{"(*Func).FileLine", Method, 0},
+		{"(*Func).Name", Method, 0},
+		{"(*MemProfileRecord).InUseBytes", Method, 0},
+		{"(*MemProfileRecord).InUseObjects", Method, 0},
+		{"(*MemProfileRecord).Stack", Method, 0},
+		{"(*PanicNilError).Error", Method, 21},
+		{"(*PanicNilError).RuntimeError", Method, 21},
+		{"(*Pinner).Pin", Method, 21},
+		{"(*Pinner).Unpin", Method, 21},
+		{"(*StackRecord).Stack", Method, 0},
+		{"(*TypeAssertionError).Error", Method, 0},
+		{"(*TypeAssertionError).RuntimeError", Method, 0},
+		{"(Cleanup).Stop", Method, 24},
+		{"AddCleanup", Func, 24},
+		{"BlockProfile", Func, 1},
+		{"BlockProfileRecord", Type, 1},
+		{"BlockProfileRecord.Count", Field, 1},
+		{"BlockProfileRecord.Cycles", Field, 1},
+		{"BlockProfileRecord.StackRecord", Field, 1},
+		{"Breakpoint", Func, 0},
+		{"CPUProfile", Func, 0},
+		{"Caller", Func, 0},
+		{"Callers", Func, 0},
+		{"CallersFrames", Func, 7},
+		{"Cleanup", Type, 24},
+		{"Compiler", Const, 0},
+		{"Error", Type, 0},
+		{"Frame", Type, 7},
+		{"Frame.Entry", Field, 7},
+		{"Frame.File", Field, 7},
+		{"Frame.Func", Field, 7},
+		{"Frame.Function", Field, 7},
+		{"Frame.Line", Field, 7},
+		{"Frame.PC", Field, 7},
+		{"Frames", Type, 7},
+		{"Func", Type, 0},
+		{"FuncForPC", Func, 0},
+		{"GC", Func, 0},
+		{"GOARCH", Const, 0},
+		{"GOMAXPROCS", Func, 0},
+		{"GOOS", Const, 0},
+		{"GOROOT", Func, 0},
+		{"Goexit", Func, 0},
+		{"GoroutineProfile", Func, 0},
+		{"Gosched", Func, 0},
+		{"KeepAlive", Func, 7},
+		{"LockOSThread", Func, 0},
+		{"MemProfile", Func, 0},
+		{"MemProfileRate", Var, 0},
+		{"MemProfileRecord", Type, 0},
+		{"MemProfileRecord.AllocBytes", Field, 0},
+		{"MemProfileRecord.AllocObjects", Field, 0},
+		{"MemProfileRecord.FreeBytes", Field, 0},
+		{"MemProfileRecord.FreeObjects", Field, 0},
+		{"MemProfileRecord.Stack0", Field, 0},
+		{"MemStats", Type, 0},
+		{"MemStats.Alloc", Field, 0},
+		{"MemStats.BuckHashSys", Field, 0},
+		{"MemStats.BySize", Field, 0},
+		{"MemStats.DebugGC", Field, 0},
+		{"MemStats.EnableGC", Field, 0},
+		{"MemStats.Frees", Field, 0},
+		{"MemStats.GCCPUFraction", Field, 5},
+		{"MemStats.GCSys", Field, 2},
+		{"MemStats.HeapAlloc", Field, 0},
+		{"MemStats.HeapIdle", Field, 0},
+		{"MemStats.HeapInuse", Field, 0},
+		{"MemStats.HeapObjects", Field, 0},
+		{"MemStats.HeapReleased", Field, 0},
+		{"MemStats.HeapSys", Field, 0},
+		{"MemStats.LastGC", Field, 0},
+		{"MemStats.Lookups", Field, 0},
+		{"MemStats.MCacheInuse", Field, 0},
+		{"MemStats.MCacheSys", Field, 0},
+		{"MemStats.MSpanInuse", Field, 0},
+		{"MemStats.MSpanSys", Field, 0},
+		{"MemStats.Mallocs", Field, 0},
+		{"MemStats.NextGC", Field, 0},
+		{"MemStats.NumForcedGC", Field, 8},
+		{"MemStats.NumGC", Field, 0},
+		{"MemStats.OtherSys", Field, 2},
+		{"MemStats.PauseEnd", Field, 4},
+		{"MemStats.PauseNs", Field, 0},
+		{"MemStats.PauseTotalNs", Field, 0},
+		{"MemStats.StackInuse", Field, 0},
+		{"MemStats.StackSys", Field, 0},
+		{"MemStats.Sys", Field, 0},
+		{"MemStats.TotalAlloc", Field, 0},
+		{"MutexProfile", Func, 8},
+		{"NumCPU", Func, 0},
+		{"NumCgoCall", Func, 0},
+		{"NumGoroutine", Func, 0},
+		{"PanicNilError", Type, 21},
+		{"Pinner", Type, 21},
+		{"ReadMemStats", Func, 0},
+		{"ReadTrace", Func, 5},
+		{"SetBlockProfileRate", Func, 1},
+		{"SetCPUProfileRate", Func, 0},
+		{"SetCgoTraceback", Func, 7},
+		{"SetFinalizer", Func, 0},
+		{"SetMutexProfileFraction", Func, 8},
+		{"Stack", Func, 0},
+		{"StackRecord", Type, 0},
+		{"StackRecord.Stack0", Field, 0},
+		{"StartTrace", Func, 5},
+		{"StopTrace", Func, 5},
+		{"ThreadCreateProfile", Func, 0},
+		{"TypeAssertionError", Type, 0},
+		{"UnlockOSThread", Func, 0},
+		{"Version", Func, 0},
 	},
 	"runtime/cgo": {
-		{"(Handle).Delete", Method, 17, ""},
-		{"(Handle).Value", Method, 17, ""},
-		{"Handle", Type, 17, ""},
-		{"Incomplete", Type, 20, ""},
-		{"NewHandle", Func, 17, ""},
+		{"(Handle).Delete", Method, 17},
+		{"(Handle).Value", Method, 17},
+		{"Handle", Type, 17},
+		{"Incomplete", Type, 20},
+		{"NewHandle", Func, 17},
 	},
 	"runtime/coverage": {
-		{"ClearCounters", Func, 20, "func() error"},
-		{"WriteCounters", Func, 20, "func(w io.Writer) error"},
-		{"WriteCountersDir", Func, 20, "func(dir string) error"},
-		{"WriteMeta", Func, 20, "func(w io.Writer) error"},
-		{"WriteMetaDir", Func, 20, "func(dir string) error"},
+		{"ClearCounters", Func, 20},
+		{"WriteCounters", Func, 20},
+		{"WriteCountersDir", Func, 20},
+		{"WriteMeta", Func, 20},
+		{"WriteMetaDir", Func, 20},
 	},
 	"runtime/debug": {
-		{"(*BuildInfo).String", Method, 18, ""},
-		{"BuildInfo", Type, 12, ""},
-		{"BuildInfo.Deps", Field, 12, ""},
-		{"BuildInfo.GoVersion", Field, 18, ""},
-		{"BuildInfo.Main", Field, 12, ""},
-		{"BuildInfo.Path", Field, 12, ""},
-		{"BuildInfo.Settings", Field, 18, ""},
-		{"BuildSetting", Type, 18, ""},
-		{"BuildSetting.Key", Field, 18, ""},
-		{"BuildSetting.Value", Field, 18, ""},
-		{"CrashOptions", Type, 23, ""},
-		{"FreeOSMemory", Func, 1, "func()"},
-		{"GCStats", Type, 1, ""},
-		{"GCStats.LastGC", Field, 1, ""},
-		{"GCStats.NumGC", Field, 1, ""},
-		{"GCStats.Pause", Field, 1, ""},
-		{"GCStats.PauseEnd", Field, 4, ""},
-		{"GCStats.PauseQuantiles", Field, 1, ""},
-		{"GCStats.PauseTotal", Field, 1, ""},
-		{"Module", Type, 12, ""},
-		{"Module.Path", Field, 12, ""},
-		{"Module.Replace", Field, 12, ""},
-		{"Module.Sum", Field, 12, ""},
-		{"Module.Version", Field, 12, ""},
-		{"ParseBuildInfo", Func, 18, "func(data string) (bi *BuildInfo, err error)"},
-		{"PrintStack", Func, 0, "func()"},
-		{"ReadBuildInfo", Func, 12, "func() (info *BuildInfo, ok bool)"},
-		{"ReadGCStats", Func, 1, "func(stats *GCStats)"},
-		{"SetCrashOutput", Func, 23, "func(f *os.File, opts CrashOptions) error"},
-		{"SetGCPercent", Func, 1, "func(percent int) int"},
-		{"SetMaxStack", Func, 2, "func(bytes int) int"},
-		{"SetMaxThreads", Func, 2, "func(threads int) int"},
-		{"SetMemoryLimit", Func, 19, "func(limit int64) int64"},
-		{"SetPanicOnFault", Func, 3, "func(enabled bool) bool"},
-		{"SetTraceback", Func, 6, "func(level string)"},
-		{"Stack", Func, 0, "func() []byte"},
-		{"WriteHeapDump", Func, 3, "func(fd uintptr)"},
+		{"(*BuildInfo).String", Method, 18},
+		{"BuildInfo", Type, 12},
+		{"BuildInfo.Deps", Field, 12},
+		{"BuildInfo.GoVersion", Field, 18},
+		{"BuildInfo.Main", Field, 12},
+		{"BuildInfo.Path", Field, 12},
+		{"BuildInfo.Settings", Field, 18},
+		{"BuildSetting", Type, 18},
+		{"BuildSetting.Key", Field, 18},
+		{"BuildSetting.Value", Field, 18},
+		{"CrashOptions", Type, 23},
+		{"FreeOSMemory", Func, 1},
+		{"GCStats", Type, 1},
+		{"GCStats.LastGC", Field, 1},
+		{"GCStats.NumGC", Field, 1},
+		{"GCStats.Pause", Field, 1},
+		{"GCStats.PauseEnd", Field, 4},
+		{"GCStats.PauseQuantiles", Field, 1},
+		{"GCStats.PauseTotal", Field, 1},
+		{"Module", Type, 12},
+		{"Module.Path", Field, 12},
+		{"Module.Replace", Field, 12},
+		{"Module.Sum", Field, 12},
+		{"Module.Version", Field, 12},
+		{"ParseBuildInfo", Func, 18},
+		{"PrintStack", Func, 0},
+		{"ReadBuildInfo", Func, 12},
+		{"ReadGCStats", Func, 1},
+		{"SetCrashOutput", Func, 23},
+		{"SetGCPercent", Func, 1},
+		{"SetMaxStack", Func, 2},
+		{"SetMaxThreads", Func, 2},
+		{"SetMemoryLimit", Func, 19},
+		{"SetPanicOnFault", Func, 3},
+		{"SetTraceback", Func, 6},
+		{"Stack", Func, 0},
+		{"WriteHeapDump", Func, 3},
 	},
 	"runtime/metrics": {
-		{"(Value).Float64", Method, 16, ""},
-		{"(Value).Float64Histogram", Method, 16, ""},
-		{"(Value).Kind", Method, 16, ""},
-		{"(Value).Uint64", Method, 16, ""},
-		{"All", Func, 16, "func() []Description"},
-		{"Description", Type, 16, ""},
-		{"Description.Cumulative", Field, 16, ""},
-		{"Description.Description", Field, 16, ""},
-		{"Description.Kind", Field, 16, ""},
-		{"Description.Name", Field, 16, ""},
-		{"Float64Histogram", Type, 16, ""},
-		{"Float64Histogram.Buckets", Field, 16, ""},
-		{"Float64Histogram.Counts", Field, 16, ""},
-		{"KindBad", Const, 16, ""},
-		{"KindFloat64", Const, 16, ""},
-		{"KindFloat64Histogram", Const, 16, ""},
-		{"KindUint64", Const, 16, ""},
-		{"Read", Func, 16, "func(m []Sample)"},
-		{"Sample", Type, 16, ""},
-		{"Sample.Name", Field, 16, ""},
-		{"Sample.Value", Field, 16, ""},
-		{"Value", Type, 16, ""},
-		{"ValueKind", Type, 16, ""},
+		{"(Value).Float64", Method, 16},
+		{"(Value).Float64Histogram", Method, 16},
+		{"(Value).Kind", Method, 16},
+		{"(Value).Uint64", Method, 16},
+		{"All", Func, 16},
+		{"Description", Type, 16},
+		{"Description.Cumulative", Field, 16},
+		{"Description.Description", Field, 16},
+		{"Description.Kind", Field, 16},
+		{"Description.Name", Field, 16},
+		{"Float64Histogram", Type, 16},
+		{"Float64Histogram.Buckets", Field, 16},
+		{"Float64Histogram.Counts", Field, 16},
+		{"KindBad", Const, 16},
+		{"KindFloat64", Const, 16},
+		{"KindFloat64Histogram", Const, 16},
+		{"KindUint64", Const, 16},
+		{"Read", Func, 16},
+		{"Sample", Type, 16},
+		{"Sample.Name", Field, 16},
+		{"Sample.Value", Field, 16},
+		{"Value", Type, 16},
+		{"ValueKind", Type, 16},
 	},
 	"runtime/pprof": {
-		{"(*Profile).Add", Method, 0, ""},
-		{"(*Profile).Count", Method, 0, ""},
-		{"(*Profile).Name", Method, 0, ""},
-		{"(*Profile).Remove", Method, 0, ""},
-		{"(*Profile).WriteTo", Method, 0, ""},
-		{"Do", Func, 9, "func(ctx context.Context, labels LabelSet, f func(context.Context))"},
-		{"ForLabels", Func, 9, "func(ctx context.Context, f func(key string, value string) bool)"},
-		{"Label", Func, 9, "func(ctx context.Context, key string) (string, bool)"},
-		{"LabelSet", Type, 9, ""},
-		{"Labels", Func, 9, "func(args ...string) LabelSet"},
-		{"Lookup", Func, 0, "func(name string) *Profile"},
-		{"NewProfile", Func, 0, "func(name string) *Profile"},
-		{"Profile", Type, 0, ""},
-		{"Profiles", Func, 0, "func() []*Profile"},
-		{"SetGoroutineLabels", Func, 9, "func(ctx context.Context)"},
-		{"StartCPUProfile", Func, 0, "func(w io.Writer) error"},
-		{"StopCPUProfile", Func, 0, "func()"},
-		{"WithLabels", Func, 9, "func(ctx context.Context, labels LabelSet) context.Context"},
-		{"WriteHeapProfile", Func, 0, "func(w io.Writer) error"},
+		{"(*Profile).Add", Method, 0},
+		{"(*Profile).Count", Method, 0},
+		{"(*Profile).Name", Method, 0},
+		{"(*Profile).Remove", Method, 0},
+		{"(*Profile).WriteTo", Method, 0},
+		{"Do", Func, 9},
+		{"ForLabels", Func, 9},
+		{"Label", Func, 9},
+		{"LabelSet", Type, 9},
+		{"Labels", Func, 9},
+		{"Lookup", Func, 0},
+		{"NewProfile", Func, 0},
+		{"Profile", Type, 0},
+		{"Profiles", Func, 0},
+		{"SetGoroutineLabels", Func, 9},
+		{"StartCPUProfile", Func, 0},
+		{"StopCPUProfile", Func, 0},
+		{"WithLabels", Func, 9},
+		{"WriteHeapProfile", Func, 0},
 	},
 	"runtime/trace": {
-		{"(*Region).End", Method, 11, ""},
-		{"(*Task).End", Method, 11, ""},
-		{"IsEnabled", Func, 11, "func() bool"},
-		{"Log", Func, 11, "func(ctx context.Context, category string, message string)"},
-		{"Logf", Func, 11, "func(ctx context.Context, category string, format string, args ...any)"},
-		{"NewTask", Func, 11, "func(pctx context.Context, taskType string) (ctx context.Context, task *Task)"},
-		{"Region", Type, 11, ""},
-		{"Start", Func, 5, "func(w io.Writer) error"},
-		{"StartRegion", Func, 11, "func(ctx context.Context, regionType string) *Region"},
-		{"Stop", Func, 5, "func()"},
-		{"Task", Type, 11, ""},
-		{"WithRegion", Func, 11, "func(ctx context.Context, regionType string, fn func())"},
+		{"(*Region).End", Method, 11},
+		{"(*Task).End", Method, 11},
+		{"IsEnabled", Func, 11},
+		{"Log", Func, 11},
+		{"Logf", Func, 11},
+		{"NewTask", Func, 11},
+		{"Region", Type, 11},
+		{"Start", Func, 5},
+		{"StartRegion", Func, 11},
+		{"Stop", Func, 5},
+		{"Task", Type, 11},
+		{"WithRegion", Func, 11},
 	},
 	"slices": {
-		{"All", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
-		{"AppendSeq", Func, 23, "func[Slice ~[]E, E any](s Slice, seq iter.Seq[E]) Slice"},
-		{"Backward", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
-		{"BinarySearch", Func, 21, "func[S ~[]E, E cmp.Ordered](x S, target E) (int, bool)"},
-		{"BinarySearchFunc", Func, 21, "func[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool)"},
-		{"Chunk", Func, 23, "func[Slice ~[]E, E any](s Slice, n int) iter.Seq[Slice]"},
-		{"Clip", Func, 21, "func[S ~[]E, E any](s S) S"},
-		{"Clone", Func, 21, "func[S ~[]E, E any](s S) S"},
-		{"Collect", Func, 23, "func[E any](seq iter.Seq[E]) []E"},
-		{"Compact", Func, 21, "func[S ~[]E, E comparable](s S) S"},
-		{"CompactFunc", Func, 21, "func[S ~[]E, E any](s S, eq func(E, E) bool) S"},
-		{"Compare", Func, 21, "func[S ~[]E, E cmp.Ordered](s1 S, s2 S) int"},
-		{"CompareFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int"},
-		{"Concat", Func, 22, "func[S ~[]E, E any](slices ...S) S"},
-		{"Contains", Func, 21, "func[S ~[]E, E comparable](s S, v E) bool"},
-		{"ContainsFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) bool"},
-		{"Delete", Func, 21, "func[S ~[]E, E any](s S, i int, j int) S"},
-		{"DeleteFunc", Func, 21, "func[S ~[]E, E any](s S, del func(E) bool) S"},
-		{"Equal", Func, 21, "func[S ~[]E, E comparable](s1 S, s2 S) bool"},
-		{"EqualFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool"},
-		{"Grow", Func, 21, "func[S ~[]E, E any](s S, n int) S"},
-		{"Index", Func, 21, "func[S ~[]E, E comparable](s S, v E) int"},
-		{"IndexFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) int"},
-		{"Insert", Func, 21, "func[S ~[]E, E any](s S, i int, v ...E) S"},
-		{"IsSorted", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) bool"},
-		{"IsSortedFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) bool"},
-		{"Max", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
-		{"MaxFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
-		{"Min", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
-		{"MinFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
-		{"Repeat", Func, 23, "func[S ~[]E, E any](x S, count int) S"},
-		{"Replace", Func, 21, "func[S ~[]E, E any](s S, i int, j int, v ...E) S"},
-		{"Reverse", Func, 21, "func[S ~[]E, E any](s S)"},
-		{"Sort", Func, 21, "func[S ~[]E, E cmp.Ordered](x S)"},
-		{"SortFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
-		{"SortStableFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
-		{"Sorted", Func, 23, "func[E cmp.Ordered](seq iter.Seq[E]) []E"},
-		{"SortedFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
-		{"SortedStableFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
-		{"Values", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq[E]"},
+		{"All", Func, 23},
+		{"AppendSeq", Func, 23},
+		{"Backward", Func, 23},
+		{"BinarySearch", Func, 21},
+		{"BinarySearchFunc", Func, 21},
+		{"Chunk", Func, 23},
+		{"Clip", Func, 21},
+		{"Clone", Func, 21},
+		{"Collect", Func, 23},
+		{"Compact", Func, 21},
+		{"CompactFunc", Func, 21},
+		{"Compare", Func, 21},
+		{"CompareFunc", Func, 21},
+		{"Concat", Func, 22},
+		{"Contains", Func, 21},
+		{"ContainsFunc", Func, 21},
+		{"Delete", Func, 21},
+		{"DeleteFunc", Func, 21},
+		{"Equal", Func, 21},
+		{"EqualFunc", Func, 21},
+		{"Grow", Func, 21},
+		{"Index", Func, 21},
+		{"IndexFunc", Func, 21},
+		{"Insert", Func, 21},
+		{"IsSorted", Func, 21},
+		{"IsSortedFunc", Func, 21},
+		{"Max", Func, 21},
+		{"MaxFunc", Func, 21},
+		{"Min", Func, 21},
+		{"MinFunc", Func, 21},
+		{"Repeat", Func, 23},
+		{"Replace", Func, 21},
+		{"Reverse", Func, 21},
+		{"Sort", Func, 21},
+		{"SortFunc", Func, 21},
+		{"SortStableFunc", Func, 21},
+		{"Sorted", Func, 23},
+		{"SortedFunc", Func, 23},
+		{"SortedStableFunc", Func, 23},
+		{"Values", Func, 23},
 	},
 	"sort": {
-		{"(Float64Slice).Len", Method, 0, ""},
-		{"(Float64Slice).Less", Method, 0, ""},
-		{"(Float64Slice).Search", Method, 0, ""},
-		{"(Float64Slice).Sort", Method, 0, ""},
-		{"(Float64Slice).Swap", Method, 0, ""},
-		{"(IntSlice).Len", Method, 0, ""},
-		{"(IntSlice).Less", Method, 0, ""},
-		{"(IntSlice).Search", Method, 0, ""},
-		{"(IntSlice).Sort", Method, 0, ""},
-		{"(IntSlice).Swap", Method, 0, ""},
-		{"(StringSlice).Len", Method, 0, ""},
-		{"(StringSlice).Less", Method, 0, ""},
-		{"(StringSlice).Search", Method, 0, ""},
-		{"(StringSlice).Sort", Method, 0, ""},
-		{"(StringSlice).Swap", Method, 0, ""},
-		{"Find", Func, 19, "func(n int, cmp func(int) int) (i int, found bool)"},
-		{"Float64Slice", Type, 0, ""},
-		{"Float64s", Func, 0, "func(x []float64)"},
-		{"Float64sAreSorted", Func, 0, "func(x []float64) bool"},
-		{"IntSlice", Type, 0, ""},
-		{"Interface", Type, 0, ""},
-		{"Ints", Func, 0, "func(x []int)"},
-		{"IntsAreSorted", Func, 0, "func(x []int) bool"},
-		{"IsSorted", Func, 0, "func(data Interface) bool"},
-		{"Reverse", Func, 1, "func(data Interface) Interface"},
-		{"Search", Func, 0, "func(n int, f func(int) bool) int"},
-		{"SearchFloat64s", Func, 0, "func(a []float64, x float64) int"},
-		{"SearchInts", Func, 0, "func(a []int, x int) int"},
-		{"SearchStrings", Func, 0, "func(a []string, x string) int"},
-		{"Slice", Func, 8, "func(x any, less func(i int, j int) bool)"},
-		{"SliceIsSorted", Func, 8, "func(x any, less func(i int, j int) bool) bool"},
-		{"SliceStable", Func, 8, "func(x any, less func(i int, j int) bool)"},
-		{"Sort", Func, 0, "func(data Interface)"},
-		{"Stable", Func, 2, "func(data Interface)"},
-		{"StringSlice", Type, 0, ""},
-		{"Strings", Func, 0, "func(x []string)"},
-		{"StringsAreSorted", Func, 0, "func(x []string) bool"},
+		{"(Float64Slice).Len", Method, 0},
+		{"(Float64Slice).Less", Method, 0},
+		{"(Float64Slice).Search", Method, 0},
+		{"(Float64Slice).Sort", Method, 0},
+		{"(Float64Slice).Swap", Method, 0},
+		{"(IntSlice).Len", Method, 0},
+		{"(IntSlice).Less", Method, 0},
+		{"(IntSlice).Search", Method, 0},
+		{"(IntSlice).Sort", Method, 0},
+		{"(IntSlice).Swap", Method, 0},
+		{"(StringSlice).Len", Method, 0},
+		{"(StringSlice).Less", Method, 0},
+		{"(StringSlice).Search", Method, 0},
+		{"(StringSlice).Sort", Method, 0},
+		{"(StringSlice).Swap", Method, 0},
+		{"Find", Func, 19},
+		{"Float64Slice", Type, 0},
+		{"Float64s", Func, 0},
+		{"Float64sAreSorted", Func, 0},
+		{"IntSlice", Type, 0},
+		{"Interface", Type, 0},
+		{"Ints", Func, 0},
+		{"IntsAreSorted", Func, 0},
+		{"IsSorted", Func, 0},
+		{"Reverse", Func, 1},
+		{"Search", Func, 0},
+		{"SearchFloat64s", Func, 0},
+		{"SearchInts", Func, 0},
+		{"SearchStrings", Func, 0},
+		{"Slice", Func, 8},
+		{"SliceIsSorted", Func, 8},
+		{"SliceStable", Func, 8},
+		{"Sort", Func, 0},
+		{"Stable", Func, 2},
+		{"StringSlice", Type, 0},
+		{"Strings", Func, 0},
+		{"StringsAreSorted", Func, 0},
 	},
 	"strconv": {
-		{"(*NumError).Error", Method, 0, ""},
-		{"(*NumError).Unwrap", Method, 14, ""},
-		{"AppendBool", Func, 0, "func(dst []byte, b bool) []byte"},
-		{"AppendFloat", Func, 0, "func(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte"},
-		{"AppendInt", Func, 0, "func(dst []byte, i int64, base int) []byte"},
-		{"AppendQuote", Func, 0, "func(dst []byte, s string) []byte"},
-		{"AppendQuoteRune", Func, 0, "func(dst []byte, r rune) []byte"},
-		{"AppendQuoteRuneToASCII", Func, 0, "func(dst []byte, r rune) []byte"},
-		{"AppendQuoteRuneToGraphic", Func, 6, "func(dst []byte, r rune) []byte"},
-		{"AppendQuoteToASCII", Func, 0, "func(dst []byte, s string) []byte"},
-		{"AppendQuoteToGraphic", Func, 6, "func(dst []byte, s string) []byte"},
-		{"AppendUint", Func, 0, "func(dst []byte, i uint64, base int) []byte"},
-		{"Atoi", Func, 0, "func(s string) (int, error)"},
-		{"CanBackquote", Func, 0, "func(s string) bool"},
-		{"ErrRange", Var, 0, ""},
-		{"ErrSyntax", Var, 0, ""},
-		{"FormatBool", Func, 0, "func(b bool) string"},
-		{"FormatComplex", Func, 15, "func(c complex128, fmt byte, prec int, bitSize int) string"},
-		{"FormatFloat", Func, 0, "func(f float64, fmt byte, prec int, bitSize int) string"},
-		{"FormatInt", Func, 0, "func(i int64, base int) string"},
-		{"FormatUint", Func, 0, "func(i uint64, base int) string"},
-		{"IntSize", Const, 0, ""},
-		{"IsGraphic", Func, 6, "func(r rune) bool"},
-		{"IsPrint", Func, 0, "func(r rune) bool"},
-		{"Itoa", Func, 0, "func(i int) string"},
-		{"NumError", Type, 0, ""},
-		{"NumError.Err", Field, 0, ""},
-		{"NumError.Func", Field, 0, ""},
-		{"NumError.Num", Field, 0, ""},
-		{"ParseBool", Func, 0, "func(str string) (bool, error)"},
-		{"ParseComplex", Func, 15, "func(s string, bitSize int) (complex128, error)"},
-		{"ParseFloat", Func, 0, "func(s string, bitSize int) (float64, error)"},
-		{"ParseInt", Func, 0, "func(s string, base int, bitSize int) (i int64, err error)"},
-		{"ParseUint", Func, 0, "func(s string, base int, bitSize int) (uint64, error)"},
-		{"Quote", Func, 0, "func(s string) string"},
-		{"QuoteRune", Func, 0, "func(r rune) string"},
-		{"QuoteRuneToASCII", Func, 0, "func(r rune) string"},
-		{"QuoteRuneToGraphic", Func, 6, "func(r rune) string"},
-		{"QuoteToASCII", Func, 0, "func(s string) string"},
-		{"QuoteToGraphic", Func, 6, "func(s string) string"},
-		{"QuotedPrefix", Func, 17, "func(s string) (string, error)"},
-		{"Unquote", Func, 0, "func(s string) (string, error)"},
-		{"UnquoteChar", Func, 0, "func(s string, quote byte) (value rune, multibyte bool, tail string, err error)"},
+		{"(*NumError).Error", Method, 0},
+		{"(*NumError).Unwrap", Method, 14},
+		{"AppendBool", Func, 0},
+		{"AppendFloat", Func, 0},
+		{"AppendInt", Func, 0},
+		{"AppendQuote", Func, 0},
+		{"AppendQuoteRune", Func, 0},
+		{"AppendQuoteRuneToASCII", Func, 0},
+		{"AppendQuoteRuneToGraphic", Func, 6},
+		{"AppendQuoteToASCII", Func, 0},
+		{"AppendQuoteToGraphic", Func, 6},
+		{"AppendUint", Func, 0},
+		{"Atoi", Func, 0},
+		{"CanBackquote", Func, 0},
+		{"ErrRange", Var, 0},
+		{"ErrSyntax", Var, 0},
+		{"FormatBool", Func, 0},
+		{"FormatComplex", Func, 15},
+		{"FormatFloat", Func, 0},
+		{"FormatInt", Func, 0},
+		{"FormatUint", Func, 0},
+		{"IntSize", Const, 0},
+		{"IsGraphic", Func, 6},
+		{"IsPrint", Func, 0},
+		{"Itoa", Func, 0},
+		{"NumError", Type, 0},
+		{"NumError.Err", Field, 0},
+		{"NumError.Func", Field, 0},
+		{"NumError.Num", Field, 0},
+		{"ParseBool", Func, 0},
+		{"ParseComplex", Func, 15},
+		{"ParseFloat", Func, 0},
+		{"ParseInt", Func, 0},
+		{"ParseUint", Func, 0},
+		{"Quote", Func, 0},
+		{"QuoteRune", Func, 0},
+		{"QuoteRuneToASCII", Func, 0},
+		{"QuoteRuneToGraphic", Func, 6},
+		{"QuoteToASCII", Func, 0},
+		{"QuoteToGraphic", Func, 6},
+		{"QuotedPrefix", Func, 17},
+		{"Unquote", Func, 0},
+		{"UnquoteChar", Func, 0},
 	},
 	"strings": {
-		{"(*Builder).Cap", Method, 12, ""},
-		{"(*Builder).Grow", Method, 10, ""},
-		{"(*Builder).Len", Method, 10, ""},
-		{"(*Builder).Reset", Method, 10, ""},
-		{"(*Builder).String", Method, 10, ""},
-		{"(*Builder).Write", Method, 10, ""},
-		{"(*Builder).WriteByte", Method, 10, ""},
-		{"(*Builder).WriteRune", Method, 10, ""},
-		{"(*Builder).WriteString", Method, 10, ""},
-		{"(*Reader).Len", Method, 0, ""},
-		{"(*Reader).Read", Method, 0, ""},
-		{"(*Reader).ReadAt", Method, 0, ""},
-		{"(*Reader).ReadByte", Method, 0, ""},
-		{"(*Reader).ReadRune", Method, 0, ""},
-		{"(*Reader).Reset", Method, 7, ""},
-		{"(*Reader).Seek", Method, 0, ""},
-		{"(*Reader).Size", Method, 5, ""},
-		{"(*Reader).UnreadByte", Method, 0, ""},
-		{"(*Reader).UnreadRune", Method, 0, ""},
-		{"(*Reader).WriteTo", Method, 1, ""},
-		{"(*Replacer).Replace", Method, 0, ""},
-		{"(*Replacer).WriteString", Method, 0, ""},
-		{"Builder", Type, 10, ""},
-		{"Clone", Func, 18, "func(s string) string"},
-		{"Compare", Func, 5, "func(a string, b string) int"},
-		{"Contains", Func, 0, "func(s string, substr string) bool"},
-		{"ContainsAny", Func, 0, "func(s string, chars string) bool"},
-		{"ContainsFunc", Func, 21, "func(s string, f func(rune) bool) bool"},
-		{"ContainsRune", Func, 0, "func(s string, r rune) bool"},
-		{"Count", Func, 0, "func(s string, substr string) int"},
-		{"Cut", Func, 18, "func(s string, sep string) (before string, after string, found bool)"},
-		{"CutPrefix", Func, 20, "func(s string, prefix string) (after string, found bool)"},
-		{"CutSuffix", Func, 20, "func(s string, suffix string) (before string, found bool)"},
-		{"EqualFold", Func, 0, "func(s string, t string) bool"},
-		{"Fields", Func, 0, "func(s string) []string"},
-		{"FieldsFunc", Func, 0, "func(s string, f func(rune) bool) []string"},
-		{"FieldsFuncSeq", Func, 24, "func(s string, f func(rune) bool) iter.Seq[string]"},
-		{"FieldsSeq", Func, 24, "func(s string) iter.Seq[string]"},
-		{"HasPrefix", Func, 0, "func(s string, prefix string) bool"},
-		{"HasSuffix", Func, 0, "func(s string, suffix string) bool"},
-		{"Index", Func, 0, "func(s string, substr string) int"},
-		{"IndexAny", Func, 0, "func(s string, chars string) int"},
-		{"IndexByte", Func, 2, "func(s string, c byte) int"},
-		{"IndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
-		{"IndexRune", Func, 0, "func(s string, r rune) int"},
-		{"Join", Func, 0, "func(elems []string, sep string) string"},
-		{"LastIndex", Func, 0, "func(s string, substr string) int"},
-		{"LastIndexAny", Func, 0, "func(s string, chars string) int"},
-		{"LastIndexByte", Func, 5, "func(s string, c byte) int"},
-		{"LastIndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
-		{"Lines", Func, 24, "func(s string) iter.Seq[string]"},
-		{"Map", Func, 0, "func(mapping func(rune) rune, s string) string"},
-		{"NewReader", Func, 0, "func(s string) *Reader"},
-		{"NewReplacer", Func, 0, "func(oldnew ...string) *Replacer"},
-		{"Reader", Type, 0, ""},
-		{"Repeat", Func, 0, "func(s string, count int) string"},
-		{"Replace", Func, 0, "func(s string, old string, new string, n int) string"},
-		{"ReplaceAll", Func, 12, "func(s string, old string, new string) string"},
-		{"Replacer", Type, 0, ""},
-		{"Split", Func, 0, "func(s string, sep string) []string"},
-		{"SplitAfter", Func, 0, "func(s string, sep string) []string"},
-		{"SplitAfterN", Func, 0, "func(s string, sep string, n int) []string"},
-		{"SplitAfterSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
-		{"SplitN", Func, 0, "func(s string, sep string, n int) []string"},
-		{"SplitSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
-		{"Title", Func, 0, "func(s string) string"},
-		{"ToLower", Func, 0, "func(s string) string"},
-		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
-		{"ToTitle", Func, 0, "func(s string) string"},
-		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
-		{"ToUpper", Func, 0, "func(s string) string"},
-		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
-		{"ToValidUTF8", Func, 13, "func(s string, replacement string) string"},
-		{"Trim", Func, 0, "func(s string, cutset string) string"},
-		{"TrimFunc", Func, 0, "func(s string, f func(rune) bool) string"},
-		{"TrimLeft", Func, 0, "func(s string, cutset string) string"},
-		{"TrimLeftFunc", Func, 0, "func(s string, f func(rune) bool) string"},
-		{"TrimPrefix", Func, 1, "func(s string, prefix string) string"},
-		{"TrimRight", Func, 0, "func(s string, cutset string) string"},
-		{"TrimRightFunc", Func, 0, "func(s string, f func(rune) bool) string"},
-		{"TrimSpace", Func, 0, "func(s string) string"},
-		{"TrimSuffix", Func, 1, "func(s string, suffix string) string"},
+		{"(*Builder).Cap", Method, 12},
+		{"(*Builder).Grow", Method, 10},
+		{"(*Builder).Len", Method, 10},
+		{"(*Builder).Reset", Method, 10},
+		{"(*Builder).String", Method, 10},
+		{"(*Builder).Write", Method, 10},
+		{"(*Builder).WriteByte", Method, 10},
+		{"(*Builder).WriteRune", Method, 10},
+		{"(*Builder).WriteString", Method, 10},
+		{"(*Reader).Len", Method, 0},
+		{"(*Reader).Read", Method, 0},
+		{"(*Reader).ReadAt", Method, 0},
+		{"(*Reader).ReadByte", Method, 0},
+		{"(*Reader).ReadRune", Method, 0},
+		{"(*Reader).Reset", Method, 7},
+		{"(*Reader).Seek", Method, 0},
+		{"(*Reader).Size", Method, 5},
+		{"(*Reader).UnreadByte", Method, 0},
+		{"(*Reader).UnreadRune", Method, 0},
+		{"(*Reader).WriteTo", Method, 1},
+		{"(*Replacer).Replace", Method, 0},
+		{"(*Replacer).WriteString", Method, 0},
+		{"Builder", Type, 10},
+		{"Clone", Func, 18},
+		{"Compare", Func, 5},
+		{"Contains", Func, 0},
+		{"ContainsAny", Func, 0},
+		{"ContainsFunc", Func, 21},
+		{"ContainsRune", Func, 0},
+		{"Count", Func, 0},
+		{"Cut", Func, 18},
+		{"CutPrefix", Func, 20},
+		{"CutSuffix", Func, 20},
+		{"EqualFold", Func, 0},
+		{"Fields", Func, 0},
+		{"FieldsFunc", Func, 0},
+		{"FieldsFuncSeq", Func, 24},
+		{"FieldsSeq", Func, 24},
+		{"HasPrefix", Func, 0},
+		{"HasSuffix", Func, 0},
+		{"Index", Func, 0},
+		{"IndexAny", Func, 0},
+		{"IndexByte", Func, 2},
+		{"IndexFunc", Func, 0},
+		{"IndexRune", Func, 0},
+		{"Join", Func, 0},
+		{"LastIndex", Func, 0},
+		{"LastIndexAny", Func, 0},
+		{"LastIndexByte", Func, 5},
+		{"LastIndexFunc", Func, 0},
+		{"Lines", Func, 24},
+		{"Map", Func, 0},
+		{"NewReader", Func, 0},
+		{"NewReplacer", Func, 0},
+		{"Reader", Type, 0},
+		{"Repeat", Func, 0},
+		{"Replace", Func, 0},
+		{"ReplaceAll", Func, 12},
+		{"Replacer", Type, 0},
+		{"Split", Func, 0},
+		{"SplitAfter", Func, 0},
+		{"SplitAfterN", Func, 0},
+		{"SplitAfterSeq", Func, 24},
+		{"SplitN", Func, 0},
+		{"SplitSeq", Func, 24},
+		{"Title", Func, 0},
+		{"ToLower", Func, 0},
+		{"ToLowerSpecial", Func, 0},
+		{"ToTitle", Func, 0},
+		{"ToTitleSpecial", Func, 0},
+		{"ToUpper", Func, 0},
+		{"ToUpperSpecial", Func, 0},
+		{"ToValidUTF8", Func, 13},
+		{"Trim", Func, 0},
+		{"TrimFunc", Func, 0},
+		{"TrimLeft", Func, 0},
+		{"TrimLeftFunc", Func, 0},
+		{"TrimPrefix", Func, 1},
+		{"TrimRight", Func, 0},
+		{"TrimRightFunc", Func, 0},
+		{"TrimSpace", Func, 0},
+		{"TrimSuffix", Func, 1},
 	},
 	"structs": {
-		{"HostLayout", Type, 23, ""},
+		{"HostLayout", Type, 23},
 	},
 	"sync": {
-		{"(*Cond).Broadcast", Method, 0, ""},
-		{"(*Cond).Signal", Method, 0, ""},
-		{"(*Cond).Wait", Method, 0, ""},
-		{"(*Map).Clear", Method, 23, ""},
-		{"(*Map).CompareAndDelete", Method, 20, ""},
-		{"(*Map).CompareAndSwap", Method, 20, ""},
-		{"(*Map).Delete", Method, 9, ""},
-		{"(*Map).Load", Method, 9, ""},
-		{"(*Map).LoadAndDelete", Method, 15, ""},
-		{"(*Map).LoadOrStore", Method, 9, ""},
-		{"(*Map).Range", Method, 9, ""},
-		{"(*Map).Store", Method, 9, ""},
-		{"(*Map).Swap", Method, 20, ""},
-		{"(*Mutex).Lock", Method, 0, ""},
-		{"(*Mutex).TryLock", Method, 18, ""},
-		{"(*Mutex).Unlock", Method, 0, ""},
-		{"(*Once).Do", Method, 0, ""},
-		{"(*Pool).Get", Method, 3, ""},
-		{"(*Pool).Put", Method, 3, ""},
-		{"(*RWMutex).Lock", Method, 0, ""},
-		{"(*RWMutex).RLock", Method, 0, ""},
-		{"(*RWMutex).RLocker", Method, 0, ""},
-		{"(*RWMutex).RUnlock", Method, 0, ""},
-		{"(*RWMutex).TryLock", Method, 18, ""},
-		{"(*RWMutex).TryRLock", Method, 18, ""},
-		{"(*RWMutex).Unlock", Method, 0, ""},
-		{"(*WaitGroup).Add", Method, 0, ""},
-		{"(*WaitGroup).Done", Method, 0, ""},
-		{"(*WaitGroup).Go", Method, 25, ""},
-		{"(*WaitGroup).Wait", Method, 0, ""},
-		{"Cond", Type, 0, ""},
-		{"Cond.L", Field, 0, ""},
-		{"Locker", Type, 0, ""},
-		{"Map", Type, 9, ""},
-		{"Mutex", Type, 0, ""},
-		{"NewCond", Func, 0, "func(l Locker) *Cond"},
-		{"Once", Type, 0, ""},
-		{"OnceFunc", Func, 21, "func(f func()) func()"},
-		{"OnceValue", Func, 21, "func[T any](f func() T) func() T"},
-		{"OnceValues", Func, 21, "func[T1, T2 any](f func() (T1, T2)) func() (T1, T2)"},
-		{"Pool", Type, 3, ""},
-		{"Pool.New", Field, 3, ""},
-		{"RWMutex", Type, 0, ""},
-		{"WaitGroup", Type, 0, ""},
+		{"(*Cond).Broadcast", Method, 0},
+		{"(*Cond).Signal", Method, 0},
+		{"(*Cond).Wait", Method, 0},
+		{"(*Map).Clear", Method, 23},
+		{"(*Map).CompareAndDelete", Method, 20},
+		{"(*Map).CompareAndSwap", Method, 20},
+		{"(*Map).Delete", Method, 9},
+		{"(*Map).Load", Method, 9},
+		{"(*Map).LoadAndDelete", Method, 15},
+		{"(*Map).LoadOrStore", Method, 9},
+		{"(*Map).Range", Method, 9},
+		{"(*Map).Store", Method, 9},
+		{"(*Map).Swap", Method, 20},
+		{"(*Mutex).Lock", Method, 0},
+		{"(*Mutex).TryLock", Method, 18},
+		{"(*Mutex).Unlock", Method, 0},
+		{"(*Once).Do", Method, 0},
+		{"(*Pool).Get", Method, 3},
+		{"(*Pool).Put", Method, 3},
+		{"(*RWMutex).Lock", Method, 0},
+		{"(*RWMutex).RLock", Method, 0},
+		{"(*RWMutex).RLocker", Method, 0},
+		{"(*RWMutex).RUnlock", Method, 0},
+		{"(*RWMutex).TryLock", Method, 18},
+		{"(*RWMutex).TryRLock", Method, 18},
+		{"(*RWMutex).Unlock", Method, 0},
+		{"(*WaitGroup).Add", Method, 0},
+		{"(*WaitGroup).Done", Method, 0},
+		{"(*WaitGroup).Wait", Method, 0},
+		{"Cond", Type, 0},
+		{"Cond.L", Field, 0},
+		{"Locker", Type, 0},
+		{"Map", Type, 9},
+		{"Mutex", Type, 0},
+		{"NewCond", Func, 0},
+		{"Once", Type, 0},
+		{"OnceFunc", Func, 21},
+		{"OnceValue", Func, 21},
+		{"OnceValues", Func, 21},
+		{"Pool", Type, 3},
+		{"Pool.New", Field, 3},
+		{"RWMutex", Type, 0},
+		{"WaitGroup", Type, 0},
 	},
 	"sync/atomic": {
-		{"(*Bool).CompareAndSwap", Method, 19, ""},
-		{"(*Bool).Load", Method, 19, ""},
-		{"(*Bool).Store", Method, 19, ""},
-		{"(*Bool).Swap", Method, 19, ""},
-		{"(*Int32).Add", Method, 19, ""},
-		{"(*Int32).And", Method, 23, ""},
-		{"(*Int32).CompareAndSwap", Method, 19, ""},
-		{"(*Int32).Load", Method, 19, ""},
-		{"(*Int32).Or", Method, 23, ""},
-		{"(*Int32).Store", Method, 19, ""},
-		{"(*Int32).Swap", Method, 19, ""},
-		{"(*Int64).Add", Method, 19, ""},
-		{"(*Int64).And", Method, 23, ""},
-		{"(*Int64).CompareAndSwap", Method, 19, ""},
-		{"(*Int64).Load", Method, 19, ""},
-		{"(*Int64).Or", Method, 23, ""},
-		{"(*Int64).Store", Method, 19, ""},
-		{"(*Int64).Swap", Method, 19, ""},
-		{"(*Pointer).CompareAndSwap", Method, 19, ""},
-		{"(*Pointer).Load", Method, 19, ""},
-		{"(*Pointer).Store", Method, 19, ""},
-		{"(*Pointer).Swap", Method, 19, ""},
-		{"(*Uint32).Add", Method, 19, ""},
-		{"(*Uint32).And", Method, 23, ""},
-		{"(*Uint32).CompareAndSwap", Method, 19, ""},
-		{"(*Uint32).Load", Method, 19, ""},
-		{"(*Uint32).Or", Method, 23, ""},
-		{"(*Uint32).Store", Method, 19, ""},
-		{"(*Uint32).Swap", Method, 19, ""},
-		{"(*Uint64).Add", Method, 19, ""},
-		{"(*Uint64).And", Method, 23, ""},
-		{"(*Uint64).CompareAndSwap", Method, 19, ""},
-		{"(*Uint64).Load", Method, 19, ""},
-		{"(*Uint64).Or", Method, 23, ""},
-		{"(*Uint64).Store", Method, 19, ""},
-		{"(*Uint64).Swap", Method, 19, ""},
-		{"(*Uintptr).Add", Method, 19, ""},
-		{"(*Uintptr).And", Method, 23, ""},
-		{"(*Uintptr).CompareAndSwap", Method, 19, ""},
-		{"(*Uintptr).Load", Method, 19, ""},
-		{"(*Uintptr).Or", Method, 23, ""},
-		{"(*Uintptr).Store", Method, 19, ""},
-		{"(*Uintptr).Swap", Method, 19, ""},
-		{"(*Value).CompareAndSwap", Method, 17, ""},
-		{"(*Value).Load", Method, 4, ""},
-		{"(*Value).Store", Method, 4, ""},
-		{"(*Value).Swap", Method, 17, ""},
-		{"AddInt32", Func, 0, "func(addr *int32, delta int32) (new int32)"},
-		{"AddInt64", Func, 0, "func(addr *int64, delta int64) (new int64)"},
-		{"AddUint32", Func, 0, "func(addr *uint32, delta uint32) (new uint32)"},
-		{"AddUint64", Func, 0, "func(addr *uint64, delta uint64) (new uint64)"},
-		{"AddUintptr", Func, 0, "func(addr *uintptr, delta uintptr) (new uintptr)"},
-		{"AndInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
-		{"AndInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
-		{"AndUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
-		{"AndUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
-		{"AndUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
-		{"Bool", Type, 19, ""},
-		{"CompareAndSwapInt32", Func, 0, "func(addr *int32, old int32, new int32) (swapped bool)"},
-		{"CompareAndSwapInt64", Func, 0, "func(addr *int64, old int64, new int64) (swapped bool)"},
-		{"CompareAndSwapPointer", Func, 0, "func(addr *unsafe.Pointer, old unsafe.Pointer, new unsafe.Pointer) (swapped bool)"},
-		{"CompareAndSwapUint32", Func, 0, "func(addr *uint32, old uint32, new uint32) (swapped bool)"},
-		{"CompareAndSwapUint64", Func, 0, "func(addr *uint64, old uint64, new uint64) (swapped bool)"},
-		{"CompareAndSwapUintptr", Func, 0, "func(addr *uintptr, old uintptr, new uintptr) (swapped bool)"},
-		{"Int32", Type, 19, ""},
-		{"Int64", Type, 19, ""},
-		{"LoadInt32", Func, 0, "func(addr *int32) (val int32)"},
-		{"LoadInt64", Func, 0, "func(addr *int64) (val int64)"},
-		{"LoadPointer", Func, 0, "func(addr *unsafe.Pointer) (val unsafe.Pointer)"},
-		{"LoadUint32", Func, 0, "func(addr *uint32) (val uint32)"},
-		{"LoadUint64", Func, 0, "func(addr *uint64) (val uint64)"},
-		{"LoadUintptr", Func, 0, "func(addr *uintptr) (val uintptr)"},
-		{"OrInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
-		{"OrInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
-		{"OrUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
-		{"OrUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
-		{"OrUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
-		{"Pointer", Type, 19, ""},
-		{"StoreInt32", Func, 0, "func(addr *int32, val int32)"},
-		{"StoreInt64", Func, 0, "func(addr *int64, val int64)"},
-		{"StorePointer", Func, 0, "func(addr *unsafe.Pointer, val unsafe.Pointer)"},
-		{"StoreUint32", Func, 0, "func(addr *uint32, val uint32)"},
-		{"StoreUint64", Func, 0, "func(addr *uint64, val uint64)"},
-		{"StoreUintptr", Func, 0, "func(addr *uintptr, val uintptr)"},
-		{"SwapInt32", Func, 2, "func(addr *int32, new int32) (old int32)"},
-		{"SwapInt64", Func, 2, "func(addr *int64, new int64) (old int64)"},
-		{"SwapPointer", Func, 2, "func(addr *unsafe.Pointer, new unsafe.Pointer) (old unsafe.Pointer)"},
-		{"SwapUint32", Func, 2, "func(addr *uint32, new uint32) (old uint32)"},
-		{"SwapUint64", Func, 2, "func(addr *uint64, new uint64) (old uint64)"},
-		{"SwapUintptr", Func, 2, "func(addr *uintptr, new uintptr) (old uintptr)"},
-		{"Uint32", Type, 19, ""},
-		{"Uint64", Type, 19, ""},
-		{"Uintptr", Type, 19, ""},
-		{"Value", Type, 4, ""},
+		{"(*Bool).CompareAndSwap", Method, 19},
+		{"(*Bool).Load", Method, 19},
+		{"(*Bool).Store", Method, 19},
+		{"(*Bool).Swap", Method, 19},
+		{"(*Int32).Add", Method, 19},
+		{"(*Int32).And", Method, 23},
+		{"(*Int32).CompareAndSwap", Method, 19},
+		{"(*Int32).Load", Method, 19},
+		{"(*Int32).Or", Method, 23},
+		{"(*Int32).Store", Method, 19},
+		{"(*Int32).Swap", Method, 19},
+		{"(*Int64).Add", Method, 19},
+		{"(*Int64).And", Method, 23},
+		{"(*Int64).CompareAndSwap", Method, 19},
+		{"(*Int64).Load", Method, 19},
+		{"(*Int64).Or", Method, 23},
+		{"(*Int64).Store", Method, 19},
+		{"(*Int64).Swap", Method, 19},
+		{"(*Pointer).CompareAndSwap", Method, 19},
+		{"(*Pointer).Load", Method, 19},
+		{"(*Pointer).Store", Method, 19},
+		{"(*Pointer).Swap", Method, 19},
+		{"(*Uint32).Add", Method, 19},
+		{"(*Uint32).And", Method, 23},
+		{"(*Uint32).CompareAndSwap", Method, 19},
+		{"(*Uint32).Load", Method, 19},
+		{"(*Uint32).Or", Method, 23},
+		{"(*Uint32).Store", Method, 19},
+		{"(*Uint32).Swap", Method, 19},
+		{"(*Uint64).Add", Method, 19},
+		{"(*Uint64).And", Method, 23},
+		{"(*Uint64).CompareAndSwap", Method, 19},
+		{"(*Uint64).Load", Method, 19},
+		{"(*Uint64).Or", Method, 23},
+		{"(*Uint64).Store", Method, 19},
+		{"(*Uint64).Swap", Method, 19},
+		{"(*Uintptr).Add", Method, 19},
+		{"(*Uintptr).And", Method, 23},
+		{"(*Uintptr).CompareAndSwap", Method, 19},
+		{"(*Uintptr).Load", Method, 19},
+		{"(*Uintptr).Or", Method, 23},
+		{"(*Uintptr).Store", Method, 19},
+		{"(*Uintptr).Swap", Method, 19},
+		{"(*Value).CompareAndSwap", Method, 17},
+		{"(*Value).Load", Method, 4},
+		{"(*Value).Store", Method, 4},
+		{"(*Value).Swap", Method, 17},
+		{"AddInt32", Func, 0},
+		{"AddInt64", Func, 0},
+		{"AddUint32", Func, 0},
+		{"AddUint64", Func, 0},
+		{"AddUintptr", Func, 0},
+		{"AndInt32", Func, 23},
+		{"AndInt64", Func, 23},
+		{"AndUint32", Func, 23},
+		{"AndUint64", Func, 23},
+		{"AndUintptr", Func, 23},
+		{"Bool", Type, 19},
+		{"CompareAndSwapInt32", Func, 0},
+		{"CompareAndSwapInt64", Func, 0},
+		{"CompareAndSwapPointer", Func, 0},
+		{"CompareAndSwapUint32", Func, 0},
+		{"CompareAndSwapUint64", Func, 0},
+		{"CompareAndSwapUintptr", Func, 0},
+		{"Int32", Type, 19},
+		{"Int64", Type, 19},
+		{"LoadInt32", Func, 0},
+		{"LoadInt64", Func, 0},
+		{"LoadPointer", Func, 0},
+		{"LoadUint32", Func, 0},
+		{"LoadUint64", Func, 0},
+		{"LoadUintptr", Func, 0},
+		{"OrInt32", Func, 23},
+		{"OrInt64", Func, 23},
+		{"OrUint32", Func, 23},
+		{"OrUint64", Func, 23},
+		{"OrUintptr", Func, 23},
+		{"Pointer", Type, 19},
+		{"StoreInt32", Func, 0},
+		{"StoreInt64", Func, 0},
+		{"StorePointer", Func, 0},
+		{"StoreUint32", Func, 0},
+		{"StoreUint64", Func, 0},
+		{"StoreUintptr", Func, 0},
+		{"SwapInt32", Func, 2},
+		{"SwapInt64", Func, 2},
+		{"SwapPointer", Func, 2},
+		{"SwapUint32", Func, 2},
+		{"SwapUint64", Func, 2},
+		{"SwapUintptr", Func, 2},
+		{"Uint32", Type, 19},
+		{"Uint64", Type, 19},
+		{"Uintptr", Type, 19},
+		{"Value", Type, 4},
 	},
 	"syscall": {
-		{"(*Cmsghdr).SetLen", Method, 0, ""},
-		{"(*DLL).FindProc", Method, 0, ""},
-		{"(*DLL).MustFindProc", Method, 0, ""},
-		{"(*DLL).Release", Method, 0, ""},
-		{"(*DLLError).Error", Method, 0, ""},
-		{"(*DLLError).Unwrap", Method, 16, ""},
-		{"(*Filetime).Nanoseconds", Method, 0, ""},
-		{"(*Iovec).SetLen", Method, 0, ""},
-		{"(*LazyDLL).Handle", Method, 0, ""},
-		{"(*LazyDLL).Load", Method, 0, ""},
-		{"(*LazyDLL).NewProc", Method, 0, ""},
-		{"(*LazyProc).Addr", Method, 0, ""},
-		{"(*LazyProc).Call", Method, 0, ""},
-		{"(*LazyProc).Find", Method, 0, ""},
-		{"(*Msghdr).SetControllen", Method, 0, ""},
-		{"(*Proc).Addr", Method, 0, ""},
-		{"(*Proc).Call", Method, 0, ""},
-		{"(*PtraceRegs).PC", Method, 0, ""},
-		{"(*PtraceRegs).SetPC", Method, 0, ""},
-		{"(*RawSockaddrAny).Sockaddr", Method, 0, ""},
-		{"(*SID).Copy", Method, 0, ""},
-		{"(*SID).Len", Method, 0, ""},
-		{"(*SID).LookupAccount", Method, 0, ""},
-		{"(*SID).String", Method, 0, ""},
-		{"(*Timespec).Nano", Method, 0, ""},
-		{"(*Timespec).Unix", Method, 0, ""},
-		{"(*Timeval).Nano", Method, 0, ""},
-		{"(*Timeval).Nanoseconds", Method, 0, ""},
-		{"(*Timeval).Unix", Method, 0, ""},
-		{"(Errno).Error", Method, 0, ""},
-		{"(Errno).Is", Method, 13, ""},
-		{"(Errno).Temporary", Method, 0, ""},
-		{"(Errno).Timeout", Method, 0, ""},
-		{"(Signal).Signal", Method, 0, ""},
-		{"(Signal).String", Method, 0, ""},
-		{"(Token).Close", Method, 0, ""},
-		{"(Token).GetTokenPrimaryGroup", Method, 0, ""},
-		{"(Token).GetTokenUser", Method, 0, ""},
-		{"(Token).GetUserProfileDirectory", Method, 0, ""},
-		{"(WaitStatus).Continued", Method, 0, ""},
-		{"(WaitStatus).CoreDump", Method, 0, ""},
-		{"(WaitStatus).ExitStatus", Method, 0, ""},
-		{"(WaitStatus).Exited", Method, 0, ""},
-		{"(WaitStatus).Signal", Method, 0, ""},
-		{"(WaitStatus).Signaled", Method, 0, ""},
-		{"(WaitStatus).StopSignal", Method, 0, ""},
-		{"(WaitStatus).Stopped", Method, 0, ""},
-		{"(WaitStatus).TrapCause", Method, 0, ""},
-		{"AF_ALG", Const, 0, ""},
-		{"AF_APPLETALK", Const, 0, ""},
-		{"AF_ARP", Const, 0, ""},
-		{"AF_ASH", Const, 0, ""},
-		{"AF_ATM", Const, 0, ""},
-		{"AF_ATMPVC", Const, 0, ""},
-		{"AF_ATMSVC", Const, 0, ""},
-		{"AF_AX25", Const, 0, ""},
-		{"AF_BLUETOOTH", Const, 0, ""},
-		{"AF_BRIDGE", Const, 0, ""},
-		{"AF_CAIF", Const, 0, ""},
-		{"AF_CAN", Const, 0, ""},
-		{"AF_CCITT", Const, 0, ""},
-		{"AF_CHAOS", Const, 0, ""},
-		{"AF_CNT", Const, 0, ""},
-		{"AF_COIP", Const, 0, ""},
-		{"AF_DATAKIT", Const, 0, ""},
-		{"AF_DECnet", Const, 0, ""},
-		{"AF_DLI", Const, 0, ""},
-		{"AF_E164", Const, 0, ""},
-		{"AF_ECMA", Const, 0, ""},
-		{"AF_ECONET", Const, 0, ""},
-		{"AF_ENCAP", Const, 1, ""},
-		{"AF_FILE", Const, 0, ""},
-		{"AF_HYLINK", Const, 0, ""},
-		{"AF_IEEE80211", Const, 0, ""},
-		{"AF_IEEE802154", Const, 0, ""},
-		{"AF_IMPLINK", Const, 0, ""},
-		{"AF_INET", Const, 0, ""},
-		{"AF_INET6", Const, 0, ""},
-		{"AF_INET6_SDP", Const, 3, ""},
-		{"AF_INET_SDP", Const, 3, ""},
-		{"AF_IPX", Const, 0, ""},
-		{"AF_IRDA", Const, 0, ""},
-		{"AF_ISDN", Const, 0, ""},
-		{"AF_ISO", Const, 0, ""},
-		{"AF_IUCV", Const, 0, ""},
-		{"AF_KEY", Const, 0, ""},
-		{"AF_LAT", Const, 0, ""},
-		{"AF_LINK", Const, 0, ""},
-		{"AF_LLC", Const, 0, ""},
-		{"AF_LOCAL", Const, 0, ""},
-		{"AF_MAX", Const, 0, ""},
-		{"AF_MPLS", Const, 1, ""},
-		{"AF_NATM", Const, 0, ""},
-		{"AF_NDRV", Const, 0, ""},
-		{"AF_NETBEUI", Const, 0, ""},
-		{"AF_NETBIOS", Const, 0, ""},
-		{"AF_NETGRAPH", Const, 0, ""},
-		{"AF_NETLINK", Const, 0, ""},
-		{"AF_NETROM", Const, 0, ""},
-		{"AF_NS", Const, 0, ""},
-		{"AF_OROUTE", Const, 1, ""},
-		{"AF_OSI", Const, 0, ""},
-		{"AF_PACKET", Const, 0, ""},
-		{"AF_PHONET", Const, 0, ""},
-		{"AF_PPP", Const, 0, ""},
-		{"AF_PPPOX", Const, 0, ""},
-		{"AF_PUP", Const, 0, ""},
-		{"AF_RDS", Const, 0, ""},
-		{"AF_RESERVED_36", Const, 0, ""},
-		{"AF_ROSE", Const, 0, ""},
-		{"AF_ROUTE", Const, 0, ""},
-		{"AF_RXRPC", Const, 0, ""},
-		{"AF_SCLUSTER", Const, 0, ""},
-		{"AF_SECURITY", Const, 0, ""},
-		{"AF_SIP", Const, 0, ""},
-		{"AF_SLOW", Const, 0, ""},
-		{"AF_SNA", Const, 0, ""},
-		{"AF_SYSTEM", Const, 0, ""},
-		{"AF_TIPC", Const, 0, ""},
-		{"AF_UNIX", Const, 0, ""},
-		{"AF_UNSPEC", Const, 0, ""},
-		{"AF_UTUN", Const, 16, ""},
-		{"AF_VENDOR00", Const, 0, ""},
-		{"AF_VENDOR01", Const, 0, ""},
-		{"AF_VENDOR02", Const, 0, ""},
-		{"AF_VENDOR03", Const, 0, ""},
-		{"AF_VENDOR04", Const, 0, ""},
-		{"AF_VENDOR05", Const, 0, ""},
-		{"AF_VENDOR06", Const, 0, ""},
-		{"AF_VENDOR07", Const, 0, ""},
-		{"AF_VENDOR08", Const, 0, ""},
-		{"AF_VENDOR09", Const, 0, ""},
-		{"AF_VENDOR10", Const, 0, ""},
-		{"AF_VENDOR11", Const, 0, ""},
-		{"AF_VENDOR12", Const, 0, ""},
-		{"AF_VENDOR13", Const, 0, ""},
-		{"AF_VENDOR14", Const, 0, ""},
-		{"AF_VENDOR15", Const, 0, ""},
-		{"AF_VENDOR16", Const, 0, ""},
-		{"AF_VENDOR17", Const, 0, ""},
-		{"AF_VENDOR18", Const, 0, ""},
-		{"AF_VENDOR19", Const, 0, ""},
-		{"AF_VENDOR20", Const, 0, ""},
-		{"AF_VENDOR21", Const, 0, ""},
-		{"AF_VENDOR22", Const, 0, ""},
-		{"AF_VENDOR23", Const, 0, ""},
-		{"AF_VENDOR24", Const, 0, ""},
-		{"AF_VENDOR25", Const, 0, ""},
-		{"AF_VENDOR26", Const, 0, ""},
-		{"AF_VENDOR27", Const, 0, ""},
-		{"AF_VENDOR28", Const, 0, ""},
-		{"AF_VENDOR29", Const, 0, ""},
-		{"AF_VENDOR30", Const, 0, ""},
-		{"AF_VENDOR31", Const, 0, ""},
-		{"AF_VENDOR32", Const, 0, ""},
-		{"AF_VENDOR33", Const, 0, ""},
-		{"AF_VENDOR34", Const, 0, ""},
-		{"AF_VENDOR35", Const, 0, ""},
-		{"AF_VENDOR36", Const, 0, ""},
-		{"AF_VENDOR37", Const, 0, ""},
-		{"AF_VENDOR38", Const, 0, ""},
-		{"AF_VENDOR39", Const, 0, ""},
-		{"AF_VENDOR40", Const, 0, ""},
-		{"AF_VENDOR41", Const, 0, ""},
-		{"AF_VENDOR42", Const, 0, ""},
-		{"AF_VENDOR43", Const, 0, ""},
-		{"AF_VENDOR44", Const, 0, ""},
-		{"AF_VENDOR45", Const, 0, ""},
-		{"AF_VENDOR46", Const, 0, ""},
-		{"AF_VENDOR47", Const, 0, ""},
-		{"AF_WANPIPE", Const, 0, ""},
-		{"AF_X25", Const, 0, ""},
-		{"AI_CANONNAME", Const, 1, ""},
-		{"AI_NUMERICHOST", Const, 1, ""},
-		{"AI_PASSIVE", Const, 1, ""},
-		{"APPLICATION_ERROR", Const, 0, ""},
-		{"ARPHRD_ADAPT", Const, 0, ""},
-		{"ARPHRD_APPLETLK", Const, 0, ""},
-		{"ARPHRD_ARCNET", Const, 0, ""},
-		{"ARPHRD_ASH", Const, 0, ""},
-		{"ARPHRD_ATM", Const, 0, ""},
-		{"ARPHRD_AX25", Const, 0, ""},
-		{"ARPHRD_BIF", Const, 0, ""},
-		{"ARPHRD_CHAOS", Const, 0, ""},
-		{"ARPHRD_CISCO", Const, 0, ""},
-		{"ARPHRD_CSLIP", Const, 0, ""},
-		{"ARPHRD_CSLIP6", Const, 0, ""},
-		{"ARPHRD_DDCMP", Const, 0, ""},
-		{"ARPHRD_DLCI", Const, 0, ""},
-		{"ARPHRD_ECONET", Const, 0, ""},
-		{"ARPHRD_EETHER", Const, 0, ""},
-		{"ARPHRD_ETHER", Const, 0, ""},
-		{"ARPHRD_EUI64", Const, 0, ""},
-		{"ARPHRD_FCAL", Const, 0, ""},
-		{"ARPHRD_FCFABRIC", Const, 0, ""},
-		{"ARPHRD_FCPL", Const, 0, ""},
-		{"ARPHRD_FCPP", Const, 0, ""},
-		{"ARPHRD_FDDI", Const, 0, ""},
-		{"ARPHRD_FRAD", Const, 0, ""},
-		{"ARPHRD_FRELAY", Const, 1, ""},
-		{"ARPHRD_HDLC", Const, 0, ""},
-		{"ARPHRD_HIPPI", Const, 0, ""},
-		{"ARPHRD_HWX25", Const, 0, ""},
-		{"ARPHRD_IEEE1394", Const, 0, ""},
-		{"ARPHRD_IEEE802", Const, 0, ""},
-		{"ARPHRD_IEEE80211", Const, 0, ""},
-		{"ARPHRD_IEEE80211_PRISM", Const, 0, ""},
-		{"ARPHRD_IEEE80211_RADIOTAP", Const, 0, ""},
-		{"ARPHRD_IEEE802154", Const, 0, ""},
-		{"ARPHRD_IEEE802154_PHY", Const, 0, ""},
-		{"ARPHRD_IEEE802_TR", Const, 0, ""},
-		{"ARPHRD_INFINIBAND", Const, 0, ""},
-		{"ARPHRD_IPDDP", Const, 0, ""},
-		{"ARPHRD_IPGRE", Const, 0, ""},
-		{"ARPHRD_IRDA", Const, 0, ""},
-		{"ARPHRD_LAPB", Const, 0, ""},
-		{"ARPHRD_LOCALTLK", Const, 0, ""},
-		{"ARPHRD_LOOPBACK", Const, 0, ""},
-		{"ARPHRD_METRICOM", Const, 0, ""},
-		{"ARPHRD_NETROM", Const, 0, ""},
-		{"ARPHRD_NONE", Const, 0, ""},
-		{"ARPHRD_PIMREG", Const, 0, ""},
-		{"ARPHRD_PPP", Const, 0, ""},
-		{"ARPHRD_PRONET", Const, 0, ""},
-		{"ARPHRD_RAWHDLC", Const, 0, ""},
-		{"ARPHRD_ROSE", Const, 0, ""},
-		{"ARPHRD_RSRVD", Const, 0, ""},
-		{"ARPHRD_SIT", Const, 0, ""},
-		{"ARPHRD_SKIP", Const, 0, ""},
-		{"ARPHRD_SLIP", Const, 0, ""},
-		{"ARPHRD_SLIP6", Const, 0, ""},
-		{"ARPHRD_STRIP", Const, 1, ""},
-		{"ARPHRD_TUNNEL", Const, 0, ""},
-		{"ARPHRD_TUNNEL6", Const, 0, ""},
-		{"ARPHRD_VOID", Const, 0, ""},
-		{"ARPHRD_X25", Const, 0, ""},
-		{"AUTHTYPE_CLIENT", Const, 0, ""},
-		{"AUTHTYPE_SERVER", Const, 0, ""},
-		{"Accept", Func, 0, "func(fd int) (nfd int, sa Sockaddr, err error)"},
-		{"Accept4", Func, 1, "func(fd int, flags int) (nfd int, sa Sockaddr, err error)"},
-		{"AcceptEx", Func, 0, ""},
-		{"Access", Func, 0, "func(path string, mode uint32) (err error)"},
-		{"Acct", Func, 0, "func(path string) (err error)"},
-		{"AddrinfoW", Type, 1, ""},
-		{"AddrinfoW.Addr", Field, 1, ""},
-		{"AddrinfoW.Addrlen", Field, 1, ""},
-		{"AddrinfoW.Canonname", Field, 1, ""},
-		{"AddrinfoW.Family", Field, 1, ""},
-		{"AddrinfoW.Flags", Field, 1, ""},
-		{"AddrinfoW.Next", Field, 1, ""},
-		{"AddrinfoW.Protocol", Field, 1, ""},
-		{"AddrinfoW.Socktype", Field, 1, ""},
-		{"Adjtime", Func, 0, ""},
-		{"Adjtimex", Func, 0, "func(buf *Timex) (state int, err error)"},
-		{"AllThreadsSyscall", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"AllThreadsSyscall6", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"AttachLsf", Func, 0, "func(fd int, i []SockFilter) error"},
-		{"B0", Const, 0, ""},
-		{"B1000000", Const, 0, ""},
-		{"B110", Const, 0, ""},
-		{"B115200", Const, 0, ""},
-		{"B1152000", Const, 0, ""},
-		{"B1200", Const, 0, ""},
-		{"B134", Const, 0, ""},
-		{"B14400", Const, 1, ""},
-		{"B150", Const, 0, ""},
-		{"B1500000", Const, 0, ""},
-		{"B1800", Const, 0, ""},
-		{"B19200", Const, 0, ""},
-		{"B200", Const, 0, ""},
-		{"B2000000", Const, 0, ""},
-		{"B230400", Const, 0, ""},
-		{"B2400", Const, 0, ""},
-		{"B2500000", Const, 0, ""},
-		{"B28800", Const, 1, ""},
-		{"B300", Const, 0, ""},
-		{"B3000000", Const, 0, ""},
-		{"B3500000", Const, 0, ""},
-		{"B38400", Const, 0, ""},
-		{"B4000000", Const, 0, ""},
-		{"B460800", Const, 0, ""},
-		{"B4800", Const, 0, ""},
-		{"B50", Const, 0, ""},
-		{"B500000", Const, 0, ""},
-		{"B57600", Const, 0, ""},
-		{"B576000", Const, 0, ""},
-		{"B600", Const, 0, ""},
-		{"B7200", Const, 1, ""},
-		{"B75", Const, 0, ""},
-		{"B76800", Const, 1, ""},
-		{"B921600", Const, 0, ""},
-		{"B9600", Const, 0, ""},
-		{"BASE_PROTOCOL", Const, 2, ""},
-		{"BIOCFEEDBACK", Const, 0, ""},
-		{"BIOCFLUSH", Const, 0, ""},
-		{"BIOCGBLEN", Const, 0, ""},
-		{"BIOCGDIRECTION", Const, 0, ""},
-		{"BIOCGDIRFILT", Const, 1, ""},
-		{"BIOCGDLT", Const, 0, ""},
-		{"BIOCGDLTLIST", Const, 0, ""},
-		{"BIOCGETBUFMODE", Const, 0, ""},
-		{"BIOCGETIF", Const, 0, ""},
-		{"BIOCGETZMAX", Const, 0, ""},
-		{"BIOCGFEEDBACK", Const, 1, ""},
-		{"BIOCGFILDROP", Const, 1, ""},
-		{"BIOCGHDRCMPLT", Const, 0, ""},
-		{"BIOCGRSIG", Const, 0, ""},
-		{"BIOCGRTIMEOUT", Const, 0, ""},
-		{"BIOCGSEESENT", Const, 0, ""},
-		{"BIOCGSTATS", Const, 0, ""},
-		{"BIOCGSTATSOLD", Const, 1, ""},
-		{"BIOCGTSTAMP", Const, 1, ""},
-		{"BIOCIMMEDIATE", Const, 0, ""},
-		{"BIOCLOCK", Const, 0, ""},
-		{"BIOCPROMISC", Const, 0, ""},
-		{"BIOCROTZBUF", Const, 0, ""},
-		{"BIOCSBLEN", Const, 0, ""},
-		{"BIOCSDIRECTION", Const, 0, ""},
-		{"BIOCSDIRFILT", Const, 1, ""},
-		{"BIOCSDLT", Const, 0, ""},
-		{"BIOCSETBUFMODE", Const, 0, ""},
-		{"BIOCSETF", Const, 0, ""},
-		{"BIOCSETFNR", Const, 0, ""},
-		{"BIOCSETIF", Const, 0, ""},
-		{"BIOCSETWF", Const, 0, ""},
-		{"BIOCSETZBUF", Const, 0, ""},
-		{"BIOCSFEEDBACK", Const, 1, ""},
-		{"BIOCSFILDROP", Const, 1, ""},
-		{"BIOCSHDRCMPLT", Const, 0, ""},
-		{"BIOCSRSIG", Const, 0, ""},
-		{"BIOCSRTIMEOUT", Const, 0, ""},
-		{"BIOCSSEESENT", Const, 0, ""},
-		{"BIOCSTCPF", Const, 1, ""},
-		{"BIOCSTSTAMP", Const, 1, ""},
-		{"BIOCSUDPF", Const, 1, ""},
-		{"BIOCVERSION", Const, 0, ""},
-		{"BPF_A", Const, 0, ""},
-		{"BPF_ABS", Const, 0, ""},
-		{"BPF_ADD", Const, 0, ""},
-		{"BPF_ALIGNMENT", Const, 0, ""},
-		{"BPF_ALIGNMENT32", Const, 1, ""},
-		{"BPF_ALU", Const, 0, ""},
-		{"BPF_AND", Const, 0, ""},
-		{"BPF_B", Const, 0, ""},
-		{"BPF_BUFMODE_BUFFER", Const, 0, ""},
-		{"BPF_BUFMODE_ZBUF", Const, 0, ""},
-		{"BPF_DFLTBUFSIZE", Const, 1, ""},
-		{"BPF_DIRECTION_IN", Const, 1, ""},
-		{"BPF_DIRECTION_OUT", Const, 1, ""},
-		{"BPF_DIV", Const, 0, ""},
-		{"BPF_H", Const, 0, ""},
-		{"BPF_IMM", Const, 0, ""},
-		{"BPF_IND", Const, 0, ""},
-		{"BPF_JA", Const, 0, ""},
-		{"BPF_JEQ", Const, 0, ""},
-		{"BPF_JGE", Const, 0, ""},
-		{"BPF_JGT", Const, 0, ""},
-		{"BPF_JMP", Const, 0, ""},
-		{"BPF_JSET", Const, 0, ""},
-		{"BPF_K", Const, 0, ""},
-		{"BPF_LD", Const, 0, ""},
-		{"BPF_LDX", Const, 0, ""},
-		{"BPF_LEN", Const, 0, ""},
-		{"BPF_LSH", Const, 0, ""},
-		{"BPF_MAJOR_VERSION", Const, 0, ""},
-		{"BPF_MAXBUFSIZE", Const, 0, ""},
-		{"BPF_MAXINSNS", Const, 0, ""},
-		{"BPF_MEM", Const, 0, ""},
-		{"BPF_MEMWORDS", Const, 0, ""},
-		{"BPF_MINBUFSIZE", Const, 0, ""},
-		{"BPF_MINOR_VERSION", Const, 0, ""},
-		{"BPF_MISC", Const, 0, ""},
-		{"BPF_MSH", Const, 0, ""},
-		{"BPF_MUL", Const, 0, ""},
-		{"BPF_NEG", Const, 0, ""},
-		{"BPF_OR", Const, 0, ""},
-		{"BPF_RELEASE", Const, 0, ""},
-		{"BPF_RET", Const, 0, ""},
-		{"BPF_RSH", Const, 0, ""},
-		{"BPF_ST", Const, 0, ""},
-		{"BPF_STX", Const, 0, ""},
-		{"BPF_SUB", Const, 0, ""},
-		{"BPF_TAX", Const, 0, ""},
-		{"BPF_TXA", Const, 0, ""},
-		{"BPF_T_BINTIME", Const, 1, ""},
-		{"BPF_T_BINTIME_FAST", Const, 1, ""},
-		{"BPF_T_BINTIME_MONOTONIC", Const, 1, ""},
-		{"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1, ""},
-		{"BPF_T_FAST", Const, 1, ""},
-		{"BPF_T_FLAG_MASK", Const, 1, ""},
-		{"BPF_T_FORMAT_MASK", Const, 1, ""},
-		{"BPF_T_MICROTIME", Const, 1, ""},
-		{"BPF_T_MICROTIME_FAST", Const, 1, ""},
-		{"BPF_T_MICROTIME_MONOTONIC", Const, 1, ""},
-		{"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1, ""},
-		{"BPF_T_MONOTONIC", Const, 1, ""},
-		{"BPF_T_MONOTONIC_FAST", Const, 1, ""},
-		{"BPF_T_NANOTIME", Const, 1, ""},
-		{"BPF_T_NANOTIME_FAST", Const, 1, ""},
-		{"BPF_T_NANOTIME_MONOTONIC", Const, 1, ""},
-		{"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1, ""},
-		{"BPF_T_NONE", Const, 1, ""},
-		{"BPF_T_NORMAL", Const, 1, ""},
-		{"BPF_W", Const, 0, ""},
-		{"BPF_X", Const, 0, ""},
-		{"BRKINT", Const, 0, ""},
-		{"Bind", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
-		{"BindToDevice", Func, 0, "func(fd int, device string) (err error)"},
-		{"BpfBuflen", Func, 0, ""},
-		{"BpfDatalink", Func, 0, ""},
-		{"BpfHdr", Type, 0, ""},
-		{"BpfHdr.Caplen", Field, 0, ""},
-		{"BpfHdr.Datalen", Field, 0, ""},
-		{"BpfHdr.Hdrlen", Field, 0, ""},
-		{"BpfHdr.Pad_cgo_0", Field, 0, ""},
-		{"BpfHdr.Tstamp", Field, 0, ""},
-		{"BpfHeadercmpl", Func, 0, ""},
-		{"BpfInsn", Type, 0, ""},
-		{"BpfInsn.Code", Field, 0, ""},
-		{"BpfInsn.Jf", Field, 0, ""},
-		{"BpfInsn.Jt", Field, 0, ""},
-		{"BpfInsn.K", Field, 0, ""},
-		{"BpfInterface", Func, 0, ""},
-		{"BpfJump", Func, 0, ""},
-		{"BpfProgram", Type, 0, ""},
-		{"BpfProgram.Insns", Field, 0, ""},
-		{"BpfProgram.Len", Field, 0, ""},
-		{"BpfProgram.Pad_cgo_0", Field, 0, ""},
-		{"BpfStat", Type, 0, ""},
-		{"BpfStat.Capt", Field, 2, ""},
-		{"BpfStat.Drop", Field, 0, ""},
-		{"BpfStat.Padding", Field, 2, ""},
-		{"BpfStat.Recv", Field, 0, ""},
-		{"BpfStats", Func, 0, ""},
-		{"BpfStmt", Func, 0, ""},
-		{"BpfTimeout", Func, 0, ""},
-		{"BpfTimeval", Type, 2, ""},
-		{"BpfTimeval.Sec", Field, 2, ""},
-		{"BpfTimeval.Usec", Field, 2, ""},
-		{"BpfVersion", Type, 0, ""},
-		{"BpfVersion.Major", Field, 0, ""},
-		{"BpfVersion.Minor", Field, 0, ""},
-		{"BpfZbuf", Type, 0, ""},
-		{"BpfZbuf.Bufa", Field, 0, ""},
-		{"BpfZbuf.Bufb", Field, 0, ""},
-		{"BpfZbuf.Buflen", Field, 0, ""},
-		{"BpfZbufHeader", Type, 0, ""},
-		{"BpfZbufHeader.Kernel_gen", Field, 0, ""},
-		{"BpfZbufHeader.Kernel_len", Field, 0, ""},
-		{"BpfZbufHeader.User_gen", Field, 0, ""},
-		{"BpfZbufHeader.X_bzh_pad", Field, 0, ""},
-		{"ByHandleFileInformation", Type, 0, ""},
-		{"ByHandleFileInformation.CreationTime", Field, 0, ""},
-		{"ByHandleFileInformation.FileAttributes", Field, 0, ""},
-		{"ByHandleFileInformation.FileIndexHigh", Field, 0, ""},
-		{"ByHandleFileInformation.FileIndexLow", Field, 0, ""},
-		{"ByHandleFileInformation.FileSizeHigh", Field, 0, ""},
-		{"ByHandleFileInformation.FileSizeLow", Field, 0, ""},
-		{"ByHandleFileInformation.LastAccessTime", Field, 0, ""},
-		{"ByHandleFileInformation.LastWriteTime", Field, 0, ""},
-		{"ByHandleFileInformation.NumberOfLinks", Field, 0, ""},
-		{"ByHandleFileInformation.VolumeSerialNumber", Field, 0, ""},
-		{"BytePtrFromString", Func, 1, "func(s string) (*byte, error)"},
-		{"ByteSliceFromString", Func, 1, "func(s string) ([]byte, error)"},
-		{"CCR0_FLUSH", Const, 1, ""},
-		{"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_BASE", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_EV", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_NT_AUTH", Const, 0, ""},
-		{"CERT_CHAIN_POLICY_SSL", Const, 0, ""},
-		{"CERT_E_CN_NO_MATCH", Const, 0, ""},
-		{"CERT_E_EXPIRED", Const, 0, ""},
-		{"CERT_E_PURPOSE", Const, 0, ""},
-		{"CERT_E_ROLE", Const, 0, ""},
-		{"CERT_E_UNTRUSTEDROOT", Const, 0, ""},
-		{"CERT_STORE_ADD_ALWAYS", Const, 0, ""},
-		{"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0, ""},
-		{"CERT_STORE_PROV_MEMORY", Const, 0, ""},
-		{"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0, ""},
-		{"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0, ""},
-		{"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0, ""},
-		{"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0, ""},
-		{"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0, ""},
-		{"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0, ""},
-		{"CERT_TRUST_INVALID_EXTENSION", Const, 0, ""},
-		{"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0, ""},
-		{"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0, ""},
-		{"CERT_TRUST_IS_CYCLIC", Const, 0, ""},
-		{"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0, ""},
-		{"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0, ""},
-		{"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0, ""},
-		{"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0, ""},
-		{"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0, ""},
-		{"CERT_TRUST_IS_REVOKED", Const, 0, ""},
-		{"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0, ""},
-		{"CERT_TRUST_NO_ERROR", Const, 0, ""},
-		{"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0, ""},
-		{"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0, ""},
-		{"CFLUSH", Const, 1, ""},
-		{"CLOCAL", Const, 0, ""},
-		{"CLONE_CHILD_CLEARTID", Const, 2, ""},
-		{"CLONE_CHILD_SETTID", Const, 2, ""},
-		{"CLONE_CLEAR_SIGHAND", Const, 20, ""},
-		{"CLONE_CSIGNAL", Const, 3, ""},
-		{"CLONE_DETACHED", Const, 2, ""},
-		{"CLONE_FILES", Const, 2, ""},
-		{"CLONE_FS", Const, 2, ""},
-		{"CLONE_INTO_CGROUP", Const, 20, ""},
-		{"CLONE_IO", Const, 2, ""},
-		{"CLONE_NEWCGROUP", Const, 20, ""},
-		{"CLONE_NEWIPC", Const, 2, ""},
-		{"CLONE_NEWNET", Const, 2, ""},
-		{"CLONE_NEWNS", Const, 2, ""},
-		{"CLONE_NEWPID", Const, 2, ""},
-		{"CLONE_NEWTIME", Const, 20, ""},
-		{"CLONE_NEWUSER", Const, 2, ""},
-		{"CLONE_NEWUTS", Const, 2, ""},
-		{"CLONE_PARENT", Const, 2, ""},
-		{"CLONE_PARENT_SETTID", Const, 2, ""},
-		{"CLONE_PID", Const, 3, ""},
-		{"CLONE_PIDFD", Const, 20, ""},
-		{"CLONE_PTRACE", Const, 2, ""},
-		{"CLONE_SETTLS", Const, 2, ""},
-		{"CLONE_SIGHAND", Const, 2, ""},
-		{"CLONE_SYSVSEM", Const, 2, ""},
-		{"CLONE_THREAD", Const, 2, ""},
-		{"CLONE_UNTRACED", Const, 2, ""},
-		{"CLONE_VFORK", Const, 2, ""},
-		{"CLONE_VM", Const, 2, ""},
-		{"CPUID_CFLUSH", Const, 1, ""},
-		{"CREAD", Const, 0, ""},
-		{"CREATE_ALWAYS", Const, 0, ""},
-		{"CREATE_NEW", Const, 0, ""},
-		{"CREATE_NEW_PROCESS_GROUP", Const, 1, ""},
-		{"CREATE_UNICODE_ENVIRONMENT", Const, 0, ""},
-		{"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0, ""},
-		{"CRYPT_DELETEKEYSET", Const, 0, ""},
-		{"CRYPT_MACHINE_KEYSET", Const, 0, ""},
-		{"CRYPT_NEWKEYSET", Const, 0, ""},
-		{"CRYPT_SILENT", Const, 0, ""},
-		{"CRYPT_VERIFYCONTEXT", Const, 0, ""},
-		{"CS5", Const, 0, ""},
-		{"CS6", Const, 0, ""},
-		{"CS7", Const, 0, ""},
-		{"CS8", Const, 0, ""},
-		{"CSIZE", Const, 0, ""},
-		{"CSTART", Const, 1, ""},
-		{"CSTATUS", Const, 1, ""},
-		{"CSTOP", Const, 1, ""},
-		{"CSTOPB", Const, 0, ""},
-		{"CSUSP", Const, 1, ""},
-		{"CTL_MAXNAME", Const, 0, ""},
-		{"CTL_NET", Const, 0, ""},
-		{"CTL_QUERY", Const, 1, ""},
-		{"CTRL_BREAK_EVENT", Const, 1, ""},
-		{"CTRL_CLOSE_EVENT", Const, 14, ""},
-		{"CTRL_C_EVENT", Const, 1, ""},
-		{"CTRL_LOGOFF_EVENT", Const, 14, ""},
-		{"CTRL_SHUTDOWN_EVENT", Const, 14, ""},
-		{"CancelIo", Func, 0, ""},
-		{"CancelIoEx", Func, 1, ""},
-		{"CertAddCertificateContextToStore", Func, 0, ""},
-		{"CertChainContext", Type, 0, ""},
-		{"CertChainContext.ChainCount", Field, 0, ""},
-		{"CertChainContext.Chains", Field, 0, ""},
-		{"CertChainContext.HasRevocationFreshnessTime", Field, 0, ""},
-		{"CertChainContext.LowerQualityChainCount", Field, 0, ""},
-		{"CertChainContext.LowerQualityChains", Field, 0, ""},
-		{"CertChainContext.RevocationFreshnessTime", Field, 0, ""},
-		{"CertChainContext.Size", Field, 0, ""},
-		{"CertChainContext.TrustStatus", Field, 0, ""},
-		{"CertChainElement", Type, 0, ""},
-		{"CertChainElement.ApplicationUsage", Field, 0, ""},
-		{"CertChainElement.CertContext", Field, 0, ""},
-		{"CertChainElement.ExtendedErrorInfo", Field, 0, ""},
-		{"CertChainElement.IssuanceUsage", Field, 0, ""},
-		{"CertChainElement.RevocationInfo", Field, 0, ""},
-		{"CertChainElement.Size", Field, 0, ""},
-		{"CertChainElement.TrustStatus", Field, 0, ""},
-		{"CertChainPara", Type, 0, ""},
-		{"CertChainPara.CacheResync", Field, 0, ""},
-		{"CertChainPara.CheckRevocationFreshnessTime", Field, 0, ""},
-		{"CertChainPara.RequestedUsage", Field, 0, ""},
-		{"CertChainPara.RequstedIssuancePolicy", Field, 0, ""},
-		{"CertChainPara.RevocationFreshnessTime", Field, 0, ""},
-		{"CertChainPara.Size", Field, 0, ""},
-		{"CertChainPara.URLRetrievalTimeout", Field, 0, ""},
-		{"CertChainPolicyPara", Type, 0, ""},
-		{"CertChainPolicyPara.ExtraPolicyPara", Field, 0, ""},
-		{"CertChainPolicyPara.Flags", Field, 0, ""},
-		{"CertChainPolicyPara.Size", Field, 0, ""},
-		{"CertChainPolicyStatus", Type, 0, ""},
-		{"CertChainPolicyStatus.ChainIndex", Field, 0, ""},
-		{"CertChainPolicyStatus.ElementIndex", Field, 0, ""},
-		{"CertChainPolicyStatus.Error", Field, 0, ""},
-		{"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0, ""},
-		{"CertChainPolicyStatus.Size", Field, 0, ""},
-		{"CertCloseStore", Func, 0, ""},
-		{"CertContext", Type, 0, ""},
-		{"CertContext.CertInfo", Field, 0, ""},
-		{"CertContext.EncodedCert", Field, 0, ""},
-		{"CertContext.EncodingType", Field, 0, ""},
-		{"CertContext.Length", Field, 0, ""},
-		{"CertContext.Store", Field, 0, ""},
-		{"CertCreateCertificateContext", Func, 0, ""},
-		{"CertEnhKeyUsage", Type, 0, ""},
-		{"CertEnhKeyUsage.Length", Field, 0, ""},
-		{"CertEnhKeyUsage.UsageIdentifiers", Field, 0, ""},
-		{"CertEnumCertificatesInStore", Func, 0, ""},
-		{"CertFreeCertificateChain", Func, 0, ""},
-		{"CertFreeCertificateContext", Func, 0, ""},
-		{"CertGetCertificateChain", Func, 0, ""},
-		{"CertInfo", Type, 11, ""},
-		{"CertOpenStore", Func, 0, ""},
-		{"CertOpenSystemStore", Func, 0, ""},
-		{"CertRevocationCrlInfo", Type, 11, ""},
-		{"CertRevocationInfo", Type, 0, ""},
-		{"CertRevocationInfo.CrlInfo", Field, 0, ""},
-		{"CertRevocationInfo.FreshnessTime", Field, 0, ""},
-		{"CertRevocationInfo.HasFreshnessTime", Field, 0, ""},
-		{"CertRevocationInfo.OidSpecificInfo", Field, 0, ""},
-		{"CertRevocationInfo.RevocationOid", Field, 0, ""},
-		{"CertRevocationInfo.RevocationResult", Field, 0, ""},
-		{"CertRevocationInfo.Size", Field, 0, ""},
-		{"CertSimpleChain", Type, 0, ""},
-		{"CertSimpleChain.Elements", Field, 0, ""},
-		{"CertSimpleChain.HasRevocationFreshnessTime", Field, 0, ""},
-		{"CertSimpleChain.NumElements", Field, 0, ""},
-		{"CertSimpleChain.RevocationFreshnessTime", Field, 0, ""},
-		{"CertSimpleChain.Size", Field, 0, ""},
-		{"CertSimpleChain.TrustListInfo", Field, 0, ""},
-		{"CertSimpleChain.TrustStatus", Field, 0, ""},
-		{"CertTrustListInfo", Type, 11, ""},
-		{"CertTrustStatus", Type, 0, ""},
-		{"CertTrustStatus.ErrorStatus", Field, 0, ""},
-		{"CertTrustStatus.InfoStatus", Field, 0, ""},
-		{"CertUsageMatch", Type, 0, ""},
-		{"CertUsageMatch.Type", Field, 0, ""},
-		{"CertUsageMatch.Usage", Field, 0, ""},
-		{"CertVerifyCertificateChainPolicy", Func, 0, ""},
-		{"Chdir", Func, 0, "func(path string) (err error)"},
-		{"CheckBpfVersion", Func, 0, ""},
-		{"Chflags", Func, 0, ""},
-		{"Chmod", Func, 0, "func(path string, mode uint32) (err error)"},
-		{"Chown", Func, 0, "func(path string, uid int, gid int) (err error)"},
-		{"Chroot", Func, 0, "func(path string) (err error)"},
-		{"Clearenv", Func, 0, "func()"},
-		{"Close", Func, 0, "func(fd int) (err error)"},
-		{"CloseHandle", Func, 0, ""},
-		{"CloseOnExec", Func, 0, "func(fd int)"},
-		{"Closesocket", Func, 0, ""},
-		{"CmsgLen", Func, 0, "func(datalen int) int"},
-		{"CmsgSpace", Func, 0, "func(datalen int) int"},
-		{"Cmsghdr", Type, 0, ""},
-		{"Cmsghdr.Len", Field, 0, ""},
-		{"Cmsghdr.Level", Field, 0, ""},
-		{"Cmsghdr.Type", Field, 0, ""},
-		{"Cmsghdr.X__cmsg_data", Field, 0, ""},
-		{"CommandLineToArgv", Func, 0, ""},
-		{"ComputerName", Func, 0, ""},
-		{"Conn", Type, 9, ""},
-		{"Connect", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
-		{"ConnectEx", Func, 1, ""},
-		{"ConvertSidToStringSid", Func, 0, ""},
-		{"ConvertStringSidToSid", Func, 0, ""},
-		{"CopySid", Func, 0, ""},
-		{"Creat", Func, 0, "func(path string, mode uint32) (fd int, err error)"},
-		{"CreateDirectory", Func, 0, ""},
-		{"CreateFile", Func, 0, ""},
-		{"CreateFileMapping", Func, 0, ""},
-		{"CreateHardLink", Func, 4, ""},
-		{"CreateIoCompletionPort", Func, 0, ""},
-		{"CreatePipe", Func, 0, ""},
-		{"CreateProcess", Func, 0, ""},
-		{"CreateProcessAsUser", Func, 10, ""},
-		{"CreateSymbolicLink", Func, 4, ""},
-		{"CreateToolhelp32Snapshot", Func, 4, ""},
-		{"Credential", Type, 0, ""},
-		{"Credential.Gid", Field, 0, ""},
-		{"Credential.Groups", Field, 0, ""},
-		{"Credential.NoSetGroups", Field, 9, ""},
-		{"Credential.Uid", Field, 0, ""},
-		{"CryptAcquireContext", Func, 0, ""},
-		{"CryptGenRandom", Func, 0, ""},
-		{"CryptReleaseContext", Func, 0, ""},
-		{"DIOCBSFLUSH", Const, 1, ""},
-		{"DIOCOSFPFLUSH", Const, 1, ""},
-		{"DLL", Type, 0, ""},
-		{"DLL.Handle", Field, 0, ""},
-		{"DLL.Name", Field, 0, ""},
-		{"DLLError", Type, 0, ""},
-		{"DLLError.Err", Field, 0, ""},
-		{"DLLError.Msg", Field, 0, ""},
-		{"DLLError.ObjName", Field, 0, ""},
-		{"DLT_A429", Const, 0, ""},
-		{"DLT_A653_ICM", Const, 0, ""},
-		{"DLT_AIRONET_HEADER", Const, 0, ""},
-		{"DLT_AOS", Const, 1, ""},
-		{"DLT_APPLE_IP_OVER_IEEE1394", Const, 0, ""},
-		{"DLT_ARCNET", Const, 0, ""},
-		{"DLT_ARCNET_LINUX", Const, 0, ""},
-		{"DLT_ATM_CLIP", Const, 0, ""},
-		{"DLT_ATM_RFC1483", Const, 0, ""},
-		{"DLT_AURORA", Const, 0, ""},
-		{"DLT_AX25", Const, 0, ""},
-		{"DLT_AX25_KISS", Const, 0, ""},
-		{"DLT_BACNET_MS_TP", Const, 0, ""},
-		{"DLT_BLUETOOTH_HCI_H4", Const, 0, ""},
-		{"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0, ""},
-		{"DLT_CAN20B", Const, 0, ""},
-		{"DLT_CAN_SOCKETCAN", Const, 1, ""},
-		{"DLT_CHAOS", Const, 0, ""},
-		{"DLT_CHDLC", Const, 0, ""},
-		{"DLT_CISCO_IOS", Const, 0, ""},
-		{"DLT_C_HDLC", Const, 0, ""},
-		{"DLT_C_HDLC_WITH_DIR", Const, 0, ""},
-		{"DLT_DBUS", Const, 1, ""},
-		{"DLT_DECT", Const, 1, ""},
-		{"DLT_DOCSIS", Const, 0, ""},
-		{"DLT_DVB_CI", Const, 1, ""},
-		{"DLT_ECONET", Const, 0, ""},
-		{"DLT_EN10MB", Const, 0, ""},
-		{"DLT_EN3MB", Const, 0, ""},
-		{"DLT_ENC", Const, 0, ""},
-		{"DLT_ERF", Const, 0, ""},
-		{"DLT_ERF_ETH", Const, 0, ""},
-		{"DLT_ERF_POS", Const, 0, ""},
-		{"DLT_FC_2", Const, 1, ""},
-		{"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1, ""},
-		{"DLT_FDDI", Const, 0, ""},
-		{"DLT_FLEXRAY", Const, 0, ""},
-		{"DLT_FRELAY", Const, 0, ""},
-		{"DLT_FRELAY_WITH_DIR", Const, 0, ""},
-		{"DLT_GCOM_SERIAL", Const, 0, ""},
-		{"DLT_GCOM_T1E1", Const, 0, ""},
-		{"DLT_GPF_F", Const, 0, ""},
-		{"DLT_GPF_T", Const, 0, ""},
-		{"DLT_GPRS_LLC", Const, 0, ""},
-		{"DLT_GSMTAP_ABIS", Const, 1, ""},
-		{"DLT_GSMTAP_UM", Const, 1, ""},
-		{"DLT_HDLC", Const, 1, ""},
-		{"DLT_HHDLC", Const, 0, ""},
-		{"DLT_HIPPI", Const, 1, ""},
-		{"DLT_IBM_SN", Const, 0, ""},
-		{"DLT_IBM_SP", Const, 0, ""},
-		{"DLT_IEEE802", Const, 0, ""},
-		{"DLT_IEEE802_11", Const, 0, ""},
-		{"DLT_IEEE802_11_RADIO", Const, 0, ""},
-		{"DLT_IEEE802_11_RADIO_AVS", Const, 0, ""},
-		{"DLT_IEEE802_15_4", Const, 0, ""},
-		{"DLT_IEEE802_15_4_LINUX", Const, 0, ""},
-		{"DLT_IEEE802_15_4_NOFCS", Const, 1, ""},
-		{"DLT_IEEE802_15_4_NONASK_PHY", Const, 0, ""},
-		{"DLT_IEEE802_16_MAC_CPS", Const, 0, ""},
-		{"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0, ""},
-		{"DLT_IPFILTER", Const, 0, ""},
-		{"DLT_IPMB", Const, 0, ""},
-		{"DLT_IPMB_LINUX", Const, 0, ""},
-		{"DLT_IPNET", Const, 1, ""},
-		{"DLT_IPOIB", Const, 1, ""},
-		{"DLT_IPV4", Const, 1, ""},
-		{"DLT_IPV6", Const, 1, ""},
-		{"DLT_IP_OVER_FC", Const, 0, ""},
-		{"DLT_JUNIPER_ATM1", Const, 0, ""},
-		{"DLT_JUNIPER_ATM2", Const, 0, ""},
-		{"DLT_JUNIPER_ATM_CEMIC", Const, 1, ""},
-		{"DLT_JUNIPER_CHDLC", Const, 0, ""},
-		{"DLT_JUNIPER_ES", Const, 0, ""},
-		{"DLT_JUNIPER_ETHER", Const, 0, ""},
-		{"DLT_JUNIPER_FIBRECHANNEL", Const, 1, ""},
-		{"DLT_JUNIPER_FRELAY", Const, 0, ""},
-		{"DLT_JUNIPER_GGSN", Const, 0, ""},
-		{"DLT_JUNIPER_ISM", Const, 0, ""},
-		{"DLT_JUNIPER_MFR", Const, 0, ""},
-		{"DLT_JUNIPER_MLFR", Const, 0, ""},
-		{"DLT_JUNIPER_MLPPP", Const, 0, ""},
-		{"DLT_JUNIPER_MONITOR", Const, 0, ""},
-		{"DLT_JUNIPER_PIC_PEER", Const, 0, ""},
-		{"DLT_JUNIPER_PPP", Const, 0, ""},
-		{"DLT_JUNIPER_PPPOE", Const, 0, ""},
-		{"DLT_JUNIPER_PPPOE_ATM", Const, 0, ""},
-		{"DLT_JUNIPER_SERVICES", Const, 0, ""},
-		{"DLT_JUNIPER_SRX_E2E", Const, 1, ""},
-		{"DLT_JUNIPER_ST", Const, 0, ""},
-		{"DLT_JUNIPER_VP", Const, 0, ""},
-		{"DLT_JUNIPER_VS", Const, 1, ""},
-		{"DLT_LAPB_WITH_DIR", Const, 0, ""},
-		{"DLT_LAPD", Const, 0, ""},
-		{"DLT_LIN", Const, 0, ""},
-		{"DLT_LINUX_EVDEV", Const, 1, ""},
-		{"DLT_LINUX_IRDA", Const, 0, ""},
-		{"DLT_LINUX_LAPD", Const, 0, ""},
-		{"DLT_LINUX_PPP_WITHDIRECTION", Const, 0, ""},
-		{"DLT_LINUX_SLL", Const, 0, ""},
-		{"DLT_LOOP", Const, 0, ""},
-		{"DLT_LTALK", Const, 0, ""},
-		{"DLT_MATCHING_MAX", Const, 1, ""},
-		{"DLT_MATCHING_MIN", Const, 1, ""},
-		{"DLT_MFR", Const, 0, ""},
-		{"DLT_MOST", Const, 0, ""},
-		{"DLT_MPEG_2_TS", Const, 1, ""},
-		{"DLT_MPLS", Const, 1, ""},
-		{"DLT_MTP2", Const, 0, ""},
-		{"DLT_MTP2_WITH_PHDR", Const, 0, ""},
-		{"DLT_MTP3", Const, 0, ""},
-		{"DLT_MUX27010", Const, 1, ""},
-		{"DLT_NETANALYZER", Const, 1, ""},
-		{"DLT_NETANALYZER_TRANSPARENT", Const, 1, ""},
-		{"DLT_NFC_LLCP", Const, 1, ""},
-		{"DLT_NFLOG", Const, 1, ""},
-		{"DLT_NG40", Const, 1, ""},
-		{"DLT_NULL", Const, 0, ""},
-		{"DLT_PCI_EXP", Const, 0, ""},
-		{"DLT_PFLOG", Const, 0, ""},
-		{"DLT_PFSYNC", Const, 0, ""},
-		{"DLT_PPI", Const, 0, ""},
-		{"DLT_PPP", Const, 0, ""},
-		{"DLT_PPP_BSDOS", Const, 0, ""},
-		{"DLT_PPP_ETHER", Const, 0, ""},
-		{"DLT_PPP_PPPD", Const, 0, ""},
-		{"DLT_PPP_SERIAL", Const, 0, ""},
-		{"DLT_PPP_WITH_DIR", Const, 0, ""},
-		{"DLT_PPP_WITH_DIRECTION", Const, 0, ""},
-		{"DLT_PRISM_HEADER", Const, 0, ""},
-		{"DLT_PRONET", Const, 0, ""},
-		{"DLT_RAIF1", Const, 0, ""},
-		{"DLT_RAW", Const, 0, ""},
-		{"DLT_RAWAF_MASK", Const, 1, ""},
-		{"DLT_RIO", Const, 0, ""},
-		{"DLT_SCCP", Const, 0, ""},
-		{"DLT_SITA", Const, 0, ""},
-		{"DLT_SLIP", Const, 0, ""},
-		{"DLT_SLIP_BSDOS", Const, 0, ""},
-		{"DLT_STANAG_5066_D_PDU", Const, 1, ""},
-		{"DLT_SUNATM", Const, 0, ""},
-		{"DLT_SYMANTEC_FIREWALL", Const, 0, ""},
-		{"DLT_TZSP", Const, 0, ""},
-		{"DLT_USB", Const, 0, ""},
-		{"DLT_USB_LINUX", Const, 0, ""},
-		{"DLT_USB_LINUX_MMAPPED", Const, 1, ""},
-		{"DLT_USER0", Const, 0, ""},
-		{"DLT_USER1", Const, 0, ""},
-		{"DLT_USER10", Const, 0, ""},
-		{"DLT_USER11", Const, 0, ""},
-		{"DLT_USER12", Const, 0, ""},
-		{"DLT_USER13", Const, 0, ""},
-		{"DLT_USER14", Const, 0, ""},
-		{"DLT_USER15", Const, 0, ""},
-		{"DLT_USER2", Const, 0, ""},
-		{"DLT_USER3", Const, 0, ""},
-		{"DLT_USER4", Const, 0, ""},
-		{"DLT_USER5", Const, 0, ""},
-		{"DLT_USER6", Const, 0, ""},
-		{"DLT_USER7", Const, 0, ""},
-		{"DLT_USER8", Const, 0, ""},
-		{"DLT_USER9", Const, 0, ""},
-		{"DLT_WIHART", Const, 1, ""},
-		{"DLT_X2E_SERIAL", Const, 0, ""},
-		{"DLT_X2E_XORAYA", Const, 0, ""},
-		{"DNSMXData", Type, 0, ""},
-		{"DNSMXData.NameExchange", Field, 0, ""},
-		{"DNSMXData.Pad", Field, 0, ""},
-		{"DNSMXData.Preference", Field, 0, ""},
-		{"DNSPTRData", Type, 0, ""},
-		{"DNSPTRData.Host", Field, 0, ""},
-		{"DNSRecord", Type, 0, ""},
-		{"DNSRecord.Data", Field, 0, ""},
-		{"DNSRecord.Dw", Field, 0, ""},
-		{"DNSRecord.Length", Field, 0, ""},
-		{"DNSRecord.Name", Field, 0, ""},
-		{"DNSRecord.Next", Field, 0, ""},
-		{"DNSRecord.Reserved", Field, 0, ""},
-		{"DNSRecord.Ttl", Field, 0, ""},
-		{"DNSRecord.Type", Field, 0, ""},
-		{"DNSSRVData", Type, 0, ""},
-		{"DNSSRVData.Pad", Field, 0, ""},
-		{"DNSSRVData.Port", Field, 0, ""},
-		{"DNSSRVData.Priority", Field, 0, ""},
-		{"DNSSRVData.Target", Field, 0, ""},
-		{"DNSSRVData.Weight", Field, 0, ""},
-		{"DNSTXTData", Type, 0, ""},
-		{"DNSTXTData.StringArray", Field, 0, ""},
-		{"DNSTXTData.StringCount", Field, 0, ""},
-		{"DNS_INFO_NO_RECORDS", Const, 4, ""},
-		{"DNS_TYPE_A", Const, 0, ""},
-		{"DNS_TYPE_A6", Const, 0, ""},
-		{"DNS_TYPE_AAAA", Const, 0, ""},
-		{"DNS_TYPE_ADDRS", Const, 0, ""},
-		{"DNS_TYPE_AFSDB", Const, 0, ""},
-		{"DNS_TYPE_ALL", Const, 0, ""},
-		{"DNS_TYPE_ANY", Const, 0, ""},
-		{"DNS_TYPE_ATMA", Const, 0, ""},
-		{"DNS_TYPE_AXFR", Const, 0, ""},
-		{"DNS_TYPE_CERT", Const, 0, ""},
-		{"DNS_TYPE_CNAME", Const, 0, ""},
-		{"DNS_TYPE_DHCID", Const, 0, ""},
-		{"DNS_TYPE_DNAME", Const, 0, ""},
-		{"DNS_TYPE_DNSKEY", Const, 0, ""},
-		{"DNS_TYPE_DS", Const, 0, ""},
-		{"DNS_TYPE_EID", Const, 0, ""},
-		{"DNS_TYPE_GID", Const, 0, ""},
-		{"DNS_TYPE_GPOS", Const, 0, ""},
-		{"DNS_TYPE_HINFO", Const, 0, ""},
-		{"DNS_TYPE_ISDN", Const, 0, ""},
-		{"DNS_TYPE_IXFR", Const, 0, ""},
-		{"DNS_TYPE_KEY", Const, 0, ""},
-		{"DNS_TYPE_KX", Const, 0, ""},
-		{"DNS_TYPE_LOC", Const, 0, ""},
-		{"DNS_TYPE_MAILA", Const, 0, ""},
-		{"DNS_TYPE_MAILB", Const, 0, ""},
-		{"DNS_TYPE_MB", Const, 0, ""},
-		{"DNS_TYPE_MD", Const, 0, ""},
-		{"DNS_TYPE_MF", Const, 0, ""},
-		{"DNS_TYPE_MG", Const, 0, ""},
-		{"DNS_TYPE_MINFO", Const, 0, ""},
-		{"DNS_TYPE_MR", Const, 0, ""},
-		{"DNS_TYPE_MX", Const, 0, ""},
-		{"DNS_TYPE_NAPTR", Const, 0, ""},
-		{"DNS_TYPE_NBSTAT", Const, 0, ""},
-		{"DNS_TYPE_NIMLOC", Const, 0, ""},
-		{"DNS_TYPE_NS", Const, 0, ""},
-		{"DNS_TYPE_NSAP", Const, 0, ""},
-		{"DNS_TYPE_NSAPPTR", Const, 0, ""},
-		{"DNS_TYPE_NSEC", Const, 0, ""},
-		{"DNS_TYPE_NULL", Const, 0, ""},
-		{"DNS_TYPE_NXT", Const, 0, ""},
-		{"DNS_TYPE_OPT", Const, 0, ""},
-		{"DNS_TYPE_PTR", Const, 0, ""},
-		{"DNS_TYPE_PX", Const, 0, ""},
-		{"DNS_TYPE_RP", Const, 0, ""},
-		{"DNS_TYPE_RRSIG", Const, 0, ""},
-		{"DNS_TYPE_RT", Const, 0, ""},
-		{"DNS_TYPE_SIG", Const, 0, ""},
-		{"DNS_TYPE_SINK", Const, 0, ""},
-		{"DNS_TYPE_SOA", Const, 0, ""},
-		{"DNS_TYPE_SRV", Const, 0, ""},
-		{"DNS_TYPE_TEXT", Const, 0, ""},
-		{"DNS_TYPE_TKEY", Const, 0, ""},
-		{"DNS_TYPE_TSIG", Const, 0, ""},
-		{"DNS_TYPE_UID", Const, 0, ""},
-		{"DNS_TYPE_UINFO", Const, 0, ""},
-		{"DNS_TYPE_UNSPEC", Const, 0, ""},
-		{"DNS_TYPE_WINS", Const, 0, ""},
-		{"DNS_TYPE_WINSR", Const, 0, ""},
-		{"DNS_TYPE_WKS", Const, 0, ""},
-		{"DNS_TYPE_X25", Const, 0, ""},
-		{"DT_BLK", Const, 0, ""},
-		{"DT_CHR", Const, 0, ""},
-		{"DT_DIR", Const, 0, ""},
-		{"DT_FIFO", Const, 0, ""},
-		{"DT_LNK", Const, 0, ""},
-		{"DT_REG", Const, 0, ""},
-		{"DT_SOCK", Const, 0, ""},
-		{"DT_UNKNOWN", Const, 0, ""},
-		{"DT_WHT", Const, 0, ""},
-		{"DUPLICATE_CLOSE_SOURCE", Const, 0, ""},
-		{"DUPLICATE_SAME_ACCESS", Const, 0, ""},
-		{"DeleteFile", Func, 0, ""},
-		{"DetachLsf", Func, 0, "func(fd int) error"},
-		{"DeviceIoControl", Func, 4, ""},
-		{"Dirent", Type, 0, ""},
-		{"Dirent.Fileno", Field, 0, ""},
-		{"Dirent.Ino", Field, 0, ""},
-		{"Dirent.Name", Field, 0, ""},
-		{"Dirent.Namlen", Field, 0, ""},
-		{"Dirent.Off", Field, 0, ""},
-		{"Dirent.Pad0", Field, 12, ""},
-		{"Dirent.Pad1", Field, 12, ""},
-		{"Dirent.Pad_cgo_0", Field, 0, ""},
-		{"Dirent.Reclen", Field, 0, ""},
-		{"Dirent.Seekoff", Field, 0, ""},
-		{"Dirent.Type", Field, 0, ""},
-		{"Dirent.X__d_padding", Field, 3, ""},
-		{"DnsNameCompare", Func, 4, ""},
-		{"DnsQuery", Func, 0, ""},
-		{"DnsRecordListFree", Func, 0, ""},
-		{"DnsSectionAdditional", Const, 4, ""},
-		{"DnsSectionAnswer", Const, 4, ""},
-		{"DnsSectionAuthority", Const, 4, ""},
-		{"DnsSectionQuestion", Const, 4, ""},
-		{"Dup", Func, 0, "func(oldfd int) (fd int, err error)"},
-		{"Dup2", Func, 0, "func(oldfd int, newfd int) (err error)"},
-		{"Dup3", Func, 2, "func(oldfd int, newfd int, flags int) (err error)"},
-		{"DuplicateHandle", Func, 0, ""},
-		{"E2BIG", Const, 0, ""},
-		{"EACCES", Const, 0, ""},
-		{"EADDRINUSE", Const, 0, ""},
-		{"EADDRNOTAVAIL", Const, 0, ""},
-		{"EADV", Const, 0, ""},
-		{"EAFNOSUPPORT", Const, 0, ""},
-		{"EAGAIN", Const, 0, ""},
-		{"EALREADY", Const, 0, ""},
-		{"EAUTH", Const, 0, ""},
-		{"EBADARCH", Const, 0, ""},
-		{"EBADE", Const, 0, ""},
-		{"EBADEXEC", Const, 0, ""},
-		{"EBADF", Const, 0, ""},
-		{"EBADFD", Const, 0, ""},
-		{"EBADMACHO", Const, 0, ""},
-		{"EBADMSG", Const, 0, ""},
-		{"EBADR", Const, 0, ""},
-		{"EBADRPC", Const, 0, ""},
-		{"EBADRQC", Const, 0, ""},
-		{"EBADSLT", Const, 0, ""},
-		{"EBFONT", Const, 0, ""},
-		{"EBUSY", Const, 0, ""},
-		{"ECANCELED", Const, 0, ""},
-		{"ECAPMODE", Const, 1, ""},
-		{"ECHILD", Const, 0, ""},
-		{"ECHO", Const, 0, ""},
-		{"ECHOCTL", Const, 0, ""},
-		{"ECHOE", Const, 0, ""},
-		{"ECHOK", Const, 0, ""},
-		{"ECHOKE", Const, 0, ""},
-		{"ECHONL", Const, 0, ""},
-		{"ECHOPRT", Const, 0, ""},
-		{"ECHRNG", Const, 0, ""},
-		{"ECOMM", Const, 0, ""},
-		{"ECONNABORTED", Const, 0, ""},
-		{"ECONNREFUSED", Const, 0, ""},
-		{"ECONNRESET", Const, 0, ""},
-		{"EDEADLK", Const, 0, ""},
-		{"EDEADLOCK", Const, 0, ""},
-		{"EDESTADDRREQ", Const, 0, ""},
-		{"EDEVERR", Const, 0, ""},
-		{"EDOM", Const, 0, ""},
-		{"EDOOFUS", Const, 0, ""},
-		{"EDOTDOT", Const, 0, ""},
-		{"EDQUOT", Const, 0, ""},
-		{"EEXIST", Const, 0, ""},
-		{"EFAULT", Const, 0, ""},
-		{"EFBIG", Const, 0, ""},
-		{"EFER_LMA", Const, 1, ""},
-		{"EFER_LME", Const, 1, ""},
-		{"EFER_NXE", Const, 1, ""},
-		{"EFER_SCE", Const, 1, ""},
-		{"EFTYPE", Const, 0, ""},
-		{"EHOSTDOWN", Const, 0, ""},
-		{"EHOSTUNREACH", Const, 0, ""},
-		{"EHWPOISON", Const, 0, ""},
-		{"EIDRM", Const, 0, ""},
-		{"EILSEQ", Const, 0, ""},
-		{"EINPROGRESS", Const, 0, ""},
-		{"EINTR", Const, 0, ""},
-		{"EINVAL", Const, 0, ""},
-		{"EIO", Const, 0, ""},
-		{"EIPSEC", Const, 1, ""},
-		{"EISCONN", Const, 0, ""},
-		{"EISDIR", Const, 0, ""},
-		{"EISNAM", Const, 0, ""},
-		{"EKEYEXPIRED", Const, 0, ""},
-		{"EKEYREJECTED", Const, 0, ""},
-		{"EKEYREVOKED", Const, 0, ""},
-		{"EL2HLT", Const, 0, ""},
-		{"EL2NSYNC", Const, 0, ""},
-		{"EL3HLT", Const, 0, ""},
-		{"EL3RST", Const, 0, ""},
-		{"ELAST", Const, 0, ""},
-		{"ELF_NGREG", Const, 0, ""},
-		{"ELF_PRARGSZ", Const, 0, ""},
-		{"ELIBACC", Const, 0, ""},
-		{"ELIBBAD", Const, 0, ""},
-		{"ELIBEXEC", Const, 0, ""},
-		{"ELIBMAX", Const, 0, ""},
-		{"ELIBSCN", Const, 0, ""},
-		{"ELNRNG", Const, 0, ""},
-		{"ELOOP", Const, 0, ""},
-		{"EMEDIUMTYPE", Const, 0, ""},
-		{"EMFILE", Const, 0, ""},
-		{"EMLINK", Const, 0, ""},
-		{"EMSGSIZE", Const, 0, ""},
-		{"EMT_TAGOVF", Const, 1, ""},
-		{"EMULTIHOP", Const, 0, ""},
-		{"EMUL_ENABLED", Const, 1, ""},
-		{"EMUL_LINUX", Const, 1, ""},
-		{"EMUL_LINUX32", Const, 1, ""},
-		{"EMUL_MAXID", Const, 1, ""},
-		{"EMUL_NATIVE", Const, 1, ""},
-		{"ENAMETOOLONG", Const, 0, ""},
-		{"ENAVAIL", Const, 0, ""},
-		{"ENDRUNDISC", Const, 1, ""},
-		{"ENEEDAUTH", Const, 0, ""},
-		{"ENETDOWN", Const, 0, ""},
-		{"ENETRESET", Const, 0, ""},
-		{"ENETUNREACH", Const, 0, ""},
-		{"ENFILE", Const, 0, ""},
-		{"ENOANO", Const, 0, ""},
-		{"ENOATTR", Const, 0, ""},
-		{"ENOBUFS", Const, 0, ""},
-		{"ENOCSI", Const, 0, ""},
-		{"ENODATA", Const, 0, ""},
-		{"ENODEV", Const, 0, ""},
-		{"ENOENT", Const, 0, ""},
-		{"ENOEXEC", Const, 0, ""},
-		{"ENOKEY", Const, 0, ""},
-		{"ENOLCK", Const, 0, ""},
-		{"ENOLINK", Const, 0, ""},
-		{"ENOMEDIUM", Const, 0, ""},
-		{"ENOMEM", Const, 0, ""},
-		{"ENOMSG", Const, 0, ""},
-		{"ENONET", Const, 0, ""},
-		{"ENOPKG", Const, 0, ""},
-		{"ENOPOLICY", Const, 0, ""},
-		{"ENOPROTOOPT", Const, 0, ""},
-		{"ENOSPC", Const, 0, ""},
-		{"ENOSR", Const, 0, ""},
-		{"ENOSTR", Const, 0, ""},
-		{"ENOSYS", Const, 0, ""},
-		{"ENOTBLK", Const, 0, ""},
-		{"ENOTCAPABLE", Const, 0, ""},
-		{"ENOTCONN", Const, 0, ""},
-		{"ENOTDIR", Const, 0, ""},
-		{"ENOTEMPTY", Const, 0, ""},
-		{"ENOTNAM", Const, 0, ""},
-		{"ENOTRECOVERABLE", Const, 0, ""},
-		{"ENOTSOCK", Const, 0, ""},
-		{"ENOTSUP", Const, 0, ""},
-		{"ENOTTY", Const, 0, ""},
-		{"ENOTUNIQ", Const, 0, ""},
-		{"ENXIO", Const, 0, ""},
-		{"EN_SW_CTL_INF", Const, 1, ""},
-		{"EN_SW_CTL_PREC", Const, 1, ""},
-		{"EN_SW_CTL_ROUND", Const, 1, ""},
-		{"EN_SW_DATACHAIN", Const, 1, ""},
-		{"EN_SW_DENORM", Const, 1, ""},
-		{"EN_SW_INVOP", Const, 1, ""},
-		{"EN_SW_OVERFLOW", Const, 1, ""},
-		{"EN_SW_PRECLOSS", Const, 1, ""},
-		{"EN_SW_UNDERFLOW", Const, 1, ""},
-		{"EN_SW_ZERODIV", Const, 1, ""},
-		{"EOPNOTSUPP", Const, 0, ""},
-		{"EOVERFLOW", Const, 0, ""},
-		{"EOWNERDEAD", Const, 0, ""},
-		{"EPERM", Const, 0, ""},
-		{"EPFNOSUPPORT", Const, 0, ""},
-		{"EPIPE", Const, 0, ""},
-		{"EPOLLERR", Const, 0, ""},
-		{"EPOLLET", Const, 0, ""},
-		{"EPOLLHUP", Const, 0, ""},
-		{"EPOLLIN", Const, 0, ""},
-		{"EPOLLMSG", Const, 0, ""},
-		{"EPOLLONESHOT", Const, 0, ""},
-		{"EPOLLOUT", Const, 0, ""},
-		{"EPOLLPRI", Const, 0, ""},
-		{"EPOLLRDBAND", Const, 0, ""},
-		{"EPOLLRDHUP", Const, 0, ""},
-		{"EPOLLRDNORM", Const, 0, ""},
-		{"EPOLLWRBAND", Const, 0, ""},
-		{"EPOLLWRNORM", Const, 0, ""},
-		{"EPOLL_CLOEXEC", Const, 0, ""},
-		{"EPOLL_CTL_ADD", Const, 0, ""},
-		{"EPOLL_CTL_DEL", Const, 0, ""},
-		{"EPOLL_CTL_MOD", Const, 0, ""},
-		{"EPOLL_NONBLOCK", Const, 0, ""},
-		{"EPROCLIM", Const, 0, ""},
-		{"EPROCUNAVAIL", Const, 0, ""},
-		{"EPROGMISMATCH", Const, 0, ""},
-		{"EPROGUNAVAIL", Const, 0, ""},
-		{"EPROTO", Const, 0, ""},
-		{"EPROTONOSUPPORT", Const, 0, ""},
-		{"EPROTOTYPE", Const, 0, ""},
-		{"EPWROFF", Const, 0, ""},
-		{"EQFULL", Const, 16, ""},
-		{"ERANGE", Const, 0, ""},
-		{"EREMCHG", Const, 0, ""},
-		{"EREMOTE", Const, 0, ""},
-		{"EREMOTEIO", Const, 0, ""},
-		{"ERESTART", Const, 0, ""},
-		{"ERFKILL", Const, 0, ""},
-		{"EROFS", Const, 0, ""},
-		{"ERPCMISMATCH", Const, 0, ""},
-		{"ERROR_ACCESS_DENIED", Const, 0, ""},
-		{"ERROR_ALREADY_EXISTS", Const, 0, ""},
-		{"ERROR_BROKEN_PIPE", Const, 0, ""},
-		{"ERROR_BUFFER_OVERFLOW", Const, 0, ""},
-		{"ERROR_DIR_NOT_EMPTY", Const, 8, ""},
-		{"ERROR_ENVVAR_NOT_FOUND", Const, 0, ""},
-		{"ERROR_FILE_EXISTS", Const, 0, ""},
-		{"ERROR_FILE_NOT_FOUND", Const, 0, ""},
-		{"ERROR_HANDLE_EOF", Const, 2, ""},
-		{"ERROR_INSUFFICIENT_BUFFER", Const, 0, ""},
-		{"ERROR_IO_PENDING", Const, 0, ""},
-		{"ERROR_MOD_NOT_FOUND", Const, 0, ""},
-		{"ERROR_MORE_DATA", Const, 3, ""},
-		{"ERROR_NETNAME_DELETED", Const, 3, ""},
-		{"ERROR_NOT_FOUND", Const, 1, ""},
-		{"ERROR_NO_MORE_FILES", Const, 0, ""},
-		{"ERROR_OPERATION_ABORTED", Const, 0, ""},
-		{"ERROR_PATH_NOT_FOUND", Const, 0, ""},
-		{"ERROR_PRIVILEGE_NOT_HELD", Const, 4, ""},
-		{"ERROR_PROC_NOT_FOUND", Const, 0, ""},
-		{"ESHLIBVERS", Const, 0, ""},
-		{"ESHUTDOWN", Const, 0, ""},
-		{"ESOCKTNOSUPPORT", Const, 0, ""},
-		{"ESPIPE", Const, 0, ""},
-		{"ESRCH", Const, 0, ""},
-		{"ESRMNT", Const, 0, ""},
-		{"ESTALE", Const, 0, ""},
-		{"ESTRPIPE", Const, 0, ""},
-		{"ETHERCAP_JUMBO_MTU", Const, 1, ""},
-		{"ETHERCAP_VLAN_HWTAGGING", Const, 1, ""},
-		{"ETHERCAP_VLAN_MTU", Const, 1, ""},
-		{"ETHERMIN", Const, 1, ""},
-		{"ETHERMTU", Const, 1, ""},
-		{"ETHERMTU_JUMBO", Const, 1, ""},
-		{"ETHERTYPE_8023", Const, 1, ""},
-		{"ETHERTYPE_AARP", Const, 1, ""},
-		{"ETHERTYPE_ACCTON", Const, 1, ""},
-		{"ETHERTYPE_AEONIC", Const, 1, ""},
-		{"ETHERTYPE_ALPHA", Const, 1, ""},
-		{"ETHERTYPE_AMBER", Const, 1, ""},
-		{"ETHERTYPE_AMOEBA", Const, 1, ""},
-		{"ETHERTYPE_AOE", Const, 1, ""},
-		{"ETHERTYPE_APOLLO", Const, 1, ""},
-		{"ETHERTYPE_APOLLODOMAIN", Const, 1, ""},
-		{"ETHERTYPE_APPLETALK", Const, 1, ""},
-		{"ETHERTYPE_APPLITEK", Const, 1, ""},
-		{"ETHERTYPE_ARGONAUT", Const, 1, ""},
-		{"ETHERTYPE_ARP", Const, 1, ""},
-		{"ETHERTYPE_AT", Const, 1, ""},
-		{"ETHERTYPE_ATALK", Const, 1, ""},
-		{"ETHERTYPE_ATOMIC", Const, 1, ""},
-		{"ETHERTYPE_ATT", Const, 1, ""},
-		{"ETHERTYPE_ATTSTANFORD", Const, 1, ""},
-		{"ETHERTYPE_AUTOPHON", Const, 1, ""},
-		{"ETHERTYPE_AXIS", Const, 1, ""},
-		{"ETHERTYPE_BCLOOP", Const, 1, ""},
-		{"ETHERTYPE_BOFL", Const, 1, ""},
-		{"ETHERTYPE_CABLETRON", Const, 1, ""},
-		{"ETHERTYPE_CHAOS", Const, 1, ""},
-		{"ETHERTYPE_COMDESIGN", Const, 1, ""},
-		{"ETHERTYPE_COMPUGRAPHIC", Const, 1, ""},
-		{"ETHERTYPE_COUNTERPOINT", Const, 1, ""},
-		{"ETHERTYPE_CRONUS", Const, 1, ""},
-		{"ETHERTYPE_CRONUSVLN", Const, 1, ""},
-		{"ETHERTYPE_DCA", Const, 1, ""},
-		{"ETHERTYPE_DDE", Const, 1, ""},
-		{"ETHERTYPE_DEBNI", Const, 1, ""},
-		{"ETHERTYPE_DECAM", Const, 1, ""},
-		{"ETHERTYPE_DECCUST", Const, 1, ""},
-		{"ETHERTYPE_DECDIAG", Const, 1, ""},
-		{"ETHERTYPE_DECDNS", Const, 1, ""},
-		{"ETHERTYPE_DECDTS", Const, 1, ""},
-		{"ETHERTYPE_DECEXPER", Const, 1, ""},
-		{"ETHERTYPE_DECLAST", Const, 1, ""},
-		{"ETHERTYPE_DECLTM", Const, 1, ""},
-		{"ETHERTYPE_DECMUMPS", Const, 1, ""},
-		{"ETHERTYPE_DECNETBIOS", Const, 1, ""},
-		{"ETHERTYPE_DELTACON", Const, 1, ""},
-		{"ETHERTYPE_DIDDLE", Const, 1, ""},
-		{"ETHERTYPE_DLOG1", Const, 1, ""},
-		{"ETHERTYPE_DLOG2", Const, 1, ""},
-		{"ETHERTYPE_DN", Const, 1, ""},
-		{"ETHERTYPE_DOGFIGHT", Const, 1, ""},
-		{"ETHERTYPE_DSMD", Const, 1, ""},
-		{"ETHERTYPE_ECMA", Const, 1, ""},
-		{"ETHERTYPE_ENCRYPT", Const, 1, ""},
-		{"ETHERTYPE_ES", Const, 1, ""},
-		{"ETHERTYPE_EXCELAN", Const, 1, ""},
-		{"ETHERTYPE_EXPERDATA", Const, 1, ""},
-		{"ETHERTYPE_FLIP", Const, 1, ""},
-		{"ETHERTYPE_FLOWCONTROL", Const, 1, ""},
-		{"ETHERTYPE_FRARP", Const, 1, ""},
-		{"ETHERTYPE_GENDYN", Const, 1, ""},
-		{"ETHERTYPE_HAYES", Const, 1, ""},
-		{"ETHERTYPE_HIPPI_FP", Const, 1, ""},
-		{"ETHERTYPE_HITACHI", Const, 1, ""},
-		{"ETHERTYPE_HP", Const, 1, ""},
-		{"ETHERTYPE_IEEEPUP", Const, 1, ""},
-		{"ETHERTYPE_IEEEPUPAT", Const, 1, ""},
-		{"ETHERTYPE_IMLBL", Const, 1, ""},
-		{"ETHERTYPE_IMLBLDIAG", Const, 1, ""},
-		{"ETHERTYPE_IP", Const, 1, ""},
-		{"ETHERTYPE_IPAS", Const, 1, ""},
-		{"ETHERTYPE_IPV6", Const, 1, ""},
-		{"ETHERTYPE_IPX", Const, 1, ""},
-		{"ETHERTYPE_IPXNEW", Const, 1, ""},
-		{"ETHERTYPE_KALPANA", Const, 1, ""},
-		{"ETHERTYPE_LANBRIDGE", Const, 1, ""},
-		{"ETHERTYPE_LANPROBE", Const, 1, ""},
-		{"ETHERTYPE_LAT", Const, 1, ""},
-		{"ETHERTYPE_LBACK", Const, 1, ""},
-		{"ETHERTYPE_LITTLE", Const, 1, ""},
-		{"ETHERTYPE_LLDP", Const, 1, ""},
-		{"ETHERTYPE_LOGICRAFT", Const, 1, ""},
-		{"ETHERTYPE_LOOPBACK", Const, 1, ""},
-		{"ETHERTYPE_MATRA", Const, 1, ""},
-		{"ETHERTYPE_MAX", Const, 1, ""},
-		{"ETHERTYPE_MERIT", Const, 1, ""},
-		{"ETHERTYPE_MICP", Const, 1, ""},
-		{"ETHERTYPE_MOPDL", Const, 1, ""},
-		{"ETHERTYPE_MOPRC", Const, 1, ""},
-		{"ETHERTYPE_MOTOROLA", Const, 1, ""},
-		{"ETHERTYPE_MPLS", Const, 1, ""},
-		{"ETHERTYPE_MPLS_MCAST", Const, 1, ""},
-		{"ETHERTYPE_MUMPS", Const, 1, ""},
-		{"ETHERTYPE_NBPCC", Const, 1, ""},
-		{"ETHERTYPE_NBPCLAIM", Const, 1, ""},
-		{"ETHERTYPE_NBPCLREQ", Const, 1, ""},
-		{"ETHERTYPE_NBPCLRSP", Const, 1, ""},
-		{"ETHERTYPE_NBPCREQ", Const, 1, ""},
-		{"ETHERTYPE_NBPCRSP", Const, 1, ""},
-		{"ETHERTYPE_NBPDG", Const, 1, ""},
-		{"ETHERTYPE_NBPDGB", Const, 1, ""},
-		{"ETHERTYPE_NBPDLTE", Const, 1, ""},
-		{"ETHERTYPE_NBPRAR", Const, 1, ""},
-		{"ETHERTYPE_NBPRAS", Const, 1, ""},
-		{"ETHERTYPE_NBPRST", Const, 1, ""},
-		{"ETHERTYPE_NBPSCD", Const, 1, ""},
-		{"ETHERTYPE_NBPVCD", Const, 1, ""},
-		{"ETHERTYPE_NBS", Const, 1, ""},
-		{"ETHERTYPE_NCD", Const, 1, ""},
-		{"ETHERTYPE_NESTAR", Const, 1, ""},
-		{"ETHERTYPE_NETBEUI", Const, 1, ""},
-		{"ETHERTYPE_NOVELL", Const, 1, ""},
-		{"ETHERTYPE_NS", Const, 1, ""},
-		{"ETHERTYPE_NSAT", Const, 1, ""},
-		{"ETHERTYPE_NSCOMPAT", Const, 1, ""},
-		{"ETHERTYPE_NTRAILER", Const, 1, ""},
-		{"ETHERTYPE_OS9", Const, 1, ""},
-		{"ETHERTYPE_OS9NET", Const, 1, ""},
-		{"ETHERTYPE_PACER", Const, 1, ""},
-		{"ETHERTYPE_PAE", Const, 1, ""},
-		{"ETHERTYPE_PCS", Const, 1, ""},
-		{"ETHERTYPE_PLANNING", Const, 1, ""},
-		{"ETHERTYPE_PPP", Const, 1, ""},
-		{"ETHERTYPE_PPPOE", Const, 1, ""},
-		{"ETHERTYPE_PPPOEDISC", Const, 1, ""},
-		{"ETHERTYPE_PRIMENTS", Const, 1, ""},
-		{"ETHERTYPE_PUP", Const, 1, ""},
-		{"ETHERTYPE_PUPAT", Const, 1, ""},
-		{"ETHERTYPE_QINQ", Const, 1, ""},
-		{"ETHERTYPE_RACAL", Const, 1, ""},
-		{"ETHERTYPE_RATIONAL", Const, 1, ""},
-		{"ETHERTYPE_RAWFR", Const, 1, ""},
-		{"ETHERTYPE_RCL", Const, 1, ""},
-		{"ETHERTYPE_RDP", Const, 1, ""},
-		{"ETHERTYPE_RETIX", Const, 1, ""},
-		{"ETHERTYPE_REVARP", Const, 1, ""},
-		{"ETHERTYPE_SCA", Const, 1, ""},
-		{"ETHERTYPE_SECTRA", Const, 1, ""},
-		{"ETHERTYPE_SECUREDATA", Const, 1, ""},
-		{"ETHERTYPE_SGITW", Const, 1, ""},
-		{"ETHERTYPE_SG_BOUNCE", Const, 1, ""},
-		{"ETHERTYPE_SG_DIAG", Const, 1, ""},
-		{"ETHERTYPE_SG_NETGAMES", Const, 1, ""},
-		{"ETHERTYPE_SG_RESV", Const, 1, ""},
-		{"ETHERTYPE_SIMNET", Const, 1, ""},
-		{"ETHERTYPE_SLOW", Const, 1, ""},
-		{"ETHERTYPE_SLOWPROTOCOLS", Const, 1, ""},
-		{"ETHERTYPE_SNA", Const, 1, ""},
-		{"ETHERTYPE_SNMP", Const, 1, ""},
-		{"ETHERTYPE_SONIX", Const, 1, ""},
-		{"ETHERTYPE_SPIDER", Const, 1, ""},
-		{"ETHERTYPE_SPRITE", Const, 1, ""},
-		{"ETHERTYPE_STP", Const, 1, ""},
-		{"ETHERTYPE_TALARIS", Const, 1, ""},
-		{"ETHERTYPE_TALARISMC", Const, 1, ""},
-		{"ETHERTYPE_TCPCOMP", Const, 1, ""},
-		{"ETHERTYPE_TCPSM", Const, 1, ""},
-		{"ETHERTYPE_TEC", Const, 1, ""},
-		{"ETHERTYPE_TIGAN", Const, 1, ""},
-		{"ETHERTYPE_TRAIL", Const, 1, ""},
-		{"ETHERTYPE_TRANSETHER", Const, 1, ""},
-		{"ETHERTYPE_TYMSHARE", Const, 1, ""},
-		{"ETHERTYPE_UBBST", Const, 1, ""},
-		{"ETHERTYPE_UBDEBUG", Const, 1, ""},
-		{"ETHERTYPE_UBDIAGLOOP", Const, 1, ""},
-		{"ETHERTYPE_UBDL", Const, 1, ""},
-		{"ETHERTYPE_UBNIU", Const, 1, ""},
-		{"ETHERTYPE_UBNMC", Const, 1, ""},
-		{"ETHERTYPE_VALID", Const, 1, ""},
-		{"ETHERTYPE_VARIAN", Const, 1, ""},
-		{"ETHERTYPE_VAXELN", Const, 1, ""},
-		{"ETHERTYPE_VEECO", Const, 1, ""},
-		{"ETHERTYPE_VEXP", Const, 1, ""},
-		{"ETHERTYPE_VGLAB", Const, 1, ""},
-		{"ETHERTYPE_VINES", Const, 1, ""},
-		{"ETHERTYPE_VINESECHO", Const, 1, ""},
-		{"ETHERTYPE_VINESLOOP", Const, 1, ""},
-		{"ETHERTYPE_VITAL", Const, 1, ""},
-		{"ETHERTYPE_VLAN", Const, 1, ""},
-		{"ETHERTYPE_VLTLMAN", Const, 1, ""},
-		{"ETHERTYPE_VPROD", Const, 1, ""},
-		{"ETHERTYPE_VURESERVED", Const, 1, ""},
-		{"ETHERTYPE_WATERLOO", Const, 1, ""},
-		{"ETHERTYPE_WELLFLEET", Const, 1, ""},
-		{"ETHERTYPE_X25", Const, 1, ""},
-		{"ETHERTYPE_X75", Const, 1, ""},
-		{"ETHERTYPE_XNSSM", Const, 1, ""},
-		{"ETHERTYPE_XTP", Const, 1, ""},
-		{"ETHER_ADDR_LEN", Const, 1, ""},
-		{"ETHER_ALIGN", Const, 1, ""},
-		{"ETHER_CRC_LEN", Const, 1, ""},
-		{"ETHER_CRC_POLY_BE", Const, 1, ""},
-		{"ETHER_CRC_POLY_LE", Const, 1, ""},
-		{"ETHER_HDR_LEN", Const, 1, ""},
-		{"ETHER_MAX_DIX_LEN", Const, 1, ""},
-		{"ETHER_MAX_LEN", Const, 1, ""},
-		{"ETHER_MAX_LEN_JUMBO", Const, 1, ""},
-		{"ETHER_MIN_LEN", Const, 1, ""},
-		{"ETHER_PPPOE_ENCAP_LEN", Const, 1, ""},
-		{"ETHER_TYPE_LEN", Const, 1, ""},
-		{"ETHER_VLAN_ENCAP_LEN", Const, 1, ""},
-		{"ETH_P_1588", Const, 0, ""},
-		{"ETH_P_8021Q", Const, 0, ""},
-		{"ETH_P_802_2", Const, 0, ""},
-		{"ETH_P_802_3", Const, 0, ""},
-		{"ETH_P_AARP", Const, 0, ""},
-		{"ETH_P_ALL", Const, 0, ""},
-		{"ETH_P_AOE", Const, 0, ""},
-		{"ETH_P_ARCNET", Const, 0, ""},
-		{"ETH_P_ARP", Const, 0, ""},
-		{"ETH_P_ATALK", Const, 0, ""},
-		{"ETH_P_ATMFATE", Const, 0, ""},
-		{"ETH_P_ATMMPOA", Const, 0, ""},
-		{"ETH_P_AX25", Const, 0, ""},
-		{"ETH_P_BPQ", Const, 0, ""},
-		{"ETH_P_CAIF", Const, 0, ""},
-		{"ETH_P_CAN", Const, 0, ""},
-		{"ETH_P_CONTROL", Const, 0, ""},
-		{"ETH_P_CUST", Const, 0, ""},
-		{"ETH_P_DDCMP", Const, 0, ""},
-		{"ETH_P_DEC", Const, 0, ""},
-		{"ETH_P_DIAG", Const, 0, ""},
-		{"ETH_P_DNA_DL", Const, 0, ""},
-		{"ETH_P_DNA_RC", Const, 0, ""},
-		{"ETH_P_DNA_RT", Const, 0, ""},
-		{"ETH_P_DSA", Const, 0, ""},
-		{"ETH_P_ECONET", Const, 0, ""},
-		{"ETH_P_EDSA", Const, 0, ""},
-		{"ETH_P_FCOE", Const, 0, ""},
-		{"ETH_P_FIP", Const, 0, ""},
-		{"ETH_P_HDLC", Const, 0, ""},
-		{"ETH_P_IEEE802154", Const, 0, ""},
-		{"ETH_P_IEEEPUP", Const, 0, ""},
-		{"ETH_P_IEEEPUPAT", Const, 0, ""},
-		{"ETH_P_IP", Const, 0, ""},
-		{"ETH_P_IPV6", Const, 0, ""},
-		{"ETH_P_IPX", Const, 0, ""},
-		{"ETH_P_IRDA", Const, 0, ""},
-		{"ETH_P_LAT", Const, 0, ""},
-		{"ETH_P_LINK_CTL", Const, 0, ""},
-		{"ETH_P_LOCALTALK", Const, 0, ""},
-		{"ETH_P_LOOP", Const, 0, ""},
-		{"ETH_P_MOBITEX", Const, 0, ""},
-		{"ETH_P_MPLS_MC", Const, 0, ""},
-		{"ETH_P_MPLS_UC", Const, 0, ""},
-		{"ETH_P_PAE", Const, 0, ""},
-		{"ETH_P_PAUSE", Const, 0, ""},
-		{"ETH_P_PHONET", Const, 0, ""},
-		{"ETH_P_PPPTALK", Const, 0, ""},
-		{"ETH_P_PPP_DISC", Const, 0, ""},
-		{"ETH_P_PPP_MP", Const, 0, ""},
-		{"ETH_P_PPP_SES", Const, 0, ""},
-		{"ETH_P_PUP", Const, 0, ""},
-		{"ETH_P_PUPAT", Const, 0, ""},
-		{"ETH_P_RARP", Const, 0, ""},
-		{"ETH_P_SCA", Const, 0, ""},
-		{"ETH_P_SLOW", Const, 0, ""},
-		{"ETH_P_SNAP", Const, 0, ""},
-		{"ETH_P_TEB", Const, 0, ""},
-		{"ETH_P_TIPC", Const, 0, ""},
-		{"ETH_P_TRAILER", Const, 0, ""},
-		{"ETH_P_TR_802_2", Const, 0, ""},
-		{"ETH_P_WAN_PPP", Const, 0, ""},
-		{"ETH_P_WCCP", Const, 0, ""},
-		{"ETH_P_X25", Const, 0, ""},
-		{"ETIME", Const, 0, ""},
-		{"ETIMEDOUT", Const, 0, ""},
-		{"ETOOMANYREFS", Const, 0, ""},
-		{"ETXTBSY", Const, 0, ""},
-		{"EUCLEAN", Const, 0, ""},
-		{"EUNATCH", Const, 0, ""},
-		{"EUSERS", Const, 0, ""},
-		{"EVFILT_AIO", Const, 0, ""},
-		{"EVFILT_FS", Const, 0, ""},
-		{"EVFILT_LIO", Const, 0, ""},
-		{"EVFILT_MACHPORT", Const, 0, ""},
-		{"EVFILT_PROC", Const, 0, ""},
-		{"EVFILT_READ", Const, 0, ""},
-		{"EVFILT_SIGNAL", Const, 0, ""},
-		{"EVFILT_SYSCOUNT", Const, 0, ""},
-		{"EVFILT_THREADMARKER", Const, 0, ""},
-		{"EVFILT_TIMER", Const, 0, ""},
-		{"EVFILT_USER", Const, 0, ""},
-		{"EVFILT_VM", Const, 0, ""},
-		{"EVFILT_VNODE", Const, 0, ""},
-		{"EVFILT_WRITE", Const, 0, ""},
-		{"EV_ADD", Const, 0, ""},
-		{"EV_CLEAR", Const, 0, ""},
-		{"EV_DELETE", Const, 0, ""},
-		{"EV_DISABLE", Const, 0, ""},
-		{"EV_DISPATCH", Const, 0, ""},
-		{"EV_DROP", Const, 3, ""},
-		{"EV_ENABLE", Const, 0, ""},
-		{"EV_EOF", Const, 0, ""},
-		{"EV_ERROR", Const, 0, ""},
-		{"EV_FLAG0", Const, 0, ""},
-		{"EV_FLAG1", Const, 0, ""},
-		{"EV_ONESHOT", Const, 0, ""},
-		{"EV_OOBAND", Const, 0, ""},
-		{"EV_POLL", Const, 0, ""},
-		{"EV_RECEIPT", Const, 0, ""},
-		{"EV_SYSFLAGS", Const, 0, ""},
-		{"EWINDOWS", Const, 0, ""},
-		{"EWOULDBLOCK", Const, 0, ""},
-		{"EXDEV", Const, 0, ""},
-		{"EXFULL", Const, 0, ""},
-		{"EXTA", Const, 0, ""},
-		{"EXTB", Const, 0, ""},
-		{"EXTPROC", Const, 0, ""},
-		{"Environ", Func, 0, "func() []string"},
-		{"EpollCreate", Func, 0, "func(size int) (fd int, err error)"},
-		{"EpollCreate1", Func, 0, "func(flag int) (fd int, err error)"},
-		{"EpollCtl", Func, 0, "func(epfd int, op int, fd int, event *EpollEvent) (err error)"},
-		{"EpollEvent", Type, 0, ""},
-		{"EpollEvent.Events", Field, 0, ""},
-		{"EpollEvent.Fd", Field, 0, ""},
-		{"EpollEvent.Pad", Field, 0, ""},
-		{"EpollEvent.PadFd", Field, 0, ""},
-		{"EpollWait", Func, 0, "func(epfd int, events []EpollEvent, msec int) (n int, err error)"},
-		{"Errno", Type, 0, ""},
-		{"EscapeArg", Func, 0, ""},
-		{"Exchangedata", Func, 0, ""},
-		{"Exec", Func, 0, "func(argv0 string, argv []string, envv []string) (err error)"},
-		{"Exit", Func, 0, "func(code int)"},
-		{"ExitProcess", Func, 0, ""},
-		{"FD_CLOEXEC", Const, 0, ""},
-		{"FD_SETSIZE", Const, 0, ""},
-		{"FILE_ACTION_ADDED", Const, 0, ""},
-		{"FILE_ACTION_MODIFIED", Const, 0, ""},
-		{"FILE_ACTION_REMOVED", Const, 0, ""},
-		{"FILE_ACTION_RENAMED_NEW_NAME", Const, 0, ""},
-		{"FILE_ACTION_RENAMED_OLD_NAME", Const, 0, ""},
-		{"FILE_APPEND_DATA", Const, 0, ""},
-		{"FILE_ATTRIBUTE_ARCHIVE", Const, 0, ""},
-		{"FILE_ATTRIBUTE_DIRECTORY", Const, 0, ""},
-		{"FILE_ATTRIBUTE_HIDDEN", Const, 0, ""},
-		{"FILE_ATTRIBUTE_NORMAL", Const, 0, ""},
-		{"FILE_ATTRIBUTE_READONLY", Const, 0, ""},
-		{"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4, ""},
-		{"FILE_ATTRIBUTE_SYSTEM", Const, 0, ""},
-		{"FILE_BEGIN", Const, 0, ""},
-		{"FILE_CURRENT", Const, 0, ""},
-		{"FILE_END", Const, 0, ""},
-		{"FILE_FLAG_BACKUP_SEMANTICS", Const, 0, ""},
-		{"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4, ""},
-		{"FILE_FLAG_OVERLAPPED", Const, 0, ""},
-		{"FILE_LIST_DIRECTORY", Const, 0, ""},
-		{"FILE_MAP_COPY", Const, 0, ""},
-		{"FILE_MAP_EXECUTE", Const, 0, ""},
-		{"FILE_MAP_READ", Const, 0, ""},
-		{"FILE_MAP_WRITE", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_CREATION", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0, ""},
-		{"FILE_NOTIFY_CHANGE_SIZE", Const, 0, ""},
-		{"FILE_SHARE_DELETE", Const, 0, ""},
-		{"FILE_SHARE_READ", Const, 0, ""},
-		{"FILE_SHARE_WRITE", Const, 0, ""},
-		{"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2, ""},
-		{"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2, ""},
-		{"FILE_TYPE_CHAR", Const, 0, ""},
-		{"FILE_TYPE_DISK", Const, 0, ""},
-		{"FILE_TYPE_PIPE", Const, 0, ""},
-		{"FILE_TYPE_REMOTE", Const, 0, ""},
-		{"FILE_TYPE_UNKNOWN", Const, 0, ""},
-		{"FILE_WRITE_ATTRIBUTES", Const, 0, ""},
-		{"FLUSHO", Const, 0, ""},
-		{"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0, ""},
-		{"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0, ""},
-		{"FORMAT_MESSAGE_FROM_HMODULE", Const, 0, ""},
-		{"FORMAT_MESSAGE_FROM_STRING", Const, 0, ""},
-		{"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0, ""},
-		{"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0, ""},
-		{"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0, ""},
-		{"FSCTL_GET_REPARSE_POINT", Const, 4, ""},
-		{"F_ADDFILESIGS", Const, 0, ""},
-		{"F_ADDSIGS", Const, 0, ""},
-		{"F_ALLOCATEALL", Const, 0, ""},
-		{"F_ALLOCATECONTIG", Const, 0, ""},
-		{"F_CANCEL", Const, 0, ""},
-		{"F_CHKCLEAN", Const, 0, ""},
-		{"F_CLOSEM", Const, 1, ""},
-		{"F_DUP2FD", Const, 0, ""},
-		{"F_DUP2FD_CLOEXEC", Const, 1, ""},
-		{"F_DUPFD", Const, 0, ""},
-		{"F_DUPFD_CLOEXEC", Const, 0, ""},
-		{"F_EXLCK", Const, 0, ""},
-		{"F_FINDSIGS", Const, 16, ""},
-		{"F_FLUSH_DATA", Const, 0, ""},
-		{"F_FREEZE_FS", Const, 0, ""},
-		{"F_FSCTL", Const, 1, ""},
-		{"F_FSDIRMASK", Const, 1, ""},
-		{"F_FSIN", Const, 1, ""},
-		{"F_FSINOUT", Const, 1, ""},
-		{"F_FSOUT", Const, 1, ""},
-		{"F_FSPRIV", Const, 1, ""},
-		{"F_FSVOID", Const, 1, ""},
-		{"F_FULLFSYNC", Const, 0, ""},
-		{"F_GETCODEDIR", Const, 16, ""},
-		{"F_GETFD", Const, 0, ""},
-		{"F_GETFL", Const, 0, ""},
-		{"F_GETLEASE", Const, 0, ""},
-		{"F_GETLK", Const, 0, ""},
-		{"F_GETLK64", Const, 0, ""},
-		{"F_GETLKPID", Const, 0, ""},
-		{"F_GETNOSIGPIPE", Const, 0, ""},
-		{"F_GETOWN", Const, 0, ""},
-		{"F_GETOWN_EX", Const, 0, ""},
-		{"F_GETPATH", Const, 0, ""},
-		{"F_GETPATH_MTMINFO", Const, 0, ""},
-		{"F_GETPIPE_SZ", Const, 0, ""},
-		{"F_GETPROTECTIONCLASS", Const, 0, ""},
-		{"F_GETPROTECTIONLEVEL", Const, 16, ""},
-		{"F_GETSIG", Const, 0, ""},
-		{"F_GLOBAL_NOCACHE", Const, 0, ""},
-		{"F_LOCK", Const, 0, ""},
-		{"F_LOG2PHYS", Const, 0, ""},
-		{"F_LOG2PHYS_EXT", Const, 0, ""},
-		{"F_MARKDEPENDENCY", Const, 0, ""},
-		{"F_MAXFD", Const, 1, ""},
-		{"F_NOCACHE", Const, 0, ""},
-		{"F_NODIRECT", Const, 0, ""},
-		{"F_NOTIFY", Const, 0, ""},
-		{"F_OGETLK", Const, 0, ""},
-		{"F_OK", Const, 0, ""},
-		{"F_OSETLK", Const, 0, ""},
-		{"F_OSETLKW", Const, 0, ""},
-		{"F_PARAM_MASK", Const, 1, ""},
-		{"F_PARAM_MAX", Const, 1, ""},
-		{"F_PATHPKG_CHECK", Const, 0, ""},
-		{"F_PEOFPOSMODE", Const, 0, ""},
-		{"F_PREALLOCATE", Const, 0, ""},
-		{"F_RDADVISE", Const, 0, ""},
-		{"F_RDAHEAD", Const, 0, ""},
-		{"F_RDLCK", Const, 0, ""},
-		{"F_READAHEAD", Const, 0, ""},
-		{"F_READBOOTSTRAP", Const, 0, ""},
-		{"F_SETBACKINGSTORE", Const, 0, ""},
-		{"F_SETFD", Const, 0, ""},
-		{"F_SETFL", Const, 0, ""},
-		{"F_SETLEASE", Const, 0, ""},
-		{"F_SETLK", Const, 0, ""},
-		{"F_SETLK64", Const, 0, ""},
-		{"F_SETLKW", Const, 0, ""},
-		{"F_SETLKW64", Const, 0, ""},
-		{"F_SETLKWTIMEOUT", Const, 16, ""},
-		{"F_SETLK_REMOTE", Const, 0, ""},
-		{"F_SETNOSIGPIPE", Const, 0, ""},
-		{"F_SETOWN", Const, 0, ""},
-		{"F_SETOWN_EX", Const, 0, ""},
-		{"F_SETPIPE_SZ", Const, 0, ""},
-		{"F_SETPROTECTIONCLASS", Const, 0, ""},
-		{"F_SETSIG", Const, 0, ""},
-		{"F_SETSIZE", Const, 0, ""},
-		{"F_SHLCK", Const, 0, ""},
-		{"F_SINGLE_WRITER", Const, 16, ""},
-		{"F_TEST", Const, 0, ""},
-		{"F_THAW_FS", Const, 0, ""},
-		{"F_TLOCK", Const, 0, ""},
-		{"F_TRANSCODEKEY", Const, 16, ""},
-		{"F_ULOCK", Const, 0, ""},
-		{"F_UNLCK", Const, 0, ""},
-		{"F_UNLCKSYS", Const, 0, ""},
-		{"F_VOLPOSMODE", Const, 0, ""},
-		{"F_WRITEBOOTSTRAP", Const, 0, ""},
-		{"F_WRLCK", Const, 0, ""},
-		{"Faccessat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) (err error)"},
-		{"Fallocate", Func, 0, "func(fd int, mode uint32, off int64, len int64) (err error)"},
-		{"Fbootstraptransfer_t", Type, 0, ""},
-		{"Fbootstraptransfer_t.Buffer", Field, 0, ""},
-		{"Fbootstraptransfer_t.Length", Field, 0, ""},
-		{"Fbootstraptransfer_t.Offset", Field, 0, ""},
-		{"Fchdir", Func, 0, "func(fd int) (err error)"},
-		{"Fchflags", Func, 0, ""},
-		{"Fchmod", Func, 0, "func(fd int, mode uint32) (err error)"},
-		{"Fchmodat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) error"},
-		{"Fchown", Func, 0, "func(fd int, uid int, gid int) (err error)"},
-		{"Fchownat", Func, 0, "func(dirfd int, path string, uid int, gid int, flags int) (err error)"},
-		{"FcntlFlock", Func, 3, "func(fd uintptr, cmd int, lk *Flock_t) error"},
-		{"FdSet", Type, 0, ""},
-		{"FdSet.Bits", Field, 0, ""},
-		{"FdSet.X__fds_bits", Field, 0, ""},
-		{"Fdatasync", Func, 0, "func(fd int) (err error)"},
-		{"FileNotifyInformation", Type, 0, ""},
-		{"FileNotifyInformation.Action", Field, 0, ""},
-		{"FileNotifyInformation.FileName", Field, 0, ""},
-		{"FileNotifyInformation.FileNameLength", Field, 0, ""},
-		{"FileNotifyInformation.NextEntryOffset", Field, 0, ""},
-		{"Filetime", Type, 0, ""},
-		{"Filetime.HighDateTime", Field, 0, ""},
-		{"Filetime.LowDateTime", Field, 0, ""},
-		{"FindClose", Func, 0, ""},
-		{"FindFirstFile", Func, 0, ""},
-		{"FindNextFile", Func, 0, ""},
-		{"Flock", Func, 0, "func(fd int, how int) (err error)"},
-		{"Flock_t", Type, 0, ""},
-		{"Flock_t.Len", Field, 0, ""},
-		{"Flock_t.Pad_cgo_0", Field, 0, ""},
-		{"Flock_t.Pad_cgo_1", Field, 3, ""},
-		{"Flock_t.Pid", Field, 0, ""},
-		{"Flock_t.Start", Field, 0, ""},
-		{"Flock_t.Sysid", Field, 0, ""},
-		{"Flock_t.Type", Field, 0, ""},
-		{"Flock_t.Whence", Field, 0, ""},
-		{"FlushBpf", Func, 0, ""},
-		{"FlushFileBuffers", Func, 0, ""},
-		{"FlushViewOfFile", Func, 0, ""},
-		{"ForkExec", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, err error)"},
-		{"ForkLock", Var, 0, ""},
-		{"FormatMessage", Func, 0, ""},
-		{"Fpathconf", Func, 0, ""},
-		{"FreeAddrInfoW", Func, 1, ""},
-		{"FreeEnvironmentStrings", Func, 0, ""},
-		{"FreeLibrary", Func, 0, ""},
-		{"Fsid", Type, 0, ""},
-		{"Fsid.Val", Field, 0, ""},
-		{"Fsid.X__fsid_val", Field, 2, ""},
-		{"Fsid.X__val", Field, 0, ""},
-		{"Fstat", Func, 0, "func(fd int, stat *Stat_t) (err error)"},
-		{"Fstatat", Func, 12, ""},
-		{"Fstatfs", Func, 0, "func(fd int, buf *Statfs_t) (err error)"},
-		{"Fstore_t", Type, 0, ""},
-		{"Fstore_t.Bytesalloc", Field, 0, ""},
-		{"Fstore_t.Flags", Field, 0, ""},
-		{"Fstore_t.Length", Field, 0, ""},
-		{"Fstore_t.Offset", Field, 0, ""},
-		{"Fstore_t.Posmode", Field, 0, ""},
-		{"Fsync", Func, 0, "func(fd int) (err error)"},
-		{"Ftruncate", Func, 0, "func(fd int, length int64) (err error)"},
-		{"FullPath", Func, 4, ""},
-		{"Futimes", Func, 0, "func(fd int, tv []Timeval) (err error)"},
-		{"Futimesat", Func, 0, "func(dirfd int, path string, tv []Timeval) (err error)"},
-		{"GENERIC_ALL", Const, 0, ""},
-		{"GENERIC_EXECUTE", Const, 0, ""},
-		{"GENERIC_READ", Const, 0, ""},
-		{"GENERIC_WRITE", Const, 0, ""},
-		{"GUID", Type, 1, ""},
-		{"GUID.Data1", Field, 1, ""},
-		{"GUID.Data2", Field, 1, ""},
-		{"GUID.Data3", Field, 1, ""},
-		{"GUID.Data4", Field, 1, ""},
-		{"GetAcceptExSockaddrs", Func, 0, ""},
-		{"GetAdaptersInfo", Func, 0, ""},
-		{"GetAddrInfoW", Func, 1, ""},
-		{"GetCommandLine", Func, 0, ""},
-		{"GetComputerName", Func, 0, ""},
-		{"GetConsoleMode", Func, 1, ""},
-		{"GetCurrentDirectory", Func, 0, ""},
-		{"GetCurrentProcess", Func, 0, ""},
-		{"GetEnvironmentStrings", Func, 0, ""},
-		{"GetEnvironmentVariable", Func, 0, ""},
-		{"GetExitCodeProcess", Func, 0, ""},
-		{"GetFileAttributes", Func, 0, ""},
-		{"GetFileAttributesEx", Func, 0, ""},
-		{"GetFileExInfoStandard", Const, 0, ""},
-		{"GetFileExMaxInfoLevel", Const, 0, ""},
-		{"GetFileInformationByHandle", Func, 0, ""},
-		{"GetFileType", Func, 0, ""},
-		{"GetFullPathName", Func, 0, ""},
-		{"GetHostByName", Func, 0, ""},
-		{"GetIfEntry", Func, 0, ""},
-		{"GetLastError", Func, 0, ""},
-		{"GetLengthSid", Func, 0, ""},
-		{"GetLongPathName", Func, 0, ""},
-		{"GetProcAddress", Func, 0, ""},
-		{"GetProcessTimes", Func, 0, ""},
-		{"GetProtoByName", Func, 0, ""},
-		{"GetQueuedCompletionStatus", Func, 0, ""},
-		{"GetServByName", Func, 0, ""},
-		{"GetShortPathName", Func, 0, ""},
-		{"GetStartupInfo", Func, 0, ""},
-		{"GetStdHandle", Func, 0, ""},
-		{"GetSystemTimeAsFileTime", Func, 0, ""},
-		{"GetTempPath", Func, 0, ""},
-		{"GetTimeZoneInformation", Func, 0, ""},
-		{"GetTokenInformation", Func, 0, ""},
-		{"GetUserNameEx", Func, 0, ""},
-		{"GetUserProfileDirectory", Func, 0, ""},
-		{"GetVersion", Func, 0, ""},
-		{"Getcwd", Func, 0, "func(buf []byte) (n int, err error)"},
-		{"Getdents", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
-		{"Getdirentries", Func, 0, ""},
-		{"Getdtablesize", Func, 0, ""},
-		{"Getegid", Func, 0, "func() (egid int)"},
-		{"Getenv", Func, 0, "func(key string) (value string, found bool)"},
-		{"Geteuid", Func, 0, "func() (euid int)"},
-		{"Getfsstat", Func, 0, ""},
-		{"Getgid", Func, 0, "func() (gid int)"},
-		{"Getgroups", Func, 0, "func() (gids []int, err error)"},
-		{"Getpagesize", Func, 0, "func() int"},
-		{"Getpeername", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
-		{"Getpgid", Func, 0, "func(pid int) (pgid int, err error)"},
-		{"Getpgrp", Func, 0, "func() (pid int)"},
-		{"Getpid", Func, 0, "func() (pid int)"},
-		{"Getppid", Func, 0, "func() (ppid int)"},
-		{"Getpriority", Func, 0, "func(which int, who int) (prio int, err error)"},
-		{"Getrlimit", Func, 0, "func(resource int, rlim *Rlimit) (err error)"},
-		{"Getrusage", Func, 0, "func(who int, rusage *Rusage) (err error)"},
-		{"Getsid", Func, 0, ""},
-		{"Getsockname", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
-		{"Getsockopt", Func, 1, ""},
-		{"GetsockoptByte", Func, 0, ""},
-		{"GetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int) (*ICMPv6Filter, error)"},
-		{"GetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int) (*IPMreq, error)"},
-		{"GetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int) (*IPMreqn, error)"},
-		{"GetsockoptIPv6MTUInfo", Func, 2, "func(fd int, level int, opt int) (*IPv6MTUInfo, error)"},
-		{"GetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int) (*IPv6Mreq, error)"},
-		{"GetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int) (value [4]byte, err error)"},
-		{"GetsockoptInt", Func, 0, "func(fd int, level int, opt int) (value int, err error)"},
-		{"GetsockoptUcred", Func, 1, "func(fd int, level int, opt int) (*Ucred, error)"},
-		{"Gettid", Func, 0, "func() (tid int)"},
-		{"Gettimeofday", Func, 0, "func(tv *Timeval) (err error)"},
-		{"Getuid", Func, 0, "func() (uid int)"},
-		{"Getwd", Func, 0, "func() (wd string, err error)"},
-		{"Getxattr", Func, 1, "func(path string, attr string, dest []byte) (sz int, err error)"},
-		{"HANDLE_FLAG_INHERIT", Const, 0, ""},
-		{"HKEY_CLASSES_ROOT", Const, 0, ""},
-		{"HKEY_CURRENT_CONFIG", Const, 0, ""},
-		{"HKEY_CURRENT_USER", Const, 0, ""},
-		{"HKEY_DYN_DATA", Const, 0, ""},
-		{"HKEY_LOCAL_MACHINE", Const, 0, ""},
-		{"HKEY_PERFORMANCE_DATA", Const, 0, ""},
-		{"HKEY_USERS", Const, 0, ""},
-		{"HUPCL", Const, 0, ""},
-		{"Handle", Type, 0, ""},
-		{"Hostent", Type, 0, ""},
-		{"Hostent.AddrList", Field, 0, ""},
-		{"Hostent.AddrType", Field, 0, ""},
-		{"Hostent.Aliases", Field, 0, ""},
-		{"Hostent.Length", Field, 0, ""},
-		{"Hostent.Name", Field, 0, ""},
-		{"ICANON", Const, 0, ""},
-		{"ICMP6_FILTER", Const, 2, ""},
-		{"ICMPV6_FILTER", Const, 2, ""},
-		{"ICMPv6Filter", Type, 2, ""},
-		{"ICMPv6Filter.Data", Field, 2, ""},
-		{"ICMPv6Filter.Filt", Field, 2, ""},
-		{"ICRNL", Const, 0, ""},
-		{"IEXTEN", Const, 0, ""},
-		{"IFAN_ARRIVAL", Const, 1, ""},
-		{"IFAN_DEPARTURE", Const, 1, ""},
-		{"IFA_ADDRESS", Const, 0, ""},
-		{"IFA_ANYCAST", Const, 0, ""},
-		{"IFA_BROADCAST", Const, 0, ""},
-		{"IFA_CACHEINFO", Const, 0, ""},
-		{"IFA_F_DADFAILED", Const, 0, ""},
-		{"IFA_F_DEPRECATED", Const, 0, ""},
-		{"IFA_F_HOMEADDRESS", Const, 0, ""},
-		{"IFA_F_NODAD", Const, 0, ""},
-		{"IFA_F_OPTIMISTIC", Const, 0, ""},
-		{"IFA_F_PERMANENT", Const, 0, ""},
-		{"IFA_F_SECONDARY", Const, 0, ""},
-		{"IFA_F_TEMPORARY", Const, 0, ""},
-		{"IFA_F_TENTATIVE", Const, 0, ""},
-		{"IFA_LABEL", Const, 0, ""},
-		{"IFA_LOCAL", Const, 0, ""},
-		{"IFA_MAX", Const, 0, ""},
-		{"IFA_MULTICAST", Const, 0, ""},
-		{"IFA_ROUTE", Const, 1, ""},
-		{"IFA_UNSPEC", Const, 0, ""},
-		{"IFF_ALLMULTI", Const, 0, ""},
-		{"IFF_ALTPHYS", Const, 0, ""},
-		{"IFF_AUTOMEDIA", Const, 0, ""},
-		{"IFF_BROADCAST", Const, 0, ""},
-		{"IFF_CANTCHANGE", Const, 0, ""},
-		{"IFF_CANTCONFIG", Const, 1, ""},
-		{"IFF_DEBUG", Const, 0, ""},
-		{"IFF_DRV_OACTIVE", Const, 0, ""},
-		{"IFF_DRV_RUNNING", Const, 0, ""},
-		{"IFF_DYING", Const, 0, ""},
-		{"IFF_DYNAMIC", Const, 0, ""},
-		{"IFF_LINK0", Const, 0, ""},
-		{"IFF_LINK1", Const, 0, ""},
-		{"IFF_LINK2", Const, 0, ""},
-		{"IFF_LOOPBACK", Const, 0, ""},
-		{"IFF_MASTER", Const, 0, ""},
-		{"IFF_MONITOR", Const, 0, ""},
-		{"IFF_MULTICAST", Const, 0, ""},
-		{"IFF_NOARP", Const, 0, ""},
-		{"IFF_NOTRAILERS", Const, 0, ""},
-		{"IFF_NO_PI", Const, 0, ""},
-		{"IFF_OACTIVE", Const, 0, ""},
-		{"IFF_ONE_QUEUE", Const, 0, ""},
-		{"IFF_POINTOPOINT", Const, 0, ""},
-		{"IFF_POINTTOPOINT", Const, 0, ""},
-		{"IFF_PORTSEL", Const, 0, ""},
-		{"IFF_PPROMISC", Const, 0, ""},
-		{"IFF_PROMISC", Const, 0, ""},
-		{"IFF_RENAMING", Const, 0, ""},
-		{"IFF_RUNNING", Const, 0, ""},
-		{"IFF_SIMPLEX", Const, 0, ""},
-		{"IFF_SLAVE", Const, 0, ""},
-		{"IFF_SMART", Const, 0, ""},
-		{"IFF_STATICARP", Const, 0, ""},
-		{"IFF_TAP", Const, 0, ""},
-		{"IFF_TUN", Const, 0, ""},
-		{"IFF_TUN_EXCL", Const, 0, ""},
-		{"IFF_UP", Const, 0, ""},
-		{"IFF_VNET_HDR", Const, 0, ""},
-		{"IFLA_ADDRESS", Const, 0, ""},
-		{"IFLA_BROADCAST", Const, 0, ""},
-		{"IFLA_COST", Const, 0, ""},
-		{"IFLA_IFALIAS", Const, 0, ""},
-		{"IFLA_IFNAME", Const, 0, ""},
-		{"IFLA_LINK", Const, 0, ""},
-		{"IFLA_LINKINFO", Const, 0, ""},
-		{"IFLA_LINKMODE", Const, 0, ""},
-		{"IFLA_MAP", Const, 0, ""},
-		{"IFLA_MASTER", Const, 0, ""},
-		{"IFLA_MAX", Const, 0, ""},
-		{"IFLA_MTU", Const, 0, ""},
-		{"IFLA_NET_NS_PID", Const, 0, ""},
-		{"IFLA_OPERSTATE", Const, 0, ""},
-		{"IFLA_PRIORITY", Const, 0, ""},
-		{"IFLA_PROTINFO", Const, 0, ""},
-		{"IFLA_QDISC", Const, 0, ""},
-		{"IFLA_STATS", Const, 0, ""},
-		{"IFLA_TXQLEN", Const, 0, ""},
-		{"IFLA_UNSPEC", Const, 0, ""},
-		{"IFLA_WEIGHT", Const, 0, ""},
-		{"IFLA_WIRELESS", Const, 0, ""},
-		{"IFNAMSIZ", Const, 0, ""},
-		{"IFT_1822", Const, 0, ""},
-		{"IFT_A12MPPSWITCH", Const, 0, ""},
-		{"IFT_AAL2", Const, 0, ""},
-		{"IFT_AAL5", Const, 0, ""},
-		{"IFT_ADSL", Const, 0, ""},
-		{"IFT_AFLANE8023", Const, 0, ""},
-		{"IFT_AFLANE8025", Const, 0, ""},
-		{"IFT_ARAP", Const, 0, ""},
-		{"IFT_ARCNET", Const, 0, ""},
-		{"IFT_ARCNETPLUS", Const, 0, ""},
-		{"IFT_ASYNC", Const, 0, ""},
-		{"IFT_ATM", Const, 0, ""},
-		{"IFT_ATMDXI", Const, 0, ""},
-		{"IFT_ATMFUNI", Const, 0, ""},
-		{"IFT_ATMIMA", Const, 0, ""},
-		{"IFT_ATMLOGICAL", Const, 0, ""},
-		{"IFT_ATMRADIO", Const, 0, ""},
-		{"IFT_ATMSUBINTERFACE", Const, 0, ""},
-		{"IFT_ATMVCIENDPT", Const, 0, ""},
-		{"IFT_ATMVIRTUAL", Const, 0, ""},
-		{"IFT_BGPPOLICYACCOUNTING", Const, 0, ""},
-		{"IFT_BLUETOOTH", Const, 1, ""},
-		{"IFT_BRIDGE", Const, 0, ""},
-		{"IFT_BSC", Const, 0, ""},
-		{"IFT_CARP", Const, 0, ""},
-		{"IFT_CCTEMUL", Const, 0, ""},
-		{"IFT_CELLULAR", Const, 0, ""},
-		{"IFT_CEPT", Const, 0, ""},
-		{"IFT_CES", Const, 0, ""},
-		{"IFT_CHANNEL", Const, 0, ""},
-		{"IFT_CNR", Const, 0, ""},
-		{"IFT_COFFEE", Const, 0, ""},
-		{"IFT_COMPOSITELINK", Const, 0, ""},
-		{"IFT_DCN", Const, 0, ""},
-		{"IFT_DIGITALPOWERLINE", Const, 0, ""},
-		{"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0, ""},
-		{"IFT_DLSW", Const, 0, ""},
-		{"IFT_DOCSCABLEDOWNSTREAM", Const, 0, ""},
-		{"IFT_DOCSCABLEMACLAYER", Const, 0, ""},
-		{"IFT_DOCSCABLEUPSTREAM", Const, 0, ""},
-		{"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1, ""},
-		{"IFT_DS0", Const, 0, ""},
-		{"IFT_DS0BUNDLE", Const, 0, ""},
-		{"IFT_DS1FDL", Const, 0, ""},
-		{"IFT_DS3", Const, 0, ""},
-		{"IFT_DTM", Const, 0, ""},
-		{"IFT_DUMMY", Const, 1, ""},
-		{"IFT_DVBASILN", Const, 0, ""},
-		{"IFT_DVBASIOUT", Const, 0, ""},
-		{"IFT_DVBRCCDOWNSTREAM", Const, 0, ""},
-		{"IFT_DVBRCCMACLAYER", Const, 0, ""},
-		{"IFT_DVBRCCUPSTREAM", Const, 0, ""},
-		{"IFT_ECONET", Const, 1, ""},
-		{"IFT_ENC", Const, 0, ""},
-		{"IFT_EON", Const, 0, ""},
-		{"IFT_EPLRS", Const, 0, ""},
-		{"IFT_ESCON", Const, 0, ""},
-		{"IFT_ETHER", Const, 0, ""},
-		{"IFT_FAITH", Const, 0, ""},
-		{"IFT_FAST", Const, 0, ""},
-		{"IFT_FASTETHER", Const, 0, ""},
-		{"IFT_FASTETHERFX", Const, 0, ""},
-		{"IFT_FDDI", Const, 0, ""},
-		{"IFT_FIBRECHANNEL", Const, 0, ""},
-		{"IFT_FRAMERELAYINTERCONNECT", Const, 0, ""},
-		{"IFT_FRAMERELAYMPI", Const, 0, ""},
-		{"IFT_FRDLCIENDPT", Const, 0, ""},
-		{"IFT_FRELAY", Const, 0, ""},
-		{"IFT_FRELAYDCE", Const, 0, ""},
-		{"IFT_FRF16MFRBUNDLE", Const, 0, ""},
-		{"IFT_FRFORWARD", Const, 0, ""},
-		{"IFT_G703AT2MB", Const, 0, ""},
-		{"IFT_G703AT64K", Const, 0, ""},
-		{"IFT_GIF", Const, 0, ""},
-		{"IFT_GIGABITETHERNET", Const, 0, ""},
-		{"IFT_GR303IDT", Const, 0, ""},
-		{"IFT_GR303RDT", Const, 0, ""},
-		{"IFT_H323GATEKEEPER", Const, 0, ""},
-		{"IFT_H323PROXY", Const, 0, ""},
-		{"IFT_HDH1822", Const, 0, ""},
-		{"IFT_HDLC", Const, 0, ""},
-		{"IFT_HDSL2", Const, 0, ""},
-		{"IFT_HIPERLAN2", Const, 0, ""},
-		{"IFT_HIPPI", Const, 0, ""},
-		{"IFT_HIPPIINTERFACE", Const, 0, ""},
-		{"IFT_HOSTPAD", Const, 0, ""},
-		{"IFT_HSSI", Const, 0, ""},
-		{"IFT_HY", Const, 0, ""},
-		{"IFT_IBM370PARCHAN", Const, 0, ""},
-		{"IFT_IDSL", Const, 0, ""},
-		{"IFT_IEEE1394", Const, 0, ""},
-		{"IFT_IEEE80211", Const, 0, ""},
-		{"IFT_IEEE80212", Const, 0, ""},
-		{"IFT_IEEE8023ADLAG", Const, 0, ""},
-		{"IFT_IFGSN", Const, 0, ""},
-		{"IFT_IMT", Const, 0, ""},
-		{"IFT_INFINIBAND", Const, 1, ""},
-		{"IFT_INTERLEAVE", Const, 0, ""},
-		{"IFT_IP", Const, 0, ""},
-		{"IFT_IPFORWARD", Const, 0, ""},
-		{"IFT_IPOVERATM", Const, 0, ""},
-		{"IFT_IPOVERCDLC", Const, 0, ""},
-		{"IFT_IPOVERCLAW", Const, 0, ""},
-		{"IFT_IPSWITCH", Const, 0, ""},
-		{"IFT_IPXIP", Const, 0, ""},
-		{"IFT_ISDN", Const, 0, ""},
-		{"IFT_ISDNBASIC", Const, 0, ""},
-		{"IFT_ISDNPRIMARY", Const, 0, ""},
-		{"IFT_ISDNS", Const, 0, ""},
-		{"IFT_ISDNU", Const, 0, ""},
-		{"IFT_ISO88022LLC", Const, 0, ""},
-		{"IFT_ISO88023", Const, 0, ""},
-		{"IFT_ISO88024", Const, 0, ""},
-		{"IFT_ISO88025", Const, 0, ""},
-		{"IFT_ISO88025CRFPINT", Const, 0, ""},
-		{"IFT_ISO88025DTR", Const, 0, ""},
-		{"IFT_ISO88025FIBER", Const, 0, ""},
-		{"IFT_ISO88026", Const, 0, ""},
-		{"IFT_ISUP", Const, 0, ""},
-		{"IFT_L2VLAN", Const, 0, ""},
-		{"IFT_L3IPVLAN", Const, 0, ""},
-		{"IFT_L3IPXVLAN", Const, 0, ""},
-		{"IFT_LAPB", Const, 0, ""},
-		{"IFT_LAPD", Const, 0, ""},
-		{"IFT_LAPF", Const, 0, ""},
-		{"IFT_LINEGROUP", Const, 1, ""},
-		{"IFT_LOCALTALK", Const, 0, ""},
-		{"IFT_LOOP", Const, 0, ""},
-		{"IFT_MEDIAMAILOVERIP", Const, 0, ""},
-		{"IFT_MFSIGLINK", Const, 0, ""},
-		{"IFT_MIOX25", Const, 0, ""},
-		{"IFT_MODEM", Const, 0, ""},
-		{"IFT_MPC", Const, 0, ""},
-		{"IFT_MPLS", Const, 0, ""},
-		{"IFT_MPLSTUNNEL", Const, 0, ""},
-		{"IFT_MSDSL", Const, 0, ""},
-		{"IFT_MVL", Const, 0, ""},
-		{"IFT_MYRINET", Const, 0, ""},
-		{"IFT_NFAS", Const, 0, ""},
-		{"IFT_NSIP", Const, 0, ""},
-		{"IFT_OPTICALCHANNEL", Const, 0, ""},
-		{"IFT_OPTICALTRANSPORT", Const, 0, ""},
-		{"IFT_OTHER", Const, 0, ""},
-		{"IFT_P10", Const, 0, ""},
-		{"IFT_P80", Const, 0, ""},
-		{"IFT_PARA", Const, 0, ""},
-		{"IFT_PDP", Const, 0, ""},
-		{"IFT_PFLOG", Const, 0, ""},
-		{"IFT_PFLOW", Const, 1, ""},
-		{"IFT_PFSYNC", Const, 0, ""},
-		{"IFT_PLC", Const, 0, ""},
-		{"IFT_PON155", Const, 1, ""},
-		{"IFT_PON622", Const, 1, ""},
-		{"IFT_POS", Const, 0, ""},
-		{"IFT_PPP", Const, 0, ""},
-		{"IFT_PPPMULTILINKBUNDLE", Const, 0, ""},
-		{"IFT_PROPATM", Const, 1, ""},
-		{"IFT_PROPBWAP2MP", Const, 0, ""},
-		{"IFT_PROPCNLS", Const, 0, ""},
-		{"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0, ""},
-		{"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0, ""},
-		{"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0, ""},
-		{"IFT_PROPMUX", Const, 0, ""},
-		{"IFT_PROPVIRTUAL", Const, 0, ""},
-		{"IFT_PROPWIRELESSP2P", Const, 0, ""},
-		{"IFT_PTPSERIAL", Const, 0, ""},
-		{"IFT_PVC", Const, 0, ""},
-		{"IFT_Q2931", Const, 1, ""},
-		{"IFT_QLLC", Const, 0, ""},
-		{"IFT_RADIOMAC", Const, 0, ""},
-		{"IFT_RADSL", Const, 0, ""},
-		{"IFT_REACHDSL", Const, 0, ""},
-		{"IFT_RFC1483", Const, 0, ""},
-		{"IFT_RS232", Const, 0, ""},
-		{"IFT_RSRB", Const, 0, ""},
-		{"IFT_SDLC", Const, 0, ""},
-		{"IFT_SDSL", Const, 0, ""},
-		{"IFT_SHDSL", Const, 0, ""},
-		{"IFT_SIP", Const, 0, ""},
-		{"IFT_SIPSIG", Const, 1, ""},
-		{"IFT_SIPTG", Const, 1, ""},
-		{"IFT_SLIP", Const, 0, ""},
-		{"IFT_SMDSDXI", Const, 0, ""},
-		{"IFT_SMDSICIP", Const, 0, ""},
-		{"IFT_SONET", Const, 0, ""},
-		{"IFT_SONETOVERHEADCHANNEL", Const, 0, ""},
-		{"IFT_SONETPATH", Const, 0, ""},
-		{"IFT_SONETVT", Const, 0, ""},
-		{"IFT_SRP", Const, 0, ""},
-		{"IFT_SS7SIGLINK", Const, 0, ""},
-		{"IFT_STACKTOSTACK", Const, 0, ""},
-		{"IFT_STARLAN", Const, 0, ""},
-		{"IFT_STF", Const, 0, ""},
-		{"IFT_T1", Const, 0, ""},
-		{"IFT_TDLC", Const, 0, ""},
-		{"IFT_TELINK", Const, 1, ""},
-		{"IFT_TERMPAD", Const, 0, ""},
-		{"IFT_TR008", Const, 0, ""},
-		{"IFT_TRANSPHDLC", Const, 0, ""},
-		{"IFT_TUNNEL", Const, 0, ""},
-		{"IFT_ULTRA", Const, 0, ""},
-		{"IFT_USB", Const, 0, ""},
-		{"IFT_V11", Const, 0, ""},
-		{"IFT_V35", Const, 0, ""},
-		{"IFT_V36", Const, 0, ""},
-		{"IFT_V37", Const, 0, ""},
-		{"IFT_VDSL", Const, 0, ""},
-		{"IFT_VIRTUALIPADDRESS", Const, 0, ""},
-		{"IFT_VIRTUALTG", Const, 1, ""},
-		{"IFT_VOICEDID", Const, 1, ""},
-		{"IFT_VOICEEM", Const, 0, ""},
-		{"IFT_VOICEEMFGD", Const, 1, ""},
-		{"IFT_VOICEENCAP", Const, 0, ""},
-		{"IFT_VOICEFGDEANA", Const, 1, ""},
-		{"IFT_VOICEFXO", Const, 0, ""},
-		{"IFT_VOICEFXS", Const, 0, ""},
-		{"IFT_VOICEOVERATM", Const, 0, ""},
-		{"IFT_VOICEOVERCABLE", Const, 1, ""},
-		{"IFT_VOICEOVERFRAMERELAY", Const, 0, ""},
-		{"IFT_VOICEOVERIP", Const, 0, ""},
-		{"IFT_X213", Const, 0, ""},
-		{"IFT_X25", Const, 0, ""},
-		{"IFT_X25DDN", Const, 0, ""},
-		{"IFT_X25HUNTGROUP", Const, 0, ""},
-		{"IFT_X25MLP", Const, 0, ""},
-		{"IFT_X25PLE", Const, 0, ""},
-		{"IFT_XETHER", Const, 0, ""},
-		{"IGNBRK", Const, 0, ""},
-		{"IGNCR", Const, 0, ""},
-		{"IGNORE", Const, 0, ""},
-		{"IGNPAR", Const, 0, ""},
-		{"IMAXBEL", Const, 0, ""},
-		{"INFINITE", Const, 0, ""},
-		{"INLCR", Const, 0, ""},
-		{"INPCK", Const, 0, ""},
-		{"INVALID_FILE_ATTRIBUTES", Const, 0, ""},
-		{"IN_ACCESS", Const, 0, ""},
-		{"IN_ALL_EVENTS", Const, 0, ""},
-		{"IN_ATTRIB", Const, 0, ""},
-		{"IN_CLASSA_HOST", Const, 0, ""},
-		{"IN_CLASSA_MAX", Const, 0, ""},
-		{"IN_CLASSA_NET", Const, 0, ""},
-		{"IN_CLASSA_NSHIFT", Const, 0, ""},
-		{"IN_CLASSB_HOST", Const, 0, ""},
-		{"IN_CLASSB_MAX", Const, 0, ""},
-		{"IN_CLASSB_NET", Const, 0, ""},
-		{"IN_CLASSB_NSHIFT", Const, 0, ""},
-		{"IN_CLASSC_HOST", Const, 0, ""},
-		{"IN_CLASSC_NET", Const, 0, ""},
-		{"IN_CLASSC_NSHIFT", Const, 0, ""},
-		{"IN_CLASSD_HOST", Const, 0, ""},
-		{"IN_CLASSD_NET", Const, 0, ""},
-		{"IN_CLASSD_NSHIFT", Const, 0, ""},
-		{"IN_CLOEXEC", Const, 0, ""},
-		{"IN_CLOSE", Const, 0, ""},
-		{"IN_CLOSE_NOWRITE", Const, 0, ""},
-		{"IN_CLOSE_WRITE", Const, 0, ""},
-		{"IN_CREATE", Const, 0, ""},
-		{"IN_DELETE", Const, 0, ""},
-		{"IN_DELETE_SELF", Const, 0, ""},
-		{"IN_DONT_FOLLOW", Const, 0, ""},
-		{"IN_EXCL_UNLINK", Const, 0, ""},
-		{"IN_IGNORED", Const, 0, ""},
-		{"IN_ISDIR", Const, 0, ""},
-		{"IN_LINKLOCALNETNUM", Const, 0, ""},
-		{"IN_LOOPBACKNET", Const, 0, ""},
-		{"IN_MASK_ADD", Const, 0, ""},
-		{"IN_MODIFY", Const, 0, ""},
-		{"IN_MOVE", Const, 0, ""},
-		{"IN_MOVED_FROM", Const, 0, ""},
-		{"IN_MOVED_TO", Const, 0, ""},
-		{"IN_MOVE_SELF", Const, 0, ""},
-		{"IN_NONBLOCK", Const, 0, ""},
-		{"IN_ONESHOT", Const, 0, ""},
-		{"IN_ONLYDIR", Const, 0, ""},
-		{"IN_OPEN", Const, 0, ""},
-		{"IN_Q_OVERFLOW", Const, 0, ""},
-		{"IN_RFC3021_HOST", Const, 1, ""},
-		{"IN_RFC3021_MASK", Const, 1, ""},
-		{"IN_RFC3021_NET", Const, 1, ""},
-		{"IN_RFC3021_NSHIFT", Const, 1, ""},
-		{"IN_UNMOUNT", Const, 0, ""},
-		{"IOC_IN", Const, 1, ""},
-		{"IOC_INOUT", Const, 1, ""},
-		{"IOC_OUT", Const, 1, ""},
-		{"IOC_VENDOR", Const, 3, ""},
-		{"IOC_WS2", Const, 1, ""},
-		{"IO_REPARSE_TAG_SYMLINK", Const, 4, ""},
-		{"IPMreq", Type, 0, ""},
-		{"IPMreq.Interface", Field, 0, ""},
-		{"IPMreq.Multiaddr", Field, 0, ""},
-		{"IPMreqn", Type, 0, ""},
-		{"IPMreqn.Address", Field, 0, ""},
-		{"IPMreqn.Ifindex", Field, 0, ""},
-		{"IPMreqn.Multiaddr", Field, 0, ""},
-		{"IPPROTO_3PC", Const, 0, ""},
-		{"IPPROTO_ADFS", Const, 0, ""},
-		{"IPPROTO_AH", Const, 0, ""},
-		{"IPPROTO_AHIP", Const, 0, ""},
-		{"IPPROTO_APES", Const, 0, ""},
-		{"IPPROTO_ARGUS", Const, 0, ""},
-		{"IPPROTO_AX25", Const, 0, ""},
-		{"IPPROTO_BHA", Const, 0, ""},
-		{"IPPROTO_BLT", Const, 0, ""},
-		{"IPPROTO_BRSATMON", Const, 0, ""},
-		{"IPPROTO_CARP", Const, 0, ""},
-		{"IPPROTO_CFTP", Const, 0, ""},
-		{"IPPROTO_CHAOS", Const, 0, ""},
-		{"IPPROTO_CMTP", Const, 0, ""},
-		{"IPPROTO_COMP", Const, 0, ""},
-		{"IPPROTO_CPHB", Const, 0, ""},
-		{"IPPROTO_CPNX", Const, 0, ""},
-		{"IPPROTO_DCCP", Const, 0, ""},
-		{"IPPROTO_DDP", Const, 0, ""},
-		{"IPPROTO_DGP", Const, 0, ""},
-		{"IPPROTO_DIVERT", Const, 0, ""},
-		{"IPPROTO_DIVERT_INIT", Const, 3, ""},
-		{"IPPROTO_DIVERT_RESP", Const, 3, ""},
-		{"IPPROTO_DONE", Const, 0, ""},
-		{"IPPROTO_DSTOPTS", Const, 0, ""},
-		{"IPPROTO_EGP", Const, 0, ""},
-		{"IPPROTO_EMCON", Const, 0, ""},
-		{"IPPROTO_ENCAP", Const, 0, ""},
-		{"IPPROTO_EON", Const, 0, ""},
-		{"IPPROTO_ESP", Const, 0, ""},
-		{"IPPROTO_ETHERIP", Const, 0, ""},
-		{"IPPROTO_FRAGMENT", Const, 0, ""},
-		{"IPPROTO_GGP", Const, 0, ""},
-		{"IPPROTO_GMTP", Const, 0, ""},
-		{"IPPROTO_GRE", Const, 0, ""},
-		{"IPPROTO_HELLO", Const, 0, ""},
-		{"IPPROTO_HMP", Const, 0, ""},
-		{"IPPROTO_HOPOPTS", Const, 0, ""},
-		{"IPPROTO_ICMP", Const, 0, ""},
-		{"IPPROTO_ICMPV6", Const, 0, ""},
-		{"IPPROTO_IDP", Const, 0, ""},
-		{"IPPROTO_IDPR", Const, 0, ""},
-		{"IPPROTO_IDRP", Const, 0, ""},
-		{"IPPROTO_IGMP", Const, 0, ""},
-		{"IPPROTO_IGP", Const, 0, ""},
-		{"IPPROTO_IGRP", Const, 0, ""},
-		{"IPPROTO_IL", Const, 0, ""},
-		{"IPPROTO_INLSP", Const, 0, ""},
-		{"IPPROTO_INP", Const, 0, ""},
-		{"IPPROTO_IP", Const, 0, ""},
-		{"IPPROTO_IPCOMP", Const, 0, ""},
-		{"IPPROTO_IPCV", Const, 0, ""},
-		{"IPPROTO_IPEIP", Const, 0, ""},
-		{"IPPROTO_IPIP", Const, 0, ""},
-		{"IPPROTO_IPPC", Const, 0, ""},
-		{"IPPROTO_IPV4", Const, 0, ""},
-		{"IPPROTO_IPV6", Const, 0, ""},
-		{"IPPROTO_IPV6_ICMP", Const, 1, ""},
-		{"IPPROTO_IRTP", Const, 0, ""},
-		{"IPPROTO_KRYPTOLAN", Const, 0, ""},
-		{"IPPROTO_LARP", Const, 0, ""},
-		{"IPPROTO_LEAF1", Const, 0, ""},
-		{"IPPROTO_LEAF2", Const, 0, ""},
-		{"IPPROTO_MAX", Const, 0, ""},
-		{"IPPROTO_MAXID", Const, 0, ""},
-		{"IPPROTO_MEAS", Const, 0, ""},
-		{"IPPROTO_MH", Const, 1, ""},
-		{"IPPROTO_MHRP", Const, 0, ""},
-		{"IPPROTO_MICP", Const, 0, ""},
-		{"IPPROTO_MOBILE", Const, 0, ""},
-		{"IPPROTO_MPLS", Const, 1, ""},
-		{"IPPROTO_MTP", Const, 0, ""},
-		{"IPPROTO_MUX", Const, 0, ""},
-		{"IPPROTO_ND", Const, 0, ""},
-		{"IPPROTO_NHRP", Const, 0, ""},
-		{"IPPROTO_NONE", Const, 0, ""},
-		{"IPPROTO_NSP", Const, 0, ""},
-		{"IPPROTO_NVPII", Const, 0, ""},
-		{"IPPROTO_OLD_DIVERT", Const, 0, ""},
-		{"IPPROTO_OSPFIGP", Const, 0, ""},
-		{"IPPROTO_PFSYNC", Const, 0, ""},
-		{"IPPROTO_PGM", Const, 0, ""},
-		{"IPPROTO_PIGP", Const, 0, ""},
-		{"IPPROTO_PIM", Const, 0, ""},
-		{"IPPROTO_PRM", Const, 0, ""},
-		{"IPPROTO_PUP", Const, 0, ""},
-		{"IPPROTO_PVP", Const, 0, ""},
-		{"IPPROTO_RAW", Const, 0, ""},
-		{"IPPROTO_RCCMON", Const, 0, ""},
-		{"IPPROTO_RDP", Const, 0, ""},
-		{"IPPROTO_ROUTING", Const, 0, ""},
-		{"IPPROTO_RSVP", Const, 0, ""},
-		{"IPPROTO_RVD", Const, 0, ""},
-		{"IPPROTO_SATEXPAK", Const, 0, ""},
-		{"IPPROTO_SATMON", Const, 0, ""},
-		{"IPPROTO_SCCSP", Const, 0, ""},
-		{"IPPROTO_SCTP", Const, 0, ""},
-		{"IPPROTO_SDRP", Const, 0, ""},
-		{"IPPROTO_SEND", Const, 1, ""},
-		{"IPPROTO_SEP", Const, 0, ""},
-		{"IPPROTO_SKIP", Const, 0, ""},
-		{"IPPROTO_SPACER", Const, 0, ""},
-		{"IPPROTO_SRPC", Const, 0, ""},
-		{"IPPROTO_ST", Const, 0, ""},
-		{"IPPROTO_SVMTP", Const, 0, ""},
-		{"IPPROTO_SWIPE", Const, 0, ""},
-		{"IPPROTO_TCF", Const, 0, ""},
-		{"IPPROTO_TCP", Const, 0, ""},
-		{"IPPROTO_TLSP", Const, 0, ""},
-		{"IPPROTO_TP", Const, 0, ""},
-		{"IPPROTO_TPXX", Const, 0, ""},
-		{"IPPROTO_TRUNK1", Const, 0, ""},
-		{"IPPROTO_TRUNK2", Const, 0, ""},
-		{"IPPROTO_TTP", Const, 0, ""},
-		{"IPPROTO_UDP", Const, 0, ""},
-		{"IPPROTO_UDPLITE", Const, 0, ""},
-		{"IPPROTO_VINES", Const, 0, ""},
-		{"IPPROTO_VISA", Const, 0, ""},
-		{"IPPROTO_VMTP", Const, 0, ""},
-		{"IPPROTO_VRRP", Const, 1, ""},
-		{"IPPROTO_WBEXPAK", Const, 0, ""},
-		{"IPPROTO_WBMON", Const, 0, ""},
-		{"IPPROTO_WSN", Const, 0, ""},
-		{"IPPROTO_XNET", Const, 0, ""},
-		{"IPPROTO_XTP", Const, 0, ""},
-		{"IPV6_2292DSTOPTS", Const, 0, ""},
-		{"IPV6_2292HOPLIMIT", Const, 0, ""},
-		{"IPV6_2292HOPOPTS", Const, 0, ""},
-		{"IPV6_2292NEXTHOP", Const, 0, ""},
-		{"IPV6_2292PKTINFO", Const, 0, ""},
-		{"IPV6_2292PKTOPTIONS", Const, 0, ""},
-		{"IPV6_2292RTHDR", Const, 0, ""},
-		{"IPV6_ADDRFORM", Const, 0, ""},
-		{"IPV6_ADD_MEMBERSHIP", Const, 0, ""},
-		{"IPV6_AUTHHDR", Const, 0, ""},
-		{"IPV6_AUTH_LEVEL", Const, 1, ""},
-		{"IPV6_AUTOFLOWLABEL", Const, 0, ""},
-		{"IPV6_BINDANY", Const, 0, ""},
-		{"IPV6_BINDV6ONLY", Const, 0, ""},
-		{"IPV6_BOUND_IF", Const, 0, ""},
-		{"IPV6_CHECKSUM", Const, 0, ""},
-		{"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0, ""},
-		{"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
-		{"IPV6_DEFHLIM", Const, 0, ""},
-		{"IPV6_DONTFRAG", Const, 0, ""},
-		{"IPV6_DROP_MEMBERSHIP", Const, 0, ""},
-		{"IPV6_DSTOPTS", Const, 0, ""},
-		{"IPV6_ESP_NETWORK_LEVEL", Const, 1, ""},
-		{"IPV6_ESP_TRANS_LEVEL", Const, 1, ""},
-		{"IPV6_FAITH", Const, 0, ""},
-		{"IPV6_FLOWINFO_MASK", Const, 0, ""},
-		{"IPV6_FLOWLABEL_MASK", Const, 0, ""},
-		{"IPV6_FRAGTTL", Const, 0, ""},
-		{"IPV6_FW_ADD", Const, 0, ""},
-		{"IPV6_FW_DEL", Const, 0, ""},
-		{"IPV6_FW_FLUSH", Const, 0, ""},
-		{"IPV6_FW_GET", Const, 0, ""},
-		{"IPV6_FW_ZERO", Const, 0, ""},
-		{"IPV6_HLIMDEC", Const, 0, ""},
-		{"IPV6_HOPLIMIT", Const, 0, ""},
-		{"IPV6_HOPOPTS", Const, 0, ""},
-		{"IPV6_IPCOMP_LEVEL", Const, 1, ""},
-		{"IPV6_IPSEC_POLICY", Const, 0, ""},
-		{"IPV6_JOIN_ANYCAST", Const, 0, ""},
-		{"IPV6_JOIN_GROUP", Const, 0, ""},
-		{"IPV6_LEAVE_ANYCAST", Const, 0, ""},
-		{"IPV6_LEAVE_GROUP", Const, 0, ""},
-		{"IPV6_MAXHLIM", Const, 0, ""},
-		{"IPV6_MAXOPTHDR", Const, 0, ""},
-		{"IPV6_MAXPACKET", Const, 0, ""},
-		{"IPV6_MAX_GROUP_SRC_FILTER", Const, 0, ""},
-		{"IPV6_MAX_MEMBERSHIPS", Const, 0, ""},
-		{"IPV6_MAX_SOCK_SRC_FILTER", Const, 0, ""},
-		{"IPV6_MIN_MEMBERSHIPS", Const, 0, ""},
-		{"IPV6_MMTU", Const, 0, ""},
-		{"IPV6_MSFILTER", Const, 0, ""},
-		{"IPV6_MTU", Const, 0, ""},
-		{"IPV6_MTU_DISCOVER", Const, 0, ""},
-		{"IPV6_MULTICAST_HOPS", Const, 0, ""},
-		{"IPV6_MULTICAST_IF", Const, 0, ""},
-		{"IPV6_MULTICAST_LOOP", Const, 0, ""},
-		{"IPV6_NEXTHOP", Const, 0, ""},
-		{"IPV6_OPTIONS", Const, 1, ""},
-		{"IPV6_PATHMTU", Const, 0, ""},
-		{"IPV6_PIPEX", Const, 1, ""},
-		{"IPV6_PKTINFO", Const, 0, ""},
-		{"IPV6_PMTUDISC_DO", Const, 0, ""},
-		{"IPV6_PMTUDISC_DONT", Const, 0, ""},
-		{"IPV6_PMTUDISC_PROBE", Const, 0, ""},
-		{"IPV6_PMTUDISC_WANT", Const, 0, ""},
-		{"IPV6_PORTRANGE", Const, 0, ""},
-		{"IPV6_PORTRANGE_DEFAULT", Const, 0, ""},
-		{"IPV6_PORTRANGE_HIGH", Const, 0, ""},
-		{"IPV6_PORTRANGE_LOW", Const, 0, ""},
-		{"IPV6_PREFER_TEMPADDR", Const, 0, ""},
-		{"IPV6_RECVDSTOPTS", Const, 0, ""},
-		{"IPV6_RECVDSTPORT", Const, 3, ""},
-		{"IPV6_RECVERR", Const, 0, ""},
-		{"IPV6_RECVHOPLIMIT", Const, 0, ""},
-		{"IPV6_RECVHOPOPTS", Const, 0, ""},
-		{"IPV6_RECVPATHMTU", Const, 0, ""},
-		{"IPV6_RECVPKTINFO", Const, 0, ""},
-		{"IPV6_RECVRTHDR", Const, 0, ""},
-		{"IPV6_RECVTCLASS", Const, 0, ""},
-		{"IPV6_ROUTER_ALERT", Const, 0, ""},
-		{"IPV6_RTABLE", Const, 1, ""},
-		{"IPV6_RTHDR", Const, 0, ""},
-		{"IPV6_RTHDRDSTOPTS", Const, 0, ""},
-		{"IPV6_RTHDR_LOOSE", Const, 0, ""},
-		{"IPV6_RTHDR_STRICT", Const, 0, ""},
-		{"IPV6_RTHDR_TYPE_0", Const, 0, ""},
-		{"IPV6_RXDSTOPTS", Const, 0, ""},
-		{"IPV6_RXHOPOPTS", Const, 0, ""},
-		{"IPV6_SOCKOPT_RESERVED1", Const, 0, ""},
-		{"IPV6_TCLASS", Const, 0, ""},
-		{"IPV6_UNICAST_HOPS", Const, 0, ""},
-		{"IPV6_USE_MIN_MTU", Const, 0, ""},
-		{"IPV6_V6ONLY", Const, 0, ""},
-		{"IPV6_VERSION", Const, 0, ""},
-		{"IPV6_VERSION_MASK", Const, 0, ""},
-		{"IPV6_XFRM_POLICY", Const, 0, ""},
-		{"IP_ADD_MEMBERSHIP", Const, 0, ""},
-		{"IP_ADD_SOURCE_MEMBERSHIP", Const, 0, ""},
-		{"IP_AUTH_LEVEL", Const, 1, ""},
-		{"IP_BINDANY", Const, 0, ""},
-		{"IP_BLOCK_SOURCE", Const, 0, ""},
-		{"IP_BOUND_IF", Const, 0, ""},
-		{"IP_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
-		{"IP_DEFAULT_MULTICAST_TTL", Const, 0, ""},
-		{"IP_DF", Const, 0, ""},
-		{"IP_DIVERTFL", Const, 3, ""},
-		{"IP_DONTFRAG", Const, 0, ""},
-		{"IP_DROP_MEMBERSHIP", Const, 0, ""},
-		{"IP_DROP_SOURCE_MEMBERSHIP", Const, 0, ""},
-		{"IP_DUMMYNET3", Const, 0, ""},
-		{"IP_DUMMYNET_CONFIGURE", Const, 0, ""},
-		{"IP_DUMMYNET_DEL", Const, 0, ""},
-		{"IP_DUMMYNET_FLUSH", Const, 0, ""},
-		{"IP_DUMMYNET_GET", Const, 0, ""},
-		{"IP_EF", Const, 1, ""},
-		{"IP_ERRORMTU", Const, 1, ""},
-		{"IP_ESP_NETWORK_LEVEL", Const, 1, ""},
-		{"IP_ESP_TRANS_LEVEL", Const, 1, ""},
-		{"IP_FAITH", Const, 0, ""},
-		{"IP_FREEBIND", Const, 0, ""},
-		{"IP_FW3", Const, 0, ""},
-		{"IP_FW_ADD", Const, 0, ""},
-		{"IP_FW_DEL", Const, 0, ""},
-		{"IP_FW_FLUSH", Const, 0, ""},
-		{"IP_FW_GET", Const, 0, ""},
-		{"IP_FW_NAT_CFG", Const, 0, ""},
-		{"IP_FW_NAT_DEL", Const, 0, ""},
-		{"IP_FW_NAT_GET_CONFIG", Const, 0, ""},
-		{"IP_FW_NAT_GET_LOG", Const, 0, ""},
-		{"IP_FW_RESETLOG", Const, 0, ""},
-		{"IP_FW_TABLE_ADD", Const, 0, ""},
-		{"IP_FW_TABLE_DEL", Const, 0, ""},
-		{"IP_FW_TABLE_FLUSH", Const, 0, ""},
-		{"IP_FW_TABLE_GETSIZE", Const, 0, ""},
-		{"IP_FW_TABLE_LIST", Const, 0, ""},
-		{"IP_FW_ZERO", Const, 0, ""},
-		{"IP_HDRINCL", Const, 0, ""},
-		{"IP_IPCOMP_LEVEL", Const, 1, ""},
-		{"IP_IPSECFLOWINFO", Const, 1, ""},
-		{"IP_IPSEC_LOCAL_AUTH", Const, 1, ""},
-		{"IP_IPSEC_LOCAL_CRED", Const, 1, ""},
-		{"IP_IPSEC_LOCAL_ID", Const, 1, ""},
-		{"IP_IPSEC_POLICY", Const, 0, ""},
-		{"IP_IPSEC_REMOTE_AUTH", Const, 1, ""},
-		{"IP_IPSEC_REMOTE_CRED", Const, 1, ""},
-		{"IP_IPSEC_REMOTE_ID", Const, 1, ""},
-		{"IP_MAXPACKET", Const, 0, ""},
-		{"IP_MAX_GROUP_SRC_FILTER", Const, 0, ""},
-		{"IP_MAX_MEMBERSHIPS", Const, 0, ""},
-		{"IP_MAX_SOCK_MUTE_FILTER", Const, 0, ""},
-		{"IP_MAX_SOCK_SRC_FILTER", Const, 0, ""},
-		{"IP_MAX_SOURCE_FILTER", Const, 0, ""},
-		{"IP_MF", Const, 0, ""},
-		{"IP_MINFRAGSIZE", Const, 1, ""},
-		{"IP_MINTTL", Const, 0, ""},
-		{"IP_MIN_MEMBERSHIPS", Const, 0, ""},
-		{"IP_MSFILTER", Const, 0, ""},
-		{"IP_MSS", Const, 0, ""},
-		{"IP_MTU", Const, 0, ""},
-		{"IP_MTU_DISCOVER", Const, 0, ""},
-		{"IP_MULTICAST_IF", Const, 0, ""},
-		{"IP_MULTICAST_IFINDEX", Const, 0, ""},
-		{"IP_MULTICAST_LOOP", Const, 0, ""},
-		{"IP_MULTICAST_TTL", Const, 0, ""},
-		{"IP_MULTICAST_VIF", Const, 0, ""},
-		{"IP_NAT__XXX", Const, 0, ""},
-		{"IP_OFFMASK", Const, 0, ""},
-		{"IP_OLD_FW_ADD", Const, 0, ""},
-		{"IP_OLD_FW_DEL", Const, 0, ""},
-		{"IP_OLD_FW_FLUSH", Const, 0, ""},
-		{"IP_OLD_FW_GET", Const, 0, ""},
-		{"IP_OLD_FW_RESETLOG", Const, 0, ""},
-		{"IP_OLD_FW_ZERO", Const, 0, ""},
-		{"IP_ONESBCAST", Const, 0, ""},
-		{"IP_OPTIONS", Const, 0, ""},
-		{"IP_ORIGDSTADDR", Const, 0, ""},
-		{"IP_PASSSEC", Const, 0, ""},
-		{"IP_PIPEX", Const, 1, ""},
-		{"IP_PKTINFO", Const, 0, ""},
-		{"IP_PKTOPTIONS", Const, 0, ""},
-		{"IP_PMTUDISC", Const, 0, ""},
-		{"IP_PMTUDISC_DO", Const, 0, ""},
-		{"IP_PMTUDISC_DONT", Const, 0, ""},
-		{"IP_PMTUDISC_PROBE", Const, 0, ""},
-		{"IP_PMTUDISC_WANT", Const, 0, ""},
-		{"IP_PORTRANGE", Const, 0, ""},
-		{"IP_PORTRANGE_DEFAULT", Const, 0, ""},
-		{"IP_PORTRANGE_HIGH", Const, 0, ""},
-		{"IP_PORTRANGE_LOW", Const, 0, ""},
-		{"IP_RECVDSTADDR", Const, 0, ""},
-		{"IP_RECVDSTPORT", Const, 1, ""},
-		{"IP_RECVERR", Const, 0, ""},
-		{"IP_RECVIF", Const, 0, ""},
-		{"IP_RECVOPTS", Const, 0, ""},
-		{"IP_RECVORIGDSTADDR", Const, 0, ""},
-		{"IP_RECVPKTINFO", Const, 0, ""},
-		{"IP_RECVRETOPTS", Const, 0, ""},
-		{"IP_RECVRTABLE", Const, 1, ""},
-		{"IP_RECVTOS", Const, 0, ""},
-		{"IP_RECVTTL", Const, 0, ""},
-		{"IP_RETOPTS", Const, 0, ""},
-		{"IP_RF", Const, 0, ""},
-		{"IP_ROUTER_ALERT", Const, 0, ""},
-		{"IP_RSVP_OFF", Const, 0, ""},
-		{"IP_RSVP_ON", Const, 0, ""},
-		{"IP_RSVP_VIF_OFF", Const, 0, ""},
-		{"IP_RSVP_VIF_ON", Const, 0, ""},
-		{"IP_RTABLE", Const, 1, ""},
-		{"IP_SENDSRCADDR", Const, 0, ""},
-		{"IP_STRIPHDR", Const, 0, ""},
-		{"IP_TOS", Const, 0, ""},
-		{"IP_TRAFFIC_MGT_BACKGROUND", Const, 0, ""},
-		{"IP_TRANSPARENT", Const, 0, ""},
-		{"IP_TTL", Const, 0, ""},
-		{"IP_UNBLOCK_SOURCE", Const, 0, ""},
-		{"IP_XFRM_POLICY", Const, 0, ""},
-		{"IPv6MTUInfo", Type, 2, ""},
-		{"IPv6MTUInfo.Addr", Field, 2, ""},
-		{"IPv6MTUInfo.Mtu", Field, 2, ""},
-		{"IPv6Mreq", Type, 0, ""},
-		{"IPv6Mreq.Interface", Field, 0, ""},
-		{"IPv6Mreq.Multiaddr", Field, 0, ""},
-		{"ISIG", Const, 0, ""},
-		{"ISTRIP", Const, 0, ""},
-		{"IUCLC", Const, 0, ""},
-		{"IUTF8", Const, 0, ""},
-		{"IXANY", Const, 0, ""},
-		{"IXOFF", Const, 0, ""},
-		{"IXON", Const, 0, ""},
-		{"IfAddrmsg", Type, 0, ""},
-		{"IfAddrmsg.Family", Field, 0, ""},
-		{"IfAddrmsg.Flags", Field, 0, ""},
-		{"IfAddrmsg.Index", Field, 0, ""},
-		{"IfAddrmsg.Prefixlen", Field, 0, ""},
-		{"IfAddrmsg.Scope", Field, 0, ""},
-		{"IfAnnounceMsghdr", Type, 1, ""},
-		{"IfAnnounceMsghdr.Hdrlen", Field, 2, ""},
-		{"IfAnnounceMsghdr.Index", Field, 1, ""},
-		{"IfAnnounceMsghdr.Msglen", Field, 1, ""},
-		{"IfAnnounceMsghdr.Name", Field, 1, ""},
-		{"IfAnnounceMsghdr.Type", Field, 1, ""},
-		{"IfAnnounceMsghdr.Version", Field, 1, ""},
-		{"IfAnnounceMsghdr.What", Field, 1, ""},
-		{"IfData", Type, 0, ""},
-		{"IfData.Addrlen", Field, 0, ""},
-		{"IfData.Baudrate", Field, 0, ""},
-		{"IfData.Capabilities", Field, 2, ""},
-		{"IfData.Collisions", Field, 0, ""},
-		{"IfData.Datalen", Field, 0, ""},
-		{"IfData.Epoch", Field, 0, ""},
-		{"IfData.Hdrlen", Field, 0, ""},
-		{"IfData.Hwassist", Field, 0, ""},
-		{"IfData.Ibytes", Field, 0, ""},
-		{"IfData.Ierrors", Field, 0, ""},
-		{"IfData.Imcasts", Field, 0, ""},
-		{"IfData.Ipackets", Field, 0, ""},
-		{"IfData.Iqdrops", Field, 0, ""},
-		{"IfData.Lastchange", Field, 0, ""},
-		{"IfData.Link_state", Field, 0, ""},
-		{"IfData.Mclpool", Field, 2, ""},
-		{"IfData.Metric", Field, 0, ""},
-		{"IfData.Mtu", Field, 0, ""},
-		{"IfData.Noproto", Field, 0, ""},
-		{"IfData.Obytes", Field, 0, ""},
-		{"IfData.Oerrors", Field, 0, ""},
-		{"IfData.Omcasts", Field, 0, ""},
-		{"IfData.Opackets", Field, 0, ""},
-		{"IfData.Pad", Field, 2, ""},
-		{"IfData.Pad_cgo_0", Field, 2, ""},
-		{"IfData.Pad_cgo_1", Field, 2, ""},
-		{"IfData.Physical", Field, 0, ""},
-		{"IfData.Recvquota", Field, 0, ""},
-		{"IfData.Recvtiming", Field, 0, ""},
-		{"IfData.Reserved1", Field, 0, ""},
-		{"IfData.Reserved2", Field, 0, ""},
-		{"IfData.Spare_char1", Field, 0, ""},
-		{"IfData.Spare_char2", Field, 0, ""},
-		{"IfData.Type", Field, 0, ""},
-		{"IfData.Typelen", Field, 0, ""},
-		{"IfData.Unused1", Field, 0, ""},
-		{"IfData.Unused2", Field, 0, ""},
-		{"IfData.Xmitquota", Field, 0, ""},
-		{"IfData.Xmittiming", Field, 0, ""},
-		{"IfInfomsg", Type, 0, ""},
-		{"IfInfomsg.Change", Field, 0, ""},
-		{"IfInfomsg.Family", Field, 0, ""},
-		{"IfInfomsg.Flags", Field, 0, ""},
-		{"IfInfomsg.Index", Field, 0, ""},
-		{"IfInfomsg.Type", Field, 0, ""},
-		{"IfInfomsg.X__ifi_pad", Field, 0, ""},
-		{"IfMsghdr", Type, 0, ""},
-		{"IfMsghdr.Addrs", Field, 0, ""},
-		{"IfMsghdr.Data", Field, 0, ""},
-		{"IfMsghdr.Flags", Field, 0, ""},
-		{"IfMsghdr.Hdrlen", Field, 2, ""},
-		{"IfMsghdr.Index", Field, 0, ""},
-		{"IfMsghdr.Msglen", Field, 0, ""},
-		{"IfMsghdr.Pad1", Field, 2, ""},
-		{"IfMsghdr.Pad2", Field, 2, ""},
-		{"IfMsghdr.Pad_cgo_0", Field, 0, ""},
-		{"IfMsghdr.Pad_cgo_1", Field, 2, ""},
-		{"IfMsghdr.Tableid", Field, 2, ""},
-		{"IfMsghdr.Type", Field, 0, ""},
-		{"IfMsghdr.Version", Field, 0, ""},
-		{"IfMsghdr.Xflags", Field, 2, ""},
-		{"IfaMsghdr", Type, 0, ""},
-		{"IfaMsghdr.Addrs", Field, 0, ""},
-		{"IfaMsghdr.Flags", Field, 0, ""},
-		{"IfaMsghdr.Hdrlen", Field, 2, ""},
-		{"IfaMsghdr.Index", Field, 0, ""},
-		{"IfaMsghdr.Metric", Field, 0, ""},
-		{"IfaMsghdr.Msglen", Field, 0, ""},
-		{"IfaMsghdr.Pad1", Field, 2, ""},
-		{"IfaMsghdr.Pad2", Field, 2, ""},
-		{"IfaMsghdr.Pad_cgo_0", Field, 0, ""},
-		{"IfaMsghdr.Tableid", Field, 2, ""},
-		{"IfaMsghdr.Type", Field, 0, ""},
-		{"IfaMsghdr.Version", Field, 0, ""},
-		{"IfmaMsghdr", Type, 0, ""},
-		{"IfmaMsghdr.Addrs", Field, 0, ""},
-		{"IfmaMsghdr.Flags", Field, 0, ""},
-		{"IfmaMsghdr.Index", Field, 0, ""},
-		{"IfmaMsghdr.Msglen", Field, 0, ""},
-		{"IfmaMsghdr.Pad_cgo_0", Field, 0, ""},
-		{"IfmaMsghdr.Type", Field, 0, ""},
-		{"IfmaMsghdr.Version", Field, 0, ""},
-		{"IfmaMsghdr2", Type, 0, ""},
-		{"IfmaMsghdr2.Addrs", Field, 0, ""},
-		{"IfmaMsghdr2.Flags", Field, 0, ""},
-		{"IfmaMsghdr2.Index", Field, 0, ""},
-		{"IfmaMsghdr2.Msglen", Field, 0, ""},
-		{"IfmaMsghdr2.Pad_cgo_0", Field, 0, ""},
-		{"IfmaMsghdr2.Refcount", Field, 0, ""},
-		{"IfmaMsghdr2.Type", Field, 0, ""},
-		{"IfmaMsghdr2.Version", Field, 0, ""},
-		{"ImplementsGetwd", Const, 0, ""},
-		{"Inet4Pktinfo", Type, 0, ""},
-		{"Inet4Pktinfo.Addr", Field, 0, ""},
-		{"Inet4Pktinfo.Ifindex", Field, 0, ""},
-		{"Inet4Pktinfo.Spec_dst", Field, 0, ""},
-		{"Inet6Pktinfo", Type, 0, ""},
-		{"Inet6Pktinfo.Addr", Field, 0, ""},
-		{"Inet6Pktinfo.Ifindex", Field, 0, ""},
-		{"InotifyAddWatch", Func, 0, "func(fd int, pathname string, mask uint32) (watchdesc int, err error)"},
-		{"InotifyEvent", Type, 0, ""},
-		{"InotifyEvent.Cookie", Field, 0, ""},
-		{"InotifyEvent.Len", Field, 0, ""},
-		{"InotifyEvent.Mask", Field, 0, ""},
-		{"InotifyEvent.Name", Field, 0, ""},
-		{"InotifyEvent.Wd", Field, 0, ""},
-		{"InotifyInit", Func, 0, "func() (fd int, err error)"},
-		{"InotifyInit1", Func, 0, "func(flags int) (fd int, err error)"},
-		{"InotifyRmWatch", Func, 0, "func(fd int, watchdesc uint32) (success int, err error)"},
-		{"InterfaceAddrMessage", Type, 0, ""},
-		{"InterfaceAddrMessage.Data", Field, 0, ""},
-		{"InterfaceAddrMessage.Header", Field, 0, ""},
-		{"InterfaceAnnounceMessage", Type, 1, ""},
-		{"InterfaceAnnounceMessage.Header", Field, 1, ""},
-		{"InterfaceInfo", Type, 0, ""},
-		{"InterfaceInfo.Address", Field, 0, ""},
-		{"InterfaceInfo.BroadcastAddress", Field, 0, ""},
-		{"InterfaceInfo.Flags", Field, 0, ""},
-		{"InterfaceInfo.Netmask", Field, 0, ""},
-		{"InterfaceMessage", Type, 0, ""},
-		{"InterfaceMessage.Data", Field, 0, ""},
-		{"InterfaceMessage.Header", Field, 0, ""},
-		{"InterfaceMulticastAddrMessage", Type, 0, ""},
-		{"InterfaceMulticastAddrMessage.Data", Field, 0, ""},
-		{"InterfaceMulticastAddrMessage.Header", Field, 0, ""},
-		{"InvalidHandle", Const, 0, ""},
-		{"Ioperm", Func, 0, "func(from int, num int, on int) (err error)"},
-		{"Iopl", Func, 0, "func(level int) (err error)"},
-		{"Iovec", Type, 0, ""},
-		{"Iovec.Base", Field, 0, ""},
-		{"Iovec.Len", Field, 0, ""},
-		{"IpAdapterInfo", Type, 0, ""},
-		{"IpAdapterInfo.AdapterName", Field, 0, ""},
-		{"IpAdapterInfo.Address", Field, 0, ""},
-		{"IpAdapterInfo.AddressLength", Field, 0, ""},
-		{"IpAdapterInfo.ComboIndex", Field, 0, ""},
-		{"IpAdapterInfo.CurrentIpAddress", Field, 0, ""},
-		{"IpAdapterInfo.Description", Field, 0, ""},
-		{"IpAdapterInfo.DhcpEnabled", Field, 0, ""},
-		{"IpAdapterInfo.DhcpServer", Field, 0, ""},
-		{"IpAdapterInfo.GatewayList", Field, 0, ""},
-		{"IpAdapterInfo.HaveWins", Field, 0, ""},
-		{"IpAdapterInfo.Index", Field, 0, ""},
-		{"IpAdapterInfo.IpAddressList", Field, 0, ""},
-		{"IpAdapterInfo.LeaseExpires", Field, 0, ""},
-		{"IpAdapterInfo.LeaseObtained", Field, 0, ""},
-		{"IpAdapterInfo.Next", Field, 0, ""},
-		{"IpAdapterInfo.PrimaryWinsServer", Field, 0, ""},
-		{"IpAdapterInfo.SecondaryWinsServer", Field, 0, ""},
-		{"IpAdapterInfo.Type", Field, 0, ""},
-		{"IpAddrString", Type, 0, ""},
-		{"IpAddrString.Context", Field, 0, ""},
-		{"IpAddrString.IpAddress", Field, 0, ""},
-		{"IpAddrString.IpMask", Field, 0, ""},
-		{"IpAddrString.Next", Field, 0, ""},
-		{"IpAddressString", Type, 0, ""},
-		{"IpAddressString.String", Field, 0, ""},
-		{"IpMaskString", Type, 0, ""},
-		{"IpMaskString.String", Field, 2, ""},
-		{"Issetugid", Func, 0, ""},
-		{"KEY_ALL_ACCESS", Const, 0, ""},
-		{"KEY_CREATE_LINK", Const, 0, ""},
-		{"KEY_CREATE_SUB_KEY", Const, 0, ""},
-		{"KEY_ENUMERATE_SUB_KEYS", Const, 0, ""},
-		{"KEY_EXECUTE", Const, 0, ""},
-		{"KEY_NOTIFY", Const, 0, ""},
-		{"KEY_QUERY_VALUE", Const, 0, ""},
-		{"KEY_READ", Const, 0, ""},
-		{"KEY_SET_VALUE", Const, 0, ""},
-		{"KEY_WOW64_32KEY", Const, 0, ""},
-		{"KEY_WOW64_64KEY", Const, 0, ""},
-		{"KEY_WRITE", Const, 0, ""},
-		{"Kevent", Func, 0, ""},
-		{"Kevent_t", Type, 0, ""},
-		{"Kevent_t.Data", Field, 0, ""},
-		{"Kevent_t.Fflags", Field, 0, ""},
-		{"Kevent_t.Filter", Field, 0, ""},
-		{"Kevent_t.Flags", Field, 0, ""},
-		{"Kevent_t.Ident", Field, 0, ""},
-		{"Kevent_t.Pad_cgo_0", Field, 2, ""},
-		{"Kevent_t.Udata", Field, 0, ""},
-		{"Kill", Func, 0, "func(pid int, sig Signal) (err error)"},
-		{"Klogctl", Func, 0, "func(typ int, buf []byte) (n int, err error)"},
-		{"Kqueue", Func, 0, ""},
-		{"LANG_ENGLISH", Const, 0, ""},
-		{"LAYERED_PROTOCOL", Const, 2, ""},
-		{"LCNT_OVERLOAD_FLUSH", Const, 1, ""},
-		{"LINUX_REBOOT_CMD_CAD_OFF", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_CAD_ON", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_HALT", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_KEXEC", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_POWER_OFF", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_RESTART", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_RESTART2", Const, 0, ""},
-		{"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0, ""},
-		{"LINUX_REBOOT_MAGIC1", Const, 0, ""},
-		{"LINUX_REBOOT_MAGIC2", Const, 0, ""},
-		{"LOCK_EX", Const, 0, ""},
-		{"LOCK_NB", Const, 0, ""},
-		{"LOCK_SH", Const, 0, ""},
-		{"LOCK_UN", Const, 0, ""},
-		{"LazyDLL", Type, 0, ""},
-		{"LazyDLL.Name", Field, 0, ""},
-		{"LazyProc", Type, 0, ""},
-		{"LazyProc.Name", Field, 0, ""},
-		{"Lchown", Func, 0, "func(path string, uid int, gid int) (err error)"},
-		{"Linger", Type, 0, ""},
-		{"Linger.Linger", Field, 0, ""},
-		{"Linger.Onoff", Field, 0, ""},
-		{"Link", Func, 0, "func(oldpath string, newpath string) (err error)"},
-		{"Listen", Func, 0, "func(s int, n int) (err error)"},
-		{"Listxattr", Func, 1, "func(path string, dest []byte) (sz int, err error)"},
-		{"LoadCancelIoEx", Func, 1, ""},
-		{"LoadConnectEx", Func, 1, ""},
-		{"LoadCreateSymbolicLink", Func, 4, ""},
-		{"LoadDLL", Func, 0, ""},
-		{"LoadGetAddrInfo", Func, 1, ""},
-		{"LoadLibrary", Func, 0, ""},
-		{"LoadSetFileCompletionNotificationModes", Func, 2, ""},
-		{"LocalFree", Func, 0, ""},
-		{"Log2phys_t", Type, 0, ""},
-		{"Log2phys_t.Contigbytes", Field, 0, ""},
-		{"Log2phys_t.Devoffset", Field, 0, ""},
-		{"Log2phys_t.Flags", Field, 0, ""},
-		{"LookupAccountName", Func, 0, ""},
-		{"LookupAccountSid", Func, 0, ""},
-		{"LookupSID", Func, 0, ""},
-		{"LsfJump", Func, 0, "func(code int, k int, jt int, jf int) *SockFilter"},
-		{"LsfSocket", Func, 0, "func(ifindex int, proto int) (int, error)"},
-		{"LsfStmt", Func, 0, "func(code int, k int) *SockFilter"},
-		{"Lstat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
-		{"MADV_AUTOSYNC", Const, 1, ""},
-		{"MADV_CAN_REUSE", Const, 0, ""},
-		{"MADV_CORE", Const, 1, ""},
-		{"MADV_DOFORK", Const, 0, ""},
-		{"MADV_DONTFORK", Const, 0, ""},
-		{"MADV_DONTNEED", Const, 0, ""},
-		{"MADV_FREE", Const, 0, ""},
-		{"MADV_FREE_REUSABLE", Const, 0, ""},
-		{"MADV_FREE_REUSE", Const, 0, ""},
-		{"MADV_HUGEPAGE", Const, 0, ""},
-		{"MADV_HWPOISON", Const, 0, ""},
-		{"MADV_MERGEABLE", Const, 0, ""},
-		{"MADV_NOCORE", Const, 1, ""},
-		{"MADV_NOHUGEPAGE", Const, 0, ""},
-		{"MADV_NORMAL", Const, 0, ""},
-		{"MADV_NOSYNC", Const, 1, ""},
-		{"MADV_PROTECT", Const, 1, ""},
-		{"MADV_RANDOM", Const, 0, ""},
-		{"MADV_REMOVE", Const, 0, ""},
-		{"MADV_SEQUENTIAL", Const, 0, ""},
-		{"MADV_SPACEAVAIL", Const, 3, ""},
-		{"MADV_UNMERGEABLE", Const, 0, ""},
-		{"MADV_WILLNEED", Const, 0, ""},
-		{"MADV_ZERO_WIRED_PAGES", Const, 0, ""},
-		{"MAP_32BIT", Const, 0, ""},
-		{"MAP_ALIGNED_SUPER", Const, 3, ""},
-		{"MAP_ALIGNMENT_16MB", Const, 3, ""},
-		{"MAP_ALIGNMENT_1TB", Const, 3, ""},
-		{"MAP_ALIGNMENT_256TB", Const, 3, ""},
-		{"MAP_ALIGNMENT_4GB", Const, 3, ""},
-		{"MAP_ALIGNMENT_64KB", Const, 3, ""},
-		{"MAP_ALIGNMENT_64PB", Const, 3, ""},
-		{"MAP_ALIGNMENT_MASK", Const, 3, ""},
-		{"MAP_ALIGNMENT_SHIFT", Const, 3, ""},
-		{"MAP_ANON", Const, 0, ""},
-		{"MAP_ANONYMOUS", Const, 0, ""},
-		{"MAP_COPY", Const, 0, ""},
-		{"MAP_DENYWRITE", Const, 0, ""},
-		{"MAP_EXECUTABLE", Const, 0, ""},
-		{"MAP_FILE", Const, 0, ""},
-		{"MAP_FIXED", Const, 0, ""},
-		{"MAP_FLAGMASK", Const, 3, ""},
-		{"MAP_GROWSDOWN", Const, 0, ""},
-		{"MAP_HASSEMAPHORE", Const, 0, ""},
-		{"MAP_HUGETLB", Const, 0, ""},
-		{"MAP_INHERIT", Const, 3, ""},
-		{"MAP_INHERIT_COPY", Const, 3, ""},
-		{"MAP_INHERIT_DEFAULT", Const, 3, ""},
-		{"MAP_INHERIT_DONATE_COPY", Const, 3, ""},
-		{"MAP_INHERIT_NONE", Const, 3, ""},
-		{"MAP_INHERIT_SHARE", Const, 3, ""},
-		{"MAP_JIT", Const, 0, ""},
-		{"MAP_LOCKED", Const, 0, ""},
-		{"MAP_NOCACHE", Const, 0, ""},
-		{"MAP_NOCORE", Const, 1, ""},
-		{"MAP_NOEXTEND", Const, 0, ""},
-		{"MAP_NONBLOCK", Const, 0, ""},
-		{"MAP_NORESERVE", Const, 0, ""},
-		{"MAP_NOSYNC", Const, 1, ""},
-		{"MAP_POPULATE", Const, 0, ""},
-		{"MAP_PREFAULT_READ", Const, 1, ""},
-		{"MAP_PRIVATE", Const, 0, ""},
-		{"MAP_RENAME", Const, 0, ""},
-		{"MAP_RESERVED0080", Const, 0, ""},
-		{"MAP_RESERVED0100", Const, 1, ""},
-		{"MAP_SHARED", Const, 0, ""},
-		{"MAP_STACK", Const, 0, ""},
-		{"MAP_TRYFIXED", Const, 3, ""},
-		{"MAP_TYPE", Const, 0, ""},
-		{"MAP_WIRED", Const, 3, ""},
-		{"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4, ""},
-		{"MAXLEN_IFDESCR", Const, 0, ""},
-		{"MAXLEN_PHYSADDR", Const, 0, ""},
-		{"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0, ""},
-		{"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0, ""},
-		{"MAX_ADAPTER_NAME_LENGTH", Const, 0, ""},
-		{"MAX_COMPUTERNAME_LENGTH", Const, 0, ""},
-		{"MAX_INTERFACE_NAME_LEN", Const, 0, ""},
-		{"MAX_LONG_PATH", Const, 0, ""},
-		{"MAX_PATH", Const, 0, ""},
-		{"MAX_PROTOCOL_CHAIN", Const, 2, ""},
-		{"MCL_CURRENT", Const, 0, ""},
-		{"MCL_FUTURE", Const, 0, ""},
-		{"MNT_DETACH", Const, 0, ""},
-		{"MNT_EXPIRE", Const, 0, ""},
-		{"MNT_FORCE", Const, 0, ""},
-		{"MSG_BCAST", Const, 1, ""},
-		{"MSG_CMSG_CLOEXEC", Const, 0, ""},
-		{"MSG_COMPAT", Const, 0, ""},
-		{"MSG_CONFIRM", Const, 0, ""},
-		{"MSG_CONTROLMBUF", Const, 1, ""},
-		{"MSG_CTRUNC", Const, 0, ""},
-		{"MSG_DONTROUTE", Const, 0, ""},
-		{"MSG_DONTWAIT", Const, 0, ""},
-		{"MSG_EOF", Const, 0, ""},
-		{"MSG_EOR", Const, 0, ""},
-		{"MSG_ERRQUEUE", Const, 0, ""},
-		{"MSG_FASTOPEN", Const, 1, ""},
-		{"MSG_FIN", Const, 0, ""},
-		{"MSG_FLUSH", Const, 0, ""},
-		{"MSG_HAVEMORE", Const, 0, ""},
-		{"MSG_HOLD", Const, 0, ""},
-		{"MSG_IOVUSRSPACE", Const, 1, ""},
-		{"MSG_LENUSRSPACE", Const, 1, ""},
-		{"MSG_MCAST", Const, 1, ""},
-		{"MSG_MORE", Const, 0, ""},
-		{"MSG_NAMEMBUF", Const, 1, ""},
-		{"MSG_NBIO", Const, 0, ""},
-		{"MSG_NEEDSA", Const, 0, ""},
-		{"MSG_NOSIGNAL", Const, 0, ""},
-		{"MSG_NOTIFICATION", Const, 0, ""},
-		{"MSG_OOB", Const, 0, ""},
-		{"MSG_PEEK", Const, 0, ""},
-		{"MSG_PROXY", Const, 0, ""},
-		{"MSG_RCVMORE", Const, 0, ""},
-		{"MSG_RST", Const, 0, ""},
-		{"MSG_SEND", Const, 0, ""},
-		{"MSG_SYN", Const, 0, ""},
-		{"MSG_TRUNC", Const, 0, ""},
-		{"MSG_TRYHARD", Const, 0, ""},
-		{"MSG_USERFLAGS", Const, 1, ""},
-		{"MSG_WAITALL", Const, 0, ""},
-		{"MSG_WAITFORONE", Const, 0, ""},
-		{"MSG_WAITSTREAM", Const, 0, ""},
-		{"MS_ACTIVE", Const, 0, ""},
-		{"MS_ASYNC", Const, 0, ""},
-		{"MS_BIND", Const, 0, ""},
-		{"MS_DEACTIVATE", Const, 0, ""},
-		{"MS_DIRSYNC", Const, 0, ""},
-		{"MS_INVALIDATE", Const, 0, ""},
-		{"MS_I_VERSION", Const, 0, ""},
-		{"MS_KERNMOUNT", Const, 0, ""},
-		{"MS_KILLPAGES", Const, 0, ""},
-		{"MS_MANDLOCK", Const, 0, ""},
-		{"MS_MGC_MSK", Const, 0, ""},
-		{"MS_MGC_VAL", Const, 0, ""},
-		{"MS_MOVE", Const, 0, ""},
-		{"MS_NOATIME", Const, 0, ""},
-		{"MS_NODEV", Const, 0, ""},
-		{"MS_NODIRATIME", Const, 0, ""},
-		{"MS_NOEXEC", Const, 0, ""},
-		{"MS_NOSUID", Const, 0, ""},
-		{"MS_NOUSER", Const, 0, ""},
-		{"MS_POSIXACL", Const, 0, ""},
-		{"MS_PRIVATE", Const, 0, ""},
-		{"MS_RDONLY", Const, 0, ""},
-		{"MS_REC", Const, 0, ""},
-		{"MS_RELATIME", Const, 0, ""},
-		{"MS_REMOUNT", Const, 0, ""},
-		{"MS_RMT_MASK", Const, 0, ""},
-		{"MS_SHARED", Const, 0, ""},
-		{"MS_SILENT", Const, 0, ""},
-		{"MS_SLAVE", Const, 0, ""},
-		{"MS_STRICTATIME", Const, 0, ""},
-		{"MS_SYNC", Const, 0, ""},
-		{"MS_SYNCHRONOUS", Const, 0, ""},
-		{"MS_UNBINDABLE", Const, 0, ""},
-		{"Madvise", Func, 0, "func(b []byte, advice int) (err error)"},
-		{"MapViewOfFile", Func, 0, ""},
-		{"MaxTokenInfoClass", Const, 0, ""},
-		{"Mclpool", Type, 2, ""},
-		{"Mclpool.Alive", Field, 2, ""},
-		{"Mclpool.Cwm", Field, 2, ""},
-		{"Mclpool.Grown", Field, 2, ""},
-		{"Mclpool.Hwm", Field, 2, ""},
-		{"Mclpool.Lwm", Field, 2, ""},
-		{"MibIfRow", Type, 0, ""},
-		{"MibIfRow.AdminStatus", Field, 0, ""},
-		{"MibIfRow.Descr", Field, 0, ""},
-		{"MibIfRow.DescrLen", Field, 0, ""},
-		{"MibIfRow.InDiscards", Field, 0, ""},
-		{"MibIfRow.InErrors", Field, 0, ""},
-		{"MibIfRow.InNUcastPkts", Field, 0, ""},
-		{"MibIfRow.InOctets", Field, 0, ""},
-		{"MibIfRow.InUcastPkts", Field, 0, ""},
-		{"MibIfRow.InUnknownProtos", Field, 0, ""},
-		{"MibIfRow.Index", Field, 0, ""},
-		{"MibIfRow.LastChange", Field, 0, ""},
-		{"MibIfRow.Mtu", Field, 0, ""},
-		{"MibIfRow.Name", Field, 0, ""},
-		{"MibIfRow.OperStatus", Field, 0, ""},
-		{"MibIfRow.OutDiscards", Field, 0, ""},
-		{"MibIfRow.OutErrors", Field, 0, ""},
-		{"MibIfRow.OutNUcastPkts", Field, 0, ""},
-		{"MibIfRow.OutOctets", Field, 0, ""},
-		{"MibIfRow.OutQLen", Field, 0, ""},
-		{"MibIfRow.OutUcastPkts", Field, 0, ""},
-		{"MibIfRow.PhysAddr", Field, 0, ""},
-		{"MibIfRow.PhysAddrLen", Field, 0, ""},
-		{"MibIfRow.Speed", Field, 0, ""},
-		{"MibIfRow.Type", Field, 0, ""},
-		{"Mkdir", Func, 0, "func(path string, mode uint32) (err error)"},
-		{"Mkdirat", Func, 0, "func(dirfd int, path string, mode uint32) (err error)"},
-		{"Mkfifo", Func, 0, "func(path string, mode uint32) (err error)"},
-		{"Mknod", Func, 0, "func(path string, mode uint32, dev int) (err error)"},
-		{"Mknodat", Func, 0, "func(dirfd int, path string, mode uint32, dev int) (err error)"},
-		{"Mlock", Func, 0, "func(b []byte) (err error)"},
-		{"Mlockall", Func, 0, "func(flags int) (err error)"},
-		{"Mmap", Func, 0, "func(fd int, offset int64, length int, prot int, flags int) (data []byte, err error)"},
-		{"Mount", Func, 0, "func(source string, target string, fstype string, flags uintptr, data string) (err error)"},
-		{"MoveFile", Func, 0, ""},
-		{"Mprotect", Func, 0, "func(b []byte, prot int) (err error)"},
-		{"Msghdr", Type, 0, ""},
-		{"Msghdr.Control", Field, 0, ""},
-		{"Msghdr.Controllen", Field, 0, ""},
-		{"Msghdr.Flags", Field, 0, ""},
-		{"Msghdr.Iov", Field, 0, ""},
-		{"Msghdr.Iovlen", Field, 0, ""},
-		{"Msghdr.Name", Field, 0, ""},
-		{"Msghdr.Namelen", Field, 0, ""},
-		{"Msghdr.Pad_cgo_0", Field, 0, ""},
-		{"Msghdr.Pad_cgo_1", Field, 0, ""},
-		{"Munlock", Func, 0, "func(b []byte) (err error)"},
-		{"Munlockall", Func, 0, "func() (err error)"},
-		{"Munmap", Func, 0, "func(b []byte) (err error)"},
-		{"MustLoadDLL", Func, 0, ""},
-		{"NAME_MAX", Const, 0, ""},
-		{"NETLINK_ADD_MEMBERSHIP", Const, 0, ""},
-		{"NETLINK_AUDIT", Const, 0, ""},
-		{"NETLINK_BROADCAST_ERROR", Const, 0, ""},
-		{"NETLINK_CONNECTOR", Const, 0, ""},
-		{"NETLINK_DNRTMSG", Const, 0, ""},
-		{"NETLINK_DROP_MEMBERSHIP", Const, 0, ""},
-		{"NETLINK_ECRYPTFS", Const, 0, ""},
-		{"NETLINK_FIB_LOOKUP", Const, 0, ""},
-		{"NETLINK_FIREWALL", Const, 0, ""},
-		{"NETLINK_GENERIC", Const, 0, ""},
-		{"NETLINK_INET_DIAG", Const, 0, ""},
-		{"NETLINK_IP6_FW", Const, 0, ""},
-		{"NETLINK_ISCSI", Const, 0, ""},
-		{"NETLINK_KOBJECT_UEVENT", Const, 0, ""},
-		{"NETLINK_NETFILTER", Const, 0, ""},
-		{"NETLINK_NFLOG", Const, 0, ""},
-		{"NETLINK_NO_ENOBUFS", Const, 0, ""},
-		{"NETLINK_PKTINFO", Const, 0, ""},
-		{"NETLINK_RDMA", Const, 0, ""},
-		{"NETLINK_ROUTE", Const, 0, ""},
-		{"NETLINK_SCSITRANSPORT", Const, 0, ""},
-		{"NETLINK_SELINUX", Const, 0, ""},
-		{"NETLINK_UNUSED", Const, 0, ""},
-		{"NETLINK_USERSOCK", Const, 0, ""},
-		{"NETLINK_XFRM", Const, 0, ""},
-		{"NET_RT_DUMP", Const, 0, ""},
-		{"NET_RT_DUMP2", Const, 0, ""},
-		{"NET_RT_FLAGS", Const, 0, ""},
-		{"NET_RT_IFLIST", Const, 0, ""},
-		{"NET_RT_IFLIST2", Const, 0, ""},
-		{"NET_RT_IFLISTL", Const, 1, ""},
-		{"NET_RT_IFMALIST", Const, 0, ""},
-		{"NET_RT_MAXID", Const, 0, ""},
-		{"NET_RT_OIFLIST", Const, 1, ""},
-		{"NET_RT_OOIFLIST", Const, 1, ""},
-		{"NET_RT_STAT", Const, 0, ""},
-		{"NET_RT_STATS", Const, 1, ""},
-		{"NET_RT_TABLE", Const, 1, ""},
-		{"NET_RT_TRASH", Const, 0, ""},
-		{"NLA_ALIGNTO", Const, 0, ""},
-		{"NLA_F_NESTED", Const, 0, ""},
-		{"NLA_F_NET_BYTEORDER", Const, 0, ""},
-		{"NLA_HDRLEN", Const, 0, ""},
-		{"NLMSG_ALIGNTO", Const, 0, ""},
-		{"NLMSG_DONE", Const, 0, ""},
-		{"NLMSG_ERROR", Const, 0, ""},
-		{"NLMSG_HDRLEN", Const, 0, ""},
-		{"NLMSG_MIN_TYPE", Const, 0, ""},
-		{"NLMSG_NOOP", Const, 0, ""},
-		{"NLMSG_OVERRUN", Const, 0, ""},
-		{"NLM_F_ACK", Const, 0, ""},
-		{"NLM_F_APPEND", Const, 0, ""},
-		{"NLM_F_ATOMIC", Const, 0, ""},
-		{"NLM_F_CREATE", Const, 0, ""},
-		{"NLM_F_DUMP", Const, 0, ""},
-		{"NLM_F_ECHO", Const, 0, ""},
-		{"NLM_F_EXCL", Const, 0, ""},
-		{"NLM_F_MATCH", Const, 0, ""},
-		{"NLM_F_MULTI", Const, 0, ""},
-		{"NLM_F_REPLACE", Const, 0, ""},
-		{"NLM_F_REQUEST", Const, 0, ""},
-		{"NLM_F_ROOT", Const, 0, ""},
-		{"NOFLSH", Const, 0, ""},
-		{"NOTE_ABSOLUTE", Const, 0, ""},
-		{"NOTE_ATTRIB", Const, 0, ""},
-		{"NOTE_BACKGROUND", Const, 16, ""},
-		{"NOTE_CHILD", Const, 0, ""},
-		{"NOTE_CRITICAL", Const, 16, ""},
-		{"NOTE_DELETE", Const, 0, ""},
-		{"NOTE_EOF", Const, 1, ""},
-		{"NOTE_EXEC", Const, 0, ""},
-		{"NOTE_EXIT", Const, 0, ""},
-		{"NOTE_EXITSTATUS", Const, 0, ""},
-		{"NOTE_EXIT_CSERROR", Const, 16, ""},
-		{"NOTE_EXIT_DECRYPTFAIL", Const, 16, ""},
-		{"NOTE_EXIT_DETAIL", Const, 16, ""},
-		{"NOTE_EXIT_DETAIL_MASK", Const, 16, ""},
-		{"NOTE_EXIT_MEMORY", Const, 16, ""},
-		{"NOTE_EXIT_REPARENTED", Const, 16, ""},
-		{"NOTE_EXTEND", Const, 0, ""},
-		{"NOTE_FFAND", Const, 0, ""},
-		{"NOTE_FFCOPY", Const, 0, ""},
-		{"NOTE_FFCTRLMASK", Const, 0, ""},
-		{"NOTE_FFLAGSMASK", Const, 0, ""},
-		{"NOTE_FFNOP", Const, 0, ""},
-		{"NOTE_FFOR", Const, 0, ""},
-		{"NOTE_FORK", Const, 0, ""},
-		{"NOTE_LEEWAY", Const, 16, ""},
-		{"NOTE_LINK", Const, 0, ""},
-		{"NOTE_LOWAT", Const, 0, ""},
-		{"NOTE_NONE", Const, 0, ""},
-		{"NOTE_NSECONDS", Const, 0, ""},
-		{"NOTE_PCTRLMASK", Const, 0, ""},
-		{"NOTE_PDATAMASK", Const, 0, ""},
-		{"NOTE_REAP", Const, 0, ""},
-		{"NOTE_RENAME", Const, 0, ""},
-		{"NOTE_RESOURCEEND", Const, 0, ""},
-		{"NOTE_REVOKE", Const, 0, ""},
-		{"NOTE_SECONDS", Const, 0, ""},
-		{"NOTE_SIGNAL", Const, 0, ""},
-		{"NOTE_TRACK", Const, 0, ""},
-		{"NOTE_TRACKERR", Const, 0, ""},
-		{"NOTE_TRIGGER", Const, 0, ""},
-		{"NOTE_TRUNCATE", Const, 1, ""},
-		{"NOTE_USECONDS", Const, 0, ""},
-		{"NOTE_VM_ERROR", Const, 0, ""},
-		{"NOTE_VM_PRESSURE", Const, 0, ""},
-		{"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0, ""},
-		{"NOTE_VM_PRESSURE_TERMINATE", Const, 0, ""},
-		{"NOTE_WRITE", Const, 0, ""},
-		{"NameCanonical", Const, 0, ""},
-		{"NameCanonicalEx", Const, 0, ""},
-		{"NameDisplay", Const, 0, ""},
-		{"NameDnsDomain", Const, 0, ""},
-		{"NameFullyQualifiedDN", Const, 0, ""},
-		{"NameSamCompatible", Const, 0, ""},
-		{"NameServicePrincipal", Const, 0, ""},
-		{"NameUniqueId", Const, 0, ""},
-		{"NameUnknown", Const, 0, ""},
-		{"NameUserPrincipal", Const, 0, ""},
-		{"Nanosleep", Func, 0, "func(time *Timespec, leftover *Timespec) (err error)"},
-		{"NetApiBufferFree", Func, 0, ""},
-		{"NetGetJoinInformation", Func, 2, ""},
-		{"NetSetupDomainName", Const, 2, ""},
-		{"NetSetupUnjoined", Const, 2, ""},
-		{"NetSetupUnknownStatus", Const, 2, ""},
-		{"NetSetupWorkgroupName", Const, 2, ""},
-		{"NetUserGetInfo", Func, 0, ""},
-		{"NetlinkMessage", Type, 0, ""},
-		{"NetlinkMessage.Data", Field, 0, ""},
-		{"NetlinkMessage.Header", Field, 0, ""},
-		{"NetlinkRIB", Func, 0, "func(proto int, family int) ([]byte, error)"},
-		{"NetlinkRouteAttr", Type, 0, ""},
-		{"NetlinkRouteAttr.Attr", Field, 0, ""},
-		{"NetlinkRouteAttr.Value", Field, 0, ""},
-		{"NetlinkRouteRequest", Type, 0, ""},
-		{"NetlinkRouteRequest.Data", Field, 0, ""},
-		{"NetlinkRouteRequest.Header", Field, 0, ""},
-		{"NewCallback", Func, 0, ""},
-		{"NewCallbackCDecl", Func, 3, ""},
-		{"NewLazyDLL", Func, 0, ""},
-		{"NlAttr", Type, 0, ""},
-		{"NlAttr.Len", Field, 0, ""},
-		{"NlAttr.Type", Field, 0, ""},
-		{"NlMsgerr", Type, 0, ""},
-		{"NlMsgerr.Error", Field, 0, ""},
-		{"NlMsgerr.Msg", Field, 0, ""},
-		{"NlMsghdr", Type, 0, ""},
-		{"NlMsghdr.Flags", Field, 0, ""},
-		{"NlMsghdr.Len", Field, 0, ""},
-		{"NlMsghdr.Pid", Field, 0, ""},
-		{"NlMsghdr.Seq", Field, 0, ""},
-		{"NlMsghdr.Type", Field, 0, ""},
-		{"NsecToFiletime", Func, 0, ""},
-		{"NsecToTimespec", Func, 0, "func(nsec int64) Timespec"},
-		{"NsecToTimeval", Func, 0, "func(nsec int64) Timeval"},
-		{"Ntohs", Func, 0, ""},
-		{"OCRNL", Const, 0, ""},
-		{"OFDEL", Const, 0, ""},
-		{"OFILL", Const, 0, ""},
-		{"OFIOGETBMAP", Const, 1, ""},
-		{"OID_PKIX_KP_SERVER_AUTH", Var, 0, ""},
-		{"OID_SERVER_GATED_CRYPTO", Var, 0, ""},
-		{"OID_SGC_NETSCAPE", Var, 0, ""},
-		{"OLCUC", Const, 0, ""},
-		{"ONLCR", Const, 0, ""},
-		{"ONLRET", Const, 0, ""},
-		{"ONOCR", Const, 0, ""},
-		{"ONOEOT", Const, 1, ""},
-		{"OPEN_ALWAYS", Const, 0, ""},
-		{"OPEN_EXISTING", Const, 0, ""},
-		{"OPOST", Const, 0, ""},
-		{"O_ACCMODE", Const, 0, ""},
-		{"O_ALERT", Const, 0, ""},
-		{"O_ALT_IO", Const, 1, ""},
-		{"O_APPEND", Const, 0, ""},
-		{"O_ASYNC", Const, 0, ""},
-		{"O_CLOEXEC", Const, 0, ""},
-		{"O_CREAT", Const, 0, ""},
-		{"O_DIRECT", Const, 0, ""},
-		{"O_DIRECTORY", Const, 0, ""},
-		{"O_DP_GETRAWENCRYPTED", Const, 16, ""},
-		{"O_DSYNC", Const, 0, ""},
-		{"O_EVTONLY", Const, 0, ""},
-		{"O_EXCL", Const, 0, ""},
-		{"O_EXEC", Const, 0, ""},
-		{"O_EXLOCK", Const, 0, ""},
-		{"O_FSYNC", Const, 0, ""},
-		{"O_LARGEFILE", Const, 0, ""},
-		{"O_NDELAY", Const, 0, ""},
-		{"O_NOATIME", Const, 0, ""},
-		{"O_NOCTTY", Const, 0, ""},
-		{"O_NOFOLLOW", Const, 0, ""},
-		{"O_NONBLOCK", Const, 0, ""},
-		{"O_NOSIGPIPE", Const, 1, ""},
-		{"O_POPUP", Const, 0, ""},
-		{"O_RDONLY", Const, 0, ""},
-		{"O_RDWR", Const, 0, ""},
-		{"O_RSYNC", Const, 0, ""},
-		{"O_SHLOCK", Const, 0, ""},
-		{"O_SYMLINK", Const, 0, ""},
-		{"O_SYNC", Const, 0, ""},
-		{"O_TRUNC", Const, 0, ""},
-		{"O_TTY_INIT", Const, 0, ""},
-		{"O_WRONLY", Const, 0, ""},
-		{"Open", Func, 0, "func(path string, mode int, perm uint32) (fd int, err error)"},
-		{"OpenCurrentProcessToken", Func, 0, ""},
-		{"OpenProcess", Func, 0, ""},
-		{"OpenProcessToken", Func, 0, ""},
-		{"Openat", Func, 0, "func(dirfd int, path string, flags int, mode uint32) (fd int, err error)"},
-		{"Overlapped", Type, 0, ""},
-		{"Overlapped.HEvent", Field, 0, ""},
-		{"Overlapped.Internal", Field, 0, ""},
-		{"Overlapped.InternalHigh", Field, 0, ""},
-		{"Overlapped.Offset", Field, 0, ""},
-		{"Overlapped.OffsetHigh", Field, 0, ""},
-		{"PACKET_ADD_MEMBERSHIP", Const, 0, ""},
-		{"PACKET_BROADCAST", Const, 0, ""},
-		{"PACKET_DROP_MEMBERSHIP", Const, 0, ""},
-		{"PACKET_FASTROUTE", Const, 0, ""},
-		{"PACKET_HOST", Const, 0, ""},
-		{"PACKET_LOOPBACK", Const, 0, ""},
-		{"PACKET_MR_ALLMULTI", Const, 0, ""},
-		{"PACKET_MR_MULTICAST", Const, 0, ""},
-		{"PACKET_MR_PROMISC", Const, 0, ""},
-		{"PACKET_MULTICAST", Const, 0, ""},
-		{"PACKET_OTHERHOST", Const, 0, ""},
-		{"PACKET_OUTGOING", Const, 0, ""},
-		{"PACKET_RECV_OUTPUT", Const, 0, ""},
-		{"PACKET_RX_RING", Const, 0, ""},
-		{"PACKET_STATISTICS", Const, 0, ""},
-		{"PAGE_EXECUTE_READ", Const, 0, ""},
-		{"PAGE_EXECUTE_READWRITE", Const, 0, ""},
-		{"PAGE_EXECUTE_WRITECOPY", Const, 0, ""},
-		{"PAGE_READONLY", Const, 0, ""},
-		{"PAGE_READWRITE", Const, 0, ""},
-		{"PAGE_WRITECOPY", Const, 0, ""},
-		{"PARENB", Const, 0, ""},
-		{"PARMRK", Const, 0, ""},
-		{"PARODD", Const, 0, ""},
-		{"PENDIN", Const, 0, ""},
-		{"PFL_HIDDEN", Const, 2, ""},
-		{"PFL_MATCHES_PROTOCOL_ZERO", Const, 2, ""},
-		{"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2, ""},
-		{"PFL_NETWORKDIRECT_PROVIDER", Const, 2, ""},
-		{"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2, ""},
-		{"PF_FLUSH", Const, 1, ""},
-		{"PKCS_7_ASN_ENCODING", Const, 0, ""},
-		{"PMC5_PIPELINE_FLUSH", Const, 1, ""},
-		{"PRIO_PGRP", Const, 2, ""},
-		{"PRIO_PROCESS", Const, 2, ""},
-		{"PRIO_USER", Const, 2, ""},
-		{"PRI_IOFLUSH", Const, 1, ""},
-		{"PROCESS_QUERY_INFORMATION", Const, 0, ""},
-		{"PROCESS_TERMINATE", Const, 2, ""},
-		{"PROT_EXEC", Const, 0, ""},
-		{"PROT_GROWSDOWN", Const, 0, ""},
-		{"PROT_GROWSUP", Const, 0, ""},
-		{"PROT_NONE", Const, 0, ""},
-		{"PROT_READ", Const, 0, ""},
-		{"PROT_WRITE", Const, 0, ""},
-		{"PROV_DH_SCHANNEL", Const, 0, ""},
-		{"PROV_DSS", Const, 0, ""},
-		{"PROV_DSS_DH", Const, 0, ""},
-		{"PROV_EC_ECDSA_FULL", Const, 0, ""},
-		{"PROV_EC_ECDSA_SIG", Const, 0, ""},
-		{"PROV_EC_ECNRA_FULL", Const, 0, ""},
-		{"PROV_EC_ECNRA_SIG", Const, 0, ""},
-		{"PROV_FORTEZZA", Const, 0, ""},
-		{"PROV_INTEL_SEC", Const, 0, ""},
-		{"PROV_MS_EXCHANGE", Const, 0, ""},
-		{"PROV_REPLACE_OWF", Const, 0, ""},
-		{"PROV_RNG", Const, 0, ""},
-		{"PROV_RSA_AES", Const, 0, ""},
-		{"PROV_RSA_FULL", Const, 0, ""},
-		{"PROV_RSA_SCHANNEL", Const, 0, ""},
-		{"PROV_RSA_SIG", Const, 0, ""},
-		{"PROV_SPYRUS_LYNKS", Const, 0, ""},
-		{"PROV_SSL", Const, 0, ""},
-		{"PR_CAPBSET_DROP", Const, 0, ""},
-		{"PR_CAPBSET_READ", Const, 0, ""},
-		{"PR_CLEAR_SECCOMP_FILTER", Const, 0, ""},
-		{"PR_ENDIAN_BIG", Const, 0, ""},
-		{"PR_ENDIAN_LITTLE", Const, 0, ""},
-		{"PR_ENDIAN_PPC_LITTLE", Const, 0, ""},
-		{"PR_FPEMU_NOPRINT", Const, 0, ""},
-		{"PR_FPEMU_SIGFPE", Const, 0, ""},
-		{"PR_FP_EXC_ASYNC", Const, 0, ""},
-		{"PR_FP_EXC_DISABLED", Const, 0, ""},
-		{"PR_FP_EXC_DIV", Const, 0, ""},
-		{"PR_FP_EXC_INV", Const, 0, ""},
-		{"PR_FP_EXC_NONRECOV", Const, 0, ""},
-		{"PR_FP_EXC_OVF", Const, 0, ""},
-		{"PR_FP_EXC_PRECISE", Const, 0, ""},
-		{"PR_FP_EXC_RES", Const, 0, ""},
-		{"PR_FP_EXC_SW_ENABLE", Const, 0, ""},
-		{"PR_FP_EXC_UND", Const, 0, ""},
-		{"PR_GET_DUMPABLE", Const, 0, ""},
-		{"PR_GET_ENDIAN", Const, 0, ""},
-		{"PR_GET_FPEMU", Const, 0, ""},
-		{"PR_GET_FPEXC", Const, 0, ""},
-		{"PR_GET_KEEPCAPS", Const, 0, ""},
-		{"PR_GET_NAME", Const, 0, ""},
-		{"PR_GET_PDEATHSIG", Const, 0, ""},
-		{"PR_GET_SECCOMP", Const, 0, ""},
-		{"PR_GET_SECCOMP_FILTER", Const, 0, ""},
-		{"PR_GET_SECUREBITS", Const, 0, ""},
-		{"PR_GET_TIMERSLACK", Const, 0, ""},
-		{"PR_GET_TIMING", Const, 0, ""},
-		{"PR_GET_TSC", Const, 0, ""},
-		{"PR_GET_UNALIGN", Const, 0, ""},
-		{"PR_MCE_KILL", Const, 0, ""},
-		{"PR_MCE_KILL_CLEAR", Const, 0, ""},
-		{"PR_MCE_KILL_DEFAULT", Const, 0, ""},
-		{"PR_MCE_KILL_EARLY", Const, 0, ""},
-		{"PR_MCE_KILL_GET", Const, 0, ""},
-		{"PR_MCE_KILL_LATE", Const, 0, ""},
-		{"PR_MCE_KILL_SET", Const, 0, ""},
-		{"PR_SECCOMP_FILTER_EVENT", Const, 0, ""},
-		{"PR_SECCOMP_FILTER_SYSCALL", Const, 0, ""},
-		{"PR_SET_DUMPABLE", Const, 0, ""},
-		{"PR_SET_ENDIAN", Const, 0, ""},
-		{"PR_SET_FPEMU", Const, 0, ""},
-		{"PR_SET_FPEXC", Const, 0, ""},
-		{"PR_SET_KEEPCAPS", Const, 0, ""},
-		{"PR_SET_NAME", Const, 0, ""},
-		{"PR_SET_PDEATHSIG", Const, 0, ""},
-		{"PR_SET_PTRACER", Const, 0, ""},
-		{"PR_SET_SECCOMP", Const, 0, ""},
-		{"PR_SET_SECCOMP_FILTER", Const, 0, ""},
-		{"PR_SET_SECUREBITS", Const, 0, ""},
-		{"PR_SET_TIMERSLACK", Const, 0, ""},
-		{"PR_SET_TIMING", Const, 0, ""},
-		{"PR_SET_TSC", Const, 0, ""},
-		{"PR_SET_UNALIGN", Const, 0, ""},
-		{"PR_TASK_PERF_EVENTS_DISABLE", Const, 0, ""},
-		{"PR_TASK_PERF_EVENTS_ENABLE", Const, 0, ""},
-		{"PR_TIMING_STATISTICAL", Const, 0, ""},
-		{"PR_TIMING_TIMESTAMP", Const, 0, ""},
-		{"PR_TSC_ENABLE", Const, 0, ""},
-		{"PR_TSC_SIGSEGV", Const, 0, ""},
-		{"PR_UNALIGN_NOPRINT", Const, 0, ""},
-		{"PR_UNALIGN_SIGBUS", Const, 0, ""},
-		{"PTRACE_ARCH_PRCTL", Const, 0, ""},
-		{"PTRACE_ATTACH", Const, 0, ""},
-		{"PTRACE_CONT", Const, 0, ""},
-		{"PTRACE_DETACH", Const, 0, ""},
-		{"PTRACE_EVENT_CLONE", Const, 0, ""},
-		{"PTRACE_EVENT_EXEC", Const, 0, ""},
-		{"PTRACE_EVENT_EXIT", Const, 0, ""},
-		{"PTRACE_EVENT_FORK", Const, 0, ""},
-		{"PTRACE_EVENT_VFORK", Const, 0, ""},
-		{"PTRACE_EVENT_VFORK_DONE", Const, 0, ""},
-		{"PTRACE_GETCRUNCHREGS", Const, 0, ""},
-		{"PTRACE_GETEVENTMSG", Const, 0, ""},
-		{"PTRACE_GETFPREGS", Const, 0, ""},
-		{"PTRACE_GETFPXREGS", Const, 0, ""},
-		{"PTRACE_GETHBPREGS", Const, 0, ""},
-		{"PTRACE_GETREGS", Const, 0, ""},
-		{"PTRACE_GETREGSET", Const, 0, ""},
-		{"PTRACE_GETSIGINFO", Const, 0, ""},
-		{"PTRACE_GETVFPREGS", Const, 0, ""},
-		{"PTRACE_GETWMMXREGS", Const, 0, ""},
-		{"PTRACE_GET_THREAD_AREA", Const, 0, ""},
-		{"PTRACE_KILL", Const, 0, ""},
-		{"PTRACE_OLDSETOPTIONS", Const, 0, ""},
-		{"PTRACE_O_MASK", Const, 0, ""},
-		{"PTRACE_O_TRACECLONE", Const, 0, ""},
-		{"PTRACE_O_TRACEEXEC", Const, 0, ""},
-		{"PTRACE_O_TRACEEXIT", Const, 0, ""},
-		{"PTRACE_O_TRACEFORK", Const, 0, ""},
-		{"PTRACE_O_TRACESYSGOOD", Const, 0, ""},
-		{"PTRACE_O_TRACEVFORK", Const, 0, ""},
-		{"PTRACE_O_TRACEVFORKDONE", Const, 0, ""},
-		{"PTRACE_PEEKDATA", Const, 0, ""},
-		{"PTRACE_PEEKTEXT", Const, 0, ""},
-		{"PTRACE_PEEKUSR", Const, 0, ""},
-		{"PTRACE_POKEDATA", Const, 0, ""},
-		{"PTRACE_POKETEXT", Const, 0, ""},
-		{"PTRACE_POKEUSR", Const, 0, ""},
-		{"PTRACE_SETCRUNCHREGS", Const, 0, ""},
-		{"PTRACE_SETFPREGS", Const, 0, ""},
-		{"PTRACE_SETFPXREGS", Const, 0, ""},
-		{"PTRACE_SETHBPREGS", Const, 0, ""},
-		{"PTRACE_SETOPTIONS", Const, 0, ""},
-		{"PTRACE_SETREGS", Const, 0, ""},
-		{"PTRACE_SETREGSET", Const, 0, ""},
-		{"PTRACE_SETSIGINFO", Const, 0, ""},
-		{"PTRACE_SETVFPREGS", Const, 0, ""},
-		{"PTRACE_SETWMMXREGS", Const, 0, ""},
-		{"PTRACE_SET_SYSCALL", Const, 0, ""},
-		{"PTRACE_SET_THREAD_AREA", Const, 0, ""},
-		{"PTRACE_SINGLEBLOCK", Const, 0, ""},
-		{"PTRACE_SINGLESTEP", Const, 0, ""},
-		{"PTRACE_SYSCALL", Const, 0, ""},
-		{"PTRACE_SYSEMU", Const, 0, ""},
-		{"PTRACE_SYSEMU_SINGLESTEP", Const, 0, ""},
-		{"PTRACE_TRACEME", Const, 0, ""},
-		{"PT_ATTACH", Const, 0, ""},
-		{"PT_ATTACHEXC", Const, 0, ""},
-		{"PT_CONTINUE", Const, 0, ""},
-		{"PT_DATA_ADDR", Const, 0, ""},
-		{"PT_DENY_ATTACH", Const, 0, ""},
-		{"PT_DETACH", Const, 0, ""},
-		{"PT_FIRSTMACH", Const, 0, ""},
-		{"PT_FORCEQUOTA", Const, 0, ""},
-		{"PT_KILL", Const, 0, ""},
-		{"PT_MASK", Const, 1, ""},
-		{"PT_READ_D", Const, 0, ""},
-		{"PT_READ_I", Const, 0, ""},
-		{"PT_READ_U", Const, 0, ""},
-		{"PT_SIGEXC", Const, 0, ""},
-		{"PT_STEP", Const, 0, ""},
-		{"PT_TEXT_ADDR", Const, 0, ""},
-		{"PT_TEXT_END_ADDR", Const, 0, ""},
-		{"PT_THUPDATE", Const, 0, ""},
-		{"PT_TRACE_ME", Const, 0, ""},
-		{"PT_WRITE_D", Const, 0, ""},
-		{"PT_WRITE_I", Const, 0, ""},
-		{"PT_WRITE_U", Const, 0, ""},
-		{"ParseDirent", Func, 0, "func(buf []byte, max int, names []string) (consumed int, count int, newnames []string)"},
-		{"ParseNetlinkMessage", Func, 0, "func(b []byte) ([]NetlinkMessage, error)"},
-		{"ParseNetlinkRouteAttr", Func, 0, "func(m *NetlinkMessage) ([]NetlinkRouteAttr, error)"},
-		{"ParseRoutingMessage", Func, 0, ""},
-		{"ParseRoutingSockaddr", Func, 0, ""},
-		{"ParseSocketControlMessage", Func, 0, "func(b []byte) ([]SocketControlMessage, error)"},
-		{"ParseUnixCredentials", Func, 0, "func(m *SocketControlMessage) (*Ucred, error)"},
-		{"ParseUnixRights", Func, 0, "func(m *SocketControlMessage) ([]int, error)"},
-		{"PathMax", Const, 0, ""},
-		{"Pathconf", Func, 0, ""},
-		{"Pause", Func, 0, "func() (err error)"},
-		{"Pipe", Func, 0, "func(p []int) error"},
-		{"Pipe2", Func, 1, "func(p []int, flags int) error"},
-		{"PivotRoot", Func, 0, "func(newroot string, putold string) (err error)"},
-		{"Pointer", Type, 11, ""},
-		{"PostQueuedCompletionStatus", Func, 0, ""},
-		{"Pread", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
-		{"Proc", Type, 0, ""},
-		{"Proc.Dll", Field, 0, ""},
-		{"Proc.Name", Field, 0, ""},
-		{"ProcAttr", Type, 0, ""},
-		{"ProcAttr.Dir", Field, 0, ""},
-		{"ProcAttr.Env", Field, 0, ""},
-		{"ProcAttr.Files", Field, 0, ""},
-		{"ProcAttr.Sys", Field, 0, ""},
-		{"Process32First", Func, 4, ""},
-		{"Process32Next", Func, 4, ""},
-		{"ProcessEntry32", Type, 4, ""},
-		{"ProcessEntry32.DefaultHeapID", Field, 4, ""},
-		{"ProcessEntry32.ExeFile", Field, 4, ""},
-		{"ProcessEntry32.Flags", Field, 4, ""},
-		{"ProcessEntry32.ModuleID", Field, 4, ""},
-		{"ProcessEntry32.ParentProcessID", Field, 4, ""},
-		{"ProcessEntry32.PriClassBase", Field, 4, ""},
-		{"ProcessEntry32.ProcessID", Field, 4, ""},
-		{"ProcessEntry32.Size", Field, 4, ""},
-		{"ProcessEntry32.Threads", Field, 4, ""},
-		{"ProcessEntry32.Usage", Field, 4, ""},
-		{"ProcessInformation", Type, 0, ""},
-		{"ProcessInformation.Process", Field, 0, ""},
-		{"ProcessInformation.ProcessId", Field, 0, ""},
-		{"ProcessInformation.Thread", Field, 0, ""},
-		{"ProcessInformation.ThreadId", Field, 0, ""},
-		{"Protoent", Type, 0, ""},
-		{"Protoent.Aliases", Field, 0, ""},
-		{"Protoent.Name", Field, 0, ""},
-		{"Protoent.Proto", Field, 0, ""},
-		{"PtraceAttach", Func, 0, "func(pid int) (err error)"},
-		{"PtraceCont", Func, 0, "func(pid int, signal int) (err error)"},
-		{"PtraceDetach", Func, 0, "func(pid int) (err error)"},
-		{"PtraceGetEventMsg", Func, 0, "func(pid int) (msg uint, err error)"},
-		{"PtraceGetRegs", Func, 0, "func(pid int, regsout *PtraceRegs) (err error)"},
-		{"PtracePeekData", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
-		{"PtracePeekText", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
-		{"PtracePokeData", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
-		{"PtracePokeText", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
-		{"PtraceRegs", Type, 0, ""},
-		{"PtraceRegs.Cs", Field, 0, ""},
-		{"PtraceRegs.Ds", Field, 0, ""},
-		{"PtraceRegs.Eax", Field, 0, ""},
-		{"PtraceRegs.Ebp", Field, 0, ""},
-		{"PtraceRegs.Ebx", Field, 0, ""},
-		{"PtraceRegs.Ecx", Field, 0, ""},
-		{"PtraceRegs.Edi", Field, 0, ""},
-		{"PtraceRegs.Edx", Field, 0, ""},
-		{"PtraceRegs.Eflags", Field, 0, ""},
-		{"PtraceRegs.Eip", Field, 0, ""},
-		{"PtraceRegs.Es", Field, 0, ""},
-		{"PtraceRegs.Esi", Field, 0, ""},
-		{"PtraceRegs.Esp", Field, 0, ""},
-		{"PtraceRegs.Fs", Field, 0, ""},
-		{"PtraceRegs.Fs_base", Field, 0, ""},
-		{"PtraceRegs.Gs", Field, 0, ""},
-		{"PtraceRegs.Gs_base", Field, 0, ""},
-		{"PtraceRegs.Orig_eax", Field, 0, ""},
-		{"PtraceRegs.Orig_rax", Field, 0, ""},
-		{"PtraceRegs.R10", Field, 0, ""},
-		{"PtraceRegs.R11", Field, 0, ""},
-		{"PtraceRegs.R12", Field, 0, ""},
-		{"PtraceRegs.R13", Field, 0, ""},
-		{"PtraceRegs.R14", Field, 0, ""},
-		{"PtraceRegs.R15", Field, 0, ""},
-		{"PtraceRegs.R8", Field, 0, ""},
-		{"PtraceRegs.R9", Field, 0, ""},
-		{"PtraceRegs.Rax", Field, 0, ""},
-		{"PtraceRegs.Rbp", Field, 0, ""},
-		{"PtraceRegs.Rbx", Field, 0, ""},
-		{"PtraceRegs.Rcx", Field, 0, ""},
-		{"PtraceRegs.Rdi", Field, 0, ""},
-		{"PtraceRegs.Rdx", Field, 0, ""},
-		{"PtraceRegs.Rip", Field, 0, ""},
-		{"PtraceRegs.Rsi", Field, 0, ""},
-		{"PtraceRegs.Rsp", Field, 0, ""},
-		{"PtraceRegs.Ss", Field, 0, ""},
-		{"PtraceRegs.Uregs", Field, 0, ""},
-		{"PtraceRegs.Xcs", Field, 0, ""},
-		{"PtraceRegs.Xds", Field, 0, ""},
-		{"PtraceRegs.Xes", Field, 0, ""},
-		{"PtraceRegs.Xfs", Field, 0, ""},
-		{"PtraceRegs.Xgs", Field, 0, ""},
-		{"PtraceRegs.Xss", Field, 0, ""},
-		{"PtraceSetOptions", Func, 0, "func(pid int, options int) (err error)"},
-		{"PtraceSetRegs", Func, 0, "func(pid int, regs *PtraceRegs) (err error)"},
-		{"PtraceSingleStep", Func, 0, "func(pid int) (err error)"},
-		{"PtraceSyscall", Func, 1, "func(pid int, signal int) (err error)"},
-		{"Pwrite", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
-		{"REG_BINARY", Const, 0, ""},
-		{"REG_DWORD", Const, 0, ""},
-		{"REG_DWORD_BIG_ENDIAN", Const, 0, ""},
-		{"REG_DWORD_LITTLE_ENDIAN", Const, 0, ""},
-		{"REG_EXPAND_SZ", Const, 0, ""},
-		{"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0, ""},
-		{"REG_LINK", Const, 0, ""},
-		{"REG_MULTI_SZ", Const, 0, ""},
-		{"REG_NONE", Const, 0, ""},
-		{"REG_QWORD", Const, 0, ""},
-		{"REG_QWORD_LITTLE_ENDIAN", Const, 0, ""},
-		{"REG_RESOURCE_LIST", Const, 0, ""},
-		{"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0, ""},
-		{"REG_SZ", Const, 0, ""},
-		{"RLIMIT_AS", Const, 0, ""},
-		{"RLIMIT_CORE", Const, 0, ""},
-		{"RLIMIT_CPU", Const, 0, ""},
-		{"RLIMIT_CPU_USAGE_MONITOR", Const, 16, ""},
-		{"RLIMIT_DATA", Const, 0, ""},
-		{"RLIMIT_FSIZE", Const, 0, ""},
-		{"RLIMIT_NOFILE", Const, 0, ""},
-		{"RLIMIT_STACK", Const, 0, ""},
-		{"RLIM_INFINITY", Const, 0, ""},
-		{"RTAX_ADVMSS", Const, 0, ""},
-		{"RTAX_AUTHOR", Const, 0, ""},
-		{"RTAX_BRD", Const, 0, ""},
-		{"RTAX_CWND", Const, 0, ""},
-		{"RTAX_DST", Const, 0, ""},
-		{"RTAX_FEATURES", Const, 0, ""},
-		{"RTAX_FEATURE_ALLFRAG", Const, 0, ""},
-		{"RTAX_FEATURE_ECN", Const, 0, ""},
-		{"RTAX_FEATURE_SACK", Const, 0, ""},
-		{"RTAX_FEATURE_TIMESTAMP", Const, 0, ""},
-		{"RTAX_GATEWAY", Const, 0, ""},
-		{"RTAX_GENMASK", Const, 0, ""},
-		{"RTAX_HOPLIMIT", Const, 0, ""},
-		{"RTAX_IFA", Const, 0, ""},
-		{"RTAX_IFP", Const, 0, ""},
-		{"RTAX_INITCWND", Const, 0, ""},
-		{"RTAX_INITRWND", Const, 0, ""},
-		{"RTAX_LABEL", Const, 1, ""},
-		{"RTAX_LOCK", Const, 0, ""},
-		{"RTAX_MAX", Const, 0, ""},
-		{"RTAX_MTU", Const, 0, ""},
-		{"RTAX_NETMASK", Const, 0, ""},
-		{"RTAX_REORDERING", Const, 0, ""},
-		{"RTAX_RTO_MIN", Const, 0, ""},
-		{"RTAX_RTT", Const, 0, ""},
-		{"RTAX_RTTVAR", Const, 0, ""},
-		{"RTAX_SRC", Const, 1, ""},
-		{"RTAX_SRCMASK", Const, 1, ""},
-		{"RTAX_SSTHRESH", Const, 0, ""},
-		{"RTAX_TAG", Const, 1, ""},
-		{"RTAX_UNSPEC", Const, 0, ""},
-		{"RTAX_WINDOW", Const, 0, ""},
-		{"RTA_ALIGNTO", Const, 0, ""},
-		{"RTA_AUTHOR", Const, 0, ""},
-		{"RTA_BRD", Const, 0, ""},
-		{"RTA_CACHEINFO", Const, 0, ""},
-		{"RTA_DST", Const, 0, ""},
-		{"RTA_FLOW", Const, 0, ""},
-		{"RTA_GATEWAY", Const, 0, ""},
-		{"RTA_GENMASK", Const, 0, ""},
-		{"RTA_IFA", Const, 0, ""},
-		{"RTA_IFP", Const, 0, ""},
-		{"RTA_IIF", Const, 0, ""},
-		{"RTA_LABEL", Const, 1, ""},
-		{"RTA_MAX", Const, 0, ""},
-		{"RTA_METRICS", Const, 0, ""},
-		{"RTA_MULTIPATH", Const, 0, ""},
-		{"RTA_NETMASK", Const, 0, ""},
-		{"RTA_OIF", Const, 0, ""},
-		{"RTA_PREFSRC", Const, 0, ""},
-		{"RTA_PRIORITY", Const, 0, ""},
-		{"RTA_SRC", Const, 0, ""},
-		{"RTA_SRCMASK", Const, 1, ""},
-		{"RTA_TABLE", Const, 0, ""},
-		{"RTA_TAG", Const, 1, ""},
-		{"RTA_UNSPEC", Const, 0, ""},
-		{"RTCF_DIRECTSRC", Const, 0, ""},
-		{"RTCF_DOREDIRECT", Const, 0, ""},
-		{"RTCF_LOG", Const, 0, ""},
-		{"RTCF_MASQ", Const, 0, ""},
-		{"RTCF_NAT", Const, 0, ""},
-		{"RTCF_VALVE", Const, 0, ""},
-		{"RTF_ADDRCLASSMASK", Const, 0, ""},
-		{"RTF_ADDRCONF", Const, 0, ""},
-		{"RTF_ALLONLINK", Const, 0, ""},
-		{"RTF_ANNOUNCE", Const, 1, ""},
-		{"RTF_BLACKHOLE", Const, 0, ""},
-		{"RTF_BROADCAST", Const, 0, ""},
-		{"RTF_CACHE", Const, 0, ""},
-		{"RTF_CLONED", Const, 1, ""},
-		{"RTF_CLONING", Const, 0, ""},
-		{"RTF_CONDEMNED", Const, 0, ""},
-		{"RTF_DEFAULT", Const, 0, ""},
-		{"RTF_DELCLONE", Const, 0, ""},
-		{"RTF_DONE", Const, 0, ""},
-		{"RTF_DYNAMIC", Const, 0, ""},
-		{"RTF_FLOW", Const, 0, ""},
-		{"RTF_FMASK", Const, 0, ""},
-		{"RTF_GATEWAY", Const, 0, ""},
-		{"RTF_GWFLAG_COMPAT", Const, 3, ""},
-		{"RTF_HOST", Const, 0, ""},
-		{"RTF_IFREF", Const, 0, ""},
-		{"RTF_IFSCOPE", Const, 0, ""},
-		{"RTF_INTERFACE", Const, 0, ""},
-		{"RTF_IRTT", Const, 0, ""},
-		{"RTF_LINKRT", Const, 0, ""},
-		{"RTF_LLDATA", Const, 0, ""},
-		{"RTF_LLINFO", Const, 0, ""},
-		{"RTF_LOCAL", Const, 0, ""},
-		{"RTF_MASK", Const, 1, ""},
-		{"RTF_MODIFIED", Const, 0, ""},
-		{"RTF_MPATH", Const, 1, ""},
-		{"RTF_MPLS", Const, 1, ""},
-		{"RTF_MSS", Const, 0, ""},
-		{"RTF_MTU", Const, 0, ""},
-		{"RTF_MULTICAST", Const, 0, ""},
-		{"RTF_NAT", Const, 0, ""},
-		{"RTF_NOFORWARD", Const, 0, ""},
-		{"RTF_NONEXTHOP", Const, 0, ""},
-		{"RTF_NOPMTUDISC", Const, 0, ""},
-		{"RTF_PERMANENT_ARP", Const, 1, ""},
-		{"RTF_PINNED", Const, 0, ""},
-		{"RTF_POLICY", Const, 0, ""},
-		{"RTF_PRCLONING", Const, 0, ""},
-		{"RTF_PROTO1", Const, 0, ""},
-		{"RTF_PROTO2", Const, 0, ""},
-		{"RTF_PROTO3", Const, 0, ""},
-		{"RTF_PROXY", Const, 16, ""},
-		{"RTF_REINSTATE", Const, 0, ""},
-		{"RTF_REJECT", Const, 0, ""},
-		{"RTF_RNH_LOCKED", Const, 0, ""},
-		{"RTF_ROUTER", Const, 16, ""},
-		{"RTF_SOURCE", Const, 1, ""},
-		{"RTF_SRC", Const, 1, ""},
-		{"RTF_STATIC", Const, 0, ""},
-		{"RTF_STICKY", Const, 0, ""},
-		{"RTF_THROW", Const, 0, ""},
-		{"RTF_TUNNEL", Const, 1, ""},
-		{"RTF_UP", Const, 0, ""},
-		{"RTF_USETRAILERS", Const, 1, ""},
-		{"RTF_WASCLONED", Const, 0, ""},
-		{"RTF_WINDOW", Const, 0, ""},
-		{"RTF_XRESOLVE", Const, 0, ""},
-		{"RTM_ADD", Const, 0, ""},
-		{"RTM_BASE", Const, 0, ""},
-		{"RTM_CHANGE", Const, 0, ""},
-		{"RTM_CHGADDR", Const, 1, ""},
-		{"RTM_DELACTION", Const, 0, ""},
-		{"RTM_DELADDR", Const, 0, ""},
-		{"RTM_DELADDRLABEL", Const, 0, ""},
-		{"RTM_DELETE", Const, 0, ""},
-		{"RTM_DELLINK", Const, 0, ""},
-		{"RTM_DELMADDR", Const, 0, ""},
-		{"RTM_DELNEIGH", Const, 0, ""},
-		{"RTM_DELQDISC", Const, 0, ""},
-		{"RTM_DELROUTE", Const, 0, ""},
-		{"RTM_DELRULE", Const, 0, ""},
-		{"RTM_DELTCLASS", Const, 0, ""},
-		{"RTM_DELTFILTER", Const, 0, ""},
-		{"RTM_DESYNC", Const, 1, ""},
-		{"RTM_F_CLONED", Const, 0, ""},
-		{"RTM_F_EQUALIZE", Const, 0, ""},
-		{"RTM_F_NOTIFY", Const, 0, ""},
-		{"RTM_F_PREFIX", Const, 0, ""},
-		{"RTM_GET", Const, 0, ""},
-		{"RTM_GET2", Const, 0, ""},
-		{"RTM_GETACTION", Const, 0, ""},
-		{"RTM_GETADDR", Const, 0, ""},
-		{"RTM_GETADDRLABEL", Const, 0, ""},
-		{"RTM_GETANYCAST", Const, 0, ""},
-		{"RTM_GETDCB", Const, 0, ""},
-		{"RTM_GETLINK", Const, 0, ""},
-		{"RTM_GETMULTICAST", Const, 0, ""},
-		{"RTM_GETNEIGH", Const, 0, ""},
-		{"RTM_GETNEIGHTBL", Const, 0, ""},
-		{"RTM_GETQDISC", Const, 0, ""},
-		{"RTM_GETROUTE", Const, 0, ""},
-		{"RTM_GETRULE", Const, 0, ""},
-		{"RTM_GETTCLASS", Const, 0, ""},
-		{"RTM_GETTFILTER", Const, 0, ""},
-		{"RTM_IEEE80211", Const, 0, ""},
-		{"RTM_IFANNOUNCE", Const, 0, ""},
-		{"RTM_IFINFO", Const, 0, ""},
-		{"RTM_IFINFO2", Const, 0, ""},
-		{"RTM_LLINFO_UPD", Const, 1, ""},
-		{"RTM_LOCK", Const, 0, ""},
-		{"RTM_LOSING", Const, 0, ""},
-		{"RTM_MAX", Const, 0, ""},
-		{"RTM_MAXSIZE", Const, 1, ""},
-		{"RTM_MISS", Const, 0, ""},
-		{"RTM_NEWACTION", Const, 0, ""},
-		{"RTM_NEWADDR", Const, 0, ""},
-		{"RTM_NEWADDRLABEL", Const, 0, ""},
-		{"RTM_NEWLINK", Const, 0, ""},
-		{"RTM_NEWMADDR", Const, 0, ""},
-		{"RTM_NEWMADDR2", Const, 0, ""},
-		{"RTM_NEWNDUSEROPT", Const, 0, ""},
-		{"RTM_NEWNEIGH", Const, 0, ""},
-		{"RTM_NEWNEIGHTBL", Const, 0, ""},
-		{"RTM_NEWPREFIX", Const, 0, ""},
-		{"RTM_NEWQDISC", Const, 0, ""},
-		{"RTM_NEWROUTE", Const, 0, ""},
-		{"RTM_NEWRULE", Const, 0, ""},
-		{"RTM_NEWTCLASS", Const, 0, ""},
-		{"RTM_NEWTFILTER", Const, 0, ""},
-		{"RTM_NR_FAMILIES", Const, 0, ""},
-		{"RTM_NR_MSGTYPES", Const, 0, ""},
-		{"RTM_OIFINFO", Const, 1, ""},
-		{"RTM_OLDADD", Const, 0, ""},
-		{"RTM_OLDDEL", Const, 0, ""},
-		{"RTM_OOIFINFO", Const, 1, ""},
-		{"RTM_REDIRECT", Const, 0, ""},
-		{"RTM_RESOLVE", Const, 0, ""},
-		{"RTM_RTTUNIT", Const, 0, ""},
-		{"RTM_SETDCB", Const, 0, ""},
-		{"RTM_SETGATE", Const, 1, ""},
-		{"RTM_SETLINK", Const, 0, ""},
-		{"RTM_SETNEIGHTBL", Const, 0, ""},
-		{"RTM_VERSION", Const, 0, ""},
-		{"RTNH_ALIGNTO", Const, 0, ""},
-		{"RTNH_F_DEAD", Const, 0, ""},
-		{"RTNH_F_ONLINK", Const, 0, ""},
-		{"RTNH_F_PERVASIVE", Const, 0, ""},
-		{"RTNLGRP_IPV4_IFADDR", Const, 1, ""},
-		{"RTNLGRP_IPV4_MROUTE", Const, 1, ""},
-		{"RTNLGRP_IPV4_ROUTE", Const, 1, ""},
-		{"RTNLGRP_IPV4_RULE", Const, 1, ""},
-		{"RTNLGRP_IPV6_IFADDR", Const, 1, ""},
-		{"RTNLGRP_IPV6_IFINFO", Const, 1, ""},
-		{"RTNLGRP_IPV6_MROUTE", Const, 1, ""},
-		{"RTNLGRP_IPV6_PREFIX", Const, 1, ""},
-		{"RTNLGRP_IPV6_ROUTE", Const, 1, ""},
-		{"RTNLGRP_IPV6_RULE", Const, 1, ""},
-		{"RTNLGRP_LINK", Const, 1, ""},
-		{"RTNLGRP_ND_USEROPT", Const, 1, ""},
-		{"RTNLGRP_NEIGH", Const, 1, ""},
-		{"RTNLGRP_NONE", Const, 1, ""},
-		{"RTNLGRP_NOTIFY", Const, 1, ""},
-		{"RTNLGRP_TC", Const, 1, ""},
-		{"RTN_ANYCAST", Const, 0, ""},
-		{"RTN_BLACKHOLE", Const, 0, ""},
-		{"RTN_BROADCAST", Const, 0, ""},
-		{"RTN_LOCAL", Const, 0, ""},
-		{"RTN_MAX", Const, 0, ""},
-		{"RTN_MULTICAST", Const, 0, ""},
-		{"RTN_NAT", Const, 0, ""},
-		{"RTN_PROHIBIT", Const, 0, ""},
-		{"RTN_THROW", Const, 0, ""},
-		{"RTN_UNICAST", Const, 0, ""},
-		{"RTN_UNREACHABLE", Const, 0, ""},
-		{"RTN_UNSPEC", Const, 0, ""},
-		{"RTN_XRESOLVE", Const, 0, ""},
-		{"RTPROT_BIRD", Const, 0, ""},
-		{"RTPROT_BOOT", Const, 0, ""},
-		{"RTPROT_DHCP", Const, 0, ""},
-		{"RTPROT_DNROUTED", Const, 0, ""},
-		{"RTPROT_GATED", Const, 0, ""},
-		{"RTPROT_KERNEL", Const, 0, ""},
-		{"RTPROT_MRT", Const, 0, ""},
-		{"RTPROT_NTK", Const, 0, ""},
-		{"RTPROT_RA", Const, 0, ""},
-		{"RTPROT_REDIRECT", Const, 0, ""},
-		{"RTPROT_STATIC", Const, 0, ""},
-		{"RTPROT_UNSPEC", Const, 0, ""},
-		{"RTPROT_XORP", Const, 0, ""},
-		{"RTPROT_ZEBRA", Const, 0, ""},
-		{"RTV_EXPIRE", Const, 0, ""},
-		{"RTV_HOPCOUNT", Const, 0, ""},
-		{"RTV_MTU", Const, 0, ""},
-		{"RTV_RPIPE", Const, 0, ""},
-		{"RTV_RTT", Const, 0, ""},
-		{"RTV_RTTVAR", Const, 0, ""},
-		{"RTV_SPIPE", Const, 0, ""},
-		{"RTV_SSTHRESH", Const, 0, ""},
-		{"RTV_WEIGHT", Const, 0, ""},
-		{"RT_CACHING_CONTEXT", Const, 1, ""},
-		{"RT_CLASS_DEFAULT", Const, 0, ""},
-		{"RT_CLASS_LOCAL", Const, 0, ""},
-		{"RT_CLASS_MAIN", Const, 0, ""},
-		{"RT_CLASS_MAX", Const, 0, ""},
-		{"RT_CLASS_UNSPEC", Const, 0, ""},
-		{"RT_DEFAULT_FIB", Const, 1, ""},
-		{"RT_NORTREF", Const, 1, ""},
-		{"RT_SCOPE_HOST", Const, 0, ""},
-		{"RT_SCOPE_LINK", Const, 0, ""},
-		{"RT_SCOPE_NOWHERE", Const, 0, ""},
-		{"RT_SCOPE_SITE", Const, 0, ""},
-		{"RT_SCOPE_UNIVERSE", Const, 0, ""},
-		{"RT_TABLEID_MAX", Const, 1, ""},
-		{"RT_TABLE_COMPAT", Const, 0, ""},
-		{"RT_TABLE_DEFAULT", Const, 0, ""},
-		{"RT_TABLE_LOCAL", Const, 0, ""},
-		{"RT_TABLE_MAIN", Const, 0, ""},
-		{"RT_TABLE_MAX", Const, 0, ""},
-		{"RT_TABLE_UNSPEC", Const, 0, ""},
-		{"RUSAGE_CHILDREN", Const, 0, ""},
-		{"RUSAGE_SELF", Const, 0, ""},
-		{"RUSAGE_THREAD", Const, 0, ""},
-		{"Radvisory_t", Type, 0, ""},
-		{"Radvisory_t.Count", Field, 0, ""},
-		{"Radvisory_t.Offset", Field, 0, ""},
-		{"Radvisory_t.Pad_cgo_0", Field, 0, ""},
-		{"RawConn", Type, 9, ""},
-		{"RawSockaddr", Type, 0, ""},
-		{"RawSockaddr.Data", Field, 0, ""},
-		{"RawSockaddr.Family", Field, 0, ""},
-		{"RawSockaddr.Len", Field, 0, ""},
-		{"RawSockaddrAny", Type, 0, ""},
-		{"RawSockaddrAny.Addr", Field, 0, ""},
-		{"RawSockaddrAny.Pad", Field, 0, ""},
-		{"RawSockaddrDatalink", Type, 0, ""},
-		{"RawSockaddrDatalink.Alen", Field, 0, ""},
-		{"RawSockaddrDatalink.Data", Field, 0, ""},
-		{"RawSockaddrDatalink.Family", Field, 0, ""},
-		{"RawSockaddrDatalink.Index", Field, 0, ""},
-		{"RawSockaddrDatalink.Len", Field, 0, ""},
-		{"RawSockaddrDatalink.Nlen", Field, 0, ""},
-		{"RawSockaddrDatalink.Pad_cgo_0", Field, 2, ""},
-		{"RawSockaddrDatalink.Slen", Field, 0, ""},
-		{"RawSockaddrDatalink.Type", Field, 0, ""},
-		{"RawSockaddrInet4", Type, 0, ""},
-		{"RawSockaddrInet4.Addr", Field, 0, ""},
-		{"RawSockaddrInet4.Family", Field, 0, ""},
-		{"RawSockaddrInet4.Len", Field, 0, ""},
-		{"RawSockaddrInet4.Port", Field, 0, ""},
-		{"RawSockaddrInet4.Zero", Field, 0, ""},
-		{"RawSockaddrInet6", Type, 0, ""},
-		{"RawSockaddrInet6.Addr", Field, 0, ""},
-		{"RawSockaddrInet6.Family", Field, 0, ""},
-		{"RawSockaddrInet6.Flowinfo", Field, 0, ""},
-		{"RawSockaddrInet6.Len", Field, 0, ""},
-		{"RawSockaddrInet6.Port", Field, 0, ""},
-		{"RawSockaddrInet6.Scope_id", Field, 0, ""},
-		{"RawSockaddrLinklayer", Type, 0, ""},
-		{"RawSockaddrLinklayer.Addr", Field, 0, ""},
-		{"RawSockaddrLinklayer.Family", Field, 0, ""},
-		{"RawSockaddrLinklayer.Halen", Field, 0, ""},
-		{"RawSockaddrLinklayer.Hatype", Field, 0, ""},
-		{"RawSockaddrLinklayer.Ifindex", Field, 0, ""},
-		{"RawSockaddrLinklayer.Pkttype", Field, 0, ""},
-		{"RawSockaddrLinklayer.Protocol", Field, 0, ""},
-		{"RawSockaddrNetlink", Type, 0, ""},
-		{"RawSockaddrNetlink.Family", Field, 0, ""},
-		{"RawSockaddrNetlink.Groups", Field, 0, ""},
-		{"RawSockaddrNetlink.Pad", Field, 0, ""},
-		{"RawSockaddrNetlink.Pid", Field, 0, ""},
-		{"RawSockaddrUnix", Type, 0, ""},
-		{"RawSockaddrUnix.Family", Field, 0, ""},
-		{"RawSockaddrUnix.Len", Field, 0, ""},
-		{"RawSockaddrUnix.Pad_cgo_0", Field, 2, ""},
-		{"RawSockaddrUnix.Path", Field, 0, ""},
-		{"RawSyscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"RawSyscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"Read", Func, 0, "func(fd int, p []byte) (n int, err error)"},
-		{"ReadConsole", Func, 1, ""},
-		{"ReadDirectoryChanges", Func, 0, ""},
-		{"ReadDirent", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
-		{"ReadFile", Func, 0, ""},
-		{"Readlink", Func, 0, "func(path string, buf []byte) (n int, err error)"},
-		{"Reboot", Func, 0, "func(cmd int) (err error)"},
-		{"Recvfrom", Func, 0, "func(fd int, p []byte, flags int) (n int, from Sockaddr, err error)"},
-		{"Recvmsg", Func, 0, "func(fd int, p []byte, oob []byte, flags int) (n int, oobn int, recvflags int, from Sockaddr, err error)"},
-		{"RegCloseKey", Func, 0, ""},
-		{"RegEnumKeyEx", Func, 0, ""},
-		{"RegOpenKeyEx", Func, 0, ""},
-		{"RegQueryInfoKey", Func, 0, ""},
-		{"RegQueryValueEx", Func, 0, ""},
-		{"RemoveDirectory", Func, 0, ""},
-		{"Removexattr", Func, 1, "func(path string, attr string) (err error)"},
-		{"Rename", Func, 0, "func(oldpath string, newpath string) (err error)"},
-		{"Renameat", Func, 0, "func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)"},
-		{"Revoke", Func, 0, ""},
-		{"Rlimit", Type, 0, ""},
-		{"Rlimit.Cur", Field, 0, ""},
-		{"Rlimit.Max", Field, 0, ""},
-		{"Rmdir", Func, 0, "func(path string) error"},
-		{"RouteMessage", Type, 0, ""},
-		{"RouteMessage.Data", Field, 0, ""},
-		{"RouteMessage.Header", Field, 0, ""},
-		{"RouteRIB", Func, 0, ""},
-		{"RoutingMessage", Type, 0, ""},
-		{"RtAttr", Type, 0, ""},
-		{"RtAttr.Len", Field, 0, ""},
-		{"RtAttr.Type", Field, 0, ""},
-		{"RtGenmsg", Type, 0, ""},
-		{"RtGenmsg.Family", Field, 0, ""},
-		{"RtMetrics", Type, 0, ""},
-		{"RtMetrics.Expire", Field, 0, ""},
-		{"RtMetrics.Filler", Field, 0, ""},
-		{"RtMetrics.Hopcount", Field, 0, ""},
-		{"RtMetrics.Locks", Field, 0, ""},
-		{"RtMetrics.Mtu", Field, 0, ""},
-		{"RtMetrics.Pad", Field, 3, ""},
-		{"RtMetrics.Pksent", Field, 0, ""},
-		{"RtMetrics.Recvpipe", Field, 0, ""},
-		{"RtMetrics.Refcnt", Field, 2, ""},
-		{"RtMetrics.Rtt", Field, 0, ""},
-		{"RtMetrics.Rttvar", Field, 0, ""},
-		{"RtMetrics.Sendpipe", Field, 0, ""},
-		{"RtMetrics.Ssthresh", Field, 0, ""},
-		{"RtMetrics.Weight", Field, 0, ""},
-		{"RtMsg", Type, 0, ""},
-		{"RtMsg.Dst_len", Field, 0, ""},
-		{"RtMsg.Family", Field, 0, ""},
-		{"RtMsg.Flags", Field, 0, ""},
-		{"RtMsg.Protocol", Field, 0, ""},
-		{"RtMsg.Scope", Field, 0, ""},
-		{"RtMsg.Src_len", Field, 0, ""},
-		{"RtMsg.Table", Field, 0, ""},
-		{"RtMsg.Tos", Field, 0, ""},
-		{"RtMsg.Type", Field, 0, ""},
-		{"RtMsghdr", Type, 0, ""},
-		{"RtMsghdr.Addrs", Field, 0, ""},
-		{"RtMsghdr.Errno", Field, 0, ""},
-		{"RtMsghdr.Flags", Field, 0, ""},
-		{"RtMsghdr.Fmask", Field, 0, ""},
-		{"RtMsghdr.Hdrlen", Field, 2, ""},
-		{"RtMsghdr.Index", Field, 0, ""},
-		{"RtMsghdr.Inits", Field, 0, ""},
-		{"RtMsghdr.Mpls", Field, 2, ""},
-		{"RtMsghdr.Msglen", Field, 0, ""},
-		{"RtMsghdr.Pad_cgo_0", Field, 0, ""},
-		{"RtMsghdr.Pad_cgo_1", Field, 2, ""},
-		{"RtMsghdr.Pid", Field, 0, ""},
-		{"RtMsghdr.Priority", Field, 2, ""},
-		{"RtMsghdr.Rmx", Field, 0, ""},
-		{"RtMsghdr.Seq", Field, 0, ""},
-		{"RtMsghdr.Tableid", Field, 2, ""},
-		{"RtMsghdr.Type", Field, 0, ""},
-		{"RtMsghdr.Use", Field, 0, ""},
-		{"RtMsghdr.Version", Field, 0, ""},
-		{"RtNexthop", Type, 0, ""},
-		{"RtNexthop.Flags", Field, 0, ""},
-		{"RtNexthop.Hops", Field, 0, ""},
-		{"RtNexthop.Ifindex", Field, 0, ""},
-		{"RtNexthop.Len", Field, 0, ""},
-		{"Rusage", Type, 0, ""},
-		{"Rusage.CreationTime", Field, 0, ""},
-		{"Rusage.ExitTime", Field, 0, ""},
-		{"Rusage.Idrss", Field, 0, ""},
-		{"Rusage.Inblock", Field, 0, ""},
-		{"Rusage.Isrss", Field, 0, ""},
-		{"Rusage.Ixrss", Field, 0, ""},
-		{"Rusage.KernelTime", Field, 0, ""},
-		{"Rusage.Majflt", Field, 0, ""},
-		{"Rusage.Maxrss", Field, 0, ""},
-		{"Rusage.Minflt", Field, 0, ""},
-		{"Rusage.Msgrcv", Field, 0, ""},
-		{"Rusage.Msgsnd", Field, 0, ""},
-		{"Rusage.Nivcsw", Field, 0, ""},
-		{"Rusage.Nsignals", Field, 0, ""},
-		{"Rusage.Nswap", Field, 0, ""},
-		{"Rusage.Nvcsw", Field, 0, ""},
-		{"Rusage.Oublock", Field, 0, ""},
-		{"Rusage.Stime", Field, 0, ""},
-		{"Rusage.UserTime", Field, 0, ""},
-		{"Rusage.Utime", Field, 0, ""},
-		{"SCM_BINTIME", Const, 0, ""},
-		{"SCM_CREDENTIALS", Const, 0, ""},
-		{"SCM_CREDS", Const, 0, ""},
-		{"SCM_RIGHTS", Const, 0, ""},
-		{"SCM_TIMESTAMP", Const, 0, ""},
-		{"SCM_TIMESTAMPING", Const, 0, ""},
-		{"SCM_TIMESTAMPNS", Const, 0, ""},
-		{"SCM_TIMESTAMP_MONOTONIC", Const, 0, ""},
-		{"SHUT_RD", Const, 0, ""},
-		{"SHUT_RDWR", Const, 0, ""},
-		{"SHUT_WR", Const, 0, ""},
-		{"SID", Type, 0, ""},
-		{"SIDAndAttributes", Type, 0, ""},
-		{"SIDAndAttributes.Attributes", Field, 0, ""},
-		{"SIDAndAttributes.Sid", Field, 0, ""},
-		{"SIGABRT", Const, 0, ""},
-		{"SIGALRM", Const, 0, ""},
-		{"SIGBUS", Const, 0, ""},
-		{"SIGCHLD", Const, 0, ""},
-		{"SIGCLD", Const, 0, ""},
-		{"SIGCONT", Const, 0, ""},
-		{"SIGEMT", Const, 0, ""},
-		{"SIGFPE", Const, 0, ""},
-		{"SIGHUP", Const, 0, ""},
-		{"SIGILL", Const, 0, ""},
-		{"SIGINFO", Const, 0, ""},
-		{"SIGINT", Const, 0, ""},
-		{"SIGIO", Const, 0, ""},
-		{"SIGIOT", Const, 0, ""},
-		{"SIGKILL", Const, 0, ""},
-		{"SIGLIBRT", Const, 1, ""},
-		{"SIGLWP", Const, 0, ""},
-		{"SIGPIPE", Const, 0, ""},
-		{"SIGPOLL", Const, 0, ""},
-		{"SIGPROF", Const, 0, ""},
-		{"SIGPWR", Const, 0, ""},
-		{"SIGQUIT", Const, 0, ""},
-		{"SIGSEGV", Const, 0, ""},
-		{"SIGSTKFLT", Const, 0, ""},
-		{"SIGSTOP", Const, 0, ""},
-		{"SIGSYS", Const, 0, ""},
-		{"SIGTERM", Const, 0, ""},
-		{"SIGTHR", Const, 0, ""},
-		{"SIGTRAP", Const, 0, ""},
-		{"SIGTSTP", Const, 0, ""},
-		{"SIGTTIN", Const, 0, ""},
-		{"SIGTTOU", Const, 0, ""},
-		{"SIGUNUSED", Const, 0, ""},
-		{"SIGURG", Const, 0, ""},
-		{"SIGUSR1", Const, 0, ""},
-		{"SIGUSR2", Const, 0, ""},
-		{"SIGVTALRM", Const, 0, ""},
-		{"SIGWINCH", Const, 0, ""},
-		{"SIGXCPU", Const, 0, ""},
-		{"SIGXFSZ", Const, 0, ""},
-		{"SIOCADDDLCI", Const, 0, ""},
-		{"SIOCADDMULTI", Const, 0, ""},
-		{"SIOCADDRT", Const, 0, ""},
-		{"SIOCAIFADDR", Const, 0, ""},
-		{"SIOCAIFGROUP", Const, 0, ""},
-		{"SIOCALIFADDR", Const, 0, ""},
-		{"SIOCARPIPLL", Const, 0, ""},
-		{"SIOCATMARK", Const, 0, ""},
-		{"SIOCAUTOADDR", Const, 0, ""},
-		{"SIOCAUTONETMASK", Const, 0, ""},
-		{"SIOCBRDGADD", Const, 1, ""},
-		{"SIOCBRDGADDS", Const, 1, ""},
-		{"SIOCBRDGARL", Const, 1, ""},
-		{"SIOCBRDGDADDR", Const, 1, ""},
-		{"SIOCBRDGDEL", Const, 1, ""},
-		{"SIOCBRDGDELS", Const, 1, ""},
-		{"SIOCBRDGFLUSH", Const, 1, ""},
-		{"SIOCBRDGFRL", Const, 1, ""},
-		{"SIOCBRDGGCACHE", Const, 1, ""},
-		{"SIOCBRDGGFD", Const, 1, ""},
-		{"SIOCBRDGGHT", Const, 1, ""},
-		{"SIOCBRDGGIFFLGS", Const, 1, ""},
-		{"SIOCBRDGGMA", Const, 1, ""},
-		{"SIOCBRDGGPARAM", Const, 1, ""},
-		{"SIOCBRDGGPRI", Const, 1, ""},
-		{"SIOCBRDGGRL", Const, 1, ""},
-		{"SIOCBRDGGSIFS", Const, 1, ""},
-		{"SIOCBRDGGTO", Const, 1, ""},
-		{"SIOCBRDGIFS", Const, 1, ""},
-		{"SIOCBRDGRTS", Const, 1, ""},
-		{"SIOCBRDGSADDR", Const, 1, ""},
-		{"SIOCBRDGSCACHE", Const, 1, ""},
-		{"SIOCBRDGSFD", Const, 1, ""},
-		{"SIOCBRDGSHT", Const, 1, ""},
-		{"SIOCBRDGSIFCOST", Const, 1, ""},
-		{"SIOCBRDGSIFFLGS", Const, 1, ""},
-		{"SIOCBRDGSIFPRIO", Const, 1, ""},
-		{"SIOCBRDGSMA", Const, 1, ""},
-		{"SIOCBRDGSPRI", Const, 1, ""},
-		{"SIOCBRDGSPROTO", Const, 1, ""},
-		{"SIOCBRDGSTO", Const, 1, ""},
-		{"SIOCBRDGSTXHC", Const, 1, ""},
-		{"SIOCDARP", Const, 0, ""},
-		{"SIOCDELDLCI", Const, 0, ""},
-		{"SIOCDELMULTI", Const, 0, ""},
-		{"SIOCDELRT", Const, 0, ""},
-		{"SIOCDEVPRIVATE", Const, 0, ""},
-		{"SIOCDIFADDR", Const, 0, ""},
-		{"SIOCDIFGROUP", Const, 0, ""},
-		{"SIOCDIFPHYADDR", Const, 0, ""},
-		{"SIOCDLIFADDR", Const, 0, ""},
-		{"SIOCDRARP", Const, 0, ""},
-		{"SIOCGARP", Const, 0, ""},
-		{"SIOCGDRVSPEC", Const, 0, ""},
-		{"SIOCGETKALIVE", Const, 1, ""},
-		{"SIOCGETLABEL", Const, 1, ""},
-		{"SIOCGETPFLOW", Const, 1, ""},
-		{"SIOCGETPFSYNC", Const, 1, ""},
-		{"SIOCGETSGCNT", Const, 0, ""},
-		{"SIOCGETVIFCNT", Const, 0, ""},
-		{"SIOCGETVLAN", Const, 0, ""},
-		{"SIOCGHIWAT", Const, 0, ""},
-		{"SIOCGIFADDR", Const, 0, ""},
-		{"SIOCGIFADDRPREF", Const, 1, ""},
-		{"SIOCGIFALIAS", Const, 1, ""},
-		{"SIOCGIFALTMTU", Const, 0, ""},
-		{"SIOCGIFASYNCMAP", Const, 0, ""},
-		{"SIOCGIFBOND", Const, 0, ""},
-		{"SIOCGIFBR", Const, 0, ""},
-		{"SIOCGIFBRDADDR", Const, 0, ""},
-		{"SIOCGIFCAP", Const, 0, ""},
-		{"SIOCGIFCONF", Const, 0, ""},
-		{"SIOCGIFCOUNT", Const, 0, ""},
-		{"SIOCGIFDATA", Const, 1, ""},
-		{"SIOCGIFDESCR", Const, 0, ""},
-		{"SIOCGIFDEVMTU", Const, 0, ""},
-		{"SIOCGIFDLT", Const, 1, ""},
-		{"SIOCGIFDSTADDR", Const, 0, ""},
-		{"SIOCGIFENCAP", Const, 0, ""},
-		{"SIOCGIFFIB", Const, 1, ""},
-		{"SIOCGIFFLAGS", Const, 0, ""},
-		{"SIOCGIFGATTR", Const, 1, ""},
-		{"SIOCGIFGENERIC", Const, 0, ""},
-		{"SIOCGIFGMEMB", Const, 0, ""},
-		{"SIOCGIFGROUP", Const, 0, ""},
-		{"SIOCGIFHARDMTU", Const, 3, ""},
-		{"SIOCGIFHWADDR", Const, 0, ""},
-		{"SIOCGIFINDEX", Const, 0, ""},
-		{"SIOCGIFKPI", Const, 0, ""},
-		{"SIOCGIFMAC", Const, 0, ""},
-		{"SIOCGIFMAP", Const, 0, ""},
-		{"SIOCGIFMEDIA", Const, 0, ""},
-		{"SIOCGIFMEM", Const, 0, ""},
-		{"SIOCGIFMETRIC", Const, 0, ""},
-		{"SIOCGIFMTU", Const, 0, ""},
-		{"SIOCGIFNAME", Const, 0, ""},
-		{"SIOCGIFNETMASK", Const, 0, ""},
-		{"SIOCGIFPDSTADDR", Const, 0, ""},
-		{"SIOCGIFPFLAGS", Const, 0, ""},
-		{"SIOCGIFPHYS", Const, 0, ""},
-		{"SIOCGIFPRIORITY", Const, 1, ""},
-		{"SIOCGIFPSRCADDR", Const, 0, ""},
-		{"SIOCGIFRDOMAIN", Const, 1, ""},
-		{"SIOCGIFRTLABEL", Const, 1, ""},
-		{"SIOCGIFSLAVE", Const, 0, ""},
-		{"SIOCGIFSTATUS", Const, 0, ""},
-		{"SIOCGIFTIMESLOT", Const, 1, ""},
-		{"SIOCGIFTXQLEN", Const, 0, ""},
-		{"SIOCGIFVLAN", Const, 0, ""},
-		{"SIOCGIFWAKEFLAGS", Const, 0, ""},
-		{"SIOCGIFXFLAGS", Const, 1, ""},
-		{"SIOCGLIFADDR", Const, 0, ""},
-		{"SIOCGLIFPHYADDR", Const, 0, ""},
-		{"SIOCGLIFPHYRTABLE", Const, 1, ""},
-		{"SIOCGLIFPHYTTL", Const, 3, ""},
-		{"SIOCGLINKSTR", Const, 1, ""},
-		{"SIOCGLOWAT", Const, 0, ""},
-		{"SIOCGPGRP", Const, 0, ""},
-		{"SIOCGPRIVATE_0", Const, 0, ""},
-		{"SIOCGPRIVATE_1", Const, 0, ""},
-		{"SIOCGRARP", Const, 0, ""},
-		{"SIOCGSPPPPARAMS", Const, 3, ""},
-		{"SIOCGSTAMP", Const, 0, ""},
-		{"SIOCGSTAMPNS", Const, 0, ""},
-		{"SIOCGVH", Const, 1, ""},
-		{"SIOCGVNETID", Const, 3, ""},
-		{"SIOCIFCREATE", Const, 0, ""},
-		{"SIOCIFCREATE2", Const, 0, ""},
-		{"SIOCIFDESTROY", Const, 0, ""},
-		{"SIOCIFGCLONERS", Const, 0, ""},
-		{"SIOCINITIFADDR", Const, 1, ""},
-		{"SIOCPROTOPRIVATE", Const, 0, ""},
-		{"SIOCRSLVMULTI", Const, 0, ""},
-		{"SIOCRTMSG", Const, 0, ""},
-		{"SIOCSARP", Const, 0, ""},
-		{"SIOCSDRVSPEC", Const, 0, ""},
-		{"SIOCSETKALIVE", Const, 1, ""},
-		{"SIOCSETLABEL", Const, 1, ""},
-		{"SIOCSETPFLOW", Const, 1, ""},
-		{"SIOCSETPFSYNC", Const, 1, ""},
-		{"SIOCSETVLAN", Const, 0, ""},
-		{"SIOCSHIWAT", Const, 0, ""},
-		{"SIOCSIFADDR", Const, 0, ""},
-		{"SIOCSIFADDRPREF", Const, 1, ""},
-		{"SIOCSIFALTMTU", Const, 0, ""},
-		{"SIOCSIFASYNCMAP", Const, 0, ""},
-		{"SIOCSIFBOND", Const, 0, ""},
-		{"SIOCSIFBR", Const, 0, ""},
-		{"SIOCSIFBRDADDR", Const, 0, ""},
-		{"SIOCSIFCAP", Const, 0, ""},
-		{"SIOCSIFDESCR", Const, 0, ""},
-		{"SIOCSIFDSTADDR", Const, 0, ""},
-		{"SIOCSIFENCAP", Const, 0, ""},
-		{"SIOCSIFFIB", Const, 1, ""},
-		{"SIOCSIFFLAGS", Const, 0, ""},
-		{"SIOCSIFGATTR", Const, 1, ""},
-		{"SIOCSIFGENERIC", Const, 0, ""},
-		{"SIOCSIFHWADDR", Const, 0, ""},
-		{"SIOCSIFHWBROADCAST", Const, 0, ""},
-		{"SIOCSIFKPI", Const, 0, ""},
-		{"SIOCSIFLINK", Const, 0, ""},
-		{"SIOCSIFLLADDR", Const, 0, ""},
-		{"SIOCSIFMAC", Const, 0, ""},
-		{"SIOCSIFMAP", Const, 0, ""},
-		{"SIOCSIFMEDIA", Const, 0, ""},
-		{"SIOCSIFMEM", Const, 0, ""},
-		{"SIOCSIFMETRIC", Const, 0, ""},
-		{"SIOCSIFMTU", Const, 0, ""},
-		{"SIOCSIFNAME", Const, 0, ""},
-		{"SIOCSIFNETMASK", Const, 0, ""},
-		{"SIOCSIFPFLAGS", Const, 0, ""},
-		{"SIOCSIFPHYADDR", Const, 0, ""},
-		{"SIOCSIFPHYS", Const, 0, ""},
-		{"SIOCSIFPRIORITY", Const, 1, ""},
-		{"SIOCSIFRDOMAIN", Const, 1, ""},
-		{"SIOCSIFRTLABEL", Const, 1, ""},
-		{"SIOCSIFRVNET", Const, 0, ""},
-		{"SIOCSIFSLAVE", Const, 0, ""},
-		{"SIOCSIFTIMESLOT", Const, 1, ""},
-		{"SIOCSIFTXQLEN", Const, 0, ""},
-		{"SIOCSIFVLAN", Const, 0, ""},
-		{"SIOCSIFVNET", Const, 0, ""},
-		{"SIOCSIFXFLAGS", Const, 1, ""},
-		{"SIOCSLIFPHYADDR", Const, 0, ""},
-		{"SIOCSLIFPHYRTABLE", Const, 1, ""},
-		{"SIOCSLIFPHYTTL", Const, 3, ""},
-		{"SIOCSLINKSTR", Const, 1, ""},
-		{"SIOCSLOWAT", Const, 0, ""},
-		{"SIOCSPGRP", Const, 0, ""},
-		{"SIOCSRARP", Const, 0, ""},
-		{"SIOCSSPPPPARAMS", Const, 3, ""},
-		{"SIOCSVH", Const, 1, ""},
-		{"SIOCSVNETID", Const, 3, ""},
-		{"SIOCZIFDATA", Const, 1, ""},
-		{"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1, ""},
-		{"SIO_GET_INTERFACE_LIST", Const, 0, ""},
-		{"SIO_KEEPALIVE_VALS", Const, 3, ""},
-		{"SIO_UDP_CONNRESET", Const, 4, ""},
-		{"SOCK_CLOEXEC", Const, 0, ""},
-		{"SOCK_DCCP", Const, 0, ""},
-		{"SOCK_DGRAM", Const, 0, ""},
-		{"SOCK_FLAGS_MASK", Const, 1, ""},
-		{"SOCK_MAXADDRLEN", Const, 0, ""},
-		{"SOCK_NONBLOCK", Const, 0, ""},
-		{"SOCK_NOSIGPIPE", Const, 1, ""},
-		{"SOCK_PACKET", Const, 0, ""},
-		{"SOCK_RAW", Const, 0, ""},
-		{"SOCK_RDM", Const, 0, ""},
-		{"SOCK_SEQPACKET", Const, 0, ""},
-		{"SOCK_STREAM", Const, 0, ""},
-		{"SOL_AAL", Const, 0, ""},
-		{"SOL_ATM", Const, 0, ""},
-		{"SOL_DECNET", Const, 0, ""},
-		{"SOL_ICMPV6", Const, 0, ""},
-		{"SOL_IP", Const, 0, ""},
-		{"SOL_IPV6", Const, 0, ""},
-		{"SOL_IRDA", Const, 0, ""},
-		{"SOL_PACKET", Const, 0, ""},
-		{"SOL_RAW", Const, 0, ""},
-		{"SOL_SOCKET", Const, 0, ""},
-		{"SOL_TCP", Const, 0, ""},
-		{"SOL_X25", Const, 0, ""},
-		{"SOMAXCONN", Const, 0, ""},
-		{"SO_ACCEPTCONN", Const, 0, ""},
-		{"SO_ACCEPTFILTER", Const, 0, ""},
-		{"SO_ATTACH_FILTER", Const, 0, ""},
-		{"SO_BINDANY", Const, 1, ""},
-		{"SO_BINDTODEVICE", Const, 0, ""},
-		{"SO_BINTIME", Const, 0, ""},
-		{"SO_BROADCAST", Const, 0, ""},
-		{"SO_BSDCOMPAT", Const, 0, ""},
-		{"SO_DEBUG", Const, 0, ""},
-		{"SO_DETACH_FILTER", Const, 0, ""},
-		{"SO_DOMAIN", Const, 0, ""},
-		{"SO_DONTROUTE", Const, 0, ""},
-		{"SO_DONTTRUNC", Const, 0, ""},
-		{"SO_ERROR", Const, 0, ""},
-		{"SO_KEEPALIVE", Const, 0, ""},
-		{"SO_LABEL", Const, 0, ""},
-		{"SO_LINGER", Const, 0, ""},
-		{"SO_LINGER_SEC", Const, 0, ""},
-		{"SO_LISTENINCQLEN", Const, 0, ""},
-		{"SO_LISTENQLEN", Const, 0, ""},
-		{"SO_LISTENQLIMIT", Const, 0, ""},
-		{"SO_MARK", Const, 0, ""},
-		{"SO_NETPROC", Const, 1, ""},
-		{"SO_NKE", Const, 0, ""},
-		{"SO_NOADDRERR", Const, 0, ""},
-		{"SO_NOHEADER", Const, 1, ""},
-		{"SO_NOSIGPIPE", Const, 0, ""},
-		{"SO_NOTIFYCONFLICT", Const, 0, ""},
-		{"SO_NO_CHECK", Const, 0, ""},
-		{"SO_NO_DDP", Const, 0, ""},
-		{"SO_NO_OFFLOAD", Const, 0, ""},
-		{"SO_NP_EXTENSIONS", Const, 0, ""},
-		{"SO_NREAD", Const, 0, ""},
-		{"SO_NUMRCVPKT", Const, 16, ""},
-		{"SO_NWRITE", Const, 0, ""},
-		{"SO_OOBINLINE", Const, 0, ""},
-		{"SO_OVERFLOWED", Const, 1, ""},
-		{"SO_PASSCRED", Const, 0, ""},
-		{"SO_PASSSEC", Const, 0, ""},
-		{"SO_PEERCRED", Const, 0, ""},
-		{"SO_PEERLABEL", Const, 0, ""},
-		{"SO_PEERNAME", Const, 0, ""},
-		{"SO_PEERSEC", Const, 0, ""},
-		{"SO_PRIORITY", Const, 0, ""},
-		{"SO_PROTOCOL", Const, 0, ""},
-		{"SO_PROTOTYPE", Const, 1, ""},
-		{"SO_RANDOMPORT", Const, 0, ""},
-		{"SO_RCVBUF", Const, 0, ""},
-		{"SO_RCVBUFFORCE", Const, 0, ""},
-		{"SO_RCVLOWAT", Const, 0, ""},
-		{"SO_RCVTIMEO", Const, 0, ""},
-		{"SO_RESTRICTIONS", Const, 0, ""},
-		{"SO_RESTRICT_DENYIN", Const, 0, ""},
-		{"SO_RESTRICT_DENYOUT", Const, 0, ""},
-		{"SO_RESTRICT_DENYSET", Const, 0, ""},
-		{"SO_REUSEADDR", Const, 0, ""},
-		{"SO_REUSEPORT", Const, 0, ""},
-		{"SO_REUSESHAREUID", Const, 0, ""},
-		{"SO_RTABLE", Const, 1, ""},
-		{"SO_RXQ_OVFL", Const, 0, ""},
-		{"SO_SECURITY_AUTHENTICATION", Const, 0, ""},
-		{"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0, ""},
-		{"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0, ""},
-		{"SO_SETFIB", Const, 0, ""},
-		{"SO_SNDBUF", Const, 0, ""},
-		{"SO_SNDBUFFORCE", Const, 0, ""},
-		{"SO_SNDLOWAT", Const, 0, ""},
-		{"SO_SNDTIMEO", Const, 0, ""},
-		{"SO_SPLICE", Const, 1, ""},
-		{"SO_TIMESTAMP", Const, 0, ""},
-		{"SO_TIMESTAMPING", Const, 0, ""},
-		{"SO_TIMESTAMPNS", Const, 0, ""},
-		{"SO_TIMESTAMP_MONOTONIC", Const, 0, ""},
-		{"SO_TYPE", Const, 0, ""},
-		{"SO_UPCALLCLOSEWAIT", Const, 0, ""},
-		{"SO_UPDATE_ACCEPT_CONTEXT", Const, 0, ""},
-		{"SO_UPDATE_CONNECT_CONTEXT", Const, 1, ""},
-		{"SO_USELOOPBACK", Const, 0, ""},
-		{"SO_USER_COOKIE", Const, 1, ""},
-		{"SO_VENDOR", Const, 3, ""},
-		{"SO_WANTMORE", Const, 0, ""},
-		{"SO_WANTOOBFLAG", Const, 0, ""},
-		{"SSLExtraCertChainPolicyPara", Type, 0, ""},
-		{"SSLExtraCertChainPolicyPara.AuthType", Field, 0, ""},
-		{"SSLExtraCertChainPolicyPara.Checks", Field, 0, ""},
-		{"SSLExtraCertChainPolicyPara.ServerName", Field, 0, ""},
-		{"SSLExtraCertChainPolicyPara.Size", Field, 0, ""},
-		{"STANDARD_RIGHTS_ALL", Const, 0, ""},
-		{"STANDARD_RIGHTS_EXECUTE", Const, 0, ""},
-		{"STANDARD_RIGHTS_READ", Const, 0, ""},
-		{"STANDARD_RIGHTS_REQUIRED", Const, 0, ""},
-		{"STANDARD_RIGHTS_WRITE", Const, 0, ""},
-		{"STARTF_USESHOWWINDOW", Const, 0, ""},
-		{"STARTF_USESTDHANDLES", Const, 0, ""},
-		{"STD_ERROR_HANDLE", Const, 0, ""},
-		{"STD_INPUT_HANDLE", Const, 0, ""},
-		{"STD_OUTPUT_HANDLE", Const, 0, ""},
-		{"SUBLANG_ENGLISH_US", Const, 0, ""},
-		{"SW_FORCEMINIMIZE", Const, 0, ""},
-		{"SW_HIDE", Const, 0, ""},
-		{"SW_MAXIMIZE", Const, 0, ""},
-		{"SW_MINIMIZE", Const, 0, ""},
-		{"SW_NORMAL", Const, 0, ""},
-		{"SW_RESTORE", Const, 0, ""},
-		{"SW_SHOW", Const, 0, ""},
-		{"SW_SHOWDEFAULT", Const, 0, ""},
-		{"SW_SHOWMAXIMIZED", Const, 0, ""},
-		{"SW_SHOWMINIMIZED", Const, 0, ""},
-		{"SW_SHOWMINNOACTIVE", Const, 0, ""},
-		{"SW_SHOWNA", Const, 0, ""},
-		{"SW_SHOWNOACTIVATE", Const, 0, ""},
-		{"SW_SHOWNORMAL", Const, 0, ""},
-		{"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4, ""},
-		{"SYNCHRONIZE", Const, 0, ""},
-		{"SYSCTL_VERSION", Const, 1, ""},
-		{"SYSCTL_VERS_0", Const, 1, ""},
-		{"SYSCTL_VERS_1", Const, 1, ""},
-		{"SYSCTL_VERS_MASK", Const, 1, ""},
-		{"SYS_ABORT2", Const, 0, ""},
-		{"SYS_ACCEPT", Const, 0, ""},
-		{"SYS_ACCEPT4", Const, 0, ""},
-		{"SYS_ACCEPT_NOCANCEL", Const, 0, ""},
-		{"SYS_ACCESS", Const, 0, ""},
-		{"SYS_ACCESS_EXTENDED", Const, 0, ""},
-		{"SYS_ACCT", Const, 0, ""},
-		{"SYS_ADD_KEY", Const, 0, ""},
-		{"SYS_ADD_PROFIL", Const, 0, ""},
-		{"SYS_ADJFREQ", Const, 1, ""},
-		{"SYS_ADJTIME", Const, 0, ""},
-		{"SYS_ADJTIMEX", Const, 0, ""},
-		{"SYS_AFS_SYSCALL", Const, 0, ""},
-		{"SYS_AIO_CANCEL", Const, 0, ""},
-		{"SYS_AIO_ERROR", Const, 0, ""},
-		{"SYS_AIO_FSYNC", Const, 0, ""},
-		{"SYS_AIO_MLOCK", Const, 14, ""},
-		{"SYS_AIO_READ", Const, 0, ""},
-		{"SYS_AIO_RETURN", Const, 0, ""},
-		{"SYS_AIO_SUSPEND", Const, 0, ""},
-		{"SYS_AIO_SUSPEND_NOCANCEL", Const, 0, ""},
-		{"SYS_AIO_WAITCOMPLETE", Const, 14, ""},
-		{"SYS_AIO_WRITE", Const, 0, ""},
-		{"SYS_ALARM", Const, 0, ""},
-		{"SYS_ARCH_PRCTL", Const, 0, ""},
-		{"SYS_ARM_FADVISE64_64", Const, 0, ""},
-		{"SYS_ARM_SYNC_FILE_RANGE", Const, 0, ""},
-		{"SYS_ATGETMSG", Const, 0, ""},
-		{"SYS_ATPGETREQ", Const, 0, ""},
-		{"SYS_ATPGETRSP", Const, 0, ""},
-		{"SYS_ATPSNDREQ", Const, 0, ""},
-		{"SYS_ATPSNDRSP", Const, 0, ""},
-		{"SYS_ATPUTMSG", Const, 0, ""},
-		{"SYS_ATSOCKET", Const, 0, ""},
-		{"SYS_AUDIT", Const, 0, ""},
-		{"SYS_AUDITCTL", Const, 0, ""},
-		{"SYS_AUDITON", Const, 0, ""},
-		{"SYS_AUDIT_SESSION_JOIN", Const, 0, ""},
-		{"SYS_AUDIT_SESSION_PORT", Const, 0, ""},
-		{"SYS_AUDIT_SESSION_SELF", Const, 0, ""},
-		{"SYS_BDFLUSH", Const, 0, ""},
-		{"SYS_BIND", Const, 0, ""},
-		{"SYS_BINDAT", Const, 3, ""},
-		{"SYS_BREAK", Const, 0, ""},
-		{"SYS_BRK", Const, 0, ""},
-		{"SYS_BSDTHREAD_CREATE", Const, 0, ""},
-		{"SYS_BSDTHREAD_REGISTER", Const, 0, ""},
-		{"SYS_BSDTHREAD_TERMINATE", Const, 0, ""},
-		{"SYS_CAPGET", Const, 0, ""},
-		{"SYS_CAPSET", Const, 0, ""},
-		{"SYS_CAP_ENTER", Const, 0, ""},
-		{"SYS_CAP_FCNTLS_GET", Const, 1, ""},
-		{"SYS_CAP_FCNTLS_LIMIT", Const, 1, ""},
-		{"SYS_CAP_GETMODE", Const, 0, ""},
-		{"SYS_CAP_GETRIGHTS", Const, 0, ""},
-		{"SYS_CAP_IOCTLS_GET", Const, 1, ""},
-		{"SYS_CAP_IOCTLS_LIMIT", Const, 1, ""},
-		{"SYS_CAP_NEW", Const, 0, ""},
-		{"SYS_CAP_RIGHTS_GET", Const, 1, ""},
-		{"SYS_CAP_RIGHTS_LIMIT", Const, 1, ""},
-		{"SYS_CHDIR", Const, 0, ""},
-		{"SYS_CHFLAGS", Const, 0, ""},
-		{"SYS_CHFLAGSAT", Const, 3, ""},
-		{"SYS_CHMOD", Const, 0, ""},
-		{"SYS_CHMOD_EXTENDED", Const, 0, ""},
-		{"SYS_CHOWN", Const, 0, ""},
-		{"SYS_CHOWN32", Const, 0, ""},
-		{"SYS_CHROOT", Const, 0, ""},
-		{"SYS_CHUD", Const, 0, ""},
-		{"SYS_CLOCK_ADJTIME", Const, 0, ""},
-		{"SYS_CLOCK_GETCPUCLOCKID2", Const, 1, ""},
-		{"SYS_CLOCK_GETRES", Const, 0, ""},
-		{"SYS_CLOCK_GETTIME", Const, 0, ""},
-		{"SYS_CLOCK_NANOSLEEP", Const, 0, ""},
-		{"SYS_CLOCK_SETTIME", Const, 0, ""},
-		{"SYS_CLONE", Const, 0, ""},
-		{"SYS_CLOSE", Const, 0, ""},
-		{"SYS_CLOSEFROM", Const, 0, ""},
-		{"SYS_CLOSE_NOCANCEL", Const, 0, ""},
-		{"SYS_CONNECT", Const, 0, ""},
-		{"SYS_CONNECTAT", Const, 3, ""},
-		{"SYS_CONNECT_NOCANCEL", Const, 0, ""},
-		{"SYS_COPYFILE", Const, 0, ""},
-		{"SYS_CPUSET", Const, 0, ""},
-		{"SYS_CPUSET_GETAFFINITY", Const, 0, ""},
-		{"SYS_CPUSET_GETID", Const, 0, ""},
-		{"SYS_CPUSET_SETAFFINITY", Const, 0, ""},
-		{"SYS_CPUSET_SETID", Const, 0, ""},
-		{"SYS_CREAT", Const, 0, ""},
-		{"SYS_CREATE_MODULE", Const, 0, ""},
-		{"SYS_CSOPS", Const, 0, ""},
-		{"SYS_CSOPS_AUDITTOKEN", Const, 16, ""},
-		{"SYS_DELETE", Const, 0, ""},
-		{"SYS_DELETE_MODULE", Const, 0, ""},
-		{"SYS_DUP", Const, 0, ""},
-		{"SYS_DUP2", Const, 0, ""},
-		{"SYS_DUP3", Const, 0, ""},
-		{"SYS_EACCESS", Const, 0, ""},
-		{"SYS_EPOLL_CREATE", Const, 0, ""},
-		{"SYS_EPOLL_CREATE1", Const, 0, ""},
-		{"SYS_EPOLL_CTL", Const, 0, ""},
-		{"SYS_EPOLL_CTL_OLD", Const, 0, ""},
-		{"SYS_EPOLL_PWAIT", Const, 0, ""},
-		{"SYS_EPOLL_WAIT", Const, 0, ""},
-		{"SYS_EPOLL_WAIT_OLD", Const, 0, ""},
-		{"SYS_EVENTFD", Const, 0, ""},
-		{"SYS_EVENTFD2", Const, 0, ""},
-		{"SYS_EXCHANGEDATA", Const, 0, ""},
-		{"SYS_EXECVE", Const, 0, ""},
-		{"SYS_EXIT", Const, 0, ""},
-		{"SYS_EXIT_GROUP", Const, 0, ""},
-		{"SYS_EXTATTRCTL", Const, 0, ""},
-		{"SYS_EXTATTR_DELETE_FD", Const, 0, ""},
-		{"SYS_EXTATTR_DELETE_FILE", Const, 0, ""},
-		{"SYS_EXTATTR_DELETE_LINK", Const, 0, ""},
-		{"SYS_EXTATTR_GET_FD", Const, 0, ""},
-		{"SYS_EXTATTR_GET_FILE", Const, 0, ""},
-		{"SYS_EXTATTR_GET_LINK", Const, 0, ""},
-		{"SYS_EXTATTR_LIST_FD", Const, 0, ""},
-		{"SYS_EXTATTR_LIST_FILE", Const, 0, ""},
-		{"SYS_EXTATTR_LIST_LINK", Const, 0, ""},
-		{"SYS_EXTATTR_SET_FD", Const, 0, ""},
-		{"SYS_EXTATTR_SET_FILE", Const, 0, ""},
-		{"SYS_EXTATTR_SET_LINK", Const, 0, ""},
-		{"SYS_FACCESSAT", Const, 0, ""},
-		{"SYS_FADVISE64", Const, 0, ""},
-		{"SYS_FADVISE64_64", Const, 0, ""},
-		{"SYS_FALLOCATE", Const, 0, ""},
-		{"SYS_FANOTIFY_INIT", Const, 0, ""},
-		{"SYS_FANOTIFY_MARK", Const, 0, ""},
-		{"SYS_FCHDIR", Const, 0, ""},
-		{"SYS_FCHFLAGS", Const, 0, ""},
-		{"SYS_FCHMOD", Const, 0, ""},
-		{"SYS_FCHMODAT", Const, 0, ""},
-		{"SYS_FCHMOD_EXTENDED", Const, 0, ""},
-		{"SYS_FCHOWN", Const, 0, ""},
-		{"SYS_FCHOWN32", Const, 0, ""},
-		{"SYS_FCHOWNAT", Const, 0, ""},
-		{"SYS_FCHROOT", Const, 1, ""},
-		{"SYS_FCNTL", Const, 0, ""},
-		{"SYS_FCNTL64", Const, 0, ""},
-		{"SYS_FCNTL_NOCANCEL", Const, 0, ""},
-		{"SYS_FDATASYNC", Const, 0, ""},
-		{"SYS_FEXECVE", Const, 0, ""},
-		{"SYS_FFCLOCK_GETCOUNTER", Const, 0, ""},
-		{"SYS_FFCLOCK_GETESTIMATE", Const, 0, ""},
-		{"SYS_FFCLOCK_SETESTIMATE", Const, 0, ""},
-		{"SYS_FFSCTL", Const, 0, ""},
-		{"SYS_FGETATTRLIST", Const, 0, ""},
-		{"SYS_FGETXATTR", Const, 0, ""},
-		{"SYS_FHOPEN", Const, 0, ""},
-		{"SYS_FHSTAT", Const, 0, ""},
-		{"SYS_FHSTATFS", Const, 0, ""},
-		{"SYS_FILEPORT_MAKEFD", Const, 0, ""},
-		{"SYS_FILEPORT_MAKEPORT", Const, 0, ""},
-		{"SYS_FKTRACE", Const, 1, ""},
-		{"SYS_FLISTXATTR", Const, 0, ""},
-		{"SYS_FLOCK", Const, 0, ""},
-		{"SYS_FORK", Const, 0, ""},
-		{"SYS_FPATHCONF", Const, 0, ""},
-		{"SYS_FREEBSD6_FTRUNCATE", Const, 0, ""},
-		{"SYS_FREEBSD6_LSEEK", Const, 0, ""},
-		{"SYS_FREEBSD6_MMAP", Const, 0, ""},
-		{"SYS_FREEBSD6_PREAD", Const, 0, ""},
-		{"SYS_FREEBSD6_PWRITE", Const, 0, ""},
-		{"SYS_FREEBSD6_TRUNCATE", Const, 0, ""},
-		{"SYS_FREMOVEXATTR", Const, 0, ""},
-		{"SYS_FSCTL", Const, 0, ""},
-		{"SYS_FSETATTRLIST", Const, 0, ""},
-		{"SYS_FSETXATTR", Const, 0, ""},
-		{"SYS_FSGETPATH", Const, 0, ""},
-		{"SYS_FSTAT", Const, 0, ""},
-		{"SYS_FSTAT64", Const, 0, ""},
-		{"SYS_FSTAT64_EXTENDED", Const, 0, ""},
-		{"SYS_FSTATAT", Const, 0, ""},
-		{"SYS_FSTATAT64", Const, 0, ""},
-		{"SYS_FSTATFS", Const, 0, ""},
-		{"SYS_FSTATFS64", Const, 0, ""},
-		{"SYS_FSTATV", Const, 0, ""},
-		{"SYS_FSTATVFS1", Const, 1, ""},
-		{"SYS_FSTAT_EXTENDED", Const, 0, ""},
-		{"SYS_FSYNC", Const, 0, ""},
-		{"SYS_FSYNC_NOCANCEL", Const, 0, ""},
-		{"SYS_FSYNC_RANGE", Const, 1, ""},
-		{"SYS_FTIME", Const, 0, ""},
-		{"SYS_FTRUNCATE", Const, 0, ""},
-		{"SYS_FTRUNCATE64", Const, 0, ""},
-		{"SYS_FUTEX", Const, 0, ""},
-		{"SYS_FUTIMENS", Const, 1, ""},
-		{"SYS_FUTIMES", Const, 0, ""},
-		{"SYS_FUTIMESAT", Const, 0, ""},
-		{"SYS_GETATTRLIST", Const, 0, ""},
-		{"SYS_GETAUDIT", Const, 0, ""},
-		{"SYS_GETAUDIT_ADDR", Const, 0, ""},
-		{"SYS_GETAUID", Const, 0, ""},
-		{"SYS_GETCONTEXT", Const, 0, ""},
-		{"SYS_GETCPU", Const, 0, ""},
-		{"SYS_GETCWD", Const, 0, ""},
-		{"SYS_GETDENTS", Const, 0, ""},
-		{"SYS_GETDENTS64", Const, 0, ""},
-		{"SYS_GETDIRENTRIES", Const, 0, ""},
-		{"SYS_GETDIRENTRIES64", Const, 0, ""},
-		{"SYS_GETDIRENTRIESATTR", Const, 0, ""},
-		{"SYS_GETDTABLECOUNT", Const, 1, ""},
-		{"SYS_GETDTABLESIZE", Const, 0, ""},
-		{"SYS_GETEGID", Const, 0, ""},
-		{"SYS_GETEGID32", Const, 0, ""},
-		{"SYS_GETEUID", Const, 0, ""},
-		{"SYS_GETEUID32", Const, 0, ""},
-		{"SYS_GETFH", Const, 0, ""},
-		{"SYS_GETFSSTAT", Const, 0, ""},
-		{"SYS_GETFSSTAT64", Const, 0, ""},
-		{"SYS_GETGID", Const, 0, ""},
-		{"SYS_GETGID32", Const, 0, ""},
-		{"SYS_GETGROUPS", Const, 0, ""},
-		{"SYS_GETGROUPS32", Const, 0, ""},
-		{"SYS_GETHOSTUUID", Const, 0, ""},
-		{"SYS_GETITIMER", Const, 0, ""},
-		{"SYS_GETLCID", Const, 0, ""},
-		{"SYS_GETLOGIN", Const, 0, ""},
-		{"SYS_GETLOGINCLASS", Const, 0, ""},
-		{"SYS_GETPEERNAME", Const, 0, ""},
-		{"SYS_GETPGID", Const, 0, ""},
-		{"SYS_GETPGRP", Const, 0, ""},
-		{"SYS_GETPID", Const, 0, ""},
-		{"SYS_GETPMSG", Const, 0, ""},
-		{"SYS_GETPPID", Const, 0, ""},
-		{"SYS_GETPRIORITY", Const, 0, ""},
-		{"SYS_GETRESGID", Const, 0, ""},
-		{"SYS_GETRESGID32", Const, 0, ""},
-		{"SYS_GETRESUID", Const, 0, ""},
-		{"SYS_GETRESUID32", Const, 0, ""},
-		{"SYS_GETRLIMIT", Const, 0, ""},
-		{"SYS_GETRTABLE", Const, 1, ""},
-		{"SYS_GETRUSAGE", Const, 0, ""},
-		{"SYS_GETSGROUPS", Const, 0, ""},
-		{"SYS_GETSID", Const, 0, ""},
-		{"SYS_GETSOCKNAME", Const, 0, ""},
-		{"SYS_GETSOCKOPT", Const, 0, ""},
-		{"SYS_GETTHRID", Const, 1, ""},
-		{"SYS_GETTID", Const, 0, ""},
-		{"SYS_GETTIMEOFDAY", Const, 0, ""},
-		{"SYS_GETUID", Const, 0, ""},
-		{"SYS_GETUID32", Const, 0, ""},
-		{"SYS_GETVFSSTAT", Const, 1, ""},
-		{"SYS_GETWGROUPS", Const, 0, ""},
-		{"SYS_GETXATTR", Const, 0, ""},
-		{"SYS_GET_KERNEL_SYMS", Const, 0, ""},
-		{"SYS_GET_MEMPOLICY", Const, 0, ""},
-		{"SYS_GET_ROBUST_LIST", Const, 0, ""},
-		{"SYS_GET_THREAD_AREA", Const, 0, ""},
-		{"SYS_GSSD_SYSCALL", Const, 14, ""},
-		{"SYS_GTTY", Const, 0, ""},
-		{"SYS_IDENTITYSVC", Const, 0, ""},
-		{"SYS_IDLE", Const, 0, ""},
-		{"SYS_INITGROUPS", Const, 0, ""},
-		{"SYS_INIT_MODULE", Const, 0, ""},
-		{"SYS_INOTIFY_ADD_WATCH", Const, 0, ""},
-		{"SYS_INOTIFY_INIT", Const, 0, ""},
-		{"SYS_INOTIFY_INIT1", Const, 0, ""},
-		{"SYS_INOTIFY_RM_WATCH", Const, 0, ""},
-		{"SYS_IOCTL", Const, 0, ""},
-		{"SYS_IOPERM", Const, 0, ""},
-		{"SYS_IOPL", Const, 0, ""},
-		{"SYS_IOPOLICYSYS", Const, 0, ""},
-		{"SYS_IOPRIO_GET", Const, 0, ""},
-		{"SYS_IOPRIO_SET", Const, 0, ""},
-		{"SYS_IO_CANCEL", Const, 0, ""},
-		{"SYS_IO_DESTROY", Const, 0, ""},
-		{"SYS_IO_GETEVENTS", Const, 0, ""},
-		{"SYS_IO_SETUP", Const, 0, ""},
-		{"SYS_IO_SUBMIT", Const, 0, ""},
-		{"SYS_IPC", Const, 0, ""},
-		{"SYS_ISSETUGID", Const, 0, ""},
-		{"SYS_JAIL", Const, 0, ""},
-		{"SYS_JAIL_ATTACH", Const, 0, ""},
-		{"SYS_JAIL_GET", Const, 0, ""},
-		{"SYS_JAIL_REMOVE", Const, 0, ""},
-		{"SYS_JAIL_SET", Const, 0, ""},
-		{"SYS_KAS_INFO", Const, 16, ""},
-		{"SYS_KDEBUG_TRACE", Const, 0, ""},
-		{"SYS_KENV", Const, 0, ""},
-		{"SYS_KEVENT", Const, 0, ""},
-		{"SYS_KEVENT64", Const, 0, ""},
-		{"SYS_KEXEC_LOAD", Const, 0, ""},
-		{"SYS_KEYCTL", Const, 0, ""},
-		{"SYS_KILL", Const, 0, ""},
-		{"SYS_KLDFIND", Const, 0, ""},
-		{"SYS_KLDFIRSTMOD", Const, 0, ""},
-		{"SYS_KLDLOAD", Const, 0, ""},
-		{"SYS_KLDNEXT", Const, 0, ""},
-		{"SYS_KLDSTAT", Const, 0, ""},
-		{"SYS_KLDSYM", Const, 0, ""},
-		{"SYS_KLDUNLOAD", Const, 0, ""},
-		{"SYS_KLDUNLOADF", Const, 0, ""},
-		{"SYS_KMQ_NOTIFY", Const, 14, ""},
-		{"SYS_KMQ_OPEN", Const, 14, ""},
-		{"SYS_KMQ_SETATTR", Const, 14, ""},
-		{"SYS_KMQ_TIMEDRECEIVE", Const, 14, ""},
-		{"SYS_KMQ_TIMEDSEND", Const, 14, ""},
-		{"SYS_KMQ_UNLINK", Const, 14, ""},
-		{"SYS_KQUEUE", Const, 0, ""},
-		{"SYS_KQUEUE1", Const, 1, ""},
-		{"SYS_KSEM_CLOSE", Const, 14, ""},
-		{"SYS_KSEM_DESTROY", Const, 14, ""},
-		{"SYS_KSEM_GETVALUE", Const, 14, ""},
-		{"SYS_KSEM_INIT", Const, 14, ""},
-		{"SYS_KSEM_OPEN", Const, 14, ""},
-		{"SYS_KSEM_POST", Const, 14, ""},
-		{"SYS_KSEM_TIMEDWAIT", Const, 14, ""},
-		{"SYS_KSEM_TRYWAIT", Const, 14, ""},
-		{"SYS_KSEM_UNLINK", Const, 14, ""},
-		{"SYS_KSEM_WAIT", Const, 14, ""},
-		{"SYS_KTIMER_CREATE", Const, 0, ""},
-		{"SYS_KTIMER_DELETE", Const, 0, ""},
-		{"SYS_KTIMER_GETOVERRUN", Const, 0, ""},
-		{"SYS_KTIMER_GETTIME", Const, 0, ""},
-		{"SYS_KTIMER_SETTIME", Const, 0, ""},
-		{"SYS_KTRACE", Const, 0, ""},
-		{"SYS_LCHFLAGS", Const, 0, ""},
-		{"SYS_LCHMOD", Const, 0, ""},
-		{"SYS_LCHOWN", Const, 0, ""},
-		{"SYS_LCHOWN32", Const, 0, ""},
-		{"SYS_LEDGER", Const, 16, ""},
-		{"SYS_LGETFH", Const, 0, ""},
-		{"SYS_LGETXATTR", Const, 0, ""},
-		{"SYS_LINK", Const, 0, ""},
-		{"SYS_LINKAT", Const, 0, ""},
-		{"SYS_LIO_LISTIO", Const, 0, ""},
-		{"SYS_LISTEN", Const, 0, ""},
-		{"SYS_LISTXATTR", Const, 0, ""},
-		{"SYS_LLISTXATTR", Const, 0, ""},
-		{"SYS_LOCK", Const, 0, ""},
-		{"SYS_LOOKUP_DCOOKIE", Const, 0, ""},
-		{"SYS_LPATHCONF", Const, 0, ""},
-		{"SYS_LREMOVEXATTR", Const, 0, ""},
-		{"SYS_LSEEK", Const, 0, ""},
-		{"SYS_LSETXATTR", Const, 0, ""},
-		{"SYS_LSTAT", Const, 0, ""},
-		{"SYS_LSTAT64", Const, 0, ""},
-		{"SYS_LSTAT64_EXTENDED", Const, 0, ""},
-		{"SYS_LSTATV", Const, 0, ""},
-		{"SYS_LSTAT_EXTENDED", Const, 0, ""},
-		{"SYS_LUTIMES", Const, 0, ""},
-		{"SYS_MAC_SYSCALL", Const, 0, ""},
-		{"SYS_MADVISE", Const, 0, ""},
-		{"SYS_MADVISE1", Const, 0, ""},
-		{"SYS_MAXSYSCALL", Const, 0, ""},
-		{"SYS_MBIND", Const, 0, ""},
-		{"SYS_MIGRATE_PAGES", Const, 0, ""},
-		{"SYS_MINCORE", Const, 0, ""},
-		{"SYS_MINHERIT", Const, 0, ""},
-		{"SYS_MKCOMPLEX", Const, 0, ""},
-		{"SYS_MKDIR", Const, 0, ""},
-		{"SYS_MKDIRAT", Const, 0, ""},
-		{"SYS_MKDIR_EXTENDED", Const, 0, ""},
-		{"SYS_MKFIFO", Const, 0, ""},
-		{"SYS_MKFIFOAT", Const, 0, ""},
-		{"SYS_MKFIFO_EXTENDED", Const, 0, ""},
-		{"SYS_MKNOD", Const, 0, ""},
-		{"SYS_MKNODAT", Const, 0, ""},
-		{"SYS_MLOCK", Const, 0, ""},
-		{"SYS_MLOCKALL", Const, 0, ""},
-		{"SYS_MMAP", Const, 0, ""},
-		{"SYS_MMAP2", Const, 0, ""},
-		{"SYS_MODCTL", Const, 1, ""},
-		{"SYS_MODFIND", Const, 0, ""},
-		{"SYS_MODFNEXT", Const, 0, ""},
-		{"SYS_MODIFY_LDT", Const, 0, ""},
-		{"SYS_MODNEXT", Const, 0, ""},
-		{"SYS_MODSTAT", Const, 0, ""},
-		{"SYS_MODWATCH", Const, 0, ""},
-		{"SYS_MOUNT", Const, 0, ""},
-		{"SYS_MOVE_PAGES", Const, 0, ""},
-		{"SYS_MPROTECT", Const, 0, ""},
-		{"SYS_MPX", Const, 0, ""},
-		{"SYS_MQUERY", Const, 1, ""},
-		{"SYS_MQ_GETSETATTR", Const, 0, ""},
-		{"SYS_MQ_NOTIFY", Const, 0, ""},
-		{"SYS_MQ_OPEN", Const, 0, ""},
-		{"SYS_MQ_TIMEDRECEIVE", Const, 0, ""},
-		{"SYS_MQ_TIMEDSEND", Const, 0, ""},
-		{"SYS_MQ_UNLINK", Const, 0, ""},
-		{"SYS_MREMAP", Const, 0, ""},
-		{"SYS_MSGCTL", Const, 0, ""},
-		{"SYS_MSGGET", Const, 0, ""},
-		{"SYS_MSGRCV", Const, 0, ""},
-		{"SYS_MSGRCV_NOCANCEL", Const, 0, ""},
-		{"SYS_MSGSND", Const, 0, ""},
-		{"SYS_MSGSND_NOCANCEL", Const, 0, ""},
-		{"SYS_MSGSYS", Const, 0, ""},
-		{"SYS_MSYNC", Const, 0, ""},
-		{"SYS_MSYNC_NOCANCEL", Const, 0, ""},
-		{"SYS_MUNLOCK", Const, 0, ""},
-		{"SYS_MUNLOCKALL", Const, 0, ""},
-		{"SYS_MUNMAP", Const, 0, ""},
-		{"SYS_NAME_TO_HANDLE_AT", Const, 0, ""},
-		{"SYS_NANOSLEEP", Const, 0, ""},
-		{"SYS_NEWFSTATAT", Const, 0, ""},
-		{"SYS_NFSCLNT", Const, 0, ""},
-		{"SYS_NFSSERVCTL", Const, 0, ""},
-		{"SYS_NFSSVC", Const, 0, ""},
-		{"SYS_NFSTAT", Const, 0, ""},
-		{"SYS_NICE", Const, 0, ""},
-		{"SYS_NLM_SYSCALL", Const, 14, ""},
-		{"SYS_NLSTAT", Const, 0, ""},
-		{"SYS_NMOUNT", Const, 0, ""},
-		{"SYS_NSTAT", Const, 0, ""},
-		{"SYS_NTP_ADJTIME", Const, 0, ""},
-		{"SYS_NTP_GETTIME", Const, 0, ""},
-		{"SYS_NUMA_GETAFFINITY", Const, 14, ""},
-		{"SYS_NUMA_SETAFFINITY", Const, 14, ""},
-		{"SYS_OABI_SYSCALL_BASE", Const, 0, ""},
-		{"SYS_OBREAK", Const, 0, ""},
-		{"SYS_OLDFSTAT", Const, 0, ""},
-		{"SYS_OLDLSTAT", Const, 0, ""},
-		{"SYS_OLDOLDUNAME", Const, 0, ""},
-		{"SYS_OLDSTAT", Const, 0, ""},
-		{"SYS_OLDUNAME", Const, 0, ""},
-		{"SYS_OPEN", Const, 0, ""},
-		{"SYS_OPENAT", Const, 0, ""},
-		{"SYS_OPENBSD_POLL", Const, 0, ""},
-		{"SYS_OPEN_BY_HANDLE_AT", Const, 0, ""},
-		{"SYS_OPEN_DPROTECTED_NP", Const, 16, ""},
-		{"SYS_OPEN_EXTENDED", Const, 0, ""},
-		{"SYS_OPEN_NOCANCEL", Const, 0, ""},
-		{"SYS_OVADVISE", Const, 0, ""},
-		{"SYS_PACCEPT", Const, 1, ""},
-		{"SYS_PATHCONF", Const, 0, ""},
-		{"SYS_PAUSE", Const, 0, ""},
-		{"SYS_PCICONFIG_IOBASE", Const, 0, ""},
-		{"SYS_PCICONFIG_READ", Const, 0, ""},
-		{"SYS_PCICONFIG_WRITE", Const, 0, ""},
-		{"SYS_PDFORK", Const, 0, ""},
-		{"SYS_PDGETPID", Const, 0, ""},
-		{"SYS_PDKILL", Const, 0, ""},
-		{"SYS_PERF_EVENT_OPEN", Const, 0, ""},
-		{"SYS_PERSONALITY", Const, 0, ""},
-		{"SYS_PID_HIBERNATE", Const, 0, ""},
-		{"SYS_PID_RESUME", Const, 0, ""},
-		{"SYS_PID_SHUTDOWN_SOCKETS", Const, 0, ""},
-		{"SYS_PID_SUSPEND", Const, 0, ""},
-		{"SYS_PIPE", Const, 0, ""},
-		{"SYS_PIPE2", Const, 0, ""},
-		{"SYS_PIVOT_ROOT", Const, 0, ""},
-		{"SYS_PMC_CONTROL", Const, 1, ""},
-		{"SYS_PMC_GET_INFO", Const, 1, ""},
-		{"SYS_POLL", Const, 0, ""},
-		{"SYS_POLLTS", Const, 1, ""},
-		{"SYS_POLL_NOCANCEL", Const, 0, ""},
-		{"SYS_POSIX_FADVISE", Const, 0, ""},
-		{"SYS_POSIX_FALLOCATE", Const, 0, ""},
-		{"SYS_POSIX_OPENPT", Const, 0, ""},
-		{"SYS_POSIX_SPAWN", Const, 0, ""},
-		{"SYS_PPOLL", Const, 0, ""},
-		{"SYS_PRCTL", Const, 0, ""},
-		{"SYS_PREAD", Const, 0, ""},
-		{"SYS_PREAD64", Const, 0, ""},
-		{"SYS_PREADV", Const, 0, ""},
-		{"SYS_PREAD_NOCANCEL", Const, 0, ""},
-		{"SYS_PRLIMIT64", Const, 0, ""},
-		{"SYS_PROCCTL", Const, 3, ""},
-		{"SYS_PROCESS_POLICY", Const, 0, ""},
-		{"SYS_PROCESS_VM_READV", Const, 0, ""},
-		{"SYS_PROCESS_VM_WRITEV", Const, 0, ""},
-		{"SYS_PROC_INFO", Const, 0, ""},
-		{"SYS_PROF", Const, 0, ""},
-		{"SYS_PROFIL", Const, 0, ""},
-		{"SYS_PSELECT", Const, 0, ""},
-		{"SYS_PSELECT6", Const, 0, ""},
-		{"SYS_PSET_ASSIGN", Const, 1, ""},
-		{"SYS_PSET_CREATE", Const, 1, ""},
-		{"SYS_PSET_DESTROY", Const, 1, ""},
-		{"SYS_PSYNCH_CVBROAD", Const, 0, ""},
-		{"SYS_PSYNCH_CVCLRPREPOST", Const, 0, ""},
-		{"SYS_PSYNCH_CVSIGNAL", Const, 0, ""},
-		{"SYS_PSYNCH_CVWAIT", Const, 0, ""},
-		{"SYS_PSYNCH_MUTEXDROP", Const, 0, ""},
-		{"SYS_PSYNCH_MUTEXWAIT", Const, 0, ""},
-		{"SYS_PSYNCH_RW_DOWNGRADE", Const, 0, ""},
-		{"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0, ""},
-		{"SYS_PSYNCH_RW_RDLOCK", Const, 0, ""},
-		{"SYS_PSYNCH_RW_UNLOCK", Const, 0, ""},
-		{"SYS_PSYNCH_RW_UNLOCK2", Const, 0, ""},
-		{"SYS_PSYNCH_RW_UPGRADE", Const, 0, ""},
-		{"SYS_PSYNCH_RW_WRLOCK", Const, 0, ""},
-		{"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0, ""},
-		{"SYS_PTRACE", Const, 0, ""},
-		{"SYS_PUTPMSG", Const, 0, ""},
-		{"SYS_PWRITE", Const, 0, ""},
-		{"SYS_PWRITE64", Const, 0, ""},
-		{"SYS_PWRITEV", Const, 0, ""},
-		{"SYS_PWRITE_NOCANCEL", Const, 0, ""},
-		{"SYS_QUERY_MODULE", Const, 0, ""},
-		{"SYS_QUOTACTL", Const, 0, ""},
-		{"SYS_RASCTL", Const, 1, ""},
-		{"SYS_RCTL_ADD_RULE", Const, 0, ""},
-		{"SYS_RCTL_GET_LIMITS", Const, 0, ""},
-		{"SYS_RCTL_GET_RACCT", Const, 0, ""},
-		{"SYS_RCTL_GET_RULES", Const, 0, ""},
-		{"SYS_RCTL_REMOVE_RULE", Const, 0, ""},
-		{"SYS_READ", Const, 0, ""},
-		{"SYS_READAHEAD", Const, 0, ""},
-		{"SYS_READDIR", Const, 0, ""},
-		{"SYS_READLINK", Const, 0, ""},
-		{"SYS_READLINKAT", Const, 0, ""},
-		{"SYS_READV", Const, 0, ""},
-		{"SYS_READV_NOCANCEL", Const, 0, ""},
-		{"SYS_READ_NOCANCEL", Const, 0, ""},
-		{"SYS_REBOOT", Const, 0, ""},
-		{"SYS_RECV", Const, 0, ""},
-		{"SYS_RECVFROM", Const, 0, ""},
-		{"SYS_RECVFROM_NOCANCEL", Const, 0, ""},
-		{"SYS_RECVMMSG", Const, 0, ""},
-		{"SYS_RECVMSG", Const, 0, ""},
-		{"SYS_RECVMSG_NOCANCEL", Const, 0, ""},
-		{"SYS_REMAP_FILE_PAGES", Const, 0, ""},
-		{"SYS_REMOVEXATTR", Const, 0, ""},
-		{"SYS_RENAME", Const, 0, ""},
-		{"SYS_RENAMEAT", Const, 0, ""},
-		{"SYS_REQUEST_KEY", Const, 0, ""},
-		{"SYS_RESTART_SYSCALL", Const, 0, ""},
-		{"SYS_REVOKE", Const, 0, ""},
-		{"SYS_RFORK", Const, 0, ""},
-		{"SYS_RMDIR", Const, 0, ""},
-		{"SYS_RTPRIO", Const, 0, ""},
-		{"SYS_RTPRIO_THREAD", Const, 0, ""},
-		{"SYS_RT_SIGACTION", Const, 0, ""},
-		{"SYS_RT_SIGPENDING", Const, 0, ""},
-		{"SYS_RT_SIGPROCMASK", Const, 0, ""},
-		{"SYS_RT_SIGQUEUEINFO", Const, 0, ""},
-		{"SYS_RT_SIGRETURN", Const, 0, ""},
-		{"SYS_RT_SIGSUSPEND", Const, 0, ""},
-		{"SYS_RT_SIGTIMEDWAIT", Const, 0, ""},
-		{"SYS_RT_TGSIGQUEUEINFO", Const, 0, ""},
-		{"SYS_SBRK", Const, 0, ""},
-		{"SYS_SCHED_GETAFFINITY", Const, 0, ""},
-		{"SYS_SCHED_GETPARAM", Const, 0, ""},
-		{"SYS_SCHED_GETSCHEDULER", Const, 0, ""},
-		{"SYS_SCHED_GET_PRIORITY_MAX", Const, 0, ""},
-		{"SYS_SCHED_GET_PRIORITY_MIN", Const, 0, ""},
-		{"SYS_SCHED_RR_GET_INTERVAL", Const, 0, ""},
-		{"SYS_SCHED_SETAFFINITY", Const, 0, ""},
-		{"SYS_SCHED_SETPARAM", Const, 0, ""},
-		{"SYS_SCHED_SETSCHEDULER", Const, 0, ""},
-		{"SYS_SCHED_YIELD", Const, 0, ""},
-		{"SYS_SCTP_GENERIC_RECVMSG", Const, 0, ""},
-		{"SYS_SCTP_GENERIC_SENDMSG", Const, 0, ""},
-		{"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0, ""},
-		{"SYS_SCTP_PEELOFF", Const, 0, ""},
-		{"SYS_SEARCHFS", Const, 0, ""},
-		{"SYS_SECURITY", Const, 0, ""},
-		{"SYS_SELECT", Const, 0, ""},
-		{"SYS_SELECT_NOCANCEL", Const, 0, ""},
-		{"SYS_SEMCONFIG", Const, 1, ""},
-		{"SYS_SEMCTL", Const, 0, ""},
-		{"SYS_SEMGET", Const, 0, ""},
-		{"SYS_SEMOP", Const, 0, ""},
-		{"SYS_SEMSYS", Const, 0, ""},
-		{"SYS_SEMTIMEDOP", Const, 0, ""},
-		{"SYS_SEM_CLOSE", Const, 0, ""},
-		{"SYS_SEM_DESTROY", Const, 0, ""},
-		{"SYS_SEM_GETVALUE", Const, 0, ""},
-		{"SYS_SEM_INIT", Const, 0, ""},
-		{"SYS_SEM_OPEN", Const, 0, ""},
-		{"SYS_SEM_POST", Const, 0, ""},
-		{"SYS_SEM_TRYWAIT", Const, 0, ""},
-		{"SYS_SEM_UNLINK", Const, 0, ""},
-		{"SYS_SEM_WAIT", Const, 0, ""},
-		{"SYS_SEM_WAIT_NOCANCEL", Const, 0, ""},
-		{"SYS_SEND", Const, 0, ""},
-		{"SYS_SENDFILE", Const, 0, ""},
-		{"SYS_SENDFILE64", Const, 0, ""},
-		{"SYS_SENDMMSG", Const, 0, ""},
-		{"SYS_SENDMSG", Const, 0, ""},
-		{"SYS_SENDMSG_NOCANCEL", Const, 0, ""},
-		{"SYS_SENDTO", Const, 0, ""},
-		{"SYS_SENDTO_NOCANCEL", Const, 0, ""},
-		{"SYS_SETATTRLIST", Const, 0, ""},
-		{"SYS_SETAUDIT", Const, 0, ""},
-		{"SYS_SETAUDIT_ADDR", Const, 0, ""},
-		{"SYS_SETAUID", Const, 0, ""},
-		{"SYS_SETCONTEXT", Const, 0, ""},
-		{"SYS_SETDOMAINNAME", Const, 0, ""},
-		{"SYS_SETEGID", Const, 0, ""},
-		{"SYS_SETEUID", Const, 0, ""},
-		{"SYS_SETFIB", Const, 0, ""},
-		{"SYS_SETFSGID", Const, 0, ""},
-		{"SYS_SETFSGID32", Const, 0, ""},
-		{"SYS_SETFSUID", Const, 0, ""},
-		{"SYS_SETFSUID32", Const, 0, ""},
-		{"SYS_SETGID", Const, 0, ""},
-		{"SYS_SETGID32", Const, 0, ""},
-		{"SYS_SETGROUPS", Const, 0, ""},
-		{"SYS_SETGROUPS32", Const, 0, ""},
-		{"SYS_SETHOSTNAME", Const, 0, ""},
-		{"SYS_SETITIMER", Const, 0, ""},
-		{"SYS_SETLCID", Const, 0, ""},
-		{"SYS_SETLOGIN", Const, 0, ""},
-		{"SYS_SETLOGINCLASS", Const, 0, ""},
-		{"SYS_SETNS", Const, 0, ""},
-		{"SYS_SETPGID", Const, 0, ""},
-		{"SYS_SETPRIORITY", Const, 0, ""},
-		{"SYS_SETPRIVEXEC", Const, 0, ""},
-		{"SYS_SETREGID", Const, 0, ""},
-		{"SYS_SETREGID32", Const, 0, ""},
-		{"SYS_SETRESGID", Const, 0, ""},
-		{"SYS_SETRESGID32", Const, 0, ""},
-		{"SYS_SETRESUID", Const, 0, ""},
-		{"SYS_SETRESUID32", Const, 0, ""},
-		{"SYS_SETREUID", Const, 0, ""},
-		{"SYS_SETREUID32", Const, 0, ""},
-		{"SYS_SETRLIMIT", Const, 0, ""},
-		{"SYS_SETRTABLE", Const, 1, ""},
-		{"SYS_SETSGROUPS", Const, 0, ""},
-		{"SYS_SETSID", Const, 0, ""},
-		{"SYS_SETSOCKOPT", Const, 0, ""},
-		{"SYS_SETTID", Const, 0, ""},
-		{"SYS_SETTID_WITH_PID", Const, 0, ""},
-		{"SYS_SETTIMEOFDAY", Const, 0, ""},
-		{"SYS_SETUID", Const, 0, ""},
-		{"SYS_SETUID32", Const, 0, ""},
-		{"SYS_SETWGROUPS", Const, 0, ""},
-		{"SYS_SETXATTR", Const, 0, ""},
-		{"SYS_SET_MEMPOLICY", Const, 0, ""},
-		{"SYS_SET_ROBUST_LIST", Const, 0, ""},
-		{"SYS_SET_THREAD_AREA", Const, 0, ""},
-		{"SYS_SET_TID_ADDRESS", Const, 0, ""},
-		{"SYS_SGETMASK", Const, 0, ""},
-		{"SYS_SHARED_REGION_CHECK_NP", Const, 0, ""},
-		{"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0, ""},
-		{"SYS_SHMAT", Const, 0, ""},
-		{"SYS_SHMCTL", Const, 0, ""},
-		{"SYS_SHMDT", Const, 0, ""},
-		{"SYS_SHMGET", Const, 0, ""},
-		{"SYS_SHMSYS", Const, 0, ""},
-		{"SYS_SHM_OPEN", Const, 0, ""},
-		{"SYS_SHM_UNLINK", Const, 0, ""},
-		{"SYS_SHUTDOWN", Const, 0, ""},
-		{"SYS_SIGACTION", Const, 0, ""},
-		{"SYS_SIGALTSTACK", Const, 0, ""},
-		{"SYS_SIGNAL", Const, 0, ""},
-		{"SYS_SIGNALFD", Const, 0, ""},
-		{"SYS_SIGNALFD4", Const, 0, ""},
-		{"SYS_SIGPENDING", Const, 0, ""},
-		{"SYS_SIGPROCMASK", Const, 0, ""},
-		{"SYS_SIGQUEUE", Const, 0, ""},
-		{"SYS_SIGQUEUEINFO", Const, 1, ""},
-		{"SYS_SIGRETURN", Const, 0, ""},
-		{"SYS_SIGSUSPEND", Const, 0, ""},
-		{"SYS_SIGSUSPEND_NOCANCEL", Const, 0, ""},
-		{"SYS_SIGTIMEDWAIT", Const, 0, ""},
-		{"SYS_SIGWAIT", Const, 0, ""},
-		{"SYS_SIGWAITINFO", Const, 0, ""},
-		{"SYS_SOCKET", Const, 0, ""},
-		{"SYS_SOCKETCALL", Const, 0, ""},
-		{"SYS_SOCKETPAIR", Const, 0, ""},
-		{"SYS_SPLICE", Const, 0, ""},
-		{"SYS_SSETMASK", Const, 0, ""},
-		{"SYS_SSTK", Const, 0, ""},
-		{"SYS_STACK_SNAPSHOT", Const, 0, ""},
-		{"SYS_STAT", Const, 0, ""},
-		{"SYS_STAT64", Const, 0, ""},
-		{"SYS_STAT64_EXTENDED", Const, 0, ""},
-		{"SYS_STATFS", Const, 0, ""},
-		{"SYS_STATFS64", Const, 0, ""},
-		{"SYS_STATV", Const, 0, ""},
-		{"SYS_STATVFS1", Const, 1, ""},
-		{"SYS_STAT_EXTENDED", Const, 0, ""},
-		{"SYS_STIME", Const, 0, ""},
-		{"SYS_STTY", Const, 0, ""},
-		{"SYS_SWAPCONTEXT", Const, 0, ""},
-		{"SYS_SWAPCTL", Const, 1, ""},
-		{"SYS_SWAPOFF", Const, 0, ""},
-		{"SYS_SWAPON", Const, 0, ""},
-		{"SYS_SYMLINK", Const, 0, ""},
-		{"SYS_SYMLINKAT", Const, 0, ""},
-		{"SYS_SYNC", Const, 0, ""},
-		{"SYS_SYNCFS", Const, 0, ""},
-		{"SYS_SYNC_FILE_RANGE", Const, 0, ""},
-		{"SYS_SYSARCH", Const, 0, ""},
-		{"SYS_SYSCALL", Const, 0, ""},
-		{"SYS_SYSCALL_BASE", Const, 0, ""},
-		{"SYS_SYSFS", Const, 0, ""},
-		{"SYS_SYSINFO", Const, 0, ""},
-		{"SYS_SYSLOG", Const, 0, ""},
-		{"SYS_TEE", Const, 0, ""},
-		{"SYS_TGKILL", Const, 0, ""},
-		{"SYS_THREAD_SELFID", Const, 0, ""},
-		{"SYS_THR_CREATE", Const, 0, ""},
-		{"SYS_THR_EXIT", Const, 0, ""},
-		{"SYS_THR_KILL", Const, 0, ""},
-		{"SYS_THR_KILL2", Const, 0, ""},
-		{"SYS_THR_NEW", Const, 0, ""},
-		{"SYS_THR_SELF", Const, 0, ""},
-		{"SYS_THR_SET_NAME", Const, 0, ""},
-		{"SYS_THR_SUSPEND", Const, 0, ""},
-		{"SYS_THR_WAKE", Const, 0, ""},
-		{"SYS_TIME", Const, 0, ""},
-		{"SYS_TIMERFD_CREATE", Const, 0, ""},
-		{"SYS_TIMERFD_GETTIME", Const, 0, ""},
-		{"SYS_TIMERFD_SETTIME", Const, 0, ""},
-		{"SYS_TIMER_CREATE", Const, 0, ""},
-		{"SYS_TIMER_DELETE", Const, 0, ""},
-		{"SYS_TIMER_GETOVERRUN", Const, 0, ""},
-		{"SYS_TIMER_GETTIME", Const, 0, ""},
-		{"SYS_TIMER_SETTIME", Const, 0, ""},
-		{"SYS_TIMES", Const, 0, ""},
-		{"SYS_TKILL", Const, 0, ""},
-		{"SYS_TRUNCATE", Const, 0, ""},
-		{"SYS_TRUNCATE64", Const, 0, ""},
-		{"SYS_TUXCALL", Const, 0, ""},
-		{"SYS_UGETRLIMIT", Const, 0, ""},
-		{"SYS_ULIMIT", Const, 0, ""},
-		{"SYS_UMASK", Const, 0, ""},
-		{"SYS_UMASK_EXTENDED", Const, 0, ""},
-		{"SYS_UMOUNT", Const, 0, ""},
-		{"SYS_UMOUNT2", Const, 0, ""},
-		{"SYS_UNAME", Const, 0, ""},
-		{"SYS_UNDELETE", Const, 0, ""},
-		{"SYS_UNLINK", Const, 0, ""},
-		{"SYS_UNLINKAT", Const, 0, ""},
-		{"SYS_UNMOUNT", Const, 0, ""},
-		{"SYS_UNSHARE", Const, 0, ""},
-		{"SYS_USELIB", Const, 0, ""},
-		{"SYS_USTAT", Const, 0, ""},
-		{"SYS_UTIME", Const, 0, ""},
-		{"SYS_UTIMENSAT", Const, 0, ""},
-		{"SYS_UTIMES", Const, 0, ""},
-		{"SYS_UTRACE", Const, 0, ""},
-		{"SYS_UUIDGEN", Const, 0, ""},
-		{"SYS_VADVISE", Const, 1, ""},
-		{"SYS_VFORK", Const, 0, ""},
-		{"SYS_VHANGUP", Const, 0, ""},
-		{"SYS_VM86", Const, 0, ""},
-		{"SYS_VM86OLD", Const, 0, ""},
-		{"SYS_VMSPLICE", Const, 0, ""},
-		{"SYS_VM_PRESSURE_MONITOR", Const, 0, ""},
-		{"SYS_VSERVER", Const, 0, ""},
-		{"SYS_WAIT4", Const, 0, ""},
-		{"SYS_WAIT4_NOCANCEL", Const, 0, ""},
-		{"SYS_WAIT6", Const, 1, ""},
-		{"SYS_WAITEVENT", Const, 0, ""},
-		{"SYS_WAITID", Const, 0, ""},
-		{"SYS_WAITID_NOCANCEL", Const, 0, ""},
-		{"SYS_WAITPID", Const, 0, ""},
-		{"SYS_WATCHEVENT", Const, 0, ""},
-		{"SYS_WORKQ_KERNRETURN", Const, 0, ""},
-		{"SYS_WORKQ_OPEN", Const, 0, ""},
-		{"SYS_WRITE", Const, 0, ""},
-		{"SYS_WRITEV", Const, 0, ""},
-		{"SYS_WRITEV_NOCANCEL", Const, 0, ""},
-		{"SYS_WRITE_NOCANCEL", Const, 0, ""},
-		{"SYS_YIELD", Const, 0, ""},
-		{"SYS__LLSEEK", Const, 0, ""},
-		{"SYS__LWP_CONTINUE", Const, 1, ""},
-		{"SYS__LWP_CREATE", Const, 1, ""},
-		{"SYS__LWP_CTL", Const, 1, ""},
-		{"SYS__LWP_DETACH", Const, 1, ""},
-		{"SYS__LWP_EXIT", Const, 1, ""},
-		{"SYS__LWP_GETNAME", Const, 1, ""},
-		{"SYS__LWP_GETPRIVATE", Const, 1, ""},
-		{"SYS__LWP_KILL", Const, 1, ""},
-		{"SYS__LWP_PARK", Const, 1, ""},
-		{"SYS__LWP_SELF", Const, 1, ""},
-		{"SYS__LWP_SETNAME", Const, 1, ""},
-		{"SYS__LWP_SETPRIVATE", Const, 1, ""},
-		{"SYS__LWP_SUSPEND", Const, 1, ""},
-		{"SYS__LWP_UNPARK", Const, 1, ""},
-		{"SYS__LWP_UNPARK_ALL", Const, 1, ""},
-		{"SYS__LWP_WAIT", Const, 1, ""},
-		{"SYS__LWP_WAKEUP", Const, 1, ""},
-		{"SYS__NEWSELECT", Const, 0, ""},
-		{"SYS__PSET_BIND", Const, 1, ""},
-		{"SYS__SCHED_GETAFFINITY", Const, 1, ""},
-		{"SYS__SCHED_GETPARAM", Const, 1, ""},
-		{"SYS__SCHED_SETAFFINITY", Const, 1, ""},
-		{"SYS__SCHED_SETPARAM", Const, 1, ""},
-		{"SYS__SYSCTL", Const, 0, ""},
-		{"SYS__UMTX_LOCK", Const, 0, ""},
-		{"SYS__UMTX_OP", Const, 0, ""},
-		{"SYS__UMTX_UNLOCK", Const, 0, ""},
-		{"SYS___ACL_ACLCHECK_FD", Const, 0, ""},
-		{"SYS___ACL_ACLCHECK_FILE", Const, 0, ""},
-		{"SYS___ACL_ACLCHECK_LINK", Const, 0, ""},
-		{"SYS___ACL_DELETE_FD", Const, 0, ""},
-		{"SYS___ACL_DELETE_FILE", Const, 0, ""},
-		{"SYS___ACL_DELETE_LINK", Const, 0, ""},
-		{"SYS___ACL_GET_FD", Const, 0, ""},
-		{"SYS___ACL_GET_FILE", Const, 0, ""},
-		{"SYS___ACL_GET_LINK", Const, 0, ""},
-		{"SYS___ACL_SET_FD", Const, 0, ""},
-		{"SYS___ACL_SET_FILE", Const, 0, ""},
-		{"SYS___ACL_SET_LINK", Const, 0, ""},
-		{"SYS___CAP_RIGHTS_GET", Const, 14, ""},
-		{"SYS___CLONE", Const, 1, ""},
-		{"SYS___DISABLE_THREADSIGNAL", Const, 0, ""},
-		{"SYS___GETCWD", Const, 0, ""},
-		{"SYS___GETLOGIN", Const, 1, ""},
-		{"SYS___GET_TCB", Const, 1, ""},
-		{"SYS___MAC_EXECVE", Const, 0, ""},
-		{"SYS___MAC_GETFSSTAT", Const, 0, ""},
-		{"SYS___MAC_GET_FD", Const, 0, ""},
-		{"SYS___MAC_GET_FILE", Const, 0, ""},
-		{"SYS___MAC_GET_LCID", Const, 0, ""},
-		{"SYS___MAC_GET_LCTX", Const, 0, ""},
-		{"SYS___MAC_GET_LINK", Const, 0, ""},
-		{"SYS___MAC_GET_MOUNT", Const, 0, ""},
-		{"SYS___MAC_GET_PID", Const, 0, ""},
-		{"SYS___MAC_GET_PROC", Const, 0, ""},
-		{"SYS___MAC_MOUNT", Const, 0, ""},
-		{"SYS___MAC_SET_FD", Const, 0, ""},
-		{"SYS___MAC_SET_FILE", Const, 0, ""},
-		{"SYS___MAC_SET_LCTX", Const, 0, ""},
-		{"SYS___MAC_SET_LINK", Const, 0, ""},
-		{"SYS___MAC_SET_PROC", Const, 0, ""},
-		{"SYS___MAC_SYSCALL", Const, 0, ""},
-		{"SYS___OLD_SEMWAIT_SIGNAL", Const, 0, ""},
-		{"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
-		{"SYS___POSIX_CHOWN", Const, 1, ""},
-		{"SYS___POSIX_FCHOWN", Const, 1, ""},
-		{"SYS___POSIX_LCHOWN", Const, 1, ""},
-		{"SYS___POSIX_RENAME", Const, 1, ""},
-		{"SYS___PTHREAD_CANCELED", Const, 0, ""},
-		{"SYS___PTHREAD_CHDIR", Const, 0, ""},
-		{"SYS___PTHREAD_FCHDIR", Const, 0, ""},
-		{"SYS___PTHREAD_KILL", Const, 0, ""},
-		{"SYS___PTHREAD_MARKCANCEL", Const, 0, ""},
-		{"SYS___PTHREAD_SIGMASK", Const, 0, ""},
-		{"SYS___QUOTACTL", Const, 1, ""},
-		{"SYS___SEMCTL", Const, 1, ""},
-		{"SYS___SEMWAIT_SIGNAL", Const, 0, ""},
-		{"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
-		{"SYS___SETLOGIN", Const, 1, ""},
-		{"SYS___SETUGID", Const, 0, ""},
-		{"SYS___SET_TCB", Const, 1, ""},
-		{"SYS___SIGACTION_SIGTRAMP", Const, 1, ""},
-		{"SYS___SIGTIMEDWAIT", Const, 1, ""},
-		{"SYS___SIGWAIT", Const, 0, ""},
-		{"SYS___SIGWAIT_NOCANCEL", Const, 0, ""},
-		{"SYS___SYSCTL", Const, 0, ""},
-		{"SYS___TFORK", Const, 1, ""},
-		{"SYS___THREXIT", Const, 1, ""},
-		{"SYS___THRSIGDIVERT", Const, 1, ""},
-		{"SYS___THRSLEEP", Const, 1, ""},
-		{"SYS___THRWAKEUP", Const, 1, ""},
-		{"S_ARCH1", Const, 1, ""},
-		{"S_ARCH2", Const, 1, ""},
-		{"S_BLKSIZE", Const, 0, ""},
-		{"S_IEXEC", Const, 0, ""},
-		{"S_IFBLK", Const, 0, ""},
-		{"S_IFCHR", Const, 0, ""},
-		{"S_IFDIR", Const, 0, ""},
-		{"S_IFIFO", Const, 0, ""},
-		{"S_IFLNK", Const, 0, ""},
-		{"S_IFMT", Const, 0, ""},
-		{"S_IFREG", Const, 0, ""},
-		{"S_IFSOCK", Const, 0, ""},
-		{"S_IFWHT", Const, 0, ""},
-		{"S_IREAD", Const, 0, ""},
-		{"S_IRGRP", Const, 0, ""},
-		{"S_IROTH", Const, 0, ""},
-		{"S_IRUSR", Const, 0, ""},
-		{"S_IRWXG", Const, 0, ""},
-		{"S_IRWXO", Const, 0, ""},
-		{"S_IRWXU", Const, 0, ""},
-		{"S_ISGID", Const, 0, ""},
-		{"S_ISTXT", Const, 0, ""},
-		{"S_ISUID", Const, 0, ""},
-		{"S_ISVTX", Const, 0, ""},
-		{"S_IWGRP", Const, 0, ""},
-		{"S_IWOTH", Const, 0, ""},
-		{"S_IWRITE", Const, 0, ""},
-		{"S_IWUSR", Const, 0, ""},
-		{"S_IXGRP", Const, 0, ""},
-		{"S_IXOTH", Const, 0, ""},
-		{"S_IXUSR", Const, 0, ""},
-		{"S_LOGIN_SET", Const, 1, ""},
-		{"SecurityAttributes", Type, 0, ""},
-		{"SecurityAttributes.InheritHandle", Field, 0, ""},
-		{"SecurityAttributes.Length", Field, 0, ""},
-		{"SecurityAttributes.SecurityDescriptor", Field, 0, ""},
-		{"Seek", Func, 0, "func(fd int, offset int64, whence int) (off int64, err error)"},
-		{"Select", Func, 0, "func(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)"},
-		{"Sendfile", Func, 0, "func(outfd int, infd int, offset *int64, count int) (written int, err error)"},
-		{"Sendmsg", Func, 0, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (err error)"},
-		{"SendmsgN", Func, 3, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (n int, err error)"},
-		{"Sendto", Func, 0, "func(fd int, p []byte, flags int, to Sockaddr) (err error)"},
-		{"Servent", Type, 0, ""},
-		{"Servent.Aliases", Field, 0, ""},
-		{"Servent.Name", Field, 0, ""},
-		{"Servent.Port", Field, 0, ""},
-		{"Servent.Proto", Field, 0, ""},
-		{"SetBpf", Func, 0, ""},
-		{"SetBpfBuflen", Func, 0, ""},
-		{"SetBpfDatalink", Func, 0, ""},
-		{"SetBpfHeadercmpl", Func, 0, ""},
-		{"SetBpfImmediate", Func, 0, ""},
-		{"SetBpfInterface", Func, 0, ""},
-		{"SetBpfPromisc", Func, 0, ""},
-		{"SetBpfTimeout", Func, 0, ""},
-		{"SetCurrentDirectory", Func, 0, ""},
-		{"SetEndOfFile", Func, 0, ""},
-		{"SetEnvironmentVariable", Func, 0, ""},
-		{"SetFileAttributes", Func, 0, ""},
-		{"SetFileCompletionNotificationModes", Func, 2, ""},
-		{"SetFilePointer", Func, 0, ""},
-		{"SetFileTime", Func, 0, ""},
-		{"SetHandleInformation", Func, 0, ""},
-		{"SetKevent", Func, 0, ""},
-		{"SetLsfPromisc", Func, 0, "func(name string, m bool) error"},
-		{"SetNonblock", Func, 0, "func(fd int, nonblocking bool) (err error)"},
-		{"Setdomainname", Func, 0, "func(p []byte) (err error)"},
-		{"Setegid", Func, 0, "func(egid int) (err error)"},
-		{"Setenv", Func, 0, "func(key string, value string) error"},
-		{"Seteuid", Func, 0, "func(euid int) (err error)"},
-		{"Setfsgid", Func, 0, "func(gid int) (err error)"},
-		{"Setfsuid", Func, 0, "func(uid int) (err error)"},
-		{"Setgid", Func, 0, "func(gid int) (err error)"},
-		{"Setgroups", Func, 0, "func(gids []int) (err error)"},
-		{"Sethostname", Func, 0, "func(p []byte) (err error)"},
-		{"Setlogin", Func, 0, ""},
-		{"Setpgid", Func, 0, "func(pid int, pgid int) (err error)"},
-		{"Setpriority", Func, 0, "func(which int, who int, prio int) (err error)"},
-		{"Setprivexec", Func, 0, ""},
-		{"Setregid", Func, 0, "func(rgid int, egid int) (err error)"},
-		{"Setresgid", Func, 0, "func(rgid int, egid int, sgid int) (err error)"},
-		{"Setresuid", Func, 0, "func(ruid int, euid int, suid int) (err error)"},
-		{"Setreuid", Func, 0, "func(ruid int, euid int) (err error)"},
-		{"Setrlimit", Func, 0, "func(resource int, rlim *Rlimit) error"},
-		{"Setsid", Func, 0, "func() (pid int, err error)"},
-		{"Setsockopt", Func, 0, ""},
-		{"SetsockoptByte", Func, 0, "func(fd int, level int, opt int, value byte) (err error)"},
-		{"SetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int, filter *ICMPv6Filter) error"},
-		{"SetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int, mreq *IPMreq) (err error)"},
-		{"SetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int, mreq *IPMreqn) (err error)"},
-		{"SetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int, mreq *IPv6Mreq) (err error)"},
-		{"SetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int, value [4]byte) (err error)"},
-		{"SetsockoptInt", Func, 0, "func(fd int, level int, opt int, value int) (err error)"},
-		{"SetsockoptLinger", Func, 0, "func(fd int, level int, opt int, l *Linger) (err error)"},
-		{"SetsockoptString", Func, 0, "func(fd int, level int, opt int, s string) (err error)"},
-		{"SetsockoptTimeval", Func, 0, "func(fd int, level int, opt int, tv *Timeval) (err error)"},
-		{"Settimeofday", Func, 0, "func(tv *Timeval) (err error)"},
-		{"Setuid", Func, 0, "func(uid int) (err error)"},
-		{"Setxattr", Func, 1, "func(path string, attr string, data []byte, flags int) (err error)"},
-		{"Shutdown", Func, 0, "func(fd int, how int) (err error)"},
-		{"SidTypeAlias", Const, 0, ""},
-		{"SidTypeComputer", Const, 0, ""},
-		{"SidTypeDeletedAccount", Const, 0, ""},
-		{"SidTypeDomain", Const, 0, ""},
-		{"SidTypeGroup", Const, 0, ""},
-		{"SidTypeInvalid", Const, 0, ""},
-		{"SidTypeLabel", Const, 0, ""},
-		{"SidTypeUnknown", Const, 0, ""},
-		{"SidTypeUser", Const, 0, ""},
-		{"SidTypeWellKnownGroup", Const, 0, ""},
-		{"Signal", Type, 0, ""},
-		{"SizeofBpfHdr", Const, 0, ""},
-		{"SizeofBpfInsn", Const, 0, ""},
-		{"SizeofBpfProgram", Const, 0, ""},
-		{"SizeofBpfStat", Const, 0, ""},
-		{"SizeofBpfVersion", Const, 0, ""},
-		{"SizeofBpfZbuf", Const, 0, ""},
-		{"SizeofBpfZbufHeader", Const, 0, ""},
-		{"SizeofCmsghdr", Const, 0, ""},
-		{"SizeofICMPv6Filter", Const, 2, ""},
-		{"SizeofIPMreq", Const, 0, ""},
-		{"SizeofIPMreqn", Const, 0, ""},
-		{"SizeofIPv6MTUInfo", Const, 2, ""},
-		{"SizeofIPv6Mreq", Const, 0, ""},
-		{"SizeofIfAddrmsg", Const, 0, ""},
-		{"SizeofIfAnnounceMsghdr", Const, 1, ""},
-		{"SizeofIfData", Const, 0, ""},
-		{"SizeofIfInfomsg", Const, 0, ""},
-		{"SizeofIfMsghdr", Const, 0, ""},
-		{"SizeofIfaMsghdr", Const, 0, ""},
-		{"SizeofIfmaMsghdr", Const, 0, ""},
-		{"SizeofIfmaMsghdr2", Const, 0, ""},
-		{"SizeofInet4Pktinfo", Const, 0, ""},
-		{"SizeofInet6Pktinfo", Const, 0, ""},
-		{"SizeofInotifyEvent", Const, 0, ""},
-		{"SizeofLinger", Const, 0, ""},
-		{"SizeofMsghdr", Const, 0, ""},
-		{"SizeofNlAttr", Const, 0, ""},
-		{"SizeofNlMsgerr", Const, 0, ""},
-		{"SizeofNlMsghdr", Const, 0, ""},
-		{"SizeofRtAttr", Const, 0, ""},
-		{"SizeofRtGenmsg", Const, 0, ""},
-		{"SizeofRtMetrics", Const, 0, ""},
-		{"SizeofRtMsg", Const, 0, ""},
-		{"SizeofRtMsghdr", Const, 0, ""},
-		{"SizeofRtNexthop", Const, 0, ""},
-		{"SizeofSockFilter", Const, 0, ""},
-		{"SizeofSockFprog", Const, 0, ""},
-		{"SizeofSockaddrAny", Const, 0, ""},
-		{"SizeofSockaddrDatalink", Const, 0, ""},
-		{"SizeofSockaddrInet4", Const, 0, ""},
-		{"SizeofSockaddrInet6", Const, 0, ""},
-		{"SizeofSockaddrLinklayer", Const, 0, ""},
-		{"SizeofSockaddrNetlink", Const, 0, ""},
-		{"SizeofSockaddrUnix", Const, 0, ""},
-		{"SizeofTCPInfo", Const, 1, ""},
-		{"SizeofUcred", Const, 0, ""},
-		{"SlicePtrFromStrings", Func, 1, "func(ss []string) ([]*byte, error)"},
-		{"SockFilter", Type, 0, ""},
-		{"SockFilter.Code", Field, 0, ""},
-		{"SockFilter.Jf", Field, 0, ""},
-		{"SockFilter.Jt", Field, 0, ""},
-		{"SockFilter.K", Field, 0, ""},
-		{"SockFprog", Type, 0, ""},
-		{"SockFprog.Filter", Field, 0, ""},
-		{"SockFprog.Len", Field, 0, ""},
-		{"SockFprog.Pad_cgo_0", Field, 0, ""},
-		{"Sockaddr", Type, 0, ""},
-		{"SockaddrDatalink", Type, 0, ""},
-		{"SockaddrDatalink.Alen", Field, 0, ""},
-		{"SockaddrDatalink.Data", Field, 0, ""},
-		{"SockaddrDatalink.Family", Field, 0, ""},
-		{"SockaddrDatalink.Index", Field, 0, ""},
-		{"SockaddrDatalink.Len", Field, 0, ""},
-		{"SockaddrDatalink.Nlen", Field, 0, ""},
-		{"SockaddrDatalink.Slen", Field, 0, ""},
-		{"SockaddrDatalink.Type", Field, 0, ""},
-		{"SockaddrGen", Type, 0, ""},
-		{"SockaddrInet4", Type, 0, ""},
-		{"SockaddrInet4.Addr", Field, 0, ""},
-		{"SockaddrInet4.Port", Field, 0, ""},
-		{"SockaddrInet6", Type, 0, ""},
-		{"SockaddrInet6.Addr", Field, 0, ""},
-		{"SockaddrInet6.Port", Field, 0, ""},
-		{"SockaddrInet6.ZoneId", Field, 0, ""},
-		{"SockaddrLinklayer", Type, 0, ""},
-		{"SockaddrLinklayer.Addr", Field, 0, ""},
-		{"SockaddrLinklayer.Halen", Field, 0, ""},
-		{"SockaddrLinklayer.Hatype", Field, 0, ""},
-		{"SockaddrLinklayer.Ifindex", Field, 0, ""},
-		{"SockaddrLinklayer.Pkttype", Field, 0, ""},
-		{"SockaddrLinklayer.Protocol", Field, 0, ""},
-		{"SockaddrNetlink", Type, 0, ""},
-		{"SockaddrNetlink.Family", Field, 0, ""},
-		{"SockaddrNetlink.Groups", Field, 0, ""},
-		{"SockaddrNetlink.Pad", Field, 0, ""},
-		{"SockaddrNetlink.Pid", Field, 0, ""},
-		{"SockaddrUnix", Type, 0, ""},
-		{"SockaddrUnix.Name", Field, 0, ""},
-		{"Socket", Func, 0, "func(domain int, typ int, proto int) (fd int, err error)"},
-		{"SocketControlMessage", Type, 0, ""},
-		{"SocketControlMessage.Data", Field, 0, ""},
-		{"SocketControlMessage.Header", Field, 0, ""},
-		{"SocketDisableIPv6", Var, 0, ""},
-		{"Socketpair", Func, 0, "func(domain int, typ int, proto int) (fd [2]int, err error)"},
-		{"Splice", Func, 0, "func(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)"},
-		{"StartProcess", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error)"},
-		{"StartupInfo", Type, 0, ""},
-		{"StartupInfo.Cb", Field, 0, ""},
-		{"StartupInfo.Desktop", Field, 0, ""},
-		{"StartupInfo.FillAttribute", Field, 0, ""},
-		{"StartupInfo.Flags", Field, 0, ""},
-		{"StartupInfo.ShowWindow", Field, 0, ""},
-		{"StartupInfo.StdErr", Field, 0, ""},
-		{"StartupInfo.StdInput", Field, 0, ""},
-		{"StartupInfo.StdOutput", Field, 0, ""},
-		{"StartupInfo.Title", Field, 0, ""},
-		{"StartupInfo.X", Field, 0, ""},
-		{"StartupInfo.XCountChars", Field, 0, ""},
-		{"StartupInfo.XSize", Field, 0, ""},
-		{"StartupInfo.Y", Field, 0, ""},
-		{"StartupInfo.YCountChars", Field, 0, ""},
-		{"StartupInfo.YSize", Field, 0, ""},
-		{"Stat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
-		{"Stat_t", Type, 0, ""},
-		{"Stat_t.Atim", Field, 0, ""},
-		{"Stat_t.Atim_ext", Field, 12, ""},
-		{"Stat_t.Atimespec", Field, 0, ""},
-		{"Stat_t.Birthtimespec", Field, 0, ""},
-		{"Stat_t.Blksize", Field, 0, ""},
-		{"Stat_t.Blocks", Field, 0, ""},
-		{"Stat_t.Btim_ext", Field, 12, ""},
-		{"Stat_t.Ctim", Field, 0, ""},
-		{"Stat_t.Ctim_ext", Field, 12, ""},
-		{"Stat_t.Ctimespec", Field, 0, ""},
-		{"Stat_t.Dev", Field, 0, ""},
-		{"Stat_t.Flags", Field, 0, ""},
-		{"Stat_t.Gen", Field, 0, ""},
-		{"Stat_t.Gid", Field, 0, ""},
-		{"Stat_t.Ino", Field, 0, ""},
-		{"Stat_t.Lspare", Field, 0, ""},
-		{"Stat_t.Lspare0", Field, 2, ""},
-		{"Stat_t.Lspare1", Field, 2, ""},
-		{"Stat_t.Mode", Field, 0, ""},
-		{"Stat_t.Mtim", Field, 0, ""},
-		{"Stat_t.Mtim_ext", Field, 12, ""},
-		{"Stat_t.Mtimespec", Field, 0, ""},
-		{"Stat_t.Nlink", Field, 0, ""},
-		{"Stat_t.Pad_cgo_0", Field, 0, ""},
-		{"Stat_t.Pad_cgo_1", Field, 0, ""},
-		{"Stat_t.Pad_cgo_2", Field, 0, ""},
-		{"Stat_t.Padding0", Field, 12, ""},
-		{"Stat_t.Padding1", Field, 12, ""},
-		{"Stat_t.Qspare", Field, 0, ""},
-		{"Stat_t.Rdev", Field, 0, ""},
-		{"Stat_t.Size", Field, 0, ""},
-		{"Stat_t.Spare", Field, 2, ""},
-		{"Stat_t.Uid", Field, 0, ""},
-		{"Stat_t.X__pad0", Field, 0, ""},
-		{"Stat_t.X__pad1", Field, 0, ""},
-		{"Stat_t.X__pad2", Field, 0, ""},
-		{"Stat_t.X__st_birthtim", Field, 2, ""},
-		{"Stat_t.X__st_ino", Field, 0, ""},
-		{"Stat_t.X__unused", Field, 0, ""},
-		{"Statfs", Func, 0, "func(path string, buf *Statfs_t) (err error)"},
-		{"Statfs_t", Type, 0, ""},
-		{"Statfs_t.Asyncreads", Field, 0, ""},
-		{"Statfs_t.Asyncwrites", Field, 0, ""},
-		{"Statfs_t.Bavail", Field, 0, ""},
-		{"Statfs_t.Bfree", Field, 0, ""},
-		{"Statfs_t.Blocks", Field, 0, ""},
-		{"Statfs_t.Bsize", Field, 0, ""},
-		{"Statfs_t.Charspare", Field, 0, ""},
-		{"Statfs_t.F_asyncreads", Field, 2, ""},
-		{"Statfs_t.F_asyncwrites", Field, 2, ""},
-		{"Statfs_t.F_bavail", Field, 2, ""},
-		{"Statfs_t.F_bfree", Field, 2, ""},
-		{"Statfs_t.F_blocks", Field, 2, ""},
-		{"Statfs_t.F_bsize", Field, 2, ""},
-		{"Statfs_t.F_ctime", Field, 2, ""},
-		{"Statfs_t.F_favail", Field, 2, ""},
-		{"Statfs_t.F_ffree", Field, 2, ""},
-		{"Statfs_t.F_files", Field, 2, ""},
-		{"Statfs_t.F_flags", Field, 2, ""},
-		{"Statfs_t.F_fsid", Field, 2, ""},
-		{"Statfs_t.F_fstypename", Field, 2, ""},
-		{"Statfs_t.F_iosize", Field, 2, ""},
-		{"Statfs_t.F_mntfromname", Field, 2, ""},
-		{"Statfs_t.F_mntfromspec", Field, 3, ""},
-		{"Statfs_t.F_mntonname", Field, 2, ""},
-		{"Statfs_t.F_namemax", Field, 2, ""},
-		{"Statfs_t.F_owner", Field, 2, ""},
-		{"Statfs_t.F_spare", Field, 2, ""},
-		{"Statfs_t.F_syncreads", Field, 2, ""},
-		{"Statfs_t.F_syncwrites", Field, 2, ""},
-		{"Statfs_t.Ffree", Field, 0, ""},
-		{"Statfs_t.Files", Field, 0, ""},
-		{"Statfs_t.Flags", Field, 0, ""},
-		{"Statfs_t.Frsize", Field, 0, ""},
-		{"Statfs_t.Fsid", Field, 0, ""},
-		{"Statfs_t.Fssubtype", Field, 0, ""},
-		{"Statfs_t.Fstypename", Field, 0, ""},
-		{"Statfs_t.Iosize", Field, 0, ""},
-		{"Statfs_t.Mntfromname", Field, 0, ""},
-		{"Statfs_t.Mntonname", Field, 0, ""},
-		{"Statfs_t.Mount_info", Field, 2, ""},
-		{"Statfs_t.Namelen", Field, 0, ""},
-		{"Statfs_t.Namemax", Field, 0, ""},
-		{"Statfs_t.Owner", Field, 0, ""},
-		{"Statfs_t.Pad_cgo_0", Field, 0, ""},
-		{"Statfs_t.Pad_cgo_1", Field, 2, ""},
-		{"Statfs_t.Reserved", Field, 0, ""},
-		{"Statfs_t.Spare", Field, 0, ""},
-		{"Statfs_t.Syncreads", Field, 0, ""},
-		{"Statfs_t.Syncwrites", Field, 0, ""},
-		{"Statfs_t.Type", Field, 0, ""},
-		{"Statfs_t.Version", Field, 0, ""},
-		{"Stderr", Var, 0, ""},
-		{"Stdin", Var, 0, ""},
-		{"Stdout", Var, 0, ""},
-		{"StringBytePtr", Func, 0, "func(s string) *byte"},
-		{"StringByteSlice", Func, 0, "func(s string) []byte"},
-		{"StringSlicePtr", Func, 0, "func(ss []string) []*byte"},
-		{"StringToSid", Func, 0, ""},
-		{"StringToUTF16", Func, 0, ""},
-		{"StringToUTF16Ptr", Func, 0, ""},
-		{"Symlink", Func, 0, "func(oldpath string, newpath string) (err error)"},
-		{"Sync", Func, 0, "func()"},
-		{"SyncFileRange", Func, 0, "func(fd int, off int64, n int64, flags int) (err error)"},
-		{"SysProcAttr", Type, 0, ""},
-		{"SysProcAttr.AdditionalInheritedHandles", Field, 17, ""},
-		{"SysProcAttr.AmbientCaps", Field, 9, ""},
-		{"SysProcAttr.CgroupFD", Field, 20, ""},
-		{"SysProcAttr.Chroot", Field, 0, ""},
-		{"SysProcAttr.Cloneflags", Field, 2, ""},
-		{"SysProcAttr.CmdLine", Field, 0, ""},
-		{"SysProcAttr.CreationFlags", Field, 1, ""},
-		{"SysProcAttr.Credential", Field, 0, ""},
-		{"SysProcAttr.Ctty", Field, 1, ""},
-		{"SysProcAttr.Foreground", Field, 5, ""},
-		{"SysProcAttr.GidMappings", Field, 4, ""},
-		{"SysProcAttr.GidMappingsEnableSetgroups", Field, 5, ""},
-		{"SysProcAttr.HideWindow", Field, 0, ""},
-		{"SysProcAttr.Jail", Field, 21, ""},
-		{"SysProcAttr.NoInheritHandles", Field, 16, ""},
-		{"SysProcAttr.Noctty", Field, 0, ""},
-		{"SysProcAttr.ParentProcess", Field, 17, ""},
-		{"SysProcAttr.Pdeathsig", Field, 0, ""},
-		{"SysProcAttr.Pgid", Field, 5, ""},
-		{"SysProcAttr.PidFD", Field, 22, ""},
-		{"SysProcAttr.ProcessAttributes", Field, 13, ""},
-		{"SysProcAttr.Ptrace", Field, 0, ""},
-		{"SysProcAttr.Setctty", Field, 0, ""},
-		{"SysProcAttr.Setpgid", Field, 0, ""},
-		{"SysProcAttr.Setsid", Field, 0, ""},
-		{"SysProcAttr.ThreadAttributes", Field, 13, ""},
-		{"SysProcAttr.Token", Field, 10, ""},
-		{"SysProcAttr.UidMappings", Field, 4, ""},
-		{"SysProcAttr.Unshareflags", Field, 7, ""},
-		{"SysProcAttr.UseCgroupFD", Field, 20, ""},
-		{"SysProcIDMap", Type, 4, ""},
-		{"SysProcIDMap.ContainerID", Field, 4, ""},
-		{"SysProcIDMap.HostID", Field, 4, ""},
-		{"SysProcIDMap.Size", Field, 4, ""},
-		{"Syscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"Syscall12", Func, 0, ""},
-		{"Syscall15", Func, 0, ""},
-		{"Syscall18", Func, 12, ""},
-		{"Syscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
-		{"Syscall9", Func, 0, ""},
-		{"SyscallN", Func, 18, ""},
-		{"Sysctl", Func, 0, ""},
-		{"SysctlUint32", Func, 0, ""},
-		{"Sysctlnode", Type, 2, ""},
-		{"Sysctlnode.Flags", Field, 2, ""},
-		{"Sysctlnode.Name", Field, 2, ""},
-		{"Sysctlnode.Num", Field, 2, ""},
-		{"Sysctlnode.Un", Field, 2, ""},
-		{"Sysctlnode.Ver", Field, 2, ""},
-		{"Sysctlnode.X__rsvd", Field, 2, ""},
-		{"Sysctlnode.X_sysctl_desc", Field, 2, ""},
-		{"Sysctlnode.X_sysctl_func", Field, 2, ""},
-		{"Sysctlnode.X_sysctl_parent", Field, 2, ""},
-		{"Sysctlnode.X_sysctl_size", Field, 2, ""},
-		{"Sysinfo", Func, 0, "func(info *Sysinfo_t) (err error)"},
-		{"Sysinfo_t", Type, 0, ""},
-		{"Sysinfo_t.Bufferram", Field, 0, ""},
-		{"Sysinfo_t.Freehigh", Field, 0, ""},
-		{"Sysinfo_t.Freeram", Field, 0, ""},
-		{"Sysinfo_t.Freeswap", Field, 0, ""},
-		{"Sysinfo_t.Loads", Field, 0, ""},
-		{"Sysinfo_t.Pad", Field, 0, ""},
-		{"Sysinfo_t.Pad_cgo_0", Field, 0, ""},
-		{"Sysinfo_t.Pad_cgo_1", Field, 0, ""},
-		{"Sysinfo_t.Procs", Field, 0, ""},
-		{"Sysinfo_t.Sharedram", Field, 0, ""},
-		{"Sysinfo_t.Totalhigh", Field, 0, ""},
-		{"Sysinfo_t.Totalram", Field, 0, ""},
-		{"Sysinfo_t.Totalswap", Field, 0, ""},
-		{"Sysinfo_t.Unit", Field, 0, ""},
-		{"Sysinfo_t.Uptime", Field, 0, ""},
-		{"Sysinfo_t.X_f", Field, 0, ""},
-		{"Systemtime", Type, 0, ""},
-		{"Systemtime.Day", Field, 0, ""},
-		{"Systemtime.DayOfWeek", Field, 0, ""},
-		{"Systemtime.Hour", Field, 0, ""},
-		{"Systemtime.Milliseconds", Field, 0, ""},
-		{"Systemtime.Minute", Field, 0, ""},
-		{"Systemtime.Month", Field, 0, ""},
-		{"Systemtime.Second", Field, 0, ""},
-		{"Systemtime.Year", Field, 0, ""},
-		{"TCGETS", Const, 0, ""},
-		{"TCIFLUSH", Const, 1, ""},
-		{"TCIOFLUSH", Const, 1, ""},
-		{"TCOFLUSH", Const, 1, ""},
-		{"TCPInfo", Type, 1, ""},
-		{"TCPInfo.Advmss", Field, 1, ""},
-		{"TCPInfo.Ato", Field, 1, ""},
-		{"TCPInfo.Backoff", Field, 1, ""},
-		{"TCPInfo.Ca_state", Field, 1, ""},
-		{"TCPInfo.Fackets", Field, 1, ""},
-		{"TCPInfo.Last_ack_recv", Field, 1, ""},
-		{"TCPInfo.Last_ack_sent", Field, 1, ""},
-		{"TCPInfo.Last_data_recv", Field, 1, ""},
-		{"TCPInfo.Last_data_sent", Field, 1, ""},
-		{"TCPInfo.Lost", Field, 1, ""},
-		{"TCPInfo.Options", Field, 1, ""},
-		{"TCPInfo.Pad_cgo_0", Field, 1, ""},
-		{"TCPInfo.Pmtu", Field, 1, ""},
-		{"TCPInfo.Probes", Field, 1, ""},
-		{"TCPInfo.Rcv_mss", Field, 1, ""},
-		{"TCPInfo.Rcv_rtt", Field, 1, ""},
-		{"TCPInfo.Rcv_space", Field, 1, ""},
-		{"TCPInfo.Rcv_ssthresh", Field, 1, ""},
-		{"TCPInfo.Reordering", Field, 1, ""},
-		{"TCPInfo.Retrans", Field, 1, ""},
-		{"TCPInfo.Retransmits", Field, 1, ""},
-		{"TCPInfo.Rto", Field, 1, ""},
-		{"TCPInfo.Rtt", Field, 1, ""},
-		{"TCPInfo.Rttvar", Field, 1, ""},
-		{"TCPInfo.Sacked", Field, 1, ""},
-		{"TCPInfo.Snd_cwnd", Field, 1, ""},
-		{"TCPInfo.Snd_mss", Field, 1, ""},
-		{"TCPInfo.Snd_ssthresh", Field, 1, ""},
-		{"TCPInfo.State", Field, 1, ""},
-		{"TCPInfo.Total_retrans", Field, 1, ""},
-		{"TCPInfo.Unacked", Field, 1, ""},
-		{"TCPKeepalive", Type, 3, ""},
-		{"TCPKeepalive.Interval", Field, 3, ""},
-		{"TCPKeepalive.OnOff", Field, 3, ""},
-		{"TCPKeepalive.Time", Field, 3, ""},
-		{"TCP_CA_NAME_MAX", Const, 0, ""},
-		{"TCP_CONGCTL", Const, 1, ""},
-		{"TCP_CONGESTION", Const, 0, ""},
-		{"TCP_CONNECTIONTIMEOUT", Const, 0, ""},
-		{"TCP_CORK", Const, 0, ""},
-		{"TCP_DEFER_ACCEPT", Const, 0, ""},
-		{"TCP_ENABLE_ECN", Const, 16, ""},
-		{"TCP_INFO", Const, 0, ""},
-		{"TCP_KEEPALIVE", Const, 0, ""},
-		{"TCP_KEEPCNT", Const, 0, ""},
-		{"TCP_KEEPIDLE", Const, 0, ""},
-		{"TCP_KEEPINIT", Const, 1, ""},
-		{"TCP_KEEPINTVL", Const, 0, ""},
-		{"TCP_LINGER2", Const, 0, ""},
-		{"TCP_MAXBURST", Const, 0, ""},
-		{"TCP_MAXHLEN", Const, 0, ""},
-		{"TCP_MAXOLEN", Const, 0, ""},
-		{"TCP_MAXSEG", Const, 0, ""},
-		{"TCP_MAXWIN", Const, 0, ""},
-		{"TCP_MAX_SACK", Const, 0, ""},
-		{"TCP_MAX_WINSHIFT", Const, 0, ""},
-		{"TCP_MD5SIG", Const, 0, ""},
-		{"TCP_MD5SIG_MAXKEYLEN", Const, 0, ""},
-		{"TCP_MINMSS", Const, 0, ""},
-		{"TCP_MINMSSOVERLOAD", Const, 0, ""},
-		{"TCP_MSS", Const, 0, ""},
-		{"TCP_NODELAY", Const, 0, ""},
-		{"TCP_NOOPT", Const, 0, ""},
-		{"TCP_NOPUSH", Const, 0, ""},
-		{"TCP_NOTSENT_LOWAT", Const, 16, ""},
-		{"TCP_NSTATES", Const, 1, ""},
-		{"TCP_QUICKACK", Const, 0, ""},
-		{"TCP_RXT_CONNDROPTIME", Const, 0, ""},
-		{"TCP_RXT_FINDROP", Const, 0, ""},
-		{"TCP_SACK_ENABLE", Const, 1, ""},
-		{"TCP_SENDMOREACKS", Const, 16, ""},
-		{"TCP_SYNCNT", Const, 0, ""},
-		{"TCP_VENDOR", Const, 3, ""},
-		{"TCP_WINDOW_CLAMP", Const, 0, ""},
-		{"TCSAFLUSH", Const, 1, ""},
-		{"TCSETS", Const, 0, ""},
-		{"TF_DISCONNECT", Const, 0, ""},
-		{"TF_REUSE_SOCKET", Const, 0, ""},
-		{"TF_USE_DEFAULT_WORKER", Const, 0, ""},
-		{"TF_USE_KERNEL_APC", Const, 0, ""},
-		{"TF_USE_SYSTEM_THREAD", Const, 0, ""},
-		{"TF_WRITE_BEHIND", Const, 0, ""},
-		{"TH32CS_INHERIT", Const, 4, ""},
-		{"TH32CS_SNAPALL", Const, 4, ""},
-		{"TH32CS_SNAPHEAPLIST", Const, 4, ""},
-		{"TH32CS_SNAPMODULE", Const, 4, ""},
-		{"TH32CS_SNAPMODULE32", Const, 4, ""},
-		{"TH32CS_SNAPPROCESS", Const, 4, ""},
-		{"TH32CS_SNAPTHREAD", Const, 4, ""},
-		{"TIME_ZONE_ID_DAYLIGHT", Const, 0, ""},
-		{"TIME_ZONE_ID_STANDARD", Const, 0, ""},
-		{"TIME_ZONE_ID_UNKNOWN", Const, 0, ""},
-		{"TIOCCBRK", Const, 0, ""},
-		{"TIOCCDTR", Const, 0, ""},
-		{"TIOCCONS", Const, 0, ""},
-		{"TIOCDCDTIMESTAMP", Const, 0, ""},
-		{"TIOCDRAIN", Const, 0, ""},
-		{"TIOCDSIMICROCODE", Const, 0, ""},
-		{"TIOCEXCL", Const, 0, ""},
-		{"TIOCEXT", Const, 0, ""},
-		{"TIOCFLAG_CDTRCTS", Const, 1, ""},
-		{"TIOCFLAG_CLOCAL", Const, 1, ""},
-		{"TIOCFLAG_CRTSCTS", Const, 1, ""},
-		{"TIOCFLAG_MDMBUF", Const, 1, ""},
-		{"TIOCFLAG_PPS", Const, 1, ""},
-		{"TIOCFLAG_SOFTCAR", Const, 1, ""},
-		{"TIOCFLUSH", Const, 0, ""},
-		{"TIOCGDEV", Const, 0, ""},
-		{"TIOCGDRAINWAIT", Const, 0, ""},
-		{"TIOCGETA", Const, 0, ""},
-		{"TIOCGETD", Const, 0, ""},
-		{"TIOCGFLAGS", Const, 1, ""},
-		{"TIOCGICOUNT", Const, 0, ""},
-		{"TIOCGLCKTRMIOS", Const, 0, ""},
-		{"TIOCGLINED", Const, 1, ""},
-		{"TIOCGPGRP", Const, 0, ""},
-		{"TIOCGPTN", Const, 0, ""},
-		{"TIOCGQSIZE", Const, 1, ""},
-		{"TIOCGRANTPT", Const, 1, ""},
-		{"TIOCGRS485", Const, 0, ""},
-		{"TIOCGSERIAL", Const, 0, ""},
-		{"TIOCGSID", Const, 0, ""},
-		{"TIOCGSIZE", Const, 1, ""},
-		{"TIOCGSOFTCAR", Const, 0, ""},
-		{"TIOCGTSTAMP", Const, 1, ""},
-		{"TIOCGWINSZ", Const, 0, ""},
-		{"TIOCINQ", Const, 0, ""},
-		{"TIOCIXOFF", Const, 0, ""},
-		{"TIOCIXON", Const, 0, ""},
-		{"TIOCLINUX", Const, 0, ""},
-		{"TIOCMBIC", Const, 0, ""},
-		{"TIOCMBIS", Const, 0, ""},
-		{"TIOCMGDTRWAIT", Const, 0, ""},
-		{"TIOCMGET", Const, 0, ""},
-		{"TIOCMIWAIT", Const, 0, ""},
-		{"TIOCMODG", Const, 0, ""},
-		{"TIOCMODS", Const, 0, ""},
-		{"TIOCMSDTRWAIT", Const, 0, ""},
-		{"TIOCMSET", Const, 0, ""},
-		{"TIOCM_CAR", Const, 0, ""},
-		{"TIOCM_CD", Const, 0, ""},
-		{"TIOCM_CTS", Const, 0, ""},
-		{"TIOCM_DCD", Const, 0, ""},
-		{"TIOCM_DSR", Const, 0, ""},
-		{"TIOCM_DTR", Const, 0, ""},
-		{"TIOCM_LE", Const, 0, ""},
-		{"TIOCM_RI", Const, 0, ""},
-		{"TIOCM_RNG", Const, 0, ""},
-		{"TIOCM_RTS", Const, 0, ""},
-		{"TIOCM_SR", Const, 0, ""},
-		{"TIOCM_ST", Const, 0, ""},
-		{"TIOCNOTTY", Const, 0, ""},
-		{"TIOCNXCL", Const, 0, ""},
-		{"TIOCOUTQ", Const, 0, ""},
-		{"TIOCPKT", Const, 0, ""},
-		{"TIOCPKT_DATA", Const, 0, ""},
-		{"TIOCPKT_DOSTOP", Const, 0, ""},
-		{"TIOCPKT_FLUSHREAD", Const, 0, ""},
-		{"TIOCPKT_FLUSHWRITE", Const, 0, ""},
-		{"TIOCPKT_IOCTL", Const, 0, ""},
-		{"TIOCPKT_NOSTOP", Const, 0, ""},
-		{"TIOCPKT_START", Const, 0, ""},
-		{"TIOCPKT_STOP", Const, 0, ""},
-		{"TIOCPTMASTER", Const, 0, ""},
-		{"TIOCPTMGET", Const, 1, ""},
-		{"TIOCPTSNAME", Const, 1, ""},
-		{"TIOCPTYGNAME", Const, 0, ""},
-		{"TIOCPTYGRANT", Const, 0, ""},
-		{"TIOCPTYUNLK", Const, 0, ""},
-		{"TIOCRCVFRAME", Const, 1, ""},
-		{"TIOCREMOTE", Const, 0, ""},
-		{"TIOCSBRK", Const, 0, ""},
-		{"TIOCSCONS", Const, 0, ""},
-		{"TIOCSCTTY", Const, 0, ""},
-		{"TIOCSDRAINWAIT", Const, 0, ""},
-		{"TIOCSDTR", Const, 0, ""},
-		{"TIOCSERCONFIG", Const, 0, ""},
-		{"TIOCSERGETLSR", Const, 0, ""},
-		{"TIOCSERGETMULTI", Const, 0, ""},
-		{"TIOCSERGSTRUCT", Const, 0, ""},
-		{"TIOCSERGWILD", Const, 0, ""},
-		{"TIOCSERSETMULTI", Const, 0, ""},
-		{"TIOCSERSWILD", Const, 0, ""},
-		{"TIOCSER_TEMT", Const, 0, ""},
-		{"TIOCSETA", Const, 0, ""},
-		{"TIOCSETAF", Const, 0, ""},
-		{"TIOCSETAW", Const, 0, ""},
-		{"TIOCSETD", Const, 0, ""},
-		{"TIOCSFLAGS", Const, 1, ""},
-		{"TIOCSIG", Const, 0, ""},
-		{"TIOCSLCKTRMIOS", Const, 0, ""},
-		{"TIOCSLINED", Const, 1, ""},
-		{"TIOCSPGRP", Const, 0, ""},
-		{"TIOCSPTLCK", Const, 0, ""},
-		{"TIOCSQSIZE", Const, 1, ""},
-		{"TIOCSRS485", Const, 0, ""},
-		{"TIOCSSERIAL", Const, 0, ""},
-		{"TIOCSSIZE", Const, 1, ""},
-		{"TIOCSSOFTCAR", Const, 0, ""},
-		{"TIOCSTART", Const, 0, ""},
-		{"TIOCSTAT", Const, 0, ""},
-		{"TIOCSTI", Const, 0, ""},
-		{"TIOCSTOP", Const, 0, ""},
-		{"TIOCSTSTAMP", Const, 1, ""},
-		{"TIOCSWINSZ", Const, 0, ""},
-		{"TIOCTIMESTAMP", Const, 0, ""},
-		{"TIOCUCNTL", Const, 0, ""},
-		{"TIOCVHANGUP", Const, 0, ""},
-		{"TIOCXMTFRAME", Const, 1, ""},
-		{"TOKEN_ADJUST_DEFAULT", Const, 0, ""},
-		{"TOKEN_ADJUST_GROUPS", Const, 0, ""},
-		{"TOKEN_ADJUST_PRIVILEGES", Const, 0, ""},
-		{"TOKEN_ADJUST_SESSIONID", Const, 11, ""},
-		{"TOKEN_ALL_ACCESS", Const, 0, ""},
-		{"TOKEN_ASSIGN_PRIMARY", Const, 0, ""},
-		{"TOKEN_DUPLICATE", Const, 0, ""},
-		{"TOKEN_EXECUTE", Const, 0, ""},
-		{"TOKEN_IMPERSONATE", Const, 0, ""},
-		{"TOKEN_QUERY", Const, 0, ""},
-		{"TOKEN_QUERY_SOURCE", Const, 0, ""},
-		{"TOKEN_READ", Const, 0, ""},
-		{"TOKEN_WRITE", Const, 0, ""},
-		{"TOSTOP", Const, 0, ""},
-		{"TRUNCATE_EXISTING", Const, 0, ""},
-		{"TUNATTACHFILTER", Const, 0, ""},
-		{"TUNDETACHFILTER", Const, 0, ""},
-		{"TUNGETFEATURES", Const, 0, ""},
-		{"TUNGETIFF", Const, 0, ""},
-		{"TUNGETSNDBUF", Const, 0, ""},
-		{"TUNGETVNETHDRSZ", Const, 0, ""},
-		{"TUNSETDEBUG", Const, 0, ""},
-		{"TUNSETGROUP", Const, 0, ""},
-		{"TUNSETIFF", Const, 0, ""},
-		{"TUNSETLINK", Const, 0, ""},
-		{"TUNSETNOCSUM", Const, 0, ""},
-		{"TUNSETOFFLOAD", Const, 0, ""},
-		{"TUNSETOWNER", Const, 0, ""},
-		{"TUNSETPERSIST", Const, 0, ""},
-		{"TUNSETSNDBUF", Const, 0, ""},
-		{"TUNSETTXFILTER", Const, 0, ""},
-		{"TUNSETVNETHDRSZ", Const, 0, ""},
-		{"Tee", Func, 0, "func(rfd int, wfd int, len int, flags int) (n int64, err error)"},
-		{"TerminateProcess", Func, 0, ""},
-		{"Termios", Type, 0, ""},
-		{"Termios.Cc", Field, 0, ""},
-		{"Termios.Cflag", Field, 0, ""},
-		{"Termios.Iflag", Field, 0, ""},
-		{"Termios.Ispeed", Field, 0, ""},
-		{"Termios.Lflag", Field, 0, ""},
-		{"Termios.Line", Field, 0, ""},
-		{"Termios.Oflag", Field, 0, ""},
-		{"Termios.Ospeed", Field, 0, ""},
-		{"Termios.Pad_cgo_0", Field, 0, ""},
-		{"Tgkill", Func, 0, "func(tgid int, tid int, sig Signal) (err error)"},
-		{"Time", Func, 0, "func(t *Time_t) (tt Time_t, err error)"},
-		{"Time_t", Type, 0, ""},
-		{"Times", Func, 0, "func(tms *Tms) (ticks uintptr, err error)"},
-		{"Timespec", Type, 0, ""},
-		{"Timespec.Nsec", Field, 0, ""},
-		{"Timespec.Pad_cgo_0", Field, 2, ""},
-		{"Timespec.Sec", Field, 0, ""},
-		{"TimespecToNsec", Func, 0, "func(ts Timespec) int64"},
-		{"Timeval", Type, 0, ""},
-		{"Timeval.Pad_cgo_0", Field, 0, ""},
-		{"Timeval.Sec", Field, 0, ""},
-		{"Timeval.Usec", Field, 0, ""},
-		{"Timeval32", Type, 0, ""},
-		{"Timeval32.Sec", Field, 0, ""},
-		{"Timeval32.Usec", Field, 0, ""},
-		{"TimevalToNsec", Func, 0, "func(tv Timeval) int64"},
-		{"Timex", Type, 0, ""},
-		{"Timex.Calcnt", Field, 0, ""},
-		{"Timex.Constant", Field, 0, ""},
-		{"Timex.Errcnt", Field, 0, ""},
-		{"Timex.Esterror", Field, 0, ""},
-		{"Timex.Freq", Field, 0, ""},
-		{"Timex.Jitcnt", Field, 0, ""},
-		{"Timex.Jitter", Field, 0, ""},
-		{"Timex.Maxerror", Field, 0, ""},
-		{"Timex.Modes", Field, 0, ""},
-		{"Timex.Offset", Field, 0, ""},
-		{"Timex.Pad_cgo_0", Field, 0, ""},
-		{"Timex.Pad_cgo_1", Field, 0, ""},
-		{"Timex.Pad_cgo_2", Field, 0, ""},
-		{"Timex.Pad_cgo_3", Field, 0, ""},
-		{"Timex.Ppsfreq", Field, 0, ""},
-		{"Timex.Precision", Field, 0, ""},
-		{"Timex.Shift", Field, 0, ""},
-		{"Timex.Stabil", Field, 0, ""},
-		{"Timex.Status", Field, 0, ""},
-		{"Timex.Stbcnt", Field, 0, ""},
-		{"Timex.Tai", Field, 0, ""},
-		{"Timex.Tick", Field, 0, ""},
-		{"Timex.Time", Field, 0, ""},
-		{"Timex.Tolerance", Field, 0, ""},
-		{"Timezoneinformation", Type, 0, ""},
-		{"Timezoneinformation.Bias", Field, 0, ""},
-		{"Timezoneinformation.DaylightBias", Field, 0, ""},
-		{"Timezoneinformation.DaylightDate", Field, 0, ""},
-		{"Timezoneinformation.DaylightName", Field, 0, ""},
-		{"Timezoneinformation.StandardBias", Field, 0, ""},
-		{"Timezoneinformation.StandardDate", Field, 0, ""},
-		{"Timezoneinformation.StandardName", Field, 0, ""},
-		{"Tms", Type, 0, ""},
-		{"Tms.Cstime", Field, 0, ""},
-		{"Tms.Cutime", Field, 0, ""},
-		{"Tms.Stime", Field, 0, ""},
-		{"Tms.Utime", Field, 0, ""},
-		{"Token", Type, 0, ""},
-		{"TokenAccessInformation", Const, 0, ""},
-		{"TokenAuditPolicy", Const, 0, ""},
-		{"TokenDefaultDacl", Const, 0, ""},
-		{"TokenElevation", Const, 0, ""},
-		{"TokenElevationType", Const, 0, ""},
-		{"TokenGroups", Const, 0, ""},
-		{"TokenGroupsAndPrivileges", Const, 0, ""},
-		{"TokenHasRestrictions", Const, 0, ""},
-		{"TokenImpersonationLevel", Const, 0, ""},
-		{"TokenIntegrityLevel", Const, 0, ""},
-		{"TokenLinkedToken", Const, 0, ""},
-		{"TokenLogonSid", Const, 0, ""},
-		{"TokenMandatoryPolicy", Const, 0, ""},
-		{"TokenOrigin", Const, 0, ""},
-		{"TokenOwner", Const, 0, ""},
-		{"TokenPrimaryGroup", Const, 0, ""},
-		{"TokenPrivileges", Const, 0, ""},
-		{"TokenRestrictedSids", Const, 0, ""},
-		{"TokenSandBoxInert", Const, 0, ""},
-		{"TokenSessionId", Const, 0, ""},
-		{"TokenSessionReference", Const, 0, ""},
-		{"TokenSource", Const, 0, ""},
-		{"TokenStatistics", Const, 0, ""},
-		{"TokenType", Const, 0, ""},
-		{"TokenUIAccess", Const, 0, ""},
-		{"TokenUser", Const, 0, ""},
-		{"TokenVirtualizationAllowed", Const, 0, ""},
-		{"TokenVirtualizationEnabled", Const, 0, ""},
-		{"Tokenprimarygroup", Type, 0, ""},
-		{"Tokenprimarygroup.PrimaryGroup", Field, 0, ""},
-		{"Tokenuser", Type, 0, ""},
-		{"Tokenuser.User", Field, 0, ""},
-		{"TranslateAccountName", Func, 0, ""},
-		{"TranslateName", Func, 0, ""},
-		{"TransmitFile", Func, 0, ""},
-		{"TransmitFileBuffers", Type, 0, ""},
-		{"TransmitFileBuffers.Head", Field, 0, ""},
-		{"TransmitFileBuffers.HeadLength", Field, 0, ""},
-		{"TransmitFileBuffers.Tail", Field, 0, ""},
-		{"TransmitFileBuffers.TailLength", Field, 0, ""},
-		{"Truncate", Func, 0, "func(path string, length int64) (err error)"},
-		{"UNIX_PATH_MAX", Const, 12, ""},
-		{"USAGE_MATCH_TYPE_AND", Const, 0, ""},
-		{"USAGE_MATCH_TYPE_OR", Const, 0, ""},
-		{"UTF16FromString", Func, 1, ""},
-		{"UTF16PtrFromString", Func, 1, ""},
-		{"UTF16ToString", Func, 0, ""},
-		{"Ucred", Type, 0, ""},
-		{"Ucred.Gid", Field, 0, ""},
-		{"Ucred.Pid", Field, 0, ""},
-		{"Ucred.Uid", Field, 0, ""},
-		{"Umask", Func, 0, "func(mask int) (oldmask int)"},
-		{"Uname", Func, 0, "func(buf *Utsname) (err error)"},
-		{"Undelete", Func, 0, ""},
-		{"UnixCredentials", Func, 0, "func(ucred *Ucred) []byte"},
-		{"UnixRights", Func, 0, "func(fds ...int) []byte"},
-		{"Unlink", Func, 0, "func(path string) error"},
-		{"Unlinkat", Func, 0, "func(dirfd int, path string) error"},
-		{"UnmapViewOfFile", Func, 0, ""},
-		{"Unmount", Func, 0, "func(target string, flags int) (err error)"},
-		{"Unsetenv", Func, 4, "func(key string) error"},
-		{"Unshare", Func, 0, "func(flags int) (err error)"},
-		{"UserInfo10", Type, 0, ""},
-		{"UserInfo10.Comment", Field, 0, ""},
-		{"UserInfo10.FullName", Field, 0, ""},
-		{"UserInfo10.Name", Field, 0, ""},
-		{"UserInfo10.UsrComment", Field, 0, ""},
-		{"Ustat", Func, 0, "func(dev int, ubuf *Ustat_t) (err error)"},
-		{"Ustat_t", Type, 0, ""},
-		{"Ustat_t.Fname", Field, 0, ""},
-		{"Ustat_t.Fpack", Field, 0, ""},
-		{"Ustat_t.Pad_cgo_0", Field, 0, ""},
-		{"Ustat_t.Pad_cgo_1", Field, 0, ""},
-		{"Ustat_t.Tfree", Field, 0, ""},
-		{"Ustat_t.Tinode", Field, 0, ""},
-		{"Utimbuf", Type, 0, ""},
-		{"Utimbuf.Actime", Field, 0, ""},
-		{"Utimbuf.Modtime", Field, 0, ""},
-		{"Utime", Func, 0, "func(path string, buf *Utimbuf) (err error)"},
-		{"Utimes", Func, 0, "func(path string, tv []Timeval) (err error)"},
-		{"UtimesNano", Func, 1, "func(path string, ts []Timespec) (err error)"},
-		{"Utsname", Type, 0, ""},
-		{"Utsname.Domainname", Field, 0, ""},
-		{"Utsname.Machine", Field, 0, ""},
-		{"Utsname.Nodename", Field, 0, ""},
-		{"Utsname.Release", Field, 0, ""},
-		{"Utsname.Sysname", Field, 0, ""},
-		{"Utsname.Version", Field, 0, ""},
-		{"VDISCARD", Const, 0, ""},
-		{"VDSUSP", Const, 1, ""},
-		{"VEOF", Const, 0, ""},
-		{"VEOL", Const, 0, ""},
-		{"VEOL2", Const, 0, ""},
-		{"VERASE", Const, 0, ""},
-		{"VERASE2", Const, 1, ""},
-		{"VINTR", Const, 0, ""},
-		{"VKILL", Const, 0, ""},
-		{"VLNEXT", Const, 0, ""},
-		{"VMIN", Const, 0, ""},
-		{"VQUIT", Const, 0, ""},
-		{"VREPRINT", Const, 0, ""},
-		{"VSTART", Const, 0, ""},
-		{"VSTATUS", Const, 1, ""},
-		{"VSTOP", Const, 0, ""},
-		{"VSUSP", Const, 0, ""},
-		{"VSWTC", Const, 0, ""},
-		{"VT0", Const, 1, ""},
-		{"VT1", Const, 1, ""},
-		{"VTDLY", Const, 1, ""},
-		{"VTIME", Const, 0, ""},
-		{"VWERASE", Const, 0, ""},
-		{"VirtualLock", Func, 0, ""},
-		{"VirtualUnlock", Func, 0, ""},
-		{"WAIT_ABANDONED", Const, 0, ""},
-		{"WAIT_FAILED", Const, 0, ""},
-		{"WAIT_OBJECT_0", Const, 0, ""},
-		{"WAIT_TIMEOUT", Const, 0, ""},
-		{"WALL", Const, 0, ""},
-		{"WALLSIG", Const, 1, ""},
-		{"WALTSIG", Const, 1, ""},
-		{"WCLONE", Const, 0, ""},
-		{"WCONTINUED", Const, 0, ""},
-		{"WCOREFLAG", Const, 0, ""},
-		{"WEXITED", Const, 0, ""},
-		{"WLINUXCLONE", Const, 0, ""},
-		{"WNOHANG", Const, 0, ""},
-		{"WNOTHREAD", Const, 0, ""},
-		{"WNOWAIT", Const, 0, ""},
-		{"WNOZOMBIE", Const, 1, ""},
-		{"WOPTSCHECKED", Const, 1, ""},
-		{"WORDSIZE", Const, 0, ""},
-		{"WSABuf", Type, 0, ""},
-		{"WSABuf.Buf", Field, 0, ""},
-		{"WSABuf.Len", Field, 0, ""},
-		{"WSACleanup", Func, 0, ""},
-		{"WSADESCRIPTION_LEN", Const, 0, ""},
-		{"WSAData", Type, 0, ""},
-		{"WSAData.Description", Field, 0, ""},
-		{"WSAData.HighVersion", Field, 0, ""},
-		{"WSAData.MaxSockets", Field, 0, ""},
-		{"WSAData.MaxUdpDg", Field, 0, ""},
-		{"WSAData.SystemStatus", Field, 0, ""},
-		{"WSAData.VendorInfo", Field, 0, ""},
-		{"WSAData.Version", Field, 0, ""},
-		{"WSAEACCES", Const, 2, ""},
-		{"WSAECONNABORTED", Const, 9, ""},
-		{"WSAECONNRESET", Const, 3, ""},
-		{"WSAENOPROTOOPT", Const, 23, ""},
-		{"WSAEnumProtocols", Func, 2, ""},
-		{"WSAID_CONNECTEX", Var, 1, ""},
-		{"WSAIoctl", Func, 0, ""},
-		{"WSAPROTOCOL_LEN", Const, 2, ""},
-		{"WSAProtocolChain", Type, 2, ""},
-		{"WSAProtocolChain.ChainEntries", Field, 2, ""},
-		{"WSAProtocolChain.ChainLen", Field, 2, ""},
-		{"WSAProtocolInfo", Type, 2, ""},
-		{"WSAProtocolInfo.AddressFamily", Field, 2, ""},
-		{"WSAProtocolInfo.CatalogEntryId", Field, 2, ""},
-		{"WSAProtocolInfo.MaxSockAddr", Field, 2, ""},
-		{"WSAProtocolInfo.MessageSize", Field, 2, ""},
-		{"WSAProtocolInfo.MinSockAddr", Field, 2, ""},
-		{"WSAProtocolInfo.NetworkByteOrder", Field, 2, ""},
-		{"WSAProtocolInfo.Protocol", Field, 2, ""},
-		{"WSAProtocolInfo.ProtocolChain", Field, 2, ""},
-		{"WSAProtocolInfo.ProtocolMaxOffset", Field, 2, ""},
-		{"WSAProtocolInfo.ProtocolName", Field, 2, ""},
-		{"WSAProtocolInfo.ProviderFlags", Field, 2, ""},
-		{"WSAProtocolInfo.ProviderId", Field, 2, ""},
-		{"WSAProtocolInfo.ProviderReserved", Field, 2, ""},
-		{"WSAProtocolInfo.SecurityScheme", Field, 2, ""},
-		{"WSAProtocolInfo.ServiceFlags1", Field, 2, ""},
-		{"WSAProtocolInfo.ServiceFlags2", Field, 2, ""},
-		{"WSAProtocolInfo.ServiceFlags3", Field, 2, ""},
-		{"WSAProtocolInfo.ServiceFlags4", Field, 2, ""},
-		{"WSAProtocolInfo.SocketType", Field, 2, ""},
-		{"WSAProtocolInfo.Version", Field, 2, ""},
-		{"WSARecv", Func, 0, ""},
-		{"WSARecvFrom", Func, 0, ""},
-		{"WSASYS_STATUS_LEN", Const, 0, ""},
-		{"WSASend", Func, 0, ""},
-		{"WSASendTo", Func, 0, ""},
-		{"WSASendto", Func, 0, ""},
-		{"WSAStartup", Func, 0, ""},
-		{"WSTOPPED", Const, 0, ""},
-		{"WTRAPPED", Const, 1, ""},
-		{"WUNTRACED", Const, 0, ""},
-		{"Wait4", Func, 0, "func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)"},
-		{"WaitForSingleObject", Func, 0, ""},
-		{"WaitStatus", Type, 0, ""},
-		{"WaitStatus.ExitCode", Field, 0, ""},
-		{"Win32FileAttributeData", Type, 0, ""},
-		{"Win32FileAttributeData.CreationTime", Field, 0, ""},
-		{"Win32FileAttributeData.FileAttributes", Field, 0, ""},
-		{"Win32FileAttributeData.FileSizeHigh", Field, 0, ""},
-		{"Win32FileAttributeData.FileSizeLow", Field, 0, ""},
-		{"Win32FileAttributeData.LastAccessTime", Field, 0, ""},
-		{"Win32FileAttributeData.LastWriteTime", Field, 0, ""},
-		{"Win32finddata", Type, 0, ""},
-		{"Win32finddata.AlternateFileName", Field, 0, ""},
-		{"Win32finddata.CreationTime", Field, 0, ""},
-		{"Win32finddata.FileAttributes", Field, 0, ""},
-		{"Win32finddata.FileName", Field, 0, ""},
-		{"Win32finddata.FileSizeHigh", Field, 0, ""},
-		{"Win32finddata.FileSizeLow", Field, 0, ""},
-		{"Win32finddata.LastAccessTime", Field, 0, ""},
-		{"Win32finddata.LastWriteTime", Field, 0, ""},
-		{"Win32finddata.Reserved0", Field, 0, ""},
-		{"Win32finddata.Reserved1", Field, 0, ""},
-		{"Write", Func, 0, "func(fd int, p []byte) (n int, err error)"},
-		{"WriteConsole", Func, 1, ""},
-		{"WriteFile", Func, 0, ""},
-		{"X509_ASN_ENCODING", Const, 0, ""},
-		{"XCASE", Const, 0, ""},
-		{"XP1_CONNECTIONLESS", Const, 2, ""},
-		{"XP1_CONNECT_DATA", Const, 2, ""},
-		{"XP1_DISCONNECT_DATA", Const, 2, ""},
-		{"XP1_EXPEDITED_DATA", Const, 2, ""},
-		{"XP1_GRACEFUL_CLOSE", Const, 2, ""},
-		{"XP1_GUARANTEED_DELIVERY", Const, 2, ""},
-		{"XP1_GUARANTEED_ORDER", Const, 2, ""},
-		{"XP1_IFS_HANDLES", Const, 2, ""},
-		{"XP1_MESSAGE_ORIENTED", Const, 2, ""},
-		{"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2, ""},
-		{"XP1_MULTIPOINT_DATA_PLANE", Const, 2, ""},
-		{"XP1_PARTIAL_MESSAGE", Const, 2, ""},
-		{"XP1_PSEUDO_STREAM", Const, 2, ""},
-		{"XP1_QOS_SUPPORTED", Const, 2, ""},
-		{"XP1_SAN_SUPPORT_SDP", Const, 2, ""},
-		{"XP1_SUPPORT_BROADCAST", Const, 2, ""},
-		{"XP1_SUPPORT_MULTIPOINT", Const, 2, ""},
-		{"XP1_UNI_RECV", Const, 2, ""},
-		{"XP1_UNI_SEND", Const, 2, ""},
+		{"(*Cmsghdr).SetLen", Method, 0},
+		{"(*DLL).FindProc", Method, 0},
+		{"(*DLL).MustFindProc", Method, 0},
+		{"(*DLL).Release", Method, 0},
+		{"(*DLLError).Error", Method, 0},
+		{"(*DLLError).Unwrap", Method, 16},
+		{"(*Filetime).Nanoseconds", Method, 0},
+		{"(*Iovec).SetLen", Method, 0},
+		{"(*LazyDLL).Handle", Method, 0},
+		{"(*LazyDLL).Load", Method, 0},
+		{"(*LazyDLL).NewProc", Method, 0},
+		{"(*LazyProc).Addr", Method, 0},
+		{"(*LazyProc).Call", Method, 0},
+		{"(*LazyProc).Find", Method, 0},
+		{"(*Msghdr).SetControllen", Method, 0},
+		{"(*Proc).Addr", Method, 0},
+		{"(*Proc).Call", Method, 0},
+		{"(*PtraceRegs).PC", Method, 0},
+		{"(*PtraceRegs).SetPC", Method, 0},
+		{"(*RawSockaddrAny).Sockaddr", Method, 0},
+		{"(*SID).Copy", Method, 0},
+		{"(*SID).Len", Method, 0},
+		{"(*SID).LookupAccount", Method, 0},
+		{"(*SID).String", Method, 0},
+		{"(*Timespec).Nano", Method, 0},
+		{"(*Timespec).Unix", Method, 0},
+		{"(*Timeval).Nano", Method, 0},
+		{"(*Timeval).Nanoseconds", Method, 0},
+		{"(*Timeval).Unix", Method, 0},
+		{"(Errno).Error", Method, 0},
+		{"(Errno).Is", Method, 13},
+		{"(Errno).Temporary", Method, 0},
+		{"(Errno).Timeout", Method, 0},
+		{"(Signal).Signal", Method, 0},
+		{"(Signal).String", Method, 0},
+		{"(Token).Close", Method, 0},
+		{"(Token).GetTokenPrimaryGroup", Method, 0},
+		{"(Token).GetTokenUser", Method, 0},
+		{"(Token).GetUserProfileDirectory", Method, 0},
+		{"(WaitStatus).Continued", Method, 0},
+		{"(WaitStatus).CoreDump", Method, 0},
+		{"(WaitStatus).ExitStatus", Method, 0},
+		{"(WaitStatus).Exited", Method, 0},
+		{"(WaitStatus).Signal", Method, 0},
+		{"(WaitStatus).Signaled", Method, 0},
+		{"(WaitStatus).StopSignal", Method, 0},
+		{"(WaitStatus).Stopped", Method, 0},
+		{"(WaitStatus).TrapCause", Method, 0},
+		{"AF_ALG", Const, 0},
+		{"AF_APPLETALK", Const, 0},
+		{"AF_ARP", Const, 0},
+		{"AF_ASH", Const, 0},
+		{"AF_ATM", Const, 0},
+		{"AF_ATMPVC", Const, 0},
+		{"AF_ATMSVC", Const, 0},
+		{"AF_AX25", Const, 0},
+		{"AF_BLUETOOTH", Const, 0},
+		{"AF_BRIDGE", Const, 0},
+		{"AF_CAIF", Const, 0},
+		{"AF_CAN", Const, 0},
+		{"AF_CCITT", Const, 0},
+		{"AF_CHAOS", Const, 0},
+		{"AF_CNT", Const, 0},
+		{"AF_COIP", Const, 0},
+		{"AF_DATAKIT", Const, 0},
+		{"AF_DECnet", Const, 0},
+		{"AF_DLI", Const, 0},
+		{"AF_E164", Const, 0},
+		{"AF_ECMA", Const, 0},
+		{"AF_ECONET", Const, 0},
+		{"AF_ENCAP", Const, 1},
+		{"AF_FILE", Const, 0},
+		{"AF_HYLINK", Const, 0},
+		{"AF_IEEE80211", Const, 0},
+		{"AF_IEEE802154", Const, 0},
+		{"AF_IMPLINK", Const, 0},
+		{"AF_INET", Const, 0},
+		{"AF_INET6", Const, 0},
+		{"AF_INET6_SDP", Const, 3},
+		{"AF_INET_SDP", Const, 3},
+		{"AF_IPX", Const, 0},
+		{"AF_IRDA", Const, 0},
+		{"AF_ISDN", Const, 0},
+		{"AF_ISO", Const, 0},
+		{"AF_IUCV", Const, 0},
+		{"AF_KEY", Const, 0},
+		{"AF_LAT", Const, 0},
+		{"AF_LINK", Const, 0},
+		{"AF_LLC", Const, 0},
+		{"AF_LOCAL", Const, 0},
+		{"AF_MAX", Const, 0},
+		{"AF_MPLS", Const, 1},
+		{"AF_NATM", Const, 0},
+		{"AF_NDRV", Const, 0},
+		{"AF_NETBEUI", Const, 0},
+		{"AF_NETBIOS", Const, 0},
+		{"AF_NETGRAPH", Const, 0},
+		{"AF_NETLINK", Const, 0},
+		{"AF_NETROM", Const, 0},
+		{"AF_NS", Const, 0},
+		{"AF_OROUTE", Const, 1},
+		{"AF_OSI", Const, 0},
+		{"AF_PACKET", Const, 0},
+		{"AF_PHONET", Const, 0},
+		{"AF_PPP", Const, 0},
+		{"AF_PPPOX", Const, 0},
+		{"AF_PUP", Const, 0},
+		{"AF_RDS", Const, 0},
+		{"AF_RESERVED_36", Const, 0},
+		{"AF_ROSE", Const, 0},
+		{"AF_ROUTE", Const, 0},
+		{"AF_RXRPC", Const, 0},
+		{"AF_SCLUSTER", Const, 0},
+		{"AF_SECURITY", Const, 0},
+		{"AF_SIP", Const, 0},
+		{"AF_SLOW", Const, 0},
+		{"AF_SNA", Const, 0},
+		{"AF_SYSTEM", Const, 0},
+		{"AF_TIPC", Const, 0},
+		{"AF_UNIX", Const, 0},
+		{"AF_UNSPEC", Const, 0},
+		{"AF_UTUN", Const, 16},
+		{"AF_VENDOR00", Const, 0},
+		{"AF_VENDOR01", Const, 0},
+		{"AF_VENDOR02", Const, 0},
+		{"AF_VENDOR03", Const, 0},
+		{"AF_VENDOR04", Const, 0},
+		{"AF_VENDOR05", Const, 0},
+		{"AF_VENDOR06", Const, 0},
+		{"AF_VENDOR07", Const, 0},
+		{"AF_VENDOR08", Const, 0},
+		{"AF_VENDOR09", Const, 0},
+		{"AF_VENDOR10", Const, 0},
+		{"AF_VENDOR11", Const, 0},
+		{"AF_VENDOR12", Const, 0},
+		{"AF_VENDOR13", Const, 0},
+		{"AF_VENDOR14", Const, 0},
+		{"AF_VENDOR15", Const, 0},
+		{"AF_VENDOR16", Const, 0},
+		{"AF_VENDOR17", Const, 0},
+		{"AF_VENDOR18", Const, 0},
+		{"AF_VENDOR19", Const, 0},
+		{"AF_VENDOR20", Const, 0},
+		{"AF_VENDOR21", Const, 0},
+		{"AF_VENDOR22", Const, 0},
+		{"AF_VENDOR23", Const, 0},
+		{"AF_VENDOR24", Const, 0},
+		{"AF_VENDOR25", Const, 0},
+		{"AF_VENDOR26", Const, 0},
+		{"AF_VENDOR27", Const, 0},
+		{"AF_VENDOR28", Const, 0},
+		{"AF_VENDOR29", Const, 0},
+		{"AF_VENDOR30", Const, 0},
+		{"AF_VENDOR31", Const, 0},
+		{"AF_VENDOR32", Const, 0},
+		{"AF_VENDOR33", Const, 0},
+		{"AF_VENDOR34", Const, 0},
+		{"AF_VENDOR35", Const, 0},
+		{"AF_VENDOR36", Const, 0},
+		{"AF_VENDOR37", Const, 0},
+		{"AF_VENDOR38", Const, 0},
+		{"AF_VENDOR39", Const, 0},
+		{"AF_VENDOR40", Const, 0},
+		{"AF_VENDOR41", Const, 0},
+		{"AF_VENDOR42", Const, 0},
+		{"AF_VENDOR43", Const, 0},
+		{"AF_VENDOR44", Const, 0},
+		{"AF_VENDOR45", Const, 0},
+		{"AF_VENDOR46", Const, 0},
+		{"AF_VENDOR47", Const, 0},
+		{"AF_WANPIPE", Const, 0},
+		{"AF_X25", Const, 0},
+		{"AI_CANONNAME", Const, 1},
+		{"AI_NUMERICHOST", Const, 1},
+		{"AI_PASSIVE", Const, 1},
+		{"APPLICATION_ERROR", Const, 0},
+		{"ARPHRD_ADAPT", Const, 0},
+		{"ARPHRD_APPLETLK", Const, 0},
+		{"ARPHRD_ARCNET", Const, 0},
+		{"ARPHRD_ASH", Const, 0},
+		{"ARPHRD_ATM", Const, 0},
+		{"ARPHRD_AX25", Const, 0},
+		{"ARPHRD_BIF", Const, 0},
+		{"ARPHRD_CHAOS", Const, 0},
+		{"ARPHRD_CISCO", Const, 0},
+		{"ARPHRD_CSLIP", Const, 0},
+		{"ARPHRD_CSLIP6", Const, 0},
+		{"ARPHRD_DDCMP", Const, 0},
+		{"ARPHRD_DLCI", Const, 0},
+		{"ARPHRD_ECONET", Const, 0},
+		{"ARPHRD_EETHER", Const, 0},
+		{"ARPHRD_ETHER", Const, 0},
+		{"ARPHRD_EUI64", Const, 0},
+		{"ARPHRD_FCAL", Const, 0},
+		{"ARPHRD_FCFABRIC", Const, 0},
+		{"ARPHRD_FCPL", Const, 0},
+		{"ARPHRD_FCPP", Const, 0},
+		{"ARPHRD_FDDI", Const, 0},
+		{"ARPHRD_FRAD", Const, 0},
+		{"ARPHRD_FRELAY", Const, 1},
+		{"ARPHRD_HDLC", Const, 0},
+		{"ARPHRD_HIPPI", Const, 0},
+		{"ARPHRD_HWX25", Const, 0},
+		{"ARPHRD_IEEE1394", Const, 0},
+		{"ARPHRD_IEEE802", Const, 0},
+		{"ARPHRD_IEEE80211", Const, 0},
+		{"ARPHRD_IEEE80211_PRISM", Const, 0},
+		{"ARPHRD_IEEE80211_RADIOTAP", Const, 0},
+		{"ARPHRD_IEEE802154", Const, 0},
+		{"ARPHRD_IEEE802154_PHY", Const, 0},
+		{"ARPHRD_IEEE802_TR", Const, 0},
+		{"ARPHRD_INFINIBAND", Const, 0},
+		{"ARPHRD_IPDDP", Const, 0},
+		{"ARPHRD_IPGRE", Const, 0},
+		{"ARPHRD_IRDA", Const, 0},
+		{"ARPHRD_LAPB", Const, 0},
+		{"ARPHRD_LOCALTLK", Const, 0},
+		{"ARPHRD_LOOPBACK", Const, 0},
+		{"ARPHRD_METRICOM", Const, 0},
+		{"ARPHRD_NETROM", Const, 0},
+		{"ARPHRD_NONE", Const, 0},
+		{"ARPHRD_PIMREG", Const, 0},
+		{"ARPHRD_PPP", Const, 0},
+		{"ARPHRD_PRONET", Const, 0},
+		{"ARPHRD_RAWHDLC", Const, 0},
+		{"ARPHRD_ROSE", Const, 0},
+		{"ARPHRD_RSRVD", Const, 0},
+		{"ARPHRD_SIT", Const, 0},
+		{"ARPHRD_SKIP", Const, 0},
+		{"ARPHRD_SLIP", Const, 0},
+		{"ARPHRD_SLIP6", Const, 0},
+		{"ARPHRD_STRIP", Const, 1},
+		{"ARPHRD_TUNNEL", Const, 0},
+		{"ARPHRD_TUNNEL6", Const, 0},
+		{"ARPHRD_VOID", Const, 0},
+		{"ARPHRD_X25", Const, 0},
+		{"AUTHTYPE_CLIENT", Const, 0},
+		{"AUTHTYPE_SERVER", Const, 0},
+		{"Accept", Func, 0},
+		{"Accept4", Func, 1},
+		{"AcceptEx", Func, 0},
+		{"Access", Func, 0},
+		{"Acct", Func, 0},
+		{"AddrinfoW", Type, 1},
+		{"AddrinfoW.Addr", Field, 1},
+		{"AddrinfoW.Addrlen", Field, 1},
+		{"AddrinfoW.Canonname", Field, 1},
+		{"AddrinfoW.Family", Field, 1},
+		{"AddrinfoW.Flags", Field, 1},
+		{"AddrinfoW.Next", Field, 1},
+		{"AddrinfoW.Protocol", Field, 1},
+		{"AddrinfoW.Socktype", Field, 1},
+		{"Adjtime", Func, 0},
+		{"Adjtimex", Func, 0},
+		{"AllThreadsSyscall", Func, 16},
+		{"AllThreadsSyscall6", Func, 16},
+		{"AttachLsf", Func, 0},
+		{"B0", Const, 0},
+		{"B1000000", Const, 0},
+		{"B110", Const, 0},
+		{"B115200", Const, 0},
+		{"B1152000", Const, 0},
+		{"B1200", Const, 0},
+		{"B134", Const, 0},
+		{"B14400", Const, 1},
+		{"B150", Const, 0},
+		{"B1500000", Const, 0},
+		{"B1800", Const, 0},
+		{"B19200", Const, 0},
+		{"B200", Const, 0},
+		{"B2000000", Const, 0},
+		{"B230400", Const, 0},
+		{"B2400", Const, 0},
+		{"B2500000", Const, 0},
+		{"B28800", Const, 1},
+		{"B300", Const, 0},
+		{"B3000000", Const, 0},
+		{"B3500000", Const, 0},
+		{"B38400", Const, 0},
+		{"B4000000", Const, 0},
+		{"B460800", Const, 0},
+		{"B4800", Const, 0},
+		{"B50", Const, 0},
+		{"B500000", Const, 0},
+		{"B57600", Const, 0},
+		{"B576000", Const, 0},
+		{"B600", Const, 0},
+		{"B7200", Const, 1},
+		{"B75", Const, 0},
+		{"B76800", Const, 1},
+		{"B921600", Const, 0},
+		{"B9600", Const, 0},
+		{"BASE_PROTOCOL", Const, 2},
+		{"BIOCFEEDBACK", Const, 0},
+		{"BIOCFLUSH", Const, 0},
+		{"BIOCGBLEN", Const, 0},
+		{"BIOCGDIRECTION", Const, 0},
+		{"BIOCGDIRFILT", Const, 1},
+		{"BIOCGDLT", Const, 0},
+		{"BIOCGDLTLIST", Const, 0},
+		{"BIOCGETBUFMODE", Const, 0},
+		{"BIOCGETIF", Const, 0},
+		{"BIOCGETZMAX", Const, 0},
+		{"BIOCGFEEDBACK", Const, 1},
+		{"BIOCGFILDROP", Const, 1},
+		{"BIOCGHDRCMPLT", Const, 0},
+		{"BIOCGRSIG", Const, 0},
+		{"BIOCGRTIMEOUT", Const, 0},
+		{"BIOCGSEESENT", Const, 0},
+		{"BIOCGSTATS", Const, 0},
+		{"BIOCGSTATSOLD", Const, 1},
+		{"BIOCGTSTAMP", Const, 1},
+		{"BIOCIMMEDIATE", Const, 0},
+		{"BIOCLOCK", Const, 0},
+		{"BIOCPROMISC", Const, 0},
+		{"BIOCROTZBUF", Const, 0},
+		{"BIOCSBLEN", Const, 0},
+		{"BIOCSDIRECTION", Const, 0},
+		{"BIOCSDIRFILT", Const, 1},
+		{"BIOCSDLT", Const, 0},
+		{"BIOCSETBUFMODE", Const, 0},
+		{"BIOCSETF", Const, 0},
+		{"BIOCSETFNR", Const, 0},
+		{"BIOCSETIF", Const, 0},
+		{"BIOCSETWF", Const, 0},
+		{"BIOCSETZBUF", Const, 0},
+		{"BIOCSFEEDBACK", Const, 1},
+		{"BIOCSFILDROP", Const, 1},
+		{"BIOCSHDRCMPLT", Const, 0},
+		{"BIOCSRSIG", Const, 0},
+		{"BIOCSRTIMEOUT", Const, 0},
+		{"BIOCSSEESENT", Const, 0},
+		{"BIOCSTCPF", Const, 1},
+		{"BIOCSTSTAMP", Const, 1},
+		{"BIOCSUDPF", Const, 1},
+		{"BIOCVERSION", Const, 0},
+		{"BPF_A", Const, 0},
+		{"BPF_ABS", Const, 0},
+		{"BPF_ADD", Const, 0},
+		{"BPF_ALIGNMENT", Const, 0},
+		{"BPF_ALIGNMENT32", Const, 1},
+		{"BPF_ALU", Const, 0},
+		{"BPF_AND", Const, 0},
+		{"BPF_B", Const, 0},
+		{"BPF_BUFMODE_BUFFER", Const, 0},
+		{"BPF_BUFMODE_ZBUF", Const, 0},
+		{"BPF_DFLTBUFSIZE", Const, 1},
+		{"BPF_DIRECTION_IN", Const, 1},
+		{"BPF_DIRECTION_OUT", Const, 1},
+		{"BPF_DIV", Const, 0},
+		{"BPF_H", Const, 0},
+		{"BPF_IMM", Const, 0},
+		{"BPF_IND", Const, 0},
+		{"BPF_JA", Const, 0},
+		{"BPF_JEQ", Const, 0},
+		{"BPF_JGE", Const, 0},
+		{"BPF_JGT", Const, 0},
+		{"BPF_JMP", Const, 0},
+		{"BPF_JSET", Const, 0},
+		{"BPF_K", Const, 0},
+		{"BPF_LD", Const, 0},
+		{"BPF_LDX", Const, 0},
+		{"BPF_LEN", Const, 0},
+		{"BPF_LSH", Const, 0},
+		{"BPF_MAJOR_VERSION", Const, 0},
+		{"BPF_MAXBUFSIZE", Const, 0},
+		{"BPF_MAXINSNS", Const, 0},
+		{"BPF_MEM", Const, 0},
+		{"BPF_MEMWORDS", Const, 0},
+		{"BPF_MINBUFSIZE", Const, 0},
+		{"BPF_MINOR_VERSION", Const, 0},
+		{"BPF_MISC", Const, 0},
+		{"BPF_MSH", Const, 0},
+		{"BPF_MUL", Const, 0},
+		{"BPF_NEG", Const, 0},
+		{"BPF_OR", Const, 0},
+		{"BPF_RELEASE", Const, 0},
+		{"BPF_RET", Const, 0},
+		{"BPF_RSH", Const, 0},
+		{"BPF_ST", Const, 0},
+		{"BPF_STX", Const, 0},
+		{"BPF_SUB", Const, 0},
+		{"BPF_TAX", Const, 0},
+		{"BPF_TXA", Const, 0},
+		{"BPF_T_BINTIME", Const, 1},
+		{"BPF_T_BINTIME_FAST", Const, 1},
+		{"BPF_T_BINTIME_MONOTONIC", Const, 1},
+		{"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1},
+		{"BPF_T_FAST", Const, 1},
+		{"BPF_T_FLAG_MASK", Const, 1},
+		{"BPF_T_FORMAT_MASK", Const, 1},
+		{"BPF_T_MICROTIME", Const, 1},
+		{"BPF_T_MICROTIME_FAST", Const, 1},
+		{"BPF_T_MICROTIME_MONOTONIC", Const, 1},
+		{"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1},
+		{"BPF_T_MONOTONIC", Const, 1},
+		{"BPF_T_MONOTONIC_FAST", Const, 1},
+		{"BPF_T_NANOTIME", Const, 1},
+		{"BPF_T_NANOTIME_FAST", Const, 1},
+		{"BPF_T_NANOTIME_MONOTONIC", Const, 1},
+		{"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1},
+		{"BPF_T_NONE", Const, 1},
+		{"BPF_T_NORMAL", Const, 1},
+		{"BPF_W", Const, 0},
+		{"BPF_X", Const, 0},
+		{"BRKINT", Const, 0},
+		{"Bind", Func, 0},
+		{"BindToDevice", Func, 0},
+		{"BpfBuflen", Func, 0},
+		{"BpfDatalink", Func, 0},
+		{"BpfHdr", Type, 0},
+		{"BpfHdr.Caplen", Field, 0},
+		{"BpfHdr.Datalen", Field, 0},
+		{"BpfHdr.Hdrlen", Field, 0},
+		{"BpfHdr.Pad_cgo_0", Field, 0},
+		{"BpfHdr.Tstamp", Field, 0},
+		{"BpfHeadercmpl", Func, 0},
+		{"BpfInsn", Type, 0},
+		{"BpfInsn.Code", Field, 0},
+		{"BpfInsn.Jf", Field, 0},
+		{"BpfInsn.Jt", Field, 0},
+		{"BpfInsn.K", Field, 0},
+		{"BpfInterface", Func, 0},
+		{"BpfJump", Func, 0},
+		{"BpfProgram", Type, 0},
+		{"BpfProgram.Insns", Field, 0},
+		{"BpfProgram.Len", Field, 0},
+		{"BpfProgram.Pad_cgo_0", Field, 0},
+		{"BpfStat", Type, 0},
+		{"BpfStat.Capt", Field, 2},
+		{"BpfStat.Drop", Field, 0},
+		{"BpfStat.Padding", Field, 2},
+		{"BpfStat.Recv", Field, 0},
+		{"BpfStats", Func, 0},
+		{"BpfStmt", Func, 0},
+		{"BpfTimeout", Func, 0},
+		{"BpfTimeval", Type, 2},
+		{"BpfTimeval.Sec", Field, 2},
+		{"BpfTimeval.Usec", Field, 2},
+		{"BpfVersion", Type, 0},
+		{"BpfVersion.Major", Field, 0},
+		{"BpfVersion.Minor", Field, 0},
+		{"BpfZbuf", Type, 0},
+		{"BpfZbuf.Bufa", Field, 0},
+		{"BpfZbuf.Bufb", Field, 0},
+		{"BpfZbuf.Buflen", Field, 0},
+		{"BpfZbufHeader", Type, 0},
+		{"BpfZbufHeader.Kernel_gen", Field, 0},
+		{"BpfZbufHeader.Kernel_len", Field, 0},
+		{"BpfZbufHeader.User_gen", Field, 0},
+		{"BpfZbufHeader.X_bzh_pad", Field, 0},
+		{"ByHandleFileInformation", Type, 0},
+		{"ByHandleFileInformation.CreationTime", Field, 0},
+		{"ByHandleFileInformation.FileAttributes", Field, 0},
+		{"ByHandleFileInformation.FileIndexHigh", Field, 0},
+		{"ByHandleFileInformation.FileIndexLow", Field, 0},
+		{"ByHandleFileInformation.FileSizeHigh", Field, 0},
+		{"ByHandleFileInformation.FileSizeLow", Field, 0},
+		{"ByHandleFileInformation.LastAccessTime", Field, 0},
+		{"ByHandleFileInformation.LastWriteTime", Field, 0},
+		{"ByHandleFileInformation.NumberOfLinks", Field, 0},
+		{"ByHandleFileInformation.VolumeSerialNumber", Field, 0},
+		{"BytePtrFromString", Func, 1},
+		{"ByteSliceFromString", Func, 1},
+		{"CCR0_FLUSH", Const, 1},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0},
+		{"CERT_CHAIN_POLICY_BASE", Const, 0},
+		{"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0},
+		{"CERT_CHAIN_POLICY_EV", Const, 0},
+		{"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0},
+		{"CERT_CHAIN_POLICY_NT_AUTH", Const, 0},
+		{"CERT_CHAIN_POLICY_SSL", Const, 0},
+		{"CERT_E_CN_NO_MATCH", Const, 0},
+		{"CERT_E_EXPIRED", Const, 0},
+		{"CERT_E_PURPOSE", Const, 0},
+		{"CERT_E_ROLE", Const, 0},
+		{"CERT_E_UNTRUSTEDROOT", Const, 0},
+		{"CERT_STORE_ADD_ALWAYS", Const, 0},
+		{"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0},
+		{"CERT_STORE_PROV_MEMORY", Const, 0},
+		{"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0},
+		{"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0},
+		{"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0},
+		{"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0},
+		{"CERT_TRUST_INVALID_EXTENSION", Const, 0},
+		{"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0},
+		{"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0},
+		{"CERT_TRUST_IS_CYCLIC", Const, 0},
+		{"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0},
+		{"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0},
+		{"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0},
+		{"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0},
+		{"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0},
+		{"CERT_TRUST_IS_REVOKED", Const, 0},
+		{"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0},
+		{"CERT_TRUST_NO_ERROR", Const, 0},
+		{"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0},
+		{"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0},
+		{"CFLUSH", Const, 1},
+		{"CLOCAL", Const, 0},
+		{"CLONE_CHILD_CLEARTID", Const, 2},
+		{"CLONE_CHILD_SETTID", Const, 2},
+		{"CLONE_CLEAR_SIGHAND", Const, 20},
+		{"CLONE_CSIGNAL", Const, 3},
+		{"CLONE_DETACHED", Const, 2},
+		{"CLONE_FILES", Const, 2},
+		{"CLONE_FS", Const, 2},
+		{"CLONE_INTO_CGROUP", Const, 20},
+		{"CLONE_IO", Const, 2},
+		{"CLONE_NEWCGROUP", Const, 20},
+		{"CLONE_NEWIPC", Const, 2},
+		{"CLONE_NEWNET", Const, 2},
+		{"CLONE_NEWNS", Const, 2},
+		{"CLONE_NEWPID", Const, 2},
+		{"CLONE_NEWTIME", Const, 20},
+		{"CLONE_NEWUSER", Const, 2},
+		{"CLONE_NEWUTS", Const, 2},
+		{"CLONE_PARENT", Const, 2},
+		{"CLONE_PARENT_SETTID", Const, 2},
+		{"CLONE_PID", Const, 3},
+		{"CLONE_PIDFD", Const, 20},
+		{"CLONE_PTRACE", Const, 2},
+		{"CLONE_SETTLS", Const, 2},
+		{"CLONE_SIGHAND", Const, 2},
+		{"CLONE_SYSVSEM", Const, 2},
+		{"CLONE_THREAD", Const, 2},
+		{"CLONE_UNTRACED", Const, 2},
+		{"CLONE_VFORK", Const, 2},
+		{"CLONE_VM", Const, 2},
+		{"CPUID_CFLUSH", Const, 1},
+		{"CREAD", Const, 0},
+		{"CREATE_ALWAYS", Const, 0},
+		{"CREATE_NEW", Const, 0},
+		{"CREATE_NEW_PROCESS_GROUP", Const, 1},
+		{"CREATE_UNICODE_ENVIRONMENT", Const, 0},
+		{"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0},
+		{"CRYPT_DELETEKEYSET", Const, 0},
+		{"CRYPT_MACHINE_KEYSET", Const, 0},
+		{"CRYPT_NEWKEYSET", Const, 0},
+		{"CRYPT_SILENT", Const, 0},
+		{"CRYPT_VERIFYCONTEXT", Const, 0},
+		{"CS5", Const, 0},
+		{"CS6", Const, 0},
+		{"CS7", Const, 0},
+		{"CS8", Const, 0},
+		{"CSIZE", Const, 0},
+		{"CSTART", Const, 1},
+		{"CSTATUS", Const, 1},
+		{"CSTOP", Const, 1},
+		{"CSTOPB", Const, 0},
+		{"CSUSP", Const, 1},
+		{"CTL_MAXNAME", Const, 0},
+		{"CTL_NET", Const, 0},
+		{"CTL_QUERY", Const, 1},
+		{"CTRL_BREAK_EVENT", Const, 1},
+		{"CTRL_CLOSE_EVENT", Const, 14},
+		{"CTRL_C_EVENT", Const, 1},
+		{"CTRL_LOGOFF_EVENT", Const, 14},
+		{"CTRL_SHUTDOWN_EVENT", Const, 14},
+		{"CancelIo", Func, 0},
+		{"CancelIoEx", Func, 1},
+		{"CertAddCertificateContextToStore", Func, 0},
+		{"CertChainContext", Type, 0},
+		{"CertChainContext.ChainCount", Field, 0},
+		{"CertChainContext.Chains", Field, 0},
+		{"CertChainContext.HasRevocationFreshnessTime", Field, 0},
+		{"CertChainContext.LowerQualityChainCount", Field, 0},
+		{"CertChainContext.LowerQualityChains", Field, 0},
+		{"CertChainContext.RevocationFreshnessTime", Field, 0},
+		{"CertChainContext.Size", Field, 0},
+		{"CertChainContext.TrustStatus", Field, 0},
+		{"CertChainElement", Type, 0},
+		{"CertChainElement.ApplicationUsage", Field, 0},
+		{"CertChainElement.CertContext", Field, 0},
+		{"CertChainElement.ExtendedErrorInfo", Field, 0},
+		{"CertChainElement.IssuanceUsage", Field, 0},
+		{"CertChainElement.RevocationInfo", Field, 0},
+		{"CertChainElement.Size", Field, 0},
+		{"CertChainElement.TrustStatus", Field, 0},
+		{"CertChainPara", Type, 0},
+		{"CertChainPara.CacheResync", Field, 0},
+		{"CertChainPara.CheckRevocationFreshnessTime", Field, 0},
+		{"CertChainPara.RequestedUsage", Field, 0},
+		{"CertChainPara.RequstedIssuancePolicy", Field, 0},
+		{"CertChainPara.RevocationFreshnessTime", Field, 0},
+		{"CertChainPara.Size", Field, 0},
+		{"CertChainPara.URLRetrievalTimeout", Field, 0},
+		{"CertChainPolicyPara", Type, 0},
+		{"CertChainPolicyPara.ExtraPolicyPara", Field, 0},
+		{"CertChainPolicyPara.Flags", Field, 0},
+		{"CertChainPolicyPara.Size", Field, 0},
+		{"CertChainPolicyStatus", Type, 0},
+		{"CertChainPolicyStatus.ChainIndex", Field, 0},
+		{"CertChainPolicyStatus.ElementIndex", Field, 0},
+		{"CertChainPolicyStatus.Error", Field, 0},
+		{"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0},
+		{"CertChainPolicyStatus.Size", Field, 0},
+		{"CertCloseStore", Func, 0},
+		{"CertContext", Type, 0},
+		{"CertContext.CertInfo", Field, 0},
+		{"CertContext.EncodedCert", Field, 0},
+		{"CertContext.EncodingType", Field, 0},
+		{"CertContext.Length", Field, 0},
+		{"CertContext.Store", Field, 0},
+		{"CertCreateCertificateContext", Func, 0},
+		{"CertEnhKeyUsage", Type, 0},
+		{"CertEnhKeyUsage.Length", Field, 0},
+		{"CertEnhKeyUsage.UsageIdentifiers", Field, 0},
+		{"CertEnumCertificatesInStore", Func, 0},
+		{"CertFreeCertificateChain", Func, 0},
+		{"CertFreeCertificateContext", Func, 0},
+		{"CertGetCertificateChain", Func, 0},
+		{"CertInfo", Type, 11},
+		{"CertOpenStore", Func, 0},
+		{"CertOpenSystemStore", Func, 0},
+		{"CertRevocationCrlInfo", Type, 11},
+		{"CertRevocationInfo", Type, 0},
+		{"CertRevocationInfo.CrlInfo", Field, 0},
+		{"CertRevocationInfo.FreshnessTime", Field, 0},
+		{"CertRevocationInfo.HasFreshnessTime", Field, 0},
+		{"CertRevocationInfo.OidSpecificInfo", Field, 0},
+		{"CertRevocationInfo.RevocationOid", Field, 0},
+		{"CertRevocationInfo.RevocationResult", Field, 0},
+		{"CertRevocationInfo.Size", Field, 0},
+		{"CertSimpleChain", Type, 0},
+		{"CertSimpleChain.Elements", Field, 0},
+		{"CertSimpleChain.HasRevocationFreshnessTime", Field, 0},
+		{"CertSimpleChain.NumElements", Field, 0},
+		{"CertSimpleChain.RevocationFreshnessTime", Field, 0},
+		{"CertSimpleChain.Size", Field, 0},
+		{"CertSimpleChain.TrustListInfo", Field, 0},
+		{"CertSimpleChain.TrustStatus", Field, 0},
+		{"CertTrustListInfo", Type, 11},
+		{"CertTrustStatus", Type, 0},
+		{"CertTrustStatus.ErrorStatus", Field, 0},
+		{"CertTrustStatus.InfoStatus", Field, 0},
+		{"CertUsageMatch", Type, 0},
+		{"CertUsageMatch.Type", Field, 0},
+		{"CertUsageMatch.Usage", Field, 0},
+		{"CertVerifyCertificateChainPolicy", Func, 0},
+		{"Chdir", Func, 0},
+		{"CheckBpfVersion", Func, 0},
+		{"Chflags", Func, 0},
+		{"Chmod", Func, 0},
+		{"Chown", Func, 0},
+		{"Chroot", Func, 0},
+		{"Clearenv", Func, 0},
+		{"Close", Func, 0},
+		{"CloseHandle", Func, 0},
+		{"CloseOnExec", Func, 0},
+		{"Closesocket", Func, 0},
+		{"CmsgLen", Func, 0},
+		{"CmsgSpace", Func, 0},
+		{"Cmsghdr", Type, 0},
+		{"Cmsghdr.Len", Field, 0},
+		{"Cmsghdr.Level", Field, 0},
+		{"Cmsghdr.Type", Field, 0},
+		{"Cmsghdr.X__cmsg_data", Field, 0},
+		{"CommandLineToArgv", Func, 0},
+		{"ComputerName", Func, 0},
+		{"Conn", Type, 9},
+		{"Connect", Func, 0},
+		{"ConnectEx", Func, 1},
+		{"ConvertSidToStringSid", Func, 0},
+		{"ConvertStringSidToSid", Func, 0},
+		{"CopySid", Func, 0},
+		{"Creat", Func, 0},
+		{"CreateDirectory", Func, 0},
+		{"CreateFile", Func, 0},
+		{"CreateFileMapping", Func, 0},
+		{"CreateHardLink", Func, 4},
+		{"CreateIoCompletionPort", Func, 0},
+		{"CreatePipe", Func, 0},
+		{"CreateProcess", Func, 0},
+		{"CreateProcessAsUser", Func, 10},
+		{"CreateSymbolicLink", Func, 4},
+		{"CreateToolhelp32Snapshot", Func, 4},
+		{"Credential", Type, 0},
+		{"Credential.Gid", Field, 0},
+		{"Credential.Groups", Field, 0},
+		{"Credential.NoSetGroups", Field, 9},
+		{"Credential.Uid", Field, 0},
+		{"CryptAcquireContext", Func, 0},
+		{"CryptGenRandom", Func, 0},
+		{"CryptReleaseContext", Func, 0},
+		{"DIOCBSFLUSH", Const, 1},
+		{"DIOCOSFPFLUSH", Const, 1},
+		{"DLL", Type, 0},
+		{"DLL.Handle", Field, 0},
+		{"DLL.Name", Field, 0},
+		{"DLLError", Type, 0},
+		{"DLLError.Err", Field, 0},
+		{"DLLError.Msg", Field, 0},
+		{"DLLError.ObjName", Field, 0},
+		{"DLT_A429", Const, 0},
+		{"DLT_A653_ICM", Const, 0},
+		{"DLT_AIRONET_HEADER", Const, 0},
+		{"DLT_AOS", Const, 1},
+		{"DLT_APPLE_IP_OVER_IEEE1394", Const, 0},
+		{"DLT_ARCNET", Const, 0},
+		{"DLT_ARCNET_LINUX", Const, 0},
+		{"DLT_ATM_CLIP", Const, 0},
+		{"DLT_ATM_RFC1483", Const, 0},
+		{"DLT_AURORA", Const, 0},
+		{"DLT_AX25", Const, 0},
+		{"DLT_AX25_KISS", Const, 0},
+		{"DLT_BACNET_MS_TP", Const, 0},
+		{"DLT_BLUETOOTH_HCI_H4", Const, 0},
+		{"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0},
+		{"DLT_CAN20B", Const, 0},
+		{"DLT_CAN_SOCKETCAN", Const, 1},
+		{"DLT_CHAOS", Const, 0},
+		{"DLT_CHDLC", Const, 0},
+		{"DLT_CISCO_IOS", Const, 0},
+		{"DLT_C_HDLC", Const, 0},
+		{"DLT_C_HDLC_WITH_DIR", Const, 0},
+		{"DLT_DBUS", Const, 1},
+		{"DLT_DECT", Const, 1},
+		{"DLT_DOCSIS", Const, 0},
+		{"DLT_DVB_CI", Const, 1},
+		{"DLT_ECONET", Const, 0},
+		{"DLT_EN10MB", Const, 0},
+		{"DLT_EN3MB", Const, 0},
+		{"DLT_ENC", Const, 0},
+		{"DLT_ERF", Const, 0},
+		{"DLT_ERF_ETH", Const, 0},
+		{"DLT_ERF_POS", Const, 0},
+		{"DLT_FC_2", Const, 1},
+		{"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1},
+		{"DLT_FDDI", Const, 0},
+		{"DLT_FLEXRAY", Const, 0},
+		{"DLT_FRELAY", Const, 0},
+		{"DLT_FRELAY_WITH_DIR", Const, 0},
+		{"DLT_GCOM_SERIAL", Const, 0},
+		{"DLT_GCOM_T1E1", Const, 0},
+		{"DLT_GPF_F", Const, 0},
+		{"DLT_GPF_T", Const, 0},
+		{"DLT_GPRS_LLC", Const, 0},
+		{"DLT_GSMTAP_ABIS", Const, 1},
+		{"DLT_GSMTAP_UM", Const, 1},
+		{"DLT_HDLC", Const, 1},
+		{"DLT_HHDLC", Const, 0},
+		{"DLT_HIPPI", Const, 1},
+		{"DLT_IBM_SN", Const, 0},
+		{"DLT_IBM_SP", Const, 0},
+		{"DLT_IEEE802", Const, 0},
+		{"DLT_IEEE802_11", Const, 0},
+		{"DLT_IEEE802_11_RADIO", Const, 0},
+		{"DLT_IEEE802_11_RADIO_AVS", Const, 0},
+		{"DLT_IEEE802_15_4", Const, 0},
+		{"DLT_IEEE802_15_4_LINUX", Const, 0},
+		{"DLT_IEEE802_15_4_NOFCS", Const, 1},
+		{"DLT_IEEE802_15_4_NONASK_PHY", Const, 0},
+		{"DLT_IEEE802_16_MAC_CPS", Const, 0},
+		{"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0},
+		{"DLT_IPFILTER", Const, 0},
+		{"DLT_IPMB", Const, 0},
+		{"DLT_IPMB_LINUX", Const, 0},
+		{"DLT_IPNET", Const, 1},
+		{"DLT_IPOIB", Const, 1},
+		{"DLT_IPV4", Const, 1},
+		{"DLT_IPV6", Const, 1},
+		{"DLT_IP_OVER_FC", Const, 0},
+		{"DLT_JUNIPER_ATM1", Const, 0},
+		{"DLT_JUNIPER_ATM2", Const, 0},
+		{"DLT_JUNIPER_ATM_CEMIC", Const, 1},
+		{"DLT_JUNIPER_CHDLC", Const, 0},
+		{"DLT_JUNIPER_ES", Const, 0},
+		{"DLT_JUNIPER_ETHER", Const, 0},
+		{"DLT_JUNIPER_FIBRECHANNEL", Const, 1},
+		{"DLT_JUNIPER_FRELAY", Const, 0},
+		{"DLT_JUNIPER_GGSN", Const, 0},
+		{"DLT_JUNIPER_ISM", Const, 0},
+		{"DLT_JUNIPER_MFR", Const, 0},
+		{"DLT_JUNIPER_MLFR", Const, 0},
+		{"DLT_JUNIPER_MLPPP", Const, 0},
+		{"DLT_JUNIPER_MONITOR", Const, 0},
+		{"DLT_JUNIPER_PIC_PEER", Const, 0},
+		{"DLT_JUNIPER_PPP", Const, 0},
+		{"DLT_JUNIPER_PPPOE", Const, 0},
+		{"DLT_JUNIPER_PPPOE_ATM", Const, 0},
+		{"DLT_JUNIPER_SERVICES", Const, 0},
+		{"DLT_JUNIPER_SRX_E2E", Const, 1},
+		{"DLT_JUNIPER_ST", Const, 0},
+		{"DLT_JUNIPER_VP", Const, 0},
+		{"DLT_JUNIPER_VS", Const, 1},
+		{"DLT_LAPB_WITH_DIR", Const, 0},
+		{"DLT_LAPD", Const, 0},
+		{"DLT_LIN", Const, 0},
+		{"DLT_LINUX_EVDEV", Const, 1},
+		{"DLT_LINUX_IRDA", Const, 0},
+		{"DLT_LINUX_LAPD", Const, 0},
+		{"DLT_LINUX_PPP_WITHDIRECTION", Const, 0},
+		{"DLT_LINUX_SLL", Const, 0},
+		{"DLT_LOOP", Const, 0},
+		{"DLT_LTALK", Const, 0},
+		{"DLT_MATCHING_MAX", Const, 1},
+		{"DLT_MATCHING_MIN", Const, 1},
+		{"DLT_MFR", Const, 0},
+		{"DLT_MOST", Const, 0},
+		{"DLT_MPEG_2_TS", Const, 1},
+		{"DLT_MPLS", Const, 1},
+		{"DLT_MTP2", Const, 0},
+		{"DLT_MTP2_WITH_PHDR", Const, 0},
+		{"DLT_MTP3", Const, 0},
+		{"DLT_MUX27010", Const, 1},
+		{"DLT_NETANALYZER", Const, 1},
+		{"DLT_NETANALYZER_TRANSPARENT", Const, 1},
+		{"DLT_NFC_LLCP", Const, 1},
+		{"DLT_NFLOG", Const, 1},
+		{"DLT_NG40", Const, 1},
+		{"DLT_NULL", Const, 0},
+		{"DLT_PCI_EXP", Const, 0},
+		{"DLT_PFLOG", Const, 0},
+		{"DLT_PFSYNC", Const, 0},
+		{"DLT_PPI", Const, 0},
+		{"DLT_PPP", Const, 0},
+		{"DLT_PPP_BSDOS", Const, 0},
+		{"DLT_PPP_ETHER", Const, 0},
+		{"DLT_PPP_PPPD", Const, 0},
+		{"DLT_PPP_SERIAL", Const, 0},
+		{"DLT_PPP_WITH_DIR", Const, 0},
+		{"DLT_PPP_WITH_DIRECTION", Const, 0},
+		{"DLT_PRISM_HEADER", Const, 0},
+		{"DLT_PRONET", Const, 0},
+		{"DLT_RAIF1", Const, 0},
+		{"DLT_RAW", Const, 0},
+		{"DLT_RAWAF_MASK", Const, 1},
+		{"DLT_RIO", Const, 0},
+		{"DLT_SCCP", Const, 0},
+		{"DLT_SITA", Const, 0},
+		{"DLT_SLIP", Const, 0},
+		{"DLT_SLIP_BSDOS", Const, 0},
+		{"DLT_STANAG_5066_D_PDU", Const, 1},
+		{"DLT_SUNATM", Const, 0},
+		{"DLT_SYMANTEC_FIREWALL", Const, 0},
+		{"DLT_TZSP", Const, 0},
+		{"DLT_USB", Const, 0},
+		{"DLT_USB_LINUX", Const, 0},
+		{"DLT_USB_LINUX_MMAPPED", Const, 1},
+		{"DLT_USER0", Const, 0},
+		{"DLT_USER1", Const, 0},
+		{"DLT_USER10", Const, 0},
+		{"DLT_USER11", Const, 0},
+		{"DLT_USER12", Const, 0},
+		{"DLT_USER13", Const, 0},
+		{"DLT_USER14", Const, 0},
+		{"DLT_USER15", Const, 0},
+		{"DLT_USER2", Const, 0},
+		{"DLT_USER3", Const, 0},
+		{"DLT_USER4", Const, 0},
+		{"DLT_USER5", Const, 0},
+		{"DLT_USER6", Const, 0},
+		{"DLT_USER7", Const, 0},
+		{"DLT_USER8", Const, 0},
+		{"DLT_USER9", Const, 0},
+		{"DLT_WIHART", Const, 1},
+		{"DLT_X2E_SERIAL", Const, 0},
+		{"DLT_X2E_XORAYA", Const, 0},
+		{"DNSMXData", Type, 0},
+		{"DNSMXData.NameExchange", Field, 0},
+		{"DNSMXData.Pad", Field, 0},
+		{"DNSMXData.Preference", Field, 0},
+		{"DNSPTRData", Type, 0},
+		{"DNSPTRData.Host", Field, 0},
+		{"DNSRecord", Type, 0},
+		{"DNSRecord.Data", Field, 0},
+		{"DNSRecord.Dw", Field, 0},
+		{"DNSRecord.Length", Field, 0},
+		{"DNSRecord.Name", Field, 0},
+		{"DNSRecord.Next", Field, 0},
+		{"DNSRecord.Reserved", Field, 0},
+		{"DNSRecord.Ttl", Field, 0},
+		{"DNSRecord.Type", Field, 0},
+		{"DNSSRVData", Type, 0},
+		{"DNSSRVData.Pad", Field, 0},
+		{"DNSSRVData.Port", Field, 0},
+		{"DNSSRVData.Priority", Field, 0},
+		{"DNSSRVData.Target", Field, 0},
+		{"DNSSRVData.Weight", Field, 0},
+		{"DNSTXTData", Type, 0},
+		{"DNSTXTData.StringArray", Field, 0},
+		{"DNSTXTData.StringCount", Field, 0},
+		{"DNS_INFO_NO_RECORDS", Const, 4},
+		{"DNS_TYPE_A", Const, 0},
+		{"DNS_TYPE_A6", Const, 0},
+		{"DNS_TYPE_AAAA", Const, 0},
+		{"DNS_TYPE_ADDRS", Const, 0},
+		{"DNS_TYPE_AFSDB", Const, 0},
+		{"DNS_TYPE_ALL", Const, 0},
+		{"DNS_TYPE_ANY", Const, 0},
+		{"DNS_TYPE_ATMA", Const, 0},
+		{"DNS_TYPE_AXFR", Const, 0},
+		{"DNS_TYPE_CERT", Const, 0},
+		{"DNS_TYPE_CNAME", Const, 0},
+		{"DNS_TYPE_DHCID", Const, 0},
+		{"DNS_TYPE_DNAME", Const, 0},
+		{"DNS_TYPE_DNSKEY", Const, 0},
+		{"DNS_TYPE_DS", Const, 0},
+		{"DNS_TYPE_EID", Const, 0},
+		{"DNS_TYPE_GID", Const, 0},
+		{"DNS_TYPE_GPOS", Const, 0},
+		{"DNS_TYPE_HINFO", Const, 0},
+		{"DNS_TYPE_ISDN", Const, 0},
+		{"DNS_TYPE_IXFR", Const, 0},
+		{"DNS_TYPE_KEY", Const, 0},
+		{"DNS_TYPE_KX", Const, 0},
+		{"DNS_TYPE_LOC", Const, 0},
+		{"DNS_TYPE_MAILA", Const, 0},
+		{"DNS_TYPE_MAILB", Const, 0},
+		{"DNS_TYPE_MB", Const, 0},
+		{"DNS_TYPE_MD", Const, 0},
+		{"DNS_TYPE_MF", Const, 0},
+		{"DNS_TYPE_MG", Const, 0},
+		{"DNS_TYPE_MINFO", Const, 0},
+		{"DNS_TYPE_MR", Const, 0},
+		{"DNS_TYPE_MX", Const, 0},
+		{"DNS_TYPE_NAPTR", Const, 0},
+		{"DNS_TYPE_NBSTAT", Const, 0},
+		{"DNS_TYPE_NIMLOC", Const, 0},
+		{"DNS_TYPE_NS", Const, 0},
+		{"DNS_TYPE_NSAP", Const, 0},
+		{"DNS_TYPE_NSAPPTR", Const, 0},
+		{"DNS_TYPE_NSEC", Const, 0},
+		{"DNS_TYPE_NULL", Const, 0},
+		{"DNS_TYPE_NXT", Const, 0},
+		{"DNS_TYPE_OPT", Const, 0},
+		{"DNS_TYPE_PTR", Const, 0},
+		{"DNS_TYPE_PX", Const, 0},
+		{"DNS_TYPE_RP", Const, 0},
+		{"DNS_TYPE_RRSIG", Const, 0},
+		{"DNS_TYPE_RT", Const, 0},
+		{"DNS_TYPE_SIG", Const, 0},
+		{"DNS_TYPE_SINK", Const, 0},
+		{"DNS_TYPE_SOA", Const, 0},
+		{"DNS_TYPE_SRV", Const, 0},
+		{"DNS_TYPE_TEXT", Const, 0},
+		{"DNS_TYPE_TKEY", Const, 0},
+		{"DNS_TYPE_TSIG", Const, 0},
+		{"DNS_TYPE_UID", Const, 0},
+		{"DNS_TYPE_UINFO", Const, 0},
+		{"DNS_TYPE_UNSPEC", Const, 0},
+		{"DNS_TYPE_WINS", Const, 0},
+		{"DNS_TYPE_WINSR", Const, 0},
+		{"DNS_TYPE_WKS", Const, 0},
+		{"DNS_TYPE_X25", Const, 0},
+		{"DT_BLK", Const, 0},
+		{"DT_CHR", Const, 0},
+		{"DT_DIR", Const, 0},
+		{"DT_FIFO", Const, 0},
+		{"DT_LNK", Const, 0},
+		{"DT_REG", Const, 0},
+		{"DT_SOCK", Const, 0},
+		{"DT_UNKNOWN", Const, 0},
+		{"DT_WHT", Const, 0},
+		{"DUPLICATE_CLOSE_SOURCE", Const, 0},
+		{"DUPLICATE_SAME_ACCESS", Const, 0},
+		{"DeleteFile", Func, 0},
+		{"DetachLsf", Func, 0},
+		{"DeviceIoControl", Func, 4},
+		{"Dirent", Type, 0},
+		{"Dirent.Fileno", Field, 0},
+		{"Dirent.Ino", Field, 0},
+		{"Dirent.Name", Field, 0},
+		{"Dirent.Namlen", Field, 0},
+		{"Dirent.Off", Field, 0},
+		{"Dirent.Pad0", Field, 12},
+		{"Dirent.Pad1", Field, 12},
+		{"Dirent.Pad_cgo_0", Field, 0},
+		{"Dirent.Reclen", Field, 0},
+		{"Dirent.Seekoff", Field, 0},
+		{"Dirent.Type", Field, 0},
+		{"Dirent.X__d_padding", Field, 3},
+		{"DnsNameCompare", Func, 4},
+		{"DnsQuery", Func, 0},
+		{"DnsRecordListFree", Func, 0},
+		{"DnsSectionAdditional", Const, 4},
+		{"DnsSectionAnswer", Const, 4},
+		{"DnsSectionAuthority", Const, 4},
+		{"DnsSectionQuestion", Const, 4},
+		{"Dup", Func, 0},
+		{"Dup2", Func, 0},
+		{"Dup3", Func, 2},
+		{"DuplicateHandle", Func, 0},
+		{"E2BIG", Const, 0},
+		{"EACCES", Const, 0},
+		{"EADDRINUSE", Const, 0},
+		{"EADDRNOTAVAIL", Const, 0},
+		{"EADV", Const, 0},
+		{"EAFNOSUPPORT", Const, 0},
+		{"EAGAIN", Const, 0},
+		{"EALREADY", Const, 0},
+		{"EAUTH", Const, 0},
+		{"EBADARCH", Const, 0},
+		{"EBADE", Const, 0},
+		{"EBADEXEC", Const, 0},
+		{"EBADF", Const, 0},
+		{"EBADFD", Const, 0},
+		{"EBADMACHO", Const, 0},
+		{"EBADMSG", Const, 0},
+		{"EBADR", Const, 0},
+		{"EBADRPC", Const, 0},
+		{"EBADRQC", Const, 0},
+		{"EBADSLT", Const, 0},
+		{"EBFONT", Const, 0},
+		{"EBUSY", Const, 0},
+		{"ECANCELED", Const, 0},
+		{"ECAPMODE", Const, 1},
+		{"ECHILD", Const, 0},
+		{"ECHO", Const, 0},
+		{"ECHOCTL", Const, 0},
+		{"ECHOE", Const, 0},
+		{"ECHOK", Const, 0},
+		{"ECHOKE", Const, 0},
+		{"ECHONL", Const, 0},
+		{"ECHOPRT", Const, 0},
+		{"ECHRNG", Const, 0},
+		{"ECOMM", Const, 0},
+		{"ECONNABORTED", Const, 0},
+		{"ECONNREFUSED", Const, 0},
+		{"ECONNRESET", Const, 0},
+		{"EDEADLK", Const, 0},
+		{"EDEADLOCK", Const, 0},
+		{"EDESTADDRREQ", Const, 0},
+		{"EDEVERR", Const, 0},
+		{"EDOM", Const, 0},
+		{"EDOOFUS", Const, 0},
+		{"EDOTDOT", Const, 0},
+		{"EDQUOT", Const, 0},
+		{"EEXIST", Const, 0},
+		{"EFAULT", Const, 0},
+		{"EFBIG", Const, 0},
+		{"EFER_LMA", Const, 1},
+		{"EFER_LME", Const, 1},
+		{"EFER_NXE", Const, 1},
+		{"EFER_SCE", Const, 1},
+		{"EFTYPE", Const, 0},
+		{"EHOSTDOWN", Const, 0},
+		{"EHOSTUNREACH", Const, 0},
+		{"EHWPOISON", Const, 0},
+		{"EIDRM", Const, 0},
+		{"EILSEQ", Const, 0},
+		{"EINPROGRESS", Const, 0},
+		{"EINTR", Const, 0},
+		{"EINVAL", Const, 0},
+		{"EIO", Const, 0},
+		{"EIPSEC", Const, 1},
+		{"EISCONN", Const, 0},
+		{"EISDIR", Const, 0},
+		{"EISNAM", Const, 0},
+		{"EKEYEXPIRED", Const, 0},
+		{"EKEYREJECTED", Const, 0},
+		{"EKEYREVOKED", Const, 0},
+		{"EL2HLT", Const, 0},
+		{"EL2NSYNC", Const, 0},
+		{"EL3HLT", Const, 0},
+		{"EL3RST", Const, 0},
+		{"ELAST", Const, 0},
+		{"ELF_NGREG", Const, 0},
+		{"ELF_PRARGSZ", Const, 0},
+		{"ELIBACC", Const, 0},
+		{"ELIBBAD", Const, 0},
+		{"ELIBEXEC", Const, 0},
+		{"ELIBMAX", Const, 0},
+		{"ELIBSCN", Const, 0},
+		{"ELNRNG", Const, 0},
+		{"ELOOP", Const, 0},
+		{"EMEDIUMTYPE", Const, 0},
+		{"EMFILE", Const, 0},
+		{"EMLINK", Const, 0},
+		{"EMSGSIZE", Const, 0},
+		{"EMT_TAGOVF", Const, 1},
+		{"EMULTIHOP", Const, 0},
+		{"EMUL_ENABLED", Const, 1},
+		{"EMUL_LINUX", Const, 1},
+		{"EMUL_LINUX32", Const, 1},
+		{"EMUL_MAXID", Const, 1},
+		{"EMUL_NATIVE", Const, 1},
+		{"ENAMETOOLONG", Const, 0},
+		{"ENAVAIL", Const, 0},
+		{"ENDRUNDISC", Const, 1},
+		{"ENEEDAUTH", Const, 0},
+		{"ENETDOWN", Const, 0},
+		{"ENETRESET", Const, 0},
+		{"ENETUNREACH", Const, 0},
+		{"ENFILE", Const, 0},
+		{"ENOANO", Const, 0},
+		{"ENOATTR", Const, 0},
+		{"ENOBUFS", Const, 0},
+		{"ENOCSI", Const, 0},
+		{"ENODATA", Const, 0},
+		{"ENODEV", Const, 0},
+		{"ENOENT", Const, 0},
+		{"ENOEXEC", Const, 0},
+		{"ENOKEY", Const, 0},
+		{"ENOLCK", Const, 0},
+		{"ENOLINK", Const, 0},
+		{"ENOMEDIUM", Const, 0},
+		{"ENOMEM", Const, 0},
+		{"ENOMSG", Const, 0},
+		{"ENONET", Const, 0},
+		{"ENOPKG", Const, 0},
+		{"ENOPOLICY", Const, 0},
+		{"ENOPROTOOPT", Const, 0},
+		{"ENOSPC", Const, 0},
+		{"ENOSR", Const, 0},
+		{"ENOSTR", Const, 0},
+		{"ENOSYS", Const, 0},
+		{"ENOTBLK", Const, 0},
+		{"ENOTCAPABLE", Const, 0},
+		{"ENOTCONN", Const, 0},
+		{"ENOTDIR", Const, 0},
+		{"ENOTEMPTY", Const, 0},
+		{"ENOTNAM", Const, 0},
+		{"ENOTRECOVERABLE", Const, 0},
+		{"ENOTSOCK", Const, 0},
+		{"ENOTSUP", Const, 0},
+		{"ENOTTY", Const, 0},
+		{"ENOTUNIQ", Const, 0},
+		{"ENXIO", Const, 0},
+		{"EN_SW_CTL_INF", Const, 1},
+		{"EN_SW_CTL_PREC", Const, 1},
+		{"EN_SW_CTL_ROUND", Const, 1},
+		{"EN_SW_DATACHAIN", Const, 1},
+		{"EN_SW_DENORM", Const, 1},
+		{"EN_SW_INVOP", Const, 1},
+		{"EN_SW_OVERFLOW", Const, 1},
+		{"EN_SW_PRECLOSS", Const, 1},
+		{"EN_SW_UNDERFLOW", Const, 1},
+		{"EN_SW_ZERODIV", Const, 1},
+		{"EOPNOTSUPP", Const, 0},
+		{"EOVERFLOW", Const, 0},
+		{"EOWNERDEAD", Const, 0},
+		{"EPERM", Const, 0},
+		{"EPFNOSUPPORT", Const, 0},
+		{"EPIPE", Const, 0},
+		{"EPOLLERR", Const, 0},
+		{"EPOLLET", Const, 0},
+		{"EPOLLHUP", Const, 0},
+		{"EPOLLIN", Const, 0},
+		{"EPOLLMSG", Const, 0},
+		{"EPOLLONESHOT", Const, 0},
+		{"EPOLLOUT", Const, 0},
+		{"EPOLLPRI", Const, 0},
+		{"EPOLLRDBAND", Const, 0},
+		{"EPOLLRDHUP", Const, 0},
+		{"EPOLLRDNORM", Const, 0},
+		{"EPOLLWRBAND", Const, 0},
+		{"EPOLLWRNORM", Const, 0},
+		{"EPOLL_CLOEXEC", Const, 0},
+		{"EPOLL_CTL_ADD", Const, 0},
+		{"EPOLL_CTL_DEL", Const, 0},
+		{"EPOLL_CTL_MOD", Const, 0},
+		{"EPOLL_NONBLOCK", Const, 0},
+		{"EPROCLIM", Const, 0},
+		{"EPROCUNAVAIL", Const, 0},
+		{"EPROGMISMATCH", Const, 0},
+		{"EPROGUNAVAIL", Const, 0},
+		{"EPROTO", Const, 0},
+		{"EPROTONOSUPPORT", Const, 0},
+		{"EPROTOTYPE", Const, 0},
+		{"EPWROFF", Const, 0},
+		{"EQFULL", Const, 16},
+		{"ERANGE", Const, 0},
+		{"EREMCHG", Const, 0},
+		{"EREMOTE", Const, 0},
+		{"EREMOTEIO", Const, 0},
+		{"ERESTART", Const, 0},
+		{"ERFKILL", Const, 0},
+		{"EROFS", Const, 0},
+		{"ERPCMISMATCH", Const, 0},
+		{"ERROR_ACCESS_DENIED", Const, 0},
+		{"ERROR_ALREADY_EXISTS", Const, 0},
+		{"ERROR_BROKEN_PIPE", Const, 0},
+		{"ERROR_BUFFER_OVERFLOW", Const, 0},
+		{"ERROR_DIR_NOT_EMPTY", Const, 8},
+		{"ERROR_ENVVAR_NOT_FOUND", Const, 0},
+		{"ERROR_FILE_EXISTS", Const, 0},
+		{"ERROR_FILE_NOT_FOUND", Const, 0},
+		{"ERROR_HANDLE_EOF", Const, 2},
+		{"ERROR_INSUFFICIENT_BUFFER", Const, 0},
+		{"ERROR_IO_PENDING", Const, 0},
+		{"ERROR_MOD_NOT_FOUND", Const, 0},
+		{"ERROR_MORE_DATA", Const, 3},
+		{"ERROR_NETNAME_DELETED", Const, 3},
+		{"ERROR_NOT_FOUND", Const, 1},
+		{"ERROR_NO_MORE_FILES", Const, 0},
+		{"ERROR_OPERATION_ABORTED", Const, 0},
+		{"ERROR_PATH_NOT_FOUND", Const, 0},
+		{"ERROR_PRIVILEGE_NOT_HELD", Const, 4},
+		{"ERROR_PROC_NOT_FOUND", Const, 0},
+		{"ESHLIBVERS", Const, 0},
+		{"ESHUTDOWN", Const, 0},
+		{"ESOCKTNOSUPPORT", Const, 0},
+		{"ESPIPE", Const, 0},
+		{"ESRCH", Const, 0},
+		{"ESRMNT", Const, 0},
+		{"ESTALE", Const, 0},
+		{"ESTRPIPE", Const, 0},
+		{"ETHERCAP_JUMBO_MTU", Const, 1},
+		{"ETHERCAP_VLAN_HWTAGGING", Const, 1},
+		{"ETHERCAP_VLAN_MTU", Const, 1},
+		{"ETHERMIN", Const, 1},
+		{"ETHERMTU", Const, 1},
+		{"ETHERMTU_JUMBO", Const, 1},
+		{"ETHERTYPE_8023", Const, 1},
+		{"ETHERTYPE_AARP", Const, 1},
+		{"ETHERTYPE_ACCTON", Const, 1},
+		{"ETHERTYPE_AEONIC", Const, 1},
+		{"ETHERTYPE_ALPHA", Const, 1},
+		{"ETHERTYPE_AMBER", Const, 1},
+		{"ETHERTYPE_AMOEBA", Const, 1},
+		{"ETHERTYPE_AOE", Const, 1},
+		{"ETHERTYPE_APOLLO", Const, 1},
+		{"ETHERTYPE_APOLLODOMAIN", Const, 1},
+		{"ETHERTYPE_APPLETALK", Const, 1},
+		{"ETHERTYPE_APPLITEK", Const, 1},
+		{"ETHERTYPE_ARGONAUT", Const, 1},
+		{"ETHERTYPE_ARP", Const, 1},
+		{"ETHERTYPE_AT", Const, 1},
+		{"ETHERTYPE_ATALK", Const, 1},
+		{"ETHERTYPE_ATOMIC", Const, 1},
+		{"ETHERTYPE_ATT", Const, 1},
+		{"ETHERTYPE_ATTSTANFORD", Const, 1},
+		{"ETHERTYPE_AUTOPHON", Const, 1},
+		{"ETHERTYPE_AXIS", Const, 1},
+		{"ETHERTYPE_BCLOOP", Const, 1},
+		{"ETHERTYPE_BOFL", Const, 1},
+		{"ETHERTYPE_CABLETRON", Const, 1},
+		{"ETHERTYPE_CHAOS", Const, 1},
+		{"ETHERTYPE_COMDESIGN", Const, 1},
+		{"ETHERTYPE_COMPUGRAPHIC", Const, 1},
+		{"ETHERTYPE_COUNTERPOINT", Const, 1},
+		{"ETHERTYPE_CRONUS", Const, 1},
+		{"ETHERTYPE_CRONUSVLN", Const, 1},
+		{"ETHERTYPE_DCA", Const, 1},
+		{"ETHERTYPE_DDE", Const, 1},
+		{"ETHERTYPE_DEBNI", Const, 1},
+		{"ETHERTYPE_DECAM", Const, 1},
+		{"ETHERTYPE_DECCUST", Const, 1},
+		{"ETHERTYPE_DECDIAG", Const, 1},
+		{"ETHERTYPE_DECDNS", Const, 1},
+		{"ETHERTYPE_DECDTS", Const, 1},
+		{"ETHERTYPE_DECEXPER", Const, 1},
+		{"ETHERTYPE_DECLAST", Const, 1},
+		{"ETHERTYPE_DECLTM", Const, 1},
+		{"ETHERTYPE_DECMUMPS", Const, 1},
+		{"ETHERTYPE_DECNETBIOS", Const, 1},
+		{"ETHERTYPE_DELTACON", Const, 1},
+		{"ETHERTYPE_DIDDLE", Const, 1},
+		{"ETHERTYPE_DLOG1", Const, 1},
+		{"ETHERTYPE_DLOG2", Const, 1},
+		{"ETHERTYPE_DN", Const, 1},
+		{"ETHERTYPE_DOGFIGHT", Const, 1},
+		{"ETHERTYPE_DSMD", Const, 1},
+		{"ETHERTYPE_ECMA", Const, 1},
+		{"ETHERTYPE_ENCRYPT", Const, 1},
+		{"ETHERTYPE_ES", Const, 1},
+		{"ETHERTYPE_EXCELAN", Const, 1},
+		{"ETHERTYPE_EXPERDATA", Const, 1},
+		{"ETHERTYPE_FLIP", Const, 1},
+		{"ETHERTYPE_FLOWCONTROL", Const, 1},
+		{"ETHERTYPE_FRARP", Const, 1},
+		{"ETHERTYPE_GENDYN", Const, 1},
+		{"ETHERTYPE_HAYES", Const, 1},
+		{"ETHERTYPE_HIPPI_FP", Const, 1},
+		{"ETHERTYPE_HITACHI", Const, 1},
+		{"ETHERTYPE_HP", Const, 1},
+		{"ETHERTYPE_IEEEPUP", Const, 1},
+		{"ETHERTYPE_IEEEPUPAT", Const, 1},
+		{"ETHERTYPE_IMLBL", Const, 1},
+		{"ETHERTYPE_IMLBLDIAG", Const, 1},
+		{"ETHERTYPE_IP", Const, 1},
+		{"ETHERTYPE_IPAS", Const, 1},
+		{"ETHERTYPE_IPV6", Const, 1},
+		{"ETHERTYPE_IPX", Const, 1},
+		{"ETHERTYPE_IPXNEW", Const, 1},
+		{"ETHERTYPE_KALPANA", Const, 1},
+		{"ETHERTYPE_LANBRIDGE", Const, 1},
+		{"ETHERTYPE_LANPROBE", Const, 1},
+		{"ETHERTYPE_LAT", Const, 1},
+		{"ETHERTYPE_LBACK", Const, 1},
+		{"ETHERTYPE_LITTLE", Const, 1},
+		{"ETHERTYPE_LLDP", Const, 1},
+		{"ETHERTYPE_LOGICRAFT", Const, 1},
+		{"ETHERTYPE_LOOPBACK", Const, 1},
+		{"ETHERTYPE_MATRA", Const, 1},
+		{"ETHERTYPE_MAX", Const, 1},
+		{"ETHERTYPE_MERIT", Const, 1},
+		{"ETHERTYPE_MICP", Const, 1},
+		{"ETHERTYPE_MOPDL", Const, 1},
+		{"ETHERTYPE_MOPRC", Const, 1},
+		{"ETHERTYPE_MOTOROLA", Const, 1},
+		{"ETHERTYPE_MPLS", Const, 1},
+		{"ETHERTYPE_MPLS_MCAST", Const, 1},
+		{"ETHERTYPE_MUMPS", Const, 1},
+		{"ETHERTYPE_NBPCC", Const, 1},
+		{"ETHERTYPE_NBPCLAIM", Const, 1},
+		{"ETHERTYPE_NBPCLREQ", Const, 1},
+		{"ETHERTYPE_NBPCLRSP", Const, 1},
+		{"ETHERTYPE_NBPCREQ", Const, 1},
+		{"ETHERTYPE_NBPCRSP", Const, 1},
+		{"ETHERTYPE_NBPDG", Const, 1},
+		{"ETHERTYPE_NBPDGB", Const, 1},
+		{"ETHERTYPE_NBPDLTE", Const, 1},
+		{"ETHERTYPE_NBPRAR", Const, 1},
+		{"ETHERTYPE_NBPRAS", Const, 1},
+		{"ETHERTYPE_NBPRST", Const, 1},
+		{"ETHERTYPE_NBPSCD", Const, 1},
+		{"ETHERTYPE_NBPVCD", Const, 1},
+		{"ETHERTYPE_NBS", Const, 1},
+		{"ETHERTYPE_NCD", Const, 1},
+		{"ETHERTYPE_NESTAR", Const, 1},
+		{"ETHERTYPE_NETBEUI", Const, 1},
+		{"ETHERTYPE_NOVELL", Const, 1},
+		{"ETHERTYPE_NS", Const, 1},
+		{"ETHERTYPE_NSAT", Const, 1},
+		{"ETHERTYPE_NSCOMPAT", Const, 1},
+		{"ETHERTYPE_NTRAILER", Const, 1},
+		{"ETHERTYPE_OS9", Const, 1},
+		{"ETHERTYPE_OS9NET", Const, 1},
+		{"ETHERTYPE_PACER", Const, 1},
+		{"ETHERTYPE_PAE", Const, 1},
+		{"ETHERTYPE_PCS", Const, 1},
+		{"ETHERTYPE_PLANNING", Const, 1},
+		{"ETHERTYPE_PPP", Const, 1},
+		{"ETHERTYPE_PPPOE", Const, 1},
+		{"ETHERTYPE_PPPOEDISC", Const, 1},
+		{"ETHERTYPE_PRIMENTS", Const, 1},
+		{"ETHERTYPE_PUP", Const, 1},
+		{"ETHERTYPE_PUPAT", Const, 1},
+		{"ETHERTYPE_QINQ", Const, 1},
+		{"ETHERTYPE_RACAL", Const, 1},
+		{"ETHERTYPE_RATIONAL", Const, 1},
+		{"ETHERTYPE_RAWFR", Const, 1},
+		{"ETHERTYPE_RCL", Const, 1},
+		{"ETHERTYPE_RDP", Const, 1},
+		{"ETHERTYPE_RETIX", Const, 1},
+		{"ETHERTYPE_REVARP", Const, 1},
+		{"ETHERTYPE_SCA", Const, 1},
+		{"ETHERTYPE_SECTRA", Const, 1},
+		{"ETHERTYPE_SECUREDATA", Const, 1},
+		{"ETHERTYPE_SGITW", Const, 1},
+		{"ETHERTYPE_SG_BOUNCE", Const, 1},
+		{"ETHERTYPE_SG_DIAG", Const, 1},
+		{"ETHERTYPE_SG_NETGAMES", Const, 1},
+		{"ETHERTYPE_SG_RESV", Const, 1},
+		{"ETHERTYPE_SIMNET", Const, 1},
+		{"ETHERTYPE_SLOW", Const, 1},
+		{"ETHERTYPE_SLOWPROTOCOLS", Const, 1},
+		{"ETHERTYPE_SNA", Const, 1},
+		{"ETHERTYPE_SNMP", Const, 1},
+		{"ETHERTYPE_SONIX", Const, 1},
+		{"ETHERTYPE_SPIDER", Const, 1},
+		{"ETHERTYPE_SPRITE", Const, 1},
+		{"ETHERTYPE_STP", Const, 1},
+		{"ETHERTYPE_TALARIS", Const, 1},
+		{"ETHERTYPE_TALARISMC", Const, 1},
+		{"ETHERTYPE_TCPCOMP", Const, 1},
+		{"ETHERTYPE_TCPSM", Const, 1},
+		{"ETHERTYPE_TEC", Const, 1},
+		{"ETHERTYPE_TIGAN", Const, 1},
+		{"ETHERTYPE_TRAIL", Const, 1},
+		{"ETHERTYPE_TRANSETHER", Const, 1},
+		{"ETHERTYPE_TYMSHARE", Const, 1},
+		{"ETHERTYPE_UBBST", Const, 1},
+		{"ETHERTYPE_UBDEBUG", Const, 1},
+		{"ETHERTYPE_UBDIAGLOOP", Const, 1},
+		{"ETHERTYPE_UBDL", Const, 1},
+		{"ETHERTYPE_UBNIU", Const, 1},
+		{"ETHERTYPE_UBNMC", Const, 1},
+		{"ETHERTYPE_VALID", Const, 1},
+		{"ETHERTYPE_VARIAN", Const, 1},
+		{"ETHERTYPE_VAXELN", Const, 1},
+		{"ETHERTYPE_VEECO", Const, 1},
+		{"ETHERTYPE_VEXP", Const, 1},
+		{"ETHERTYPE_VGLAB", Const, 1},
+		{"ETHERTYPE_VINES", Const, 1},
+		{"ETHERTYPE_VINESECHO", Const, 1},
+		{"ETHERTYPE_VINESLOOP", Const, 1},
+		{"ETHERTYPE_VITAL", Const, 1},
+		{"ETHERTYPE_VLAN", Const, 1},
+		{"ETHERTYPE_VLTLMAN", Const, 1},
+		{"ETHERTYPE_VPROD", Const, 1},
+		{"ETHERTYPE_VURESERVED", Const, 1},
+		{"ETHERTYPE_WATERLOO", Const, 1},
+		{"ETHERTYPE_WELLFLEET", Const, 1},
+		{"ETHERTYPE_X25", Const, 1},
+		{"ETHERTYPE_X75", Const, 1},
+		{"ETHERTYPE_XNSSM", Const, 1},
+		{"ETHERTYPE_XTP", Const, 1},
+		{"ETHER_ADDR_LEN", Const, 1},
+		{"ETHER_ALIGN", Const, 1},
+		{"ETHER_CRC_LEN", Const, 1},
+		{"ETHER_CRC_POLY_BE", Const, 1},
+		{"ETHER_CRC_POLY_LE", Const, 1},
+		{"ETHER_HDR_LEN", Const, 1},
+		{"ETHER_MAX_DIX_LEN", Const, 1},
+		{"ETHER_MAX_LEN", Const, 1},
+		{"ETHER_MAX_LEN_JUMBO", Const, 1},
+		{"ETHER_MIN_LEN", Const, 1},
+		{"ETHER_PPPOE_ENCAP_LEN", Const, 1},
+		{"ETHER_TYPE_LEN", Const, 1},
+		{"ETHER_VLAN_ENCAP_LEN", Const, 1},
+		{"ETH_P_1588", Const, 0},
+		{"ETH_P_8021Q", Const, 0},
+		{"ETH_P_802_2", Const, 0},
+		{"ETH_P_802_3", Const, 0},
+		{"ETH_P_AARP", Const, 0},
+		{"ETH_P_ALL", Const, 0},
+		{"ETH_P_AOE", Const, 0},
+		{"ETH_P_ARCNET", Const, 0},
+		{"ETH_P_ARP", Const, 0},
+		{"ETH_P_ATALK", Const, 0},
+		{"ETH_P_ATMFATE", Const, 0},
+		{"ETH_P_ATMMPOA", Const, 0},
+		{"ETH_P_AX25", Const, 0},
+		{"ETH_P_BPQ", Const, 0},
+		{"ETH_P_CAIF", Const, 0},
+		{"ETH_P_CAN", Const, 0},
+		{"ETH_P_CONTROL", Const, 0},
+		{"ETH_P_CUST", Const, 0},
+		{"ETH_P_DDCMP", Const, 0},
+		{"ETH_P_DEC", Const, 0},
+		{"ETH_P_DIAG", Const, 0},
+		{"ETH_P_DNA_DL", Const, 0},
+		{"ETH_P_DNA_RC", Const, 0},
+		{"ETH_P_DNA_RT", Const, 0},
+		{"ETH_P_DSA", Const, 0},
+		{"ETH_P_ECONET", Const, 0},
+		{"ETH_P_EDSA", Const, 0},
+		{"ETH_P_FCOE", Const, 0},
+		{"ETH_P_FIP", Const, 0},
+		{"ETH_P_HDLC", Const, 0},
+		{"ETH_P_IEEE802154", Const, 0},
+		{"ETH_P_IEEEPUP", Const, 0},
+		{"ETH_P_IEEEPUPAT", Const, 0},
+		{"ETH_P_IP", Const, 0},
+		{"ETH_P_IPV6", Const, 0},
+		{"ETH_P_IPX", Const, 0},
+		{"ETH_P_IRDA", Const, 0},
+		{"ETH_P_LAT", Const, 0},
+		{"ETH_P_LINK_CTL", Const, 0},
+		{"ETH_P_LOCALTALK", Const, 0},
+		{"ETH_P_LOOP", Const, 0},
+		{"ETH_P_MOBITEX", Const, 0},
+		{"ETH_P_MPLS_MC", Const, 0},
+		{"ETH_P_MPLS_UC", Const, 0},
+		{"ETH_P_PAE", Const, 0},
+		{"ETH_P_PAUSE", Const, 0},
+		{"ETH_P_PHONET", Const, 0},
+		{"ETH_P_PPPTALK", Const, 0},
+		{"ETH_P_PPP_DISC", Const, 0},
+		{"ETH_P_PPP_MP", Const, 0},
+		{"ETH_P_PPP_SES", Const, 0},
+		{"ETH_P_PUP", Const, 0},
+		{"ETH_P_PUPAT", Const, 0},
+		{"ETH_P_RARP", Const, 0},
+		{"ETH_P_SCA", Const, 0},
+		{"ETH_P_SLOW", Const, 0},
+		{"ETH_P_SNAP", Const, 0},
+		{"ETH_P_TEB", Const, 0},
+		{"ETH_P_TIPC", Const, 0},
+		{"ETH_P_TRAILER", Const, 0},
+		{"ETH_P_TR_802_2", Const, 0},
+		{"ETH_P_WAN_PPP", Const, 0},
+		{"ETH_P_WCCP", Const, 0},
+		{"ETH_P_X25", Const, 0},
+		{"ETIME", Const, 0},
+		{"ETIMEDOUT", Const, 0},
+		{"ETOOMANYREFS", Const, 0},
+		{"ETXTBSY", Const, 0},
+		{"EUCLEAN", Const, 0},
+		{"EUNATCH", Const, 0},
+		{"EUSERS", Const, 0},
+		{"EVFILT_AIO", Const, 0},
+		{"EVFILT_FS", Const, 0},
+		{"EVFILT_LIO", Const, 0},
+		{"EVFILT_MACHPORT", Const, 0},
+		{"EVFILT_PROC", Const, 0},
+		{"EVFILT_READ", Const, 0},
+		{"EVFILT_SIGNAL", Const, 0},
+		{"EVFILT_SYSCOUNT", Const, 0},
+		{"EVFILT_THREADMARKER", Const, 0},
+		{"EVFILT_TIMER", Const, 0},
+		{"EVFILT_USER", Const, 0},
+		{"EVFILT_VM", Const, 0},
+		{"EVFILT_VNODE", Const, 0},
+		{"EVFILT_WRITE", Const, 0},
+		{"EV_ADD", Const, 0},
+		{"EV_CLEAR", Const, 0},
+		{"EV_DELETE", Const, 0},
+		{"EV_DISABLE", Const, 0},
+		{"EV_DISPATCH", Const, 0},
+		{"EV_DROP", Const, 3},
+		{"EV_ENABLE", Const, 0},
+		{"EV_EOF", Const, 0},
+		{"EV_ERROR", Const, 0},
+		{"EV_FLAG0", Const, 0},
+		{"EV_FLAG1", Const, 0},
+		{"EV_ONESHOT", Const, 0},
+		{"EV_OOBAND", Const, 0},
+		{"EV_POLL", Const, 0},
+		{"EV_RECEIPT", Const, 0},
+		{"EV_SYSFLAGS", Const, 0},
+		{"EWINDOWS", Const, 0},
+		{"EWOULDBLOCK", Const, 0},
+		{"EXDEV", Const, 0},
+		{"EXFULL", Const, 0},
+		{"EXTA", Const, 0},
+		{"EXTB", Const, 0},
+		{"EXTPROC", Const, 0},
+		{"Environ", Func, 0},
+		{"EpollCreate", Func, 0},
+		{"EpollCreate1", Func, 0},
+		{"EpollCtl", Func, 0},
+		{"EpollEvent", Type, 0},
+		{"EpollEvent.Events", Field, 0},
+		{"EpollEvent.Fd", Field, 0},
+		{"EpollEvent.Pad", Field, 0},
+		{"EpollEvent.PadFd", Field, 0},
+		{"EpollWait", Func, 0},
+		{"Errno", Type, 0},
+		{"EscapeArg", Func, 0},
+		{"Exchangedata", Func, 0},
+		{"Exec", Func, 0},
+		{"Exit", Func, 0},
+		{"ExitProcess", Func, 0},
+		{"FD_CLOEXEC", Const, 0},
+		{"FD_SETSIZE", Const, 0},
+		{"FILE_ACTION_ADDED", Const, 0},
+		{"FILE_ACTION_MODIFIED", Const, 0},
+		{"FILE_ACTION_REMOVED", Const, 0},
+		{"FILE_ACTION_RENAMED_NEW_NAME", Const, 0},
+		{"FILE_ACTION_RENAMED_OLD_NAME", Const, 0},
+		{"FILE_APPEND_DATA", Const, 0},
+		{"FILE_ATTRIBUTE_ARCHIVE", Const, 0},
+		{"FILE_ATTRIBUTE_DIRECTORY", Const, 0},
+		{"FILE_ATTRIBUTE_HIDDEN", Const, 0},
+		{"FILE_ATTRIBUTE_NORMAL", Const, 0},
+		{"FILE_ATTRIBUTE_READONLY", Const, 0},
+		{"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4},
+		{"FILE_ATTRIBUTE_SYSTEM", Const, 0},
+		{"FILE_BEGIN", Const, 0},
+		{"FILE_CURRENT", Const, 0},
+		{"FILE_END", Const, 0},
+		{"FILE_FLAG_BACKUP_SEMANTICS", Const, 0},
+		{"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4},
+		{"FILE_FLAG_OVERLAPPED", Const, 0},
+		{"FILE_LIST_DIRECTORY", Const, 0},
+		{"FILE_MAP_COPY", Const, 0},
+		{"FILE_MAP_EXECUTE", Const, 0},
+		{"FILE_MAP_READ", Const, 0},
+		{"FILE_MAP_WRITE", Const, 0},
+		{"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0},
+		{"FILE_NOTIFY_CHANGE_CREATION", Const, 0},
+		{"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0},
+		{"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0},
+		{"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0},
+		{"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0},
+		{"FILE_NOTIFY_CHANGE_SIZE", Const, 0},
+		{"FILE_SHARE_DELETE", Const, 0},
+		{"FILE_SHARE_READ", Const, 0},
+		{"FILE_SHARE_WRITE", Const, 0},
+		{"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2},
+		{"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2},
+		{"FILE_TYPE_CHAR", Const, 0},
+		{"FILE_TYPE_DISK", Const, 0},
+		{"FILE_TYPE_PIPE", Const, 0},
+		{"FILE_TYPE_REMOTE", Const, 0},
+		{"FILE_TYPE_UNKNOWN", Const, 0},
+		{"FILE_WRITE_ATTRIBUTES", Const, 0},
+		{"FLUSHO", Const, 0},
+		{"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0},
+		{"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0},
+		{"FORMAT_MESSAGE_FROM_HMODULE", Const, 0},
+		{"FORMAT_MESSAGE_FROM_STRING", Const, 0},
+		{"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0},
+		{"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0},
+		{"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0},
+		{"FSCTL_GET_REPARSE_POINT", Const, 4},
+		{"F_ADDFILESIGS", Const, 0},
+		{"F_ADDSIGS", Const, 0},
+		{"F_ALLOCATEALL", Const, 0},
+		{"F_ALLOCATECONTIG", Const, 0},
+		{"F_CANCEL", Const, 0},
+		{"F_CHKCLEAN", Const, 0},
+		{"F_CLOSEM", Const, 1},
+		{"F_DUP2FD", Const, 0},
+		{"F_DUP2FD_CLOEXEC", Const, 1},
+		{"F_DUPFD", Const, 0},
+		{"F_DUPFD_CLOEXEC", Const, 0},
+		{"F_EXLCK", Const, 0},
+		{"F_FINDSIGS", Const, 16},
+		{"F_FLUSH_DATA", Const, 0},
+		{"F_FREEZE_FS", Const, 0},
+		{"F_FSCTL", Const, 1},
+		{"F_FSDIRMASK", Const, 1},
+		{"F_FSIN", Const, 1},
+		{"F_FSINOUT", Const, 1},
+		{"F_FSOUT", Const, 1},
+		{"F_FSPRIV", Const, 1},
+		{"F_FSVOID", Const, 1},
+		{"F_FULLFSYNC", Const, 0},
+		{"F_GETCODEDIR", Const, 16},
+		{"F_GETFD", Const, 0},
+		{"F_GETFL", Const, 0},
+		{"F_GETLEASE", Const, 0},
+		{"F_GETLK", Const, 0},
+		{"F_GETLK64", Const, 0},
+		{"F_GETLKPID", Const, 0},
+		{"F_GETNOSIGPIPE", Const, 0},
+		{"F_GETOWN", Const, 0},
+		{"F_GETOWN_EX", Const, 0},
+		{"F_GETPATH", Const, 0},
+		{"F_GETPATH_MTMINFO", Const, 0},
+		{"F_GETPIPE_SZ", Const, 0},
+		{"F_GETPROTECTIONCLASS", Const, 0},
+		{"F_GETPROTECTIONLEVEL", Const, 16},
+		{"F_GETSIG", Const, 0},
+		{"F_GLOBAL_NOCACHE", Const, 0},
+		{"F_LOCK", Const, 0},
+		{"F_LOG2PHYS", Const, 0},
+		{"F_LOG2PHYS_EXT", Const, 0},
+		{"F_MARKDEPENDENCY", Const, 0},
+		{"F_MAXFD", Const, 1},
+		{"F_NOCACHE", Const, 0},
+		{"F_NODIRECT", Const, 0},
+		{"F_NOTIFY", Const, 0},
+		{"F_OGETLK", Const, 0},
+		{"F_OK", Const, 0},
+		{"F_OSETLK", Const, 0},
+		{"F_OSETLKW", Const, 0},
+		{"F_PARAM_MASK", Const, 1},
+		{"F_PARAM_MAX", Const, 1},
+		{"F_PATHPKG_CHECK", Const, 0},
+		{"F_PEOFPOSMODE", Const, 0},
+		{"F_PREALLOCATE", Const, 0},
+		{"F_RDADVISE", Const, 0},
+		{"F_RDAHEAD", Const, 0},
+		{"F_RDLCK", Const, 0},
+		{"F_READAHEAD", Const, 0},
+		{"F_READBOOTSTRAP", Const, 0},
+		{"F_SETBACKINGSTORE", Const, 0},
+		{"F_SETFD", Const, 0},
+		{"F_SETFL", Const, 0},
+		{"F_SETLEASE", Const, 0},
+		{"F_SETLK", Const, 0},
+		{"F_SETLK64", Const, 0},
+		{"F_SETLKW", Const, 0},
+		{"F_SETLKW64", Const, 0},
+		{"F_SETLKWTIMEOUT", Const, 16},
+		{"F_SETLK_REMOTE", Const, 0},
+		{"F_SETNOSIGPIPE", Const, 0},
+		{"F_SETOWN", Const, 0},
+		{"F_SETOWN_EX", Const, 0},
+		{"F_SETPIPE_SZ", Const, 0},
+		{"F_SETPROTECTIONCLASS", Const, 0},
+		{"F_SETSIG", Const, 0},
+		{"F_SETSIZE", Const, 0},
+		{"F_SHLCK", Const, 0},
+		{"F_SINGLE_WRITER", Const, 16},
+		{"F_TEST", Const, 0},
+		{"F_THAW_FS", Const, 0},
+		{"F_TLOCK", Const, 0},
+		{"F_TRANSCODEKEY", Const, 16},
+		{"F_ULOCK", Const, 0},
+		{"F_UNLCK", Const, 0},
+		{"F_UNLCKSYS", Const, 0},
+		{"F_VOLPOSMODE", Const, 0},
+		{"F_WRITEBOOTSTRAP", Const, 0},
+		{"F_WRLCK", Const, 0},
+		{"Faccessat", Func, 0},
+		{"Fallocate", Func, 0},
+		{"Fbootstraptransfer_t", Type, 0},
+		{"Fbootstraptransfer_t.Buffer", Field, 0},
+		{"Fbootstraptransfer_t.Length", Field, 0},
+		{"Fbootstraptransfer_t.Offset", Field, 0},
+		{"Fchdir", Func, 0},
+		{"Fchflags", Func, 0},
+		{"Fchmod", Func, 0},
+		{"Fchmodat", Func, 0},
+		{"Fchown", Func, 0},
+		{"Fchownat", Func, 0},
+		{"FcntlFlock", Func, 3},
+		{"FdSet", Type, 0},
+		{"FdSet.Bits", Field, 0},
+		{"FdSet.X__fds_bits", Field, 0},
+		{"Fdatasync", Func, 0},
+		{"FileNotifyInformation", Type, 0},
+		{"FileNotifyInformation.Action", Field, 0},
+		{"FileNotifyInformation.FileName", Field, 0},
+		{"FileNotifyInformation.FileNameLength", Field, 0},
+		{"FileNotifyInformation.NextEntryOffset", Field, 0},
+		{"Filetime", Type, 0},
+		{"Filetime.HighDateTime", Field, 0},
+		{"Filetime.LowDateTime", Field, 0},
+		{"FindClose", Func, 0},
+		{"FindFirstFile", Func, 0},
+		{"FindNextFile", Func, 0},
+		{"Flock", Func, 0},
+		{"Flock_t", Type, 0},
+		{"Flock_t.Len", Field, 0},
+		{"Flock_t.Pad_cgo_0", Field, 0},
+		{"Flock_t.Pad_cgo_1", Field, 3},
+		{"Flock_t.Pid", Field, 0},
+		{"Flock_t.Start", Field, 0},
+		{"Flock_t.Sysid", Field, 0},
+		{"Flock_t.Type", Field, 0},
+		{"Flock_t.Whence", Field, 0},
+		{"FlushBpf", Func, 0},
+		{"FlushFileBuffers", Func, 0},
+		{"FlushViewOfFile", Func, 0},
+		{"ForkExec", Func, 0},
+		{"ForkLock", Var, 0},
+		{"FormatMessage", Func, 0},
+		{"Fpathconf", Func, 0},
+		{"FreeAddrInfoW", Func, 1},
+		{"FreeEnvironmentStrings", Func, 0},
+		{"FreeLibrary", Func, 0},
+		{"Fsid", Type, 0},
+		{"Fsid.Val", Field, 0},
+		{"Fsid.X__fsid_val", Field, 2},
+		{"Fsid.X__val", Field, 0},
+		{"Fstat", Func, 0},
+		{"Fstatat", Func, 12},
+		{"Fstatfs", Func, 0},
+		{"Fstore_t", Type, 0},
+		{"Fstore_t.Bytesalloc", Field, 0},
+		{"Fstore_t.Flags", Field, 0},
+		{"Fstore_t.Length", Field, 0},
+		{"Fstore_t.Offset", Field, 0},
+		{"Fstore_t.Posmode", Field, 0},
+		{"Fsync", Func, 0},
+		{"Ftruncate", Func, 0},
+		{"FullPath", Func, 4},
+		{"Futimes", Func, 0},
+		{"Futimesat", Func, 0},
+		{"GENERIC_ALL", Const, 0},
+		{"GENERIC_EXECUTE", Const, 0},
+		{"GENERIC_READ", Const, 0},
+		{"GENERIC_WRITE", Const, 0},
+		{"GUID", Type, 1},
+		{"GUID.Data1", Field, 1},
+		{"GUID.Data2", Field, 1},
+		{"GUID.Data3", Field, 1},
+		{"GUID.Data4", Field, 1},
+		{"GetAcceptExSockaddrs", Func, 0},
+		{"GetAdaptersInfo", Func, 0},
+		{"GetAddrInfoW", Func, 1},
+		{"GetCommandLine", Func, 0},
+		{"GetComputerName", Func, 0},
+		{"GetConsoleMode", Func, 1},
+		{"GetCurrentDirectory", Func, 0},
+		{"GetCurrentProcess", Func, 0},
+		{"GetEnvironmentStrings", Func, 0},
+		{"GetEnvironmentVariable", Func, 0},
+		{"GetExitCodeProcess", Func, 0},
+		{"GetFileAttributes", Func, 0},
+		{"GetFileAttributesEx", Func, 0},
+		{"GetFileExInfoStandard", Const, 0},
+		{"GetFileExMaxInfoLevel", Const, 0},
+		{"GetFileInformationByHandle", Func, 0},
+		{"GetFileType", Func, 0},
+		{"GetFullPathName", Func, 0},
+		{"GetHostByName", Func, 0},
+		{"GetIfEntry", Func, 0},
+		{"GetLastError", Func, 0},
+		{"GetLengthSid", Func, 0},
+		{"GetLongPathName", Func, 0},
+		{"GetProcAddress", Func, 0},
+		{"GetProcessTimes", Func, 0},
+		{"GetProtoByName", Func, 0},
+		{"GetQueuedCompletionStatus", Func, 0},
+		{"GetServByName", Func, 0},
+		{"GetShortPathName", Func, 0},
+		{"GetStartupInfo", Func, 0},
+		{"GetStdHandle", Func, 0},
+		{"GetSystemTimeAsFileTime", Func, 0},
+		{"GetTempPath", Func, 0},
+		{"GetTimeZoneInformation", Func, 0},
+		{"GetTokenInformation", Func, 0},
+		{"GetUserNameEx", Func, 0},
+		{"GetUserProfileDirectory", Func, 0},
+		{"GetVersion", Func, 0},
+		{"Getcwd", Func, 0},
+		{"Getdents", Func, 0},
+		{"Getdirentries", Func, 0},
+		{"Getdtablesize", Func, 0},
+		{"Getegid", Func, 0},
+		{"Getenv", Func, 0},
+		{"Geteuid", Func, 0},
+		{"Getfsstat", Func, 0},
+		{"Getgid", Func, 0},
+		{"Getgroups", Func, 0},
+		{"Getpagesize", Func, 0},
+		{"Getpeername", Func, 0},
+		{"Getpgid", Func, 0},
+		{"Getpgrp", Func, 0},
+		{"Getpid", Func, 0},
+		{"Getppid", Func, 0},
+		{"Getpriority", Func, 0},
+		{"Getrlimit", Func, 0},
+		{"Getrusage", Func, 0},
+		{"Getsid", Func, 0},
+		{"Getsockname", Func, 0},
+		{"Getsockopt", Func, 1},
+		{"GetsockoptByte", Func, 0},
+		{"GetsockoptICMPv6Filter", Func, 2},
+		{"GetsockoptIPMreq", Func, 0},
+		{"GetsockoptIPMreqn", Func, 0},
+		{"GetsockoptIPv6MTUInfo", Func, 2},
+		{"GetsockoptIPv6Mreq", Func, 0},
+		{"GetsockoptInet4Addr", Func, 0},
+		{"GetsockoptInt", Func, 0},
+		{"GetsockoptUcred", Func, 1},
+		{"Gettid", Func, 0},
+		{"Gettimeofday", Func, 0},
+		{"Getuid", Func, 0},
+		{"Getwd", Func, 0},
+		{"Getxattr", Func, 1},
+		{"HANDLE_FLAG_INHERIT", Const, 0},
+		{"HKEY_CLASSES_ROOT", Const, 0},
+		{"HKEY_CURRENT_CONFIG", Const, 0},
+		{"HKEY_CURRENT_USER", Const, 0},
+		{"HKEY_DYN_DATA", Const, 0},
+		{"HKEY_LOCAL_MACHINE", Const, 0},
+		{"HKEY_PERFORMANCE_DATA", Const, 0},
+		{"HKEY_USERS", Const, 0},
+		{"HUPCL", Const, 0},
+		{"Handle", Type, 0},
+		{"Hostent", Type, 0},
+		{"Hostent.AddrList", Field, 0},
+		{"Hostent.AddrType", Field, 0},
+		{"Hostent.Aliases", Field, 0},
+		{"Hostent.Length", Field, 0},
+		{"Hostent.Name", Field, 0},
+		{"ICANON", Const, 0},
+		{"ICMP6_FILTER", Const, 2},
+		{"ICMPV6_FILTER", Const, 2},
+		{"ICMPv6Filter", Type, 2},
+		{"ICMPv6Filter.Data", Field, 2},
+		{"ICMPv6Filter.Filt", Field, 2},
+		{"ICRNL", Const, 0},
+		{"IEXTEN", Const, 0},
+		{"IFAN_ARRIVAL", Const, 1},
+		{"IFAN_DEPARTURE", Const, 1},
+		{"IFA_ADDRESS", Const, 0},
+		{"IFA_ANYCAST", Const, 0},
+		{"IFA_BROADCAST", Const, 0},
+		{"IFA_CACHEINFO", Const, 0},
+		{"IFA_F_DADFAILED", Const, 0},
+		{"IFA_F_DEPRECATED", Const, 0},
+		{"IFA_F_HOMEADDRESS", Const, 0},
+		{"IFA_F_NODAD", Const, 0},
+		{"IFA_F_OPTIMISTIC", Const, 0},
+		{"IFA_F_PERMANENT", Const, 0},
+		{"IFA_F_SECONDARY", Const, 0},
+		{"IFA_F_TEMPORARY", Const, 0},
+		{"IFA_F_TENTATIVE", Const, 0},
+		{"IFA_LABEL", Const, 0},
+		{"IFA_LOCAL", Const, 0},
+		{"IFA_MAX", Const, 0},
+		{"IFA_MULTICAST", Const, 0},
+		{"IFA_ROUTE", Const, 1},
+		{"IFA_UNSPEC", Const, 0},
+		{"IFF_ALLMULTI", Const, 0},
+		{"IFF_ALTPHYS", Const, 0},
+		{"IFF_AUTOMEDIA", Const, 0},
+		{"IFF_BROADCAST", Const, 0},
+		{"IFF_CANTCHANGE", Const, 0},
+		{"IFF_CANTCONFIG", Const, 1},
+		{"IFF_DEBUG", Const, 0},
+		{"IFF_DRV_OACTIVE", Const, 0},
+		{"IFF_DRV_RUNNING", Const, 0},
+		{"IFF_DYING", Const, 0},
+		{"IFF_DYNAMIC", Const, 0},
+		{"IFF_LINK0", Const, 0},
+		{"IFF_LINK1", Const, 0},
+		{"IFF_LINK2", Const, 0},
+		{"IFF_LOOPBACK", Const, 0},
+		{"IFF_MASTER", Const, 0},
+		{"IFF_MONITOR", Const, 0},
+		{"IFF_MULTICAST", Const, 0},
+		{"IFF_NOARP", Const, 0},
+		{"IFF_NOTRAILERS", Const, 0},
+		{"IFF_NO_PI", Const, 0},
+		{"IFF_OACTIVE", Const, 0},
+		{"IFF_ONE_QUEUE", Const, 0},
+		{"IFF_POINTOPOINT", Const, 0},
+		{"IFF_POINTTOPOINT", Const, 0},
+		{"IFF_PORTSEL", Const, 0},
+		{"IFF_PPROMISC", Const, 0},
+		{"IFF_PROMISC", Const, 0},
+		{"IFF_RENAMING", Const, 0},
+		{"IFF_RUNNING", Const, 0},
+		{"IFF_SIMPLEX", Const, 0},
+		{"IFF_SLAVE", Const, 0},
+		{"IFF_SMART", Const, 0},
+		{"IFF_STATICARP", Const, 0},
+		{"IFF_TAP", Const, 0},
+		{"IFF_TUN", Const, 0},
+		{"IFF_TUN_EXCL", Const, 0},
+		{"IFF_UP", Const, 0},
+		{"IFF_VNET_HDR", Const, 0},
+		{"IFLA_ADDRESS", Const, 0},
+		{"IFLA_BROADCAST", Const, 0},
+		{"IFLA_COST", Const, 0},
+		{"IFLA_IFALIAS", Const, 0},
+		{"IFLA_IFNAME", Const, 0},
+		{"IFLA_LINK", Const, 0},
+		{"IFLA_LINKINFO", Const, 0},
+		{"IFLA_LINKMODE", Const, 0},
+		{"IFLA_MAP", Const, 0},
+		{"IFLA_MASTER", Const, 0},
+		{"IFLA_MAX", Const, 0},
+		{"IFLA_MTU", Const, 0},
+		{"IFLA_NET_NS_PID", Const, 0},
+		{"IFLA_OPERSTATE", Const, 0},
+		{"IFLA_PRIORITY", Const, 0},
+		{"IFLA_PROTINFO", Const, 0},
+		{"IFLA_QDISC", Const, 0},
+		{"IFLA_STATS", Const, 0},
+		{"IFLA_TXQLEN", Const, 0},
+		{"IFLA_UNSPEC", Const, 0},
+		{"IFLA_WEIGHT", Const, 0},
+		{"IFLA_WIRELESS", Const, 0},
+		{"IFNAMSIZ", Const, 0},
+		{"IFT_1822", Const, 0},
+		{"IFT_A12MPPSWITCH", Const, 0},
+		{"IFT_AAL2", Const, 0},
+		{"IFT_AAL5", Const, 0},
+		{"IFT_ADSL", Const, 0},
+		{"IFT_AFLANE8023", Const, 0},
+		{"IFT_AFLANE8025", Const, 0},
+		{"IFT_ARAP", Const, 0},
+		{"IFT_ARCNET", Const, 0},
+		{"IFT_ARCNETPLUS", Const, 0},
+		{"IFT_ASYNC", Const, 0},
+		{"IFT_ATM", Const, 0},
+		{"IFT_ATMDXI", Const, 0},
+		{"IFT_ATMFUNI", Const, 0},
+		{"IFT_ATMIMA", Const, 0},
+		{"IFT_ATMLOGICAL", Const, 0},
+		{"IFT_ATMRADIO", Const, 0},
+		{"IFT_ATMSUBINTERFACE", Const, 0},
+		{"IFT_ATMVCIENDPT", Const, 0},
+		{"IFT_ATMVIRTUAL", Const, 0},
+		{"IFT_BGPPOLICYACCOUNTING", Const, 0},
+		{"IFT_BLUETOOTH", Const, 1},
+		{"IFT_BRIDGE", Const, 0},
+		{"IFT_BSC", Const, 0},
+		{"IFT_CARP", Const, 0},
+		{"IFT_CCTEMUL", Const, 0},
+		{"IFT_CELLULAR", Const, 0},
+		{"IFT_CEPT", Const, 0},
+		{"IFT_CES", Const, 0},
+		{"IFT_CHANNEL", Const, 0},
+		{"IFT_CNR", Const, 0},
+		{"IFT_COFFEE", Const, 0},
+		{"IFT_COMPOSITELINK", Const, 0},
+		{"IFT_DCN", Const, 0},
+		{"IFT_DIGITALPOWERLINE", Const, 0},
+		{"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0},
+		{"IFT_DLSW", Const, 0},
+		{"IFT_DOCSCABLEDOWNSTREAM", Const, 0},
+		{"IFT_DOCSCABLEMACLAYER", Const, 0},
+		{"IFT_DOCSCABLEUPSTREAM", Const, 0},
+		{"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1},
+		{"IFT_DS0", Const, 0},
+		{"IFT_DS0BUNDLE", Const, 0},
+		{"IFT_DS1FDL", Const, 0},
+		{"IFT_DS3", Const, 0},
+		{"IFT_DTM", Const, 0},
+		{"IFT_DUMMY", Const, 1},
+		{"IFT_DVBASILN", Const, 0},
+		{"IFT_DVBASIOUT", Const, 0},
+		{"IFT_DVBRCCDOWNSTREAM", Const, 0},
+		{"IFT_DVBRCCMACLAYER", Const, 0},
+		{"IFT_DVBRCCUPSTREAM", Const, 0},
+		{"IFT_ECONET", Const, 1},
+		{"IFT_ENC", Const, 0},
+		{"IFT_EON", Const, 0},
+		{"IFT_EPLRS", Const, 0},
+		{"IFT_ESCON", Const, 0},
+		{"IFT_ETHER", Const, 0},
+		{"IFT_FAITH", Const, 0},
+		{"IFT_FAST", Const, 0},
+		{"IFT_FASTETHER", Const, 0},
+		{"IFT_FASTETHERFX", Const, 0},
+		{"IFT_FDDI", Const, 0},
+		{"IFT_FIBRECHANNEL", Const, 0},
+		{"IFT_FRAMERELAYINTERCONNECT", Const, 0},
+		{"IFT_FRAMERELAYMPI", Const, 0},
+		{"IFT_FRDLCIENDPT", Const, 0},
+		{"IFT_FRELAY", Const, 0},
+		{"IFT_FRELAYDCE", Const, 0},
+		{"IFT_FRF16MFRBUNDLE", Const, 0},
+		{"IFT_FRFORWARD", Const, 0},
+		{"IFT_G703AT2MB", Const, 0},
+		{"IFT_G703AT64K", Const, 0},
+		{"IFT_GIF", Const, 0},
+		{"IFT_GIGABITETHERNET", Const, 0},
+		{"IFT_GR303IDT", Const, 0},
+		{"IFT_GR303RDT", Const, 0},
+		{"IFT_H323GATEKEEPER", Const, 0},
+		{"IFT_H323PROXY", Const, 0},
+		{"IFT_HDH1822", Const, 0},
+		{"IFT_HDLC", Const, 0},
+		{"IFT_HDSL2", Const, 0},
+		{"IFT_HIPERLAN2", Const, 0},
+		{"IFT_HIPPI", Const, 0},
+		{"IFT_HIPPIINTERFACE", Const, 0},
+		{"IFT_HOSTPAD", Const, 0},
+		{"IFT_HSSI", Const, 0},
+		{"IFT_HY", Const, 0},
+		{"IFT_IBM370PARCHAN", Const, 0},
+		{"IFT_IDSL", Const, 0},
+		{"IFT_IEEE1394", Const, 0},
+		{"IFT_IEEE80211", Const, 0},
+		{"IFT_IEEE80212", Const, 0},
+		{"IFT_IEEE8023ADLAG", Const, 0},
+		{"IFT_IFGSN", Const, 0},
+		{"IFT_IMT", Const, 0},
+		{"IFT_INFINIBAND", Const, 1},
+		{"IFT_INTERLEAVE", Const, 0},
+		{"IFT_IP", Const, 0},
+		{"IFT_IPFORWARD", Const, 0},
+		{"IFT_IPOVERATM", Const, 0},
+		{"IFT_IPOVERCDLC", Const, 0},
+		{"IFT_IPOVERCLAW", Const, 0},
+		{"IFT_IPSWITCH", Const, 0},
+		{"IFT_IPXIP", Const, 0},
+		{"IFT_ISDN", Const, 0},
+		{"IFT_ISDNBASIC", Const, 0},
+		{"IFT_ISDNPRIMARY", Const, 0},
+		{"IFT_ISDNS", Const, 0},
+		{"IFT_ISDNU", Const, 0},
+		{"IFT_ISO88022LLC", Const, 0},
+		{"IFT_ISO88023", Const, 0},
+		{"IFT_ISO88024", Const, 0},
+		{"IFT_ISO88025", Const, 0},
+		{"IFT_ISO88025CRFPINT", Const, 0},
+		{"IFT_ISO88025DTR", Const, 0},
+		{"IFT_ISO88025FIBER", Const, 0},
+		{"IFT_ISO88026", Const, 0},
+		{"IFT_ISUP", Const, 0},
+		{"IFT_L2VLAN", Const, 0},
+		{"IFT_L3IPVLAN", Const, 0},
+		{"IFT_L3IPXVLAN", Const, 0},
+		{"IFT_LAPB", Const, 0},
+		{"IFT_LAPD", Const, 0},
+		{"IFT_LAPF", Const, 0},
+		{"IFT_LINEGROUP", Const, 1},
+		{"IFT_LOCALTALK", Const, 0},
+		{"IFT_LOOP", Const, 0},
+		{"IFT_MEDIAMAILOVERIP", Const, 0},
+		{"IFT_MFSIGLINK", Const, 0},
+		{"IFT_MIOX25", Const, 0},
+		{"IFT_MODEM", Const, 0},
+		{"IFT_MPC", Const, 0},
+		{"IFT_MPLS", Const, 0},
+		{"IFT_MPLSTUNNEL", Const, 0},
+		{"IFT_MSDSL", Const, 0},
+		{"IFT_MVL", Const, 0},
+		{"IFT_MYRINET", Const, 0},
+		{"IFT_NFAS", Const, 0},
+		{"IFT_NSIP", Const, 0},
+		{"IFT_OPTICALCHANNEL", Const, 0},
+		{"IFT_OPTICALTRANSPORT", Const, 0},
+		{"IFT_OTHER", Const, 0},
+		{"IFT_P10", Const, 0},
+		{"IFT_P80", Const, 0},
+		{"IFT_PARA", Const, 0},
+		{"IFT_PDP", Const, 0},
+		{"IFT_PFLOG", Const, 0},
+		{"IFT_PFLOW", Const, 1},
+		{"IFT_PFSYNC", Const, 0},
+		{"IFT_PLC", Const, 0},
+		{"IFT_PON155", Const, 1},
+		{"IFT_PON622", Const, 1},
+		{"IFT_POS", Const, 0},
+		{"IFT_PPP", Const, 0},
+		{"IFT_PPPMULTILINKBUNDLE", Const, 0},
+		{"IFT_PROPATM", Const, 1},
+		{"IFT_PROPBWAP2MP", Const, 0},
+		{"IFT_PROPCNLS", Const, 0},
+		{"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0},
+		{"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0},
+		{"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0},
+		{"IFT_PROPMUX", Const, 0},
+		{"IFT_PROPVIRTUAL", Const, 0},
+		{"IFT_PROPWIRELESSP2P", Const, 0},
+		{"IFT_PTPSERIAL", Const, 0},
+		{"IFT_PVC", Const, 0},
+		{"IFT_Q2931", Const, 1},
+		{"IFT_QLLC", Const, 0},
+		{"IFT_RADIOMAC", Const, 0},
+		{"IFT_RADSL", Const, 0},
+		{"IFT_REACHDSL", Const, 0},
+		{"IFT_RFC1483", Const, 0},
+		{"IFT_RS232", Const, 0},
+		{"IFT_RSRB", Const, 0},
+		{"IFT_SDLC", Const, 0},
+		{"IFT_SDSL", Const, 0},
+		{"IFT_SHDSL", Const, 0},
+		{"IFT_SIP", Const, 0},
+		{"IFT_SIPSIG", Const, 1},
+		{"IFT_SIPTG", Const, 1},
+		{"IFT_SLIP", Const, 0},
+		{"IFT_SMDSDXI", Const, 0},
+		{"IFT_SMDSICIP", Const, 0},
+		{"IFT_SONET", Const, 0},
+		{"IFT_SONETOVERHEADCHANNEL", Const, 0},
+		{"IFT_SONETPATH", Const, 0},
+		{"IFT_SONETVT", Const, 0},
+		{"IFT_SRP", Const, 0},
+		{"IFT_SS7SIGLINK", Const, 0},
+		{"IFT_STACKTOSTACK", Const, 0},
+		{"IFT_STARLAN", Const, 0},
+		{"IFT_STF", Const, 0},
+		{"IFT_T1", Const, 0},
+		{"IFT_TDLC", Const, 0},
+		{"IFT_TELINK", Const, 1},
+		{"IFT_TERMPAD", Const, 0},
+		{"IFT_TR008", Const, 0},
+		{"IFT_TRANSPHDLC", Const, 0},
+		{"IFT_TUNNEL", Const, 0},
+		{"IFT_ULTRA", Const, 0},
+		{"IFT_USB", Const, 0},
+		{"IFT_V11", Const, 0},
+		{"IFT_V35", Const, 0},
+		{"IFT_V36", Const, 0},
+		{"IFT_V37", Const, 0},
+		{"IFT_VDSL", Const, 0},
+		{"IFT_VIRTUALIPADDRESS", Const, 0},
+		{"IFT_VIRTUALTG", Const, 1},
+		{"IFT_VOICEDID", Const, 1},
+		{"IFT_VOICEEM", Const, 0},
+		{"IFT_VOICEEMFGD", Const, 1},
+		{"IFT_VOICEENCAP", Const, 0},
+		{"IFT_VOICEFGDEANA", Const, 1},
+		{"IFT_VOICEFXO", Const, 0},
+		{"IFT_VOICEFXS", Const, 0},
+		{"IFT_VOICEOVERATM", Const, 0},
+		{"IFT_VOICEOVERCABLE", Const, 1},
+		{"IFT_VOICEOVERFRAMERELAY", Const, 0},
+		{"IFT_VOICEOVERIP", Const, 0},
+		{"IFT_X213", Const, 0},
+		{"IFT_X25", Const, 0},
+		{"IFT_X25DDN", Const, 0},
+		{"IFT_X25HUNTGROUP", Const, 0},
+		{"IFT_X25MLP", Const, 0},
+		{"IFT_X25PLE", Const, 0},
+		{"IFT_XETHER", Const, 0},
+		{"IGNBRK", Const, 0},
+		{"IGNCR", Const, 0},
+		{"IGNORE", Const, 0},
+		{"IGNPAR", Const, 0},
+		{"IMAXBEL", Const, 0},
+		{"INFINITE", Const, 0},
+		{"INLCR", Const, 0},
+		{"INPCK", Const, 0},
+		{"INVALID_FILE_ATTRIBUTES", Const, 0},
+		{"IN_ACCESS", Const, 0},
+		{"IN_ALL_EVENTS", Const, 0},
+		{"IN_ATTRIB", Const, 0},
+		{"IN_CLASSA_HOST", Const, 0},
+		{"IN_CLASSA_MAX", Const, 0},
+		{"IN_CLASSA_NET", Const, 0},
+		{"IN_CLASSA_NSHIFT", Const, 0},
+		{"IN_CLASSB_HOST", Const, 0},
+		{"IN_CLASSB_MAX", Const, 0},
+		{"IN_CLASSB_NET", Const, 0},
+		{"IN_CLASSB_NSHIFT", Const, 0},
+		{"IN_CLASSC_HOST", Const, 0},
+		{"IN_CLASSC_NET", Const, 0},
+		{"IN_CLASSC_NSHIFT", Const, 0},
+		{"IN_CLASSD_HOST", Const, 0},
+		{"IN_CLASSD_NET", Const, 0},
+		{"IN_CLASSD_NSHIFT", Const, 0},
+		{"IN_CLOEXEC", Const, 0},
+		{"IN_CLOSE", Const, 0},
+		{"IN_CLOSE_NOWRITE", Const, 0},
+		{"IN_CLOSE_WRITE", Const, 0},
+		{"IN_CREATE", Const, 0},
+		{"IN_DELETE", Const, 0},
+		{"IN_DELETE_SELF", Const, 0},
+		{"IN_DONT_FOLLOW", Const, 0},
+		{"IN_EXCL_UNLINK", Const, 0},
+		{"IN_IGNORED", Const, 0},
+		{"IN_ISDIR", Const, 0},
+		{"IN_LINKLOCALNETNUM", Const, 0},
+		{"IN_LOOPBACKNET", Const, 0},
+		{"IN_MASK_ADD", Const, 0},
+		{"IN_MODIFY", Const, 0},
+		{"IN_MOVE", Const, 0},
+		{"IN_MOVED_FROM", Const, 0},
+		{"IN_MOVED_TO", Const, 0},
+		{"IN_MOVE_SELF", Const, 0},
+		{"IN_NONBLOCK", Const, 0},
+		{"IN_ONESHOT", Const, 0},
+		{"IN_ONLYDIR", Const, 0},
+		{"IN_OPEN", Const, 0},
+		{"IN_Q_OVERFLOW", Const, 0},
+		{"IN_RFC3021_HOST", Const, 1},
+		{"IN_RFC3021_MASK", Const, 1},
+		{"IN_RFC3021_NET", Const, 1},
+		{"IN_RFC3021_NSHIFT", Const, 1},
+		{"IN_UNMOUNT", Const, 0},
+		{"IOC_IN", Const, 1},
+		{"IOC_INOUT", Const, 1},
+		{"IOC_OUT", Const, 1},
+		{"IOC_VENDOR", Const, 3},
+		{"IOC_WS2", Const, 1},
+		{"IO_REPARSE_TAG_SYMLINK", Const, 4},
+		{"IPMreq", Type, 0},
+		{"IPMreq.Interface", Field, 0},
+		{"IPMreq.Multiaddr", Field, 0},
+		{"IPMreqn", Type, 0},
+		{"IPMreqn.Address", Field, 0},
+		{"IPMreqn.Ifindex", Field, 0},
+		{"IPMreqn.Multiaddr", Field, 0},
+		{"IPPROTO_3PC", Const, 0},
+		{"IPPROTO_ADFS", Const, 0},
+		{"IPPROTO_AH", Const, 0},
+		{"IPPROTO_AHIP", Const, 0},
+		{"IPPROTO_APES", Const, 0},
+		{"IPPROTO_ARGUS", Const, 0},
+		{"IPPROTO_AX25", Const, 0},
+		{"IPPROTO_BHA", Const, 0},
+		{"IPPROTO_BLT", Const, 0},
+		{"IPPROTO_BRSATMON", Const, 0},
+		{"IPPROTO_CARP", Const, 0},
+		{"IPPROTO_CFTP", Const, 0},
+		{"IPPROTO_CHAOS", Const, 0},
+		{"IPPROTO_CMTP", Const, 0},
+		{"IPPROTO_COMP", Const, 0},
+		{"IPPROTO_CPHB", Const, 0},
+		{"IPPROTO_CPNX", Const, 0},
+		{"IPPROTO_DCCP", Const, 0},
+		{"IPPROTO_DDP", Const, 0},
+		{"IPPROTO_DGP", Const, 0},
+		{"IPPROTO_DIVERT", Const, 0},
+		{"IPPROTO_DIVERT_INIT", Const, 3},
+		{"IPPROTO_DIVERT_RESP", Const, 3},
+		{"IPPROTO_DONE", Const, 0},
+		{"IPPROTO_DSTOPTS", Const, 0},
+		{"IPPROTO_EGP", Const, 0},
+		{"IPPROTO_EMCON", Const, 0},
+		{"IPPROTO_ENCAP", Const, 0},
+		{"IPPROTO_EON", Const, 0},
+		{"IPPROTO_ESP", Const, 0},
+		{"IPPROTO_ETHERIP", Const, 0},
+		{"IPPROTO_FRAGMENT", Const, 0},
+		{"IPPROTO_GGP", Const, 0},
+		{"IPPROTO_GMTP", Const, 0},
+		{"IPPROTO_GRE", Const, 0},
+		{"IPPROTO_HELLO", Const, 0},
+		{"IPPROTO_HMP", Const, 0},
+		{"IPPROTO_HOPOPTS", Const, 0},
+		{"IPPROTO_ICMP", Const, 0},
+		{"IPPROTO_ICMPV6", Const, 0},
+		{"IPPROTO_IDP", Const, 0},
+		{"IPPROTO_IDPR", Const, 0},
+		{"IPPROTO_IDRP", Const, 0},
+		{"IPPROTO_IGMP", Const, 0},
+		{"IPPROTO_IGP", Const, 0},
+		{"IPPROTO_IGRP", Const, 0},
+		{"IPPROTO_IL", Const, 0},
+		{"IPPROTO_INLSP", Const, 0},
+		{"IPPROTO_INP", Const, 0},
+		{"IPPROTO_IP", Const, 0},
+		{"IPPROTO_IPCOMP", Const, 0},
+		{"IPPROTO_IPCV", Const, 0},
+		{"IPPROTO_IPEIP", Const, 0},
+		{"IPPROTO_IPIP", Const, 0},
+		{"IPPROTO_IPPC", Const, 0},
+		{"IPPROTO_IPV4", Const, 0},
+		{"IPPROTO_IPV6", Const, 0},
+		{"IPPROTO_IPV6_ICMP", Const, 1},
+		{"IPPROTO_IRTP", Const, 0},
+		{"IPPROTO_KRYPTOLAN", Const, 0},
+		{"IPPROTO_LARP", Const, 0},
+		{"IPPROTO_LEAF1", Const, 0},
+		{"IPPROTO_LEAF2", Const, 0},
+		{"IPPROTO_MAX", Const, 0},
+		{"IPPROTO_MAXID", Const, 0},
+		{"IPPROTO_MEAS", Const, 0},
+		{"IPPROTO_MH", Const, 1},
+		{"IPPROTO_MHRP", Const, 0},
+		{"IPPROTO_MICP", Const, 0},
+		{"IPPROTO_MOBILE", Const, 0},
+		{"IPPROTO_MPLS", Const, 1},
+		{"IPPROTO_MTP", Const, 0},
+		{"IPPROTO_MUX", Const, 0},
+		{"IPPROTO_ND", Const, 0},
+		{"IPPROTO_NHRP", Const, 0},
+		{"IPPROTO_NONE", Const, 0},
+		{"IPPROTO_NSP", Const, 0},
+		{"IPPROTO_NVPII", Const, 0},
+		{"IPPROTO_OLD_DIVERT", Const, 0},
+		{"IPPROTO_OSPFIGP", Const, 0},
+		{"IPPROTO_PFSYNC", Const, 0},
+		{"IPPROTO_PGM", Const, 0},
+		{"IPPROTO_PIGP", Const, 0},
+		{"IPPROTO_PIM", Const, 0},
+		{"IPPROTO_PRM", Const, 0},
+		{"IPPROTO_PUP", Const, 0},
+		{"IPPROTO_PVP", Const, 0},
+		{"IPPROTO_RAW", Const, 0},
+		{"IPPROTO_RCCMON", Const, 0},
+		{"IPPROTO_RDP", Const, 0},
+		{"IPPROTO_ROUTING", Const, 0},
+		{"IPPROTO_RSVP", Const, 0},
+		{"IPPROTO_RVD", Const, 0},
+		{"IPPROTO_SATEXPAK", Const, 0},
+		{"IPPROTO_SATMON", Const, 0},
+		{"IPPROTO_SCCSP", Const, 0},
+		{"IPPROTO_SCTP", Const, 0},
+		{"IPPROTO_SDRP", Const, 0},
+		{"IPPROTO_SEND", Const, 1},
+		{"IPPROTO_SEP", Const, 0},
+		{"IPPROTO_SKIP", Const, 0},
+		{"IPPROTO_SPACER", Const, 0},
+		{"IPPROTO_SRPC", Const, 0},
+		{"IPPROTO_ST", Const, 0},
+		{"IPPROTO_SVMTP", Const, 0},
+		{"IPPROTO_SWIPE", Const, 0},
+		{"IPPROTO_TCF", Const, 0},
+		{"IPPROTO_TCP", Const, 0},
+		{"IPPROTO_TLSP", Const, 0},
+		{"IPPROTO_TP", Const, 0},
+		{"IPPROTO_TPXX", Const, 0},
+		{"IPPROTO_TRUNK1", Const, 0},
+		{"IPPROTO_TRUNK2", Const, 0},
+		{"IPPROTO_TTP", Const, 0},
+		{"IPPROTO_UDP", Const, 0},
+		{"IPPROTO_UDPLITE", Const, 0},
+		{"IPPROTO_VINES", Const, 0},
+		{"IPPROTO_VISA", Const, 0},
+		{"IPPROTO_VMTP", Const, 0},
+		{"IPPROTO_VRRP", Const, 1},
+		{"IPPROTO_WBEXPAK", Const, 0},
+		{"IPPROTO_WBMON", Const, 0},
+		{"IPPROTO_WSN", Const, 0},
+		{"IPPROTO_XNET", Const, 0},
+		{"IPPROTO_XTP", Const, 0},
+		{"IPV6_2292DSTOPTS", Const, 0},
+		{"IPV6_2292HOPLIMIT", Const, 0},
+		{"IPV6_2292HOPOPTS", Const, 0},
+		{"IPV6_2292NEXTHOP", Const, 0},
+		{"IPV6_2292PKTINFO", Const, 0},
+		{"IPV6_2292PKTOPTIONS", Const, 0},
+		{"IPV6_2292RTHDR", Const, 0},
+		{"IPV6_ADDRFORM", Const, 0},
+		{"IPV6_ADD_MEMBERSHIP", Const, 0},
+		{"IPV6_AUTHHDR", Const, 0},
+		{"IPV6_AUTH_LEVEL", Const, 1},
+		{"IPV6_AUTOFLOWLABEL", Const, 0},
+		{"IPV6_BINDANY", Const, 0},
+		{"IPV6_BINDV6ONLY", Const, 0},
+		{"IPV6_BOUND_IF", Const, 0},
+		{"IPV6_CHECKSUM", Const, 0},
+		{"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0},
+		{"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0},
+		{"IPV6_DEFHLIM", Const, 0},
+		{"IPV6_DONTFRAG", Const, 0},
+		{"IPV6_DROP_MEMBERSHIP", Const, 0},
+		{"IPV6_DSTOPTS", Const, 0},
+		{"IPV6_ESP_NETWORK_LEVEL", Const, 1},
+		{"IPV6_ESP_TRANS_LEVEL", Const, 1},
+		{"IPV6_FAITH", Const, 0},
+		{"IPV6_FLOWINFO_MASK", Const, 0},
+		{"IPV6_FLOWLABEL_MASK", Const, 0},
+		{"IPV6_FRAGTTL", Const, 0},
+		{"IPV6_FW_ADD", Const, 0},
+		{"IPV6_FW_DEL", Const, 0},
+		{"IPV6_FW_FLUSH", Const, 0},
+		{"IPV6_FW_GET", Const, 0},
+		{"IPV6_FW_ZERO", Const, 0},
+		{"IPV6_HLIMDEC", Const, 0},
+		{"IPV6_HOPLIMIT", Const, 0},
+		{"IPV6_HOPOPTS", Const, 0},
+		{"IPV6_IPCOMP_LEVEL", Const, 1},
+		{"IPV6_IPSEC_POLICY", Const, 0},
+		{"IPV6_JOIN_ANYCAST", Const, 0},
+		{"IPV6_JOIN_GROUP", Const, 0},
+		{"IPV6_LEAVE_ANYCAST", Const, 0},
+		{"IPV6_LEAVE_GROUP", Const, 0},
+		{"IPV6_MAXHLIM", Const, 0},
+		{"IPV6_MAXOPTHDR", Const, 0},
+		{"IPV6_MAXPACKET", Const, 0},
+		{"IPV6_MAX_GROUP_SRC_FILTER", Const, 0},
+		{"IPV6_MAX_MEMBERSHIPS", Const, 0},
+		{"IPV6_MAX_SOCK_SRC_FILTER", Const, 0},
+		{"IPV6_MIN_MEMBERSHIPS", Const, 0},
+		{"IPV6_MMTU", Const, 0},
+		{"IPV6_MSFILTER", Const, 0},
+		{"IPV6_MTU", Const, 0},
+		{"IPV6_MTU_DISCOVER", Const, 0},
+		{"IPV6_MULTICAST_HOPS", Const, 0},
+		{"IPV6_MULTICAST_IF", Const, 0},
+		{"IPV6_MULTICAST_LOOP", Const, 0},
+		{"IPV6_NEXTHOP", Const, 0},
+		{"IPV6_OPTIONS", Const, 1},
+		{"IPV6_PATHMTU", Const, 0},
+		{"IPV6_PIPEX", Const, 1},
+		{"IPV6_PKTINFO", Const, 0},
+		{"IPV6_PMTUDISC_DO", Const, 0},
+		{"IPV6_PMTUDISC_DONT", Const, 0},
+		{"IPV6_PMTUDISC_PROBE", Const, 0},
+		{"IPV6_PMTUDISC_WANT", Const, 0},
+		{"IPV6_PORTRANGE", Const, 0},
+		{"IPV6_PORTRANGE_DEFAULT", Const, 0},
+		{"IPV6_PORTRANGE_HIGH", Const, 0},
+		{"IPV6_PORTRANGE_LOW", Const, 0},
+		{"IPV6_PREFER_TEMPADDR", Const, 0},
+		{"IPV6_RECVDSTOPTS", Const, 0},
+		{"IPV6_RECVDSTPORT", Const, 3},
+		{"IPV6_RECVERR", Const, 0},
+		{"IPV6_RECVHOPLIMIT", Const, 0},
+		{"IPV6_RECVHOPOPTS", Const, 0},
+		{"IPV6_RECVPATHMTU", Const, 0},
+		{"IPV6_RECVPKTINFO", Const, 0},
+		{"IPV6_RECVRTHDR", Const, 0},
+		{"IPV6_RECVTCLASS", Const, 0},
+		{"IPV6_ROUTER_ALERT", Const, 0},
+		{"IPV6_RTABLE", Const, 1},
+		{"IPV6_RTHDR", Const, 0},
+		{"IPV6_RTHDRDSTOPTS", Const, 0},
+		{"IPV6_RTHDR_LOOSE", Const, 0},
+		{"IPV6_RTHDR_STRICT", Const, 0},
+		{"IPV6_RTHDR_TYPE_0", Const, 0},
+		{"IPV6_RXDSTOPTS", Const, 0},
+		{"IPV6_RXHOPOPTS", Const, 0},
+		{"IPV6_SOCKOPT_RESERVED1", Const, 0},
+		{"IPV6_TCLASS", Const, 0},
+		{"IPV6_UNICAST_HOPS", Const, 0},
+		{"IPV6_USE_MIN_MTU", Const, 0},
+		{"IPV6_V6ONLY", Const, 0},
+		{"IPV6_VERSION", Const, 0},
+		{"IPV6_VERSION_MASK", Const, 0},
+		{"IPV6_XFRM_POLICY", Const, 0},
+		{"IP_ADD_MEMBERSHIP", Const, 0},
+		{"IP_ADD_SOURCE_MEMBERSHIP", Const, 0},
+		{"IP_AUTH_LEVEL", Const, 1},
+		{"IP_BINDANY", Const, 0},
+		{"IP_BLOCK_SOURCE", Const, 0},
+		{"IP_BOUND_IF", Const, 0},
+		{"IP_DEFAULT_MULTICAST_LOOP", Const, 0},
+		{"IP_DEFAULT_MULTICAST_TTL", Const, 0},
+		{"IP_DF", Const, 0},
+		{"IP_DIVERTFL", Const, 3},
+		{"IP_DONTFRAG", Const, 0},
+		{"IP_DROP_MEMBERSHIP", Const, 0},
+		{"IP_DROP_SOURCE_MEMBERSHIP", Const, 0},
+		{"IP_DUMMYNET3", Const, 0},
+		{"IP_DUMMYNET_CONFIGURE", Const, 0},
+		{"IP_DUMMYNET_DEL", Const, 0},
+		{"IP_DUMMYNET_FLUSH", Const, 0},
+		{"IP_DUMMYNET_GET", Const, 0},
+		{"IP_EF", Const, 1},
+		{"IP_ERRORMTU", Const, 1},
+		{"IP_ESP_NETWORK_LEVEL", Const, 1},
+		{"IP_ESP_TRANS_LEVEL", Const, 1},
+		{"IP_FAITH", Const, 0},
+		{"IP_FREEBIND", Const, 0},
+		{"IP_FW3", Const, 0},
+		{"IP_FW_ADD", Const, 0},
+		{"IP_FW_DEL", Const, 0},
+		{"IP_FW_FLUSH", Const, 0},
+		{"IP_FW_GET", Const, 0},
+		{"IP_FW_NAT_CFG", Const, 0},
+		{"IP_FW_NAT_DEL", Const, 0},
+		{"IP_FW_NAT_GET_CONFIG", Const, 0},
+		{"IP_FW_NAT_GET_LOG", Const, 0},
+		{"IP_FW_RESETLOG", Const, 0},
+		{"IP_FW_TABLE_ADD", Const, 0},
+		{"IP_FW_TABLE_DEL", Const, 0},
+		{"IP_FW_TABLE_FLUSH", Const, 0},
+		{"IP_FW_TABLE_GETSIZE", Const, 0},
+		{"IP_FW_TABLE_LIST", Const, 0},
+		{"IP_FW_ZERO", Const, 0},
+		{"IP_HDRINCL", Const, 0},
+		{"IP_IPCOMP_LEVEL", Const, 1},
+		{"IP_IPSECFLOWINFO", Const, 1},
+		{"IP_IPSEC_LOCAL_AUTH", Const, 1},
+		{"IP_IPSEC_LOCAL_CRED", Const, 1},
+		{"IP_IPSEC_LOCAL_ID", Const, 1},
+		{"IP_IPSEC_POLICY", Const, 0},
+		{"IP_IPSEC_REMOTE_AUTH", Const, 1},
+		{"IP_IPSEC_REMOTE_CRED", Const, 1},
+		{"IP_IPSEC_REMOTE_ID", Const, 1},
+		{"IP_MAXPACKET", Const, 0},
+		{"IP_MAX_GROUP_SRC_FILTER", Const, 0},
+		{"IP_MAX_MEMBERSHIPS", Const, 0},
+		{"IP_MAX_SOCK_MUTE_FILTER", Const, 0},
+		{"IP_MAX_SOCK_SRC_FILTER", Const, 0},
+		{"IP_MAX_SOURCE_FILTER", Const, 0},
+		{"IP_MF", Const, 0},
+		{"IP_MINFRAGSIZE", Const, 1},
+		{"IP_MINTTL", Const, 0},
+		{"IP_MIN_MEMBERSHIPS", Const, 0},
+		{"IP_MSFILTER", Const, 0},
+		{"IP_MSS", Const, 0},
+		{"IP_MTU", Const, 0},
+		{"IP_MTU_DISCOVER", Const, 0},
+		{"IP_MULTICAST_IF", Const, 0},
+		{"IP_MULTICAST_IFINDEX", Const, 0},
+		{"IP_MULTICAST_LOOP", Const, 0},
+		{"IP_MULTICAST_TTL", Const, 0},
+		{"IP_MULTICAST_VIF", Const, 0},
+		{"IP_NAT__XXX", Const, 0},
+		{"IP_OFFMASK", Const, 0},
+		{"IP_OLD_FW_ADD", Const, 0},
+		{"IP_OLD_FW_DEL", Const, 0},
+		{"IP_OLD_FW_FLUSH", Const, 0},
+		{"IP_OLD_FW_GET", Const, 0},
+		{"IP_OLD_FW_RESETLOG", Const, 0},
+		{"IP_OLD_FW_ZERO", Const, 0},
+		{"IP_ONESBCAST", Const, 0},
+		{"IP_OPTIONS", Const, 0},
+		{"IP_ORIGDSTADDR", Const, 0},
+		{"IP_PASSSEC", Const, 0},
+		{"IP_PIPEX", Const, 1},
+		{"IP_PKTINFO", Const, 0},
+		{"IP_PKTOPTIONS", Const, 0},
+		{"IP_PMTUDISC", Const, 0},
+		{"IP_PMTUDISC_DO", Const, 0},
+		{"IP_PMTUDISC_DONT", Const, 0},
+		{"IP_PMTUDISC_PROBE", Const, 0},
+		{"IP_PMTUDISC_WANT", Const, 0},
+		{"IP_PORTRANGE", Const, 0},
+		{"IP_PORTRANGE_DEFAULT", Const, 0},
+		{"IP_PORTRANGE_HIGH", Const, 0},
+		{"IP_PORTRANGE_LOW", Const, 0},
+		{"IP_RECVDSTADDR", Const, 0},
+		{"IP_RECVDSTPORT", Const, 1},
+		{"IP_RECVERR", Const, 0},
+		{"IP_RECVIF", Const, 0},
+		{"IP_RECVOPTS", Const, 0},
+		{"IP_RECVORIGDSTADDR", Const, 0},
+		{"IP_RECVPKTINFO", Const, 0},
+		{"IP_RECVRETOPTS", Const, 0},
+		{"IP_RECVRTABLE", Const, 1},
+		{"IP_RECVTOS", Const, 0},
+		{"IP_RECVTTL", Const, 0},
+		{"IP_RETOPTS", Const, 0},
+		{"IP_RF", Const, 0},
+		{"IP_ROUTER_ALERT", Const, 0},
+		{"IP_RSVP_OFF", Const, 0},
+		{"IP_RSVP_ON", Const, 0},
+		{"IP_RSVP_VIF_OFF", Const, 0},
+		{"IP_RSVP_VIF_ON", Const, 0},
+		{"IP_RTABLE", Const, 1},
+		{"IP_SENDSRCADDR", Const, 0},
+		{"IP_STRIPHDR", Const, 0},
+		{"IP_TOS", Const, 0},
+		{"IP_TRAFFIC_MGT_BACKGROUND", Const, 0},
+		{"IP_TRANSPARENT", Const, 0},
+		{"IP_TTL", Const, 0},
+		{"IP_UNBLOCK_SOURCE", Const, 0},
+		{"IP_XFRM_POLICY", Const, 0},
+		{"IPv6MTUInfo", Type, 2},
+		{"IPv6MTUInfo.Addr", Field, 2},
+		{"IPv6MTUInfo.Mtu", Field, 2},
+		{"IPv6Mreq", Type, 0},
+		{"IPv6Mreq.Interface", Field, 0},
+		{"IPv6Mreq.Multiaddr", Field, 0},
+		{"ISIG", Const, 0},
+		{"ISTRIP", Const, 0},
+		{"IUCLC", Const, 0},
+		{"IUTF8", Const, 0},
+		{"IXANY", Const, 0},
+		{"IXOFF", Const, 0},
+		{"IXON", Const, 0},
+		{"IfAddrmsg", Type, 0},
+		{"IfAddrmsg.Family", Field, 0},
+		{"IfAddrmsg.Flags", Field, 0},
+		{"IfAddrmsg.Index", Field, 0},
+		{"IfAddrmsg.Prefixlen", Field, 0},
+		{"IfAddrmsg.Scope", Field, 0},
+		{"IfAnnounceMsghdr", Type, 1},
+		{"IfAnnounceMsghdr.Hdrlen", Field, 2},
+		{"IfAnnounceMsghdr.Index", Field, 1},
+		{"IfAnnounceMsghdr.Msglen", Field, 1},
+		{"IfAnnounceMsghdr.Name", Field, 1},
+		{"IfAnnounceMsghdr.Type", Field, 1},
+		{"IfAnnounceMsghdr.Version", Field, 1},
+		{"IfAnnounceMsghdr.What", Field, 1},
+		{"IfData", Type, 0},
+		{"IfData.Addrlen", Field, 0},
+		{"IfData.Baudrate", Field, 0},
+		{"IfData.Capabilities", Field, 2},
+		{"IfData.Collisions", Field, 0},
+		{"IfData.Datalen", Field, 0},
+		{"IfData.Epoch", Field, 0},
+		{"IfData.Hdrlen", Field, 0},
+		{"IfData.Hwassist", Field, 0},
+		{"IfData.Ibytes", Field, 0},
+		{"IfData.Ierrors", Field, 0},
+		{"IfData.Imcasts", Field, 0},
+		{"IfData.Ipackets", Field, 0},
+		{"IfData.Iqdrops", Field, 0},
+		{"IfData.Lastchange", Field, 0},
+		{"IfData.Link_state", Field, 0},
+		{"IfData.Mclpool", Field, 2},
+		{"IfData.Metric", Field, 0},
+		{"IfData.Mtu", Field, 0},
+		{"IfData.Noproto", Field, 0},
+		{"IfData.Obytes", Field, 0},
+		{"IfData.Oerrors", Field, 0},
+		{"IfData.Omcasts", Field, 0},
+		{"IfData.Opackets", Field, 0},
+		{"IfData.Pad", Field, 2},
+		{"IfData.Pad_cgo_0", Field, 2},
+		{"IfData.Pad_cgo_1", Field, 2},
+		{"IfData.Physical", Field, 0},
+		{"IfData.Recvquota", Field, 0},
+		{"IfData.Recvtiming", Field, 0},
+		{"IfData.Reserved1", Field, 0},
+		{"IfData.Reserved2", Field, 0},
+		{"IfData.Spare_char1", Field, 0},
+		{"IfData.Spare_char2", Field, 0},
+		{"IfData.Type", Field, 0},
+		{"IfData.Typelen", Field, 0},
+		{"IfData.Unused1", Field, 0},
+		{"IfData.Unused2", Field, 0},
+		{"IfData.Xmitquota", Field, 0},
+		{"IfData.Xmittiming", Field, 0},
+		{"IfInfomsg", Type, 0},
+		{"IfInfomsg.Change", Field, 0},
+		{"IfInfomsg.Family", Field, 0},
+		{"IfInfomsg.Flags", Field, 0},
+		{"IfInfomsg.Index", Field, 0},
+		{"IfInfomsg.Type", Field, 0},
+		{"IfInfomsg.X__ifi_pad", Field, 0},
+		{"IfMsghdr", Type, 0},
+		{"IfMsghdr.Addrs", Field, 0},
+		{"IfMsghdr.Data", Field, 0},
+		{"IfMsghdr.Flags", Field, 0},
+		{"IfMsghdr.Hdrlen", Field, 2},
+		{"IfMsghdr.Index", Field, 0},
+		{"IfMsghdr.Msglen", Field, 0},
+		{"IfMsghdr.Pad1", Field, 2},
+		{"IfMsghdr.Pad2", Field, 2},
+		{"IfMsghdr.Pad_cgo_0", Field, 0},
+		{"IfMsghdr.Pad_cgo_1", Field, 2},
+		{"IfMsghdr.Tableid", Field, 2},
+		{"IfMsghdr.Type", Field, 0},
+		{"IfMsghdr.Version", Field, 0},
+		{"IfMsghdr.Xflags", Field, 2},
+		{"IfaMsghdr", Type, 0},
+		{"IfaMsghdr.Addrs", Field, 0},
+		{"IfaMsghdr.Flags", Field, 0},
+		{"IfaMsghdr.Hdrlen", Field, 2},
+		{"IfaMsghdr.Index", Field, 0},
+		{"IfaMsghdr.Metric", Field, 0},
+		{"IfaMsghdr.Msglen", Field, 0},
+		{"IfaMsghdr.Pad1", Field, 2},
+		{"IfaMsghdr.Pad2", Field, 2},
+		{"IfaMsghdr.Pad_cgo_0", Field, 0},
+		{"IfaMsghdr.Tableid", Field, 2},
+		{"IfaMsghdr.Type", Field, 0},
+		{"IfaMsghdr.Version", Field, 0},
+		{"IfmaMsghdr", Type, 0},
+		{"IfmaMsghdr.Addrs", Field, 0},
+		{"IfmaMsghdr.Flags", Field, 0},
+		{"IfmaMsghdr.Index", Field, 0},
+		{"IfmaMsghdr.Msglen", Field, 0},
+		{"IfmaMsghdr.Pad_cgo_0", Field, 0},
+		{"IfmaMsghdr.Type", Field, 0},
+		{"IfmaMsghdr.Version", Field, 0},
+		{"IfmaMsghdr2", Type, 0},
+		{"IfmaMsghdr2.Addrs", Field, 0},
+		{"IfmaMsghdr2.Flags", Field, 0},
+		{"IfmaMsghdr2.Index", Field, 0},
+		{"IfmaMsghdr2.Msglen", Field, 0},
+		{"IfmaMsghdr2.Pad_cgo_0", Field, 0},
+		{"IfmaMsghdr2.Refcount", Field, 0},
+		{"IfmaMsghdr2.Type", Field, 0},
+		{"IfmaMsghdr2.Version", Field, 0},
+		{"ImplementsGetwd", Const, 0},
+		{"Inet4Pktinfo", Type, 0},
+		{"Inet4Pktinfo.Addr", Field, 0},
+		{"Inet4Pktinfo.Ifindex", Field, 0},
+		{"Inet4Pktinfo.Spec_dst", Field, 0},
+		{"Inet6Pktinfo", Type, 0},
+		{"Inet6Pktinfo.Addr", Field, 0},
+		{"Inet6Pktinfo.Ifindex", Field, 0},
+		{"InotifyAddWatch", Func, 0},
+		{"InotifyEvent", Type, 0},
+		{"InotifyEvent.Cookie", Field, 0},
+		{"InotifyEvent.Len", Field, 0},
+		{"InotifyEvent.Mask", Field, 0},
+		{"InotifyEvent.Name", Field, 0},
+		{"InotifyEvent.Wd", Field, 0},
+		{"InotifyInit", Func, 0},
+		{"InotifyInit1", Func, 0},
+		{"InotifyRmWatch", Func, 0},
+		{"InterfaceAddrMessage", Type, 0},
+		{"InterfaceAddrMessage.Data", Field, 0},
+		{"InterfaceAddrMessage.Header", Field, 0},
+		{"InterfaceAnnounceMessage", Type, 1},
+		{"InterfaceAnnounceMessage.Header", Field, 1},
+		{"InterfaceInfo", Type, 0},
+		{"InterfaceInfo.Address", Field, 0},
+		{"InterfaceInfo.BroadcastAddress", Field, 0},
+		{"InterfaceInfo.Flags", Field, 0},
+		{"InterfaceInfo.Netmask", Field, 0},
+		{"InterfaceMessage", Type, 0},
+		{"InterfaceMessage.Data", Field, 0},
+		{"InterfaceMessage.Header", Field, 0},
+		{"InterfaceMulticastAddrMessage", Type, 0},
+		{"InterfaceMulticastAddrMessage.Data", Field, 0},
+		{"InterfaceMulticastAddrMessage.Header", Field, 0},
+		{"InvalidHandle", Const, 0},
+		{"Ioperm", Func, 0},
+		{"Iopl", Func, 0},
+		{"Iovec", Type, 0},
+		{"Iovec.Base", Field, 0},
+		{"Iovec.Len", Field, 0},
+		{"IpAdapterInfo", Type, 0},
+		{"IpAdapterInfo.AdapterName", Field, 0},
+		{"IpAdapterInfo.Address", Field, 0},
+		{"IpAdapterInfo.AddressLength", Field, 0},
+		{"IpAdapterInfo.ComboIndex", Field, 0},
+		{"IpAdapterInfo.CurrentIpAddress", Field, 0},
+		{"IpAdapterInfo.Description", Field, 0},
+		{"IpAdapterInfo.DhcpEnabled", Field, 0},
+		{"IpAdapterInfo.DhcpServer", Field, 0},
+		{"IpAdapterInfo.GatewayList", Field, 0},
+		{"IpAdapterInfo.HaveWins", Field, 0},
+		{"IpAdapterInfo.Index", Field, 0},
+		{"IpAdapterInfo.IpAddressList", Field, 0},
+		{"IpAdapterInfo.LeaseExpires", Field, 0},
+		{"IpAdapterInfo.LeaseObtained", Field, 0},
+		{"IpAdapterInfo.Next", Field, 0},
+		{"IpAdapterInfo.PrimaryWinsServer", Field, 0},
+		{"IpAdapterInfo.SecondaryWinsServer", Field, 0},
+		{"IpAdapterInfo.Type", Field, 0},
+		{"IpAddrString", Type, 0},
+		{"IpAddrString.Context", Field, 0},
+		{"IpAddrString.IpAddress", Field, 0},
+		{"IpAddrString.IpMask", Field, 0},
+		{"IpAddrString.Next", Field, 0},
+		{"IpAddressString", Type, 0},
+		{"IpAddressString.String", Field, 0},
+		{"IpMaskString", Type, 0},
+		{"IpMaskString.String", Field, 2},
+		{"Issetugid", Func, 0},
+		{"KEY_ALL_ACCESS", Const, 0},
+		{"KEY_CREATE_LINK", Const, 0},
+		{"KEY_CREATE_SUB_KEY", Const, 0},
+		{"KEY_ENUMERATE_SUB_KEYS", Const, 0},
+		{"KEY_EXECUTE", Const, 0},
+		{"KEY_NOTIFY", Const, 0},
+		{"KEY_QUERY_VALUE", Const, 0},
+		{"KEY_READ", Const, 0},
+		{"KEY_SET_VALUE", Const, 0},
+		{"KEY_WOW64_32KEY", Const, 0},
+		{"KEY_WOW64_64KEY", Const, 0},
+		{"KEY_WRITE", Const, 0},
+		{"Kevent", Func, 0},
+		{"Kevent_t", Type, 0},
+		{"Kevent_t.Data", Field, 0},
+		{"Kevent_t.Fflags", Field, 0},
+		{"Kevent_t.Filter", Field, 0},
+		{"Kevent_t.Flags", Field, 0},
+		{"Kevent_t.Ident", Field, 0},
+		{"Kevent_t.Pad_cgo_0", Field, 2},
+		{"Kevent_t.Udata", Field, 0},
+		{"Kill", Func, 0},
+		{"Klogctl", Func, 0},
+		{"Kqueue", Func, 0},
+		{"LANG_ENGLISH", Const, 0},
+		{"LAYERED_PROTOCOL", Const, 2},
+		{"LCNT_OVERLOAD_FLUSH", Const, 1},
+		{"LINUX_REBOOT_CMD_CAD_OFF", Const, 0},
+		{"LINUX_REBOOT_CMD_CAD_ON", Const, 0},
+		{"LINUX_REBOOT_CMD_HALT", Const, 0},
+		{"LINUX_REBOOT_CMD_KEXEC", Const, 0},
+		{"LINUX_REBOOT_CMD_POWER_OFF", Const, 0},
+		{"LINUX_REBOOT_CMD_RESTART", Const, 0},
+		{"LINUX_REBOOT_CMD_RESTART2", Const, 0},
+		{"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0},
+		{"LINUX_REBOOT_MAGIC1", Const, 0},
+		{"LINUX_REBOOT_MAGIC2", Const, 0},
+		{"LOCK_EX", Const, 0},
+		{"LOCK_NB", Const, 0},
+		{"LOCK_SH", Const, 0},
+		{"LOCK_UN", Const, 0},
+		{"LazyDLL", Type, 0},
+		{"LazyDLL.Name", Field, 0},
+		{"LazyProc", Type, 0},
+		{"LazyProc.Name", Field, 0},
+		{"Lchown", Func, 0},
+		{"Linger", Type, 0},
+		{"Linger.Linger", Field, 0},
+		{"Linger.Onoff", Field, 0},
+		{"Link", Func, 0},
+		{"Listen", Func, 0},
+		{"Listxattr", Func, 1},
+		{"LoadCancelIoEx", Func, 1},
+		{"LoadConnectEx", Func, 1},
+		{"LoadCreateSymbolicLink", Func, 4},
+		{"LoadDLL", Func, 0},
+		{"LoadGetAddrInfo", Func, 1},
+		{"LoadLibrary", Func, 0},
+		{"LoadSetFileCompletionNotificationModes", Func, 2},
+		{"LocalFree", Func, 0},
+		{"Log2phys_t", Type, 0},
+		{"Log2phys_t.Contigbytes", Field, 0},
+		{"Log2phys_t.Devoffset", Field, 0},
+		{"Log2phys_t.Flags", Field, 0},
+		{"LookupAccountName", Func, 0},
+		{"LookupAccountSid", Func, 0},
+		{"LookupSID", Func, 0},
+		{"LsfJump", Func, 0},
+		{"LsfSocket", Func, 0},
+		{"LsfStmt", Func, 0},
+		{"Lstat", Func, 0},
+		{"MADV_AUTOSYNC", Const, 1},
+		{"MADV_CAN_REUSE", Const, 0},
+		{"MADV_CORE", Const, 1},
+		{"MADV_DOFORK", Const, 0},
+		{"MADV_DONTFORK", Const, 0},
+		{"MADV_DONTNEED", Const, 0},
+		{"MADV_FREE", Const, 0},
+		{"MADV_FREE_REUSABLE", Const, 0},
+		{"MADV_FREE_REUSE", Const, 0},
+		{"MADV_HUGEPAGE", Const, 0},
+		{"MADV_HWPOISON", Const, 0},
+		{"MADV_MERGEABLE", Const, 0},
+		{"MADV_NOCORE", Const, 1},
+		{"MADV_NOHUGEPAGE", Const, 0},
+		{"MADV_NORMAL", Const, 0},
+		{"MADV_NOSYNC", Const, 1},
+		{"MADV_PROTECT", Const, 1},
+		{"MADV_RANDOM", Const, 0},
+		{"MADV_REMOVE", Const, 0},
+		{"MADV_SEQUENTIAL", Const, 0},
+		{"MADV_SPACEAVAIL", Const, 3},
+		{"MADV_UNMERGEABLE", Const, 0},
+		{"MADV_WILLNEED", Const, 0},
+		{"MADV_ZERO_WIRED_PAGES", Const, 0},
+		{"MAP_32BIT", Const, 0},
+		{"MAP_ALIGNED_SUPER", Const, 3},
+		{"MAP_ALIGNMENT_16MB", Const, 3},
+		{"MAP_ALIGNMENT_1TB", Const, 3},
+		{"MAP_ALIGNMENT_256TB", Const, 3},
+		{"MAP_ALIGNMENT_4GB", Const, 3},
+		{"MAP_ALIGNMENT_64KB", Const, 3},
+		{"MAP_ALIGNMENT_64PB", Const, 3},
+		{"MAP_ALIGNMENT_MASK", Const, 3},
+		{"MAP_ALIGNMENT_SHIFT", Const, 3},
+		{"MAP_ANON", Const, 0},
+		{"MAP_ANONYMOUS", Const, 0},
+		{"MAP_COPY", Const, 0},
+		{"MAP_DENYWRITE", Const, 0},
+		{"MAP_EXECUTABLE", Const, 0},
+		{"MAP_FILE", Const, 0},
+		{"MAP_FIXED", Const, 0},
+		{"MAP_FLAGMASK", Const, 3},
+		{"MAP_GROWSDOWN", Const, 0},
+		{"MAP_HASSEMAPHORE", Const, 0},
+		{"MAP_HUGETLB", Const, 0},
+		{"MAP_INHERIT", Const, 3},
+		{"MAP_INHERIT_COPY", Const, 3},
+		{"MAP_INHERIT_DEFAULT", Const, 3},
+		{"MAP_INHERIT_DONATE_COPY", Const, 3},
+		{"MAP_INHERIT_NONE", Const, 3},
+		{"MAP_INHERIT_SHARE", Const, 3},
+		{"MAP_JIT", Const, 0},
+		{"MAP_LOCKED", Const, 0},
+		{"MAP_NOCACHE", Const, 0},
+		{"MAP_NOCORE", Const, 1},
+		{"MAP_NOEXTEND", Const, 0},
+		{"MAP_NONBLOCK", Const, 0},
+		{"MAP_NORESERVE", Const, 0},
+		{"MAP_NOSYNC", Const, 1},
+		{"MAP_POPULATE", Const, 0},
+		{"MAP_PREFAULT_READ", Const, 1},
+		{"MAP_PRIVATE", Const, 0},
+		{"MAP_RENAME", Const, 0},
+		{"MAP_RESERVED0080", Const, 0},
+		{"MAP_RESERVED0100", Const, 1},
+		{"MAP_SHARED", Const, 0},
+		{"MAP_STACK", Const, 0},
+		{"MAP_TRYFIXED", Const, 3},
+		{"MAP_TYPE", Const, 0},
+		{"MAP_WIRED", Const, 3},
+		{"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4},
+		{"MAXLEN_IFDESCR", Const, 0},
+		{"MAXLEN_PHYSADDR", Const, 0},
+		{"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0},
+		{"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0},
+		{"MAX_ADAPTER_NAME_LENGTH", Const, 0},
+		{"MAX_COMPUTERNAME_LENGTH", Const, 0},
+		{"MAX_INTERFACE_NAME_LEN", Const, 0},
+		{"MAX_LONG_PATH", Const, 0},
+		{"MAX_PATH", Const, 0},
+		{"MAX_PROTOCOL_CHAIN", Const, 2},
+		{"MCL_CURRENT", Const, 0},
+		{"MCL_FUTURE", Const, 0},
+		{"MNT_DETACH", Const, 0},
+		{"MNT_EXPIRE", Const, 0},
+		{"MNT_FORCE", Const, 0},
+		{"MSG_BCAST", Const, 1},
+		{"MSG_CMSG_CLOEXEC", Const, 0},
+		{"MSG_COMPAT", Const, 0},
+		{"MSG_CONFIRM", Const, 0},
+		{"MSG_CONTROLMBUF", Const, 1},
+		{"MSG_CTRUNC", Const, 0},
+		{"MSG_DONTROUTE", Const, 0},
+		{"MSG_DONTWAIT", Const, 0},
+		{"MSG_EOF", Const, 0},
+		{"MSG_EOR", Const, 0},
+		{"MSG_ERRQUEUE", Const, 0},
+		{"MSG_FASTOPEN", Const, 1},
+		{"MSG_FIN", Const, 0},
+		{"MSG_FLUSH", Const, 0},
+		{"MSG_HAVEMORE", Const, 0},
+		{"MSG_HOLD", Const, 0},
+		{"MSG_IOVUSRSPACE", Const, 1},
+		{"MSG_LENUSRSPACE", Const, 1},
+		{"MSG_MCAST", Const, 1},
+		{"MSG_MORE", Const, 0},
+		{"MSG_NAMEMBUF", Const, 1},
+		{"MSG_NBIO", Const, 0},
+		{"MSG_NEEDSA", Const, 0},
+		{"MSG_NOSIGNAL", Const, 0},
+		{"MSG_NOTIFICATION", Const, 0},
+		{"MSG_OOB", Const, 0},
+		{"MSG_PEEK", Const, 0},
+		{"MSG_PROXY", Const, 0},
+		{"MSG_RCVMORE", Const, 0},
+		{"MSG_RST", Const, 0},
+		{"MSG_SEND", Const, 0},
+		{"MSG_SYN", Const, 0},
+		{"MSG_TRUNC", Const, 0},
+		{"MSG_TRYHARD", Const, 0},
+		{"MSG_USERFLAGS", Const, 1},
+		{"MSG_WAITALL", Const, 0},
+		{"MSG_WAITFORONE", Const, 0},
+		{"MSG_WAITSTREAM", Const, 0},
+		{"MS_ACTIVE", Const, 0},
+		{"MS_ASYNC", Const, 0},
+		{"MS_BIND", Const, 0},
+		{"MS_DEACTIVATE", Const, 0},
+		{"MS_DIRSYNC", Const, 0},
+		{"MS_INVALIDATE", Const, 0},
+		{"MS_I_VERSION", Const, 0},
+		{"MS_KERNMOUNT", Const, 0},
+		{"MS_KILLPAGES", Const, 0},
+		{"MS_MANDLOCK", Const, 0},
+		{"MS_MGC_MSK", Const, 0},
+		{"MS_MGC_VAL", Const, 0},
+		{"MS_MOVE", Const, 0},
+		{"MS_NOATIME", Const, 0},
+		{"MS_NODEV", Const, 0},
+		{"MS_NODIRATIME", Const, 0},
+		{"MS_NOEXEC", Const, 0},
+		{"MS_NOSUID", Const, 0},
+		{"MS_NOUSER", Const, 0},
+		{"MS_POSIXACL", Const, 0},
+		{"MS_PRIVATE", Const, 0},
+		{"MS_RDONLY", Const, 0},
+		{"MS_REC", Const, 0},
+		{"MS_RELATIME", Const, 0},
+		{"MS_REMOUNT", Const, 0},
+		{"MS_RMT_MASK", Const, 0},
+		{"MS_SHARED", Const, 0},
+		{"MS_SILENT", Const, 0},
+		{"MS_SLAVE", Const, 0},
+		{"MS_STRICTATIME", Const, 0},
+		{"MS_SYNC", Const, 0},
+		{"MS_SYNCHRONOUS", Const, 0},
+		{"MS_UNBINDABLE", Const, 0},
+		{"Madvise", Func, 0},
+		{"MapViewOfFile", Func, 0},
+		{"MaxTokenInfoClass", Const, 0},
+		{"Mclpool", Type, 2},
+		{"Mclpool.Alive", Field, 2},
+		{"Mclpool.Cwm", Field, 2},
+		{"Mclpool.Grown", Field, 2},
+		{"Mclpool.Hwm", Field, 2},
+		{"Mclpool.Lwm", Field, 2},
+		{"MibIfRow", Type, 0},
+		{"MibIfRow.AdminStatus", Field, 0},
+		{"MibIfRow.Descr", Field, 0},
+		{"MibIfRow.DescrLen", Field, 0},
+		{"MibIfRow.InDiscards", Field, 0},
+		{"MibIfRow.InErrors", Field, 0},
+		{"MibIfRow.InNUcastPkts", Field, 0},
+		{"MibIfRow.InOctets", Field, 0},
+		{"MibIfRow.InUcastPkts", Field, 0},
+		{"MibIfRow.InUnknownProtos", Field, 0},
+		{"MibIfRow.Index", Field, 0},
+		{"MibIfRow.LastChange", Field, 0},
+		{"MibIfRow.Mtu", Field, 0},
+		{"MibIfRow.Name", Field, 0},
+		{"MibIfRow.OperStatus", Field, 0},
+		{"MibIfRow.OutDiscards", Field, 0},
+		{"MibIfRow.OutErrors", Field, 0},
+		{"MibIfRow.OutNUcastPkts", Field, 0},
+		{"MibIfRow.OutOctets", Field, 0},
+		{"MibIfRow.OutQLen", Field, 0},
+		{"MibIfRow.OutUcastPkts", Field, 0},
+		{"MibIfRow.PhysAddr", Field, 0},
+		{"MibIfRow.PhysAddrLen", Field, 0},
+		{"MibIfRow.Speed", Field, 0},
+		{"MibIfRow.Type", Field, 0},
+		{"Mkdir", Func, 0},
+		{"Mkdirat", Func, 0},
+		{"Mkfifo", Func, 0},
+		{"Mknod", Func, 0},
+		{"Mknodat", Func, 0},
+		{"Mlock", Func, 0},
+		{"Mlockall", Func, 0},
+		{"Mmap", Func, 0},
+		{"Mount", Func, 0},
+		{"MoveFile", Func, 0},
+		{"Mprotect", Func, 0},
+		{"Msghdr", Type, 0},
+		{"Msghdr.Control", Field, 0},
+		{"Msghdr.Controllen", Field, 0},
+		{"Msghdr.Flags", Field, 0},
+		{"Msghdr.Iov", Field, 0},
+		{"Msghdr.Iovlen", Field, 0},
+		{"Msghdr.Name", Field, 0},
+		{"Msghdr.Namelen", Field, 0},
+		{"Msghdr.Pad_cgo_0", Field, 0},
+		{"Msghdr.Pad_cgo_1", Field, 0},
+		{"Munlock", Func, 0},
+		{"Munlockall", Func, 0},
+		{"Munmap", Func, 0},
+		{"MustLoadDLL", Func, 0},
+		{"NAME_MAX", Const, 0},
+		{"NETLINK_ADD_MEMBERSHIP", Const, 0},
+		{"NETLINK_AUDIT", Const, 0},
+		{"NETLINK_BROADCAST_ERROR", Const, 0},
+		{"NETLINK_CONNECTOR", Const, 0},
+		{"NETLINK_DNRTMSG", Const, 0},
+		{"NETLINK_DROP_MEMBERSHIP", Const, 0},
+		{"NETLINK_ECRYPTFS", Const, 0},
+		{"NETLINK_FIB_LOOKUP", Const, 0},
+		{"NETLINK_FIREWALL", Const, 0},
+		{"NETLINK_GENERIC", Const, 0},
+		{"NETLINK_INET_DIAG", Const, 0},
+		{"NETLINK_IP6_FW", Const, 0},
+		{"NETLINK_ISCSI", Const, 0},
+		{"NETLINK_KOBJECT_UEVENT", Const, 0},
+		{"NETLINK_NETFILTER", Const, 0},
+		{"NETLINK_NFLOG", Const, 0},
+		{"NETLINK_NO_ENOBUFS", Const, 0},
+		{"NETLINK_PKTINFO", Const, 0},
+		{"NETLINK_RDMA", Const, 0},
+		{"NETLINK_ROUTE", Const, 0},
+		{"NETLINK_SCSITRANSPORT", Const, 0},
+		{"NETLINK_SELINUX", Const, 0},
+		{"NETLINK_UNUSED", Const, 0},
+		{"NETLINK_USERSOCK", Const, 0},
+		{"NETLINK_XFRM", Const, 0},
+		{"NET_RT_DUMP", Const, 0},
+		{"NET_RT_DUMP2", Const, 0},
+		{"NET_RT_FLAGS", Const, 0},
+		{"NET_RT_IFLIST", Const, 0},
+		{"NET_RT_IFLIST2", Const, 0},
+		{"NET_RT_IFLISTL", Const, 1},
+		{"NET_RT_IFMALIST", Const, 0},
+		{"NET_RT_MAXID", Const, 0},
+		{"NET_RT_OIFLIST", Const, 1},
+		{"NET_RT_OOIFLIST", Const, 1},
+		{"NET_RT_STAT", Const, 0},
+		{"NET_RT_STATS", Const, 1},
+		{"NET_RT_TABLE", Const, 1},
+		{"NET_RT_TRASH", Const, 0},
+		{"NLA_ALIGNTO", Const, 0},
+		{"NLA_F_NESTED", Const, 0},
+		{"NLA_F_NET_BYTEORDER", Const, 0},
+		{"NLA_HDRLEN", Const, 0},
+		{"NLMSG_ALIGNTO", Const, 0},
+		{"NLMSG_DONE", Const, 0},
+		{"NLMSG_ERROR", Const, 0},
+		{"NLMSG_HDRLEN", Const, 0},
+		{"NLMSG_MIN_TYPE", Const, 0},
+		{"NLMSG_NOOP", Const, 0},
+		{"NLMSG_OVERRUN", Const, 0},
+		{"NLM_F_ACK", Const, 0},
+		{"NLM_F_APPEND", Const, 0},
+		{"NLM_F_ATOMIC", Const, 0},
+		{"NLM_F_CREATE", Const, 0},
+		{"NLM_F_DUMP", Const, 0},
+		{"NLM_F_ECHO", Const, 0},
+		{"NLM_F_EXCL", Const, 0},
+		{"NLM_F_MATCH", Const, 0},
+		{"NLM_F_MULTI", Const, 0},
+		{"NLM_F_REPLACE", Const, 0},
+		{"NLM_F_REQUEST", Const, 0},
+		{"NLM_F_ROOT", Const, 0},
+		{"NOFLSH", Const, 0},
+		{"NOTE_ABSOLUTE", Const, 0},
+		{"NOTE_ATTRIB", Const, 0},
+		{"NOTE_BACKGROUND", Const, 16},
+		{"NOTE_CHILD", Const, 0},
+		{"NOTE_CRITICAL", Const, 16},
+		{"NOTE_DELETE", Const, 0},
+		{"NOTE_EOF", Const, 1},
+		{"NOTE_EXEC", Const, 0},
+		{"NOTE_EXIT", Const, 0},
+		{"NOTE_EXITSTATUS", Const, 0},
+		{"NOTE_EXIT_CSERROR", Const, 16},
+		{"NOTE_EXIT_DECRYPTFAIL", Const, 16},
+		{"NOTE_EXIT_DETAIL", Const, 16},
+		{"NOTE_EXIT_DETAIL_MASK", Const, 16},
+		{"NOTE_EXIT_MEMORY", Const, 16},
+		{"NOTE_EXIT_REPARENTED", Const, 16},
+		{"NOTE_EXTEND", Const, 0},
+		{"NOTE_FFAND", Const, 0},
+		{"NOTE_FFCOPY", Const, 0},
+		{"NOTE_FFCTRLMASK", Const, 0},
+		{"NOTE_FFLAGSMASK", Const, 0},
+		{"NOTE_FFNOP", Const, 0},
+		{"NOTE_FFOR", Const, 0},
+		{"NOTE_FORK", Const, 0},
+		{"NOTE_LEEWAY", Const, 16},
+		{"NOTE_LINK", Const, 0},
+		{"NOTE_LOWAT", Const, 0},
+		{"NOTE_NONE", Const, 0},
+		{"NOTE_NSECONDS", Const, 0},
+		{"NOTE_PCTRLMASK", Const, 0},
+		{"NOTE_PDATAMASK", Const, 0},
+		{"NOTE_REAP", Const, 0},
+		{"NOTE_RENAME", Const, 0},
+		{"NOTE_RESOURCEEND", Const, 0},
+		{"NOTE_REVOKE", Const, 0},
+		{"NOTE_SECONDS", Const, 0},
+		{"NOTE_SIGNAL", Const, 0},
+		{"NOTE_TRACK", Const, 0},
+		{"NOTE_TRACKERR", Const, 0},
+		{"NOTE_TRIGGER", Const, 0},
+		{"NOTE_TRUNCATE", Const, 1},
+		{"NOTE_USECONDS", Const, 0},
+		{"NOTE_VM_ERROR", Const, 0},
+		{"NOTE_VM_PRESSURE", Const, 0},
+		{"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0},
+		{"NOTE_VM_PRESSURE_TERMINATE", Const, 0},
+		{"NOTE_WRITE", Const, 0},
+		{"NameCanonical", Const, 0},
+		{"NameCanonicalEx", Const, 0},
+		{"NameDisplay", Const, 0},
+		{"NameDnsDomain", Const, 0},
+		{"NameFullyQualifiedDN", Const, 0},
+		{"NameSamCompatible", Const, 0},
+		{"NameServicePrincipal", Const, 0},
+		{"NameUniqueId", Const, 0},
+		{"NameUnknown", Const, 0},
+		{"NameUserPrincipal", Const, 0},
+		{"Nanosleep", Func, 0},
+		{"NetApiBufferFree", Func, 0},
+		{"NetGetJoinInformation", Func, 2},
+		{"NetSetupDomainName", Const, 2},
+		{"NetSetupUnjoined", Const, 2},
+		{"NetSetupUnknownStatus", Const, 2},
+		{"NetSetupWorkgroupName", Const, 2},
+		{"NetUserGetInfo", Func, 0},
+		{"NetlinkMessage", Type, 0},
+		{"NetlinkMessage.Data", Field, 0},
+		{"NetlinkMessage.Header", Field, 0},
+		{"NetlinkRIB", Func, 0},
+		{"NetlinkRouteAttr", Type, 0},
+		{"NetlinkRouteAttr.Attr", Field, 0},
+		{"NetlinkRouteAttr.Value", Field, 0},
+		{"NetlinkRouteRequest", Type, 0},
+		{"NetlinkRouteRequest.Data", Field, 0},
+		{"NetlinkRouteRequest.Header", Field, 0},
+		{"NewCallback", Func, 0},
+		{"NewCallbackCDecl", Func, 3},
+		{"NewLazyDLL", Func, 0},
+		{"NlAttr", Type, 0},
+		{"NlAttr.Len", Field, 0},
+		{"NlAttr.Type", Field, 0},
+		{"NlMsgerr", Type, 0},
+		{"NlMsgerr.Error", Field, 0},
+		{"NlMsgerr.Msg", Field, 0},
+		{"NlMsghdr", Type, 0},
+		{"NlMsghdr.Flags", Field, 0},
+		{"NlMsghdr.Len", Field, 0},
+		{"NlMsghdr.Pid", Field, 0},
+		{"NlMsghdr.Seq", Field, 0},
+		{"NlMsghdr.Type", Field, 0},
+		{"NsecToFiletime", Func, 0},
+		{"NsecToTimespec", Func, 0},
+		{"NsecToTimeval", Func, 0},
+		{"Ntohs", Func, 0},
+		{"OCRNL", Const, 0},
+		{"OFDEL", Const, 0},
+		{"OFILL", Const, 0},
+		{"OFIOGETBMAP", Const, 1},
+		{"OID_PKIX_KP_SERVER_AUTH", Var, 0},
+		{"OID_SERVER_GATED_CRYPTO", Var, 0},
+		{"OID_SGC_NETSCAPE", Var, 0},
+		{"OLCUC", Const, 0},
+		{"ONLCR", Const, 0},
+		{"ONLRET", Const, 0},
+		{"ONOCR", Const, 0},
+		{"ONOEOT", Const, 1},
+		{"OPEN_ALWAYS", Const, 0},
+		{"OPEN_EXISTING", Const, 0},
+		{"OPOST", Const, 0},
+		{"O_ACCMODE", Const, 0},
+		{"O_ALERT", Const, 0},
+		{"O_ALT_IO", Const, 1},
+		{"O_APPEND", Const, 0},
+		{"O_ASYNC", Const, 0},
+		{"O_CLOEXEC", Const, 0},
+		{"O_CREAT", Const, 0},
+		{"O_DIRECT", Const, 0},
+		{"O_DIRECTORY", Const, 0},
+		{"O_DP_GETRAWENCRYPTED", Const, 16},
+		{"O_DSYNC", Const, 0},
+		{"O_EVTONLY", Const, 0},
+		{"O_EXCL", Const, 0},
+		{"O_EXEC", Const, 0},
+		{"O_EXLOCK", Const, 0},
+		{"O_FSYNC", Const, 0},
+		{"O_LARGEFILE", Const, 0},
+		{"O_NDELAY", Const, 0},
+		{"O_NOATIME", Const, 0},
+		{"O_NOCTTY", Const, 0},
+		{"O_NOFOLLOW", Const, 0},
+		{"O_NONBLOCK", Const, 0},
+		{"O_NOSIGPIPE", Const, 1},
+		{"O_POPUP", Const, 0},
+		{"O_RDONLY", Const, 0},
+		{"O_RDWR", Const, 0},
+		{"O_RSYNC", Const, 0},
+		{"O_SHLOCK", Const, 0},
+		{"O_SYMLINK", Const, 0},
+		{"O_SYNC", Const, 0},
+		{"O_TRUNC", Const, 0},
+		{"O_TTY_INIT", Const, 0},
+		{"O_WRONLY", Const, 0},
+		{"Open", Func, 0},
+		{"OpenCurrentProcessToken", Func, 0},
+		{"OpenProcess", Func, 0},
+		{"OpenProcessToken", Func, 0},
+		{"Openat", Func, 0},
+		{"Overlapped", Type, 0},
+		{"Overlapped.HEvent", Field, 0},
+		{"Overlapped.Internal", Field, 0},
+		{"Overlapped.InternalHigh", Field, 0},
+		{"Overlapped.Offset", Field, 0},
+		{"Overlapped.OffsetHigh", Field, 0},
+		{"PACKET_ADD_MEMBERSHIP", Const, 0},
+		{"PACKET_BROADCAST", Const, 0},
+		{"PACKET_DROP_MEMBERSHIP", Const, 0},
+		{"PACKET_FASTROUTE", Const, 0},
+		{"PACKET_HOST", Const, 0},
+		{"PACKET_LOOPBACK", Const, 0},
+		{"PACKET_MR_ALLMULTI", Const, 0},
+		{"PACKET_MR_MULTICAST", Const, 0},
+		{"PACKET_MR_PROMISC", Const, 0},
+		{"PACKET_MULTICAST", Const, 0},
+		{"PACKET_OTHERHOST", Const, 0},
+		{"PACKET_OUTGOING", Const, 0},
+		{"PACKET_RECV_OUTPUT", Const, 0},
+		{"PACKET_RX_RING", Const, 0},
+		{"PACKET_STATISTICS", Const, 0},
+		{"PAGE_EXECUTE_READ", Const, 0},
+		{"PAGE_EXECUTE_READWRITE", Const, 0},
+		{"PAGE_EXECUTE_WRITECOPY", Const, 0},
+		{"PAGE_READONLY", Const, 0},
+		{"PAGE_READWRITE", Const, 0},
+		{"PAGE_WRITECOPY", Const, 0},
+		{"PARENB", Const, 0},
+		{"PARMRK", Const, 0},
+		{"PARODD", Const, 0},
+		{"PENDIN", Const, 0},
+		{"PFL_HIDDEN", Const, 2},
+		{"PFL_MATCHES_PROTOCOL_ZERO", Const, 2},
+		{"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2},
+		{"PFL_NETWORKDIRECT_PROVIDER", Const, 2},
+		{"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2},
+		{"PF_FLUSH", Const, 1},
+		{"PKCS_7_ASN_ENCODING", Const, 0},
+		{"PMC5_PIPELINE_FLUSH", Const, 1},
+		{"PRIO_PGRP", Const, 2},
+		{"PRIO_PROCESS", Const, 2},
+		{"PRIO_USER", Const, 2},
+		{"PRI_IOFLUSH", Const, 1},
+		{"PROCESS_QUERY_INFORMATION", Const, 0},
+		{"PROCESS_TERMINATE", Const, 2},
+		{"PROT_EXEC", Const, 0},
+		{"PROT_GROWSDOWN", Const, 0},
+		{"PROT_GROWSUP", Const, 0},
+		{"PROT_NONE", Const, 0},
+		{"PROT_READ", Const, 0},
+		{"PROT_WRITE", Const, 0},
+		{"PROV_DH_SCHANNEL", Const, 0},
+		{"PROV_DSS", Const, 0},
+		{"PROV_DSS_DH", Const, 0},
+		{"PROV_EC_ECDSA_FULL", Const, 0},
+		{"PROV_EC_ECDSA_SIG", Const, 0},
+		{"PROV_EC_ECNRA_FULL", Const, 0},
+		{"PROV_EC_ECNRA_SIG", Const, 0},
+		{"PROV_FORTEZZA", Const, 0},
+		{"PROV_INTEL_SEC", Const, 0},
+		{"PROV_MS_EXCHANGE", Const, 0},
+		{"PROV_REPLACE_OWF", Const, 0},
+		{"PROV_RNG", Const, 0},
+		{"PROV_RSA_AES", Const, 0},
+		{"PROV_RSA_FULL", Const, 0},
+		{"PROV_RSA_SCHANNEL", Const, 0},
+		{"PROV_RSA_SIG", Const, 0},
+		{"PROV_SPYRUS_LYNKS", Const, 0},
+		{"PROV_SSL", Const, 0},
+		{"PR_CAPBSET_DROP", Const, 0},
+		{"PR_CAPBSET_READ", Const, 0},
+		{"PR_CLEAR_SECCOMP_FILTER", Const, 0},
+		{"PR_ENDIAN_BIG", Const, 0},
+		{"PR_ENDIAN_LITTLE", Const, 0},
+		{"PR_ENDIAN_PPC_LITTLE", Const, 0},
+		{"PR_FPEMU_NOPRINT", Const, 0},
+		{"PR_FPEMU_SIGFPE", Const, 0},
+		{"PR_FP_EXC_ASYNC", Const, 0},
+		{"PR_FP_EXC_DISABLED", Const, 0},
+		{"PR_FP_EXC_DIV", Const, 0},
+		{"PR_FP_EXC_INV", Const, 0},
+		{"PR_FP_EXC_NONRECOV", Const, 0},
+		{"PR_FP_EXC_OVF", Const, 0},
+		{"PR_FP_EXC_PRECISE", Const, 0},
+		{"PR_FP_EXC_RES", Const, 0},
+		{"PR_FP_EXC_SW_ENABLE", Const, 0},
+		{"PR_FP_EXC_UND", Const, 0},
+		{"PR_GET_DUMPABLE", Const, 0},
+		{"PR_GET_ENDIAN", Const, 0},
+		{"PR_GET_FPEMU", Const, 0},
+		{"PR_GET_FPEXC", Const, 0},
+		{"PR_GET_KEEPCAPS", Const, 0},
+		{"PR_GET_NAME", Const, 0},
+		{"PR_GET_PDEATHSIG", Const, 0},
+		{"PR_GET_SECCOMP", Const, 0},
+		{"PR_GET_SECCOMP_FILTER", Const, 0},
+		{"PR_GET_SECUREBITS", Const, 0},
+		{"PR_GET_TIMERSLACK", Const, 0},
+		{"PR_GET_TIMING", Const, 0},
+		{"PR_GET_TSC", Const, 0},
+		{"PR_GET_UNALIGN", Const, 0},
+		{"PR_MCE_KILL", Const, 0},
+		{"PR_MCE_KILL_CLEAR", Const, 0},
+		{"PR_MCE_KILL_DEFAULT", Const, 0},
+		{"PR_MCE_KILL_EARLY", Const, 0},
+		{"PR_MCE_KILL_GET", Const, 0},
+		{"PR_MCE_KILL_LATE", Const, 0},
+		{"PR_MCE_KILL_SET", Const, 0},
+		{"PR_SECCOMP_FILTER_EVENT", Const, 0},
+		{"PR_SECCOMP_FILTER_SYSCALL", Const, 0},
+		{"PR_SET_DUMPABLE", Const, 0},
+		{"PR_SET_ENDIAN", Const, 0},
+		{"PR_SET_FPEMU", Const, 0},
+		{"PR_SET_FPEXC", Const, 0},
+		{"PR_SET_KEEPCAPS", Const, 0},
+		{"PR_SET_NAME", Const, 0},
+		{"PR_SET_PDEATHSIG", Const, 0},
+		{"PR_SET_PTRACER", Const, 0},
+		{"PR_SET_SECCOMP", Const, 0},
+		{"PR_SET_SECCOMP_FILTER", Const, 0},
+		{"PR_SET_SECUREBITS", Const, 0},
+		{"PR_SET_TIMERSLACK", Const, 0},
+		{"PR_SET_TIMING", Const, 0},
+		{"PR_SET_TSC", Const, 0},
+		{"PR_SET_UNALIGN", Const, 0},
+		{"PR_TASK_PERF_EVENTS_DISABLE", Const, 0},
+		{"PR_TASK_PERF_EVENTS_ENABLE", Const, 0},
+		{"PR_TIMING_STATISTICAL", Const, 0},
+		{"PR_TIMING_TIMESTAMP", Const, 0},
+		{"PR_TSC_ENABLE", Const, 0},
+		{"PR_TSC_SIGSEGV", Const, 0},
+		{"PR_UNALIGN_NOPRINT", Const, 0},
+		{"PR_UNALIGN_SIGBUS", Const, 0},
+		{"PTRACE_ARCH_PRCTL", Const, 0},
+		{"PTRACE_ATTACH", Const, 0},
+		{"PTRACE_CONT", Const, 0},
+		{"PTRACE_DETACH", Const, 0},
+		{"PTRACE_EVENT_CLONE", Const, 0},
+		{"PTRACE_EVENT_EXEC", Const, 0},
+		{"PTRACE_EVENT_EXIT", Const, 0},
+		{"PTRACE_EVENT_FORK", Const, 0},
+		{"PTRACE_EVENT_VFORK", Const, 0},
+		{"PTRACE_EVENT_VFORK_DONE", Const, 0},
+		{"PTRACE_GETCRUNCHREGS", Const, 0},
+		{"PTRACE_GETEVENTMSG", Const, 0},
+		{"PTRACE_GETFPREGS", Const, 0},
+		{"PTRACE_GETFPXREGS", Const, 0},
+		{"PTRACE_GETHBPREGS", Const, 0},
+		{"PTRACE_GETREGS", Const, 0},
+		{"PTRACE_GETREGSET", Const, 0},
+		{"PTRACE_GETSIGINFO", Const, 0},
+		{"PTRACE_GETVFPREGS", Const, 0},
+		{"PTRACE_GETWMMXREGS", Const, 0},
+		{"PTRACE_GET_THREAD_AREA", Const, 0},
+		{"PTRACE_KILL", Const, 0},
+		{"PTRACE_OLDSETOPTIONS", Const, 0},
+		{"PTRACE_O_MASK", Const, 0},
+		{"PTRACE_O_TRACECLONE", Const, 0},
+		{"PTRACE_O_TRACEEXEC", Const, 0},
+		{"PTRACE_O_TRACEEXIT", Const, 0},
+		{"PTRACE_O_TRACEFORK", Const, 0},
+		{"PTRACE_O_TRACESYSGOOD", Const, 0},
+		{"PTRACE_O_TRACEVFORK", Const, 0},
+		{"PTRACE_O_TRACEVFORKDONE", Const, 0},
+		{"PTRACE_PEEKDATA", Const, 0},
+		{"PTRACE_PEEKTEXT", Const, 0},
+		{"PTRACE_PEEKUSR", Const, 0},
+		{"PTRACE_POKEDATA", Const, 0},
+		{"PTRACE_POKETEXT", Const, 0},
+		{"PTRACE_POKEUSR", Const, 0},
+		{"PTRACE_SETCRUNCHREGS", Const, 0},
+		{"PTRACE_SETFPREGS", Const, 0},
+		{"PTRACE_SETFPXREGS", Const, 0},
+		{"PTRACE_SETHBPREGS", Const, 0},
+		{"PTRACE_SETOPTIONS", Const, 0},
+		{"PTRACE_SETREGS", Const, 0},
+		{"PTRACE_SETREGSET", Const, 0},
+		{"PTRACE_SETSIGINFO", Const, 0},
+		{"PTRACE_SETVFPREGS", Const, 0},
+		{"PTRACE_SETWMMXREGS", Const, 0},
+		{"PTRACE_SET_SYSCALL", Const, 0},
+		{"PTRACE_SET_THREAD_AREA", Const, 0},
+		{"PTRACE_SINGLEBLOCK", Const, 0},
+		{"PTRACE_SINGLESTEP", Const, 0},
+		{"PTRACE_SYSCALL", Const, 0},
+		{"PTRACE_SYSEMU", Const, 0},
+		{"PTRACE_SYSEMU_SINGLESTEP", Const, 0},
+		{"PTRACE_TRACEME", Const, 0},
+		{"PT_ATTACH", Const, 0},
+		{"PT_ATTACHEXC", Const, 0},
+		{"PT_CONTINUE", Const, 0},
+		{"PT_DATA_ADDR", Const, 0},
+		{"PT_DENY_ATTACH", Const, 0},
+		{"PT_DETACH", Const, 0},
+		{"PT_FIRSTMACH", Const, 0},
+		{"PT_FORCEQUOTA", Const, 0},
+		{"PT_KILL", Const, 0},
+		{"PT_MASK", Const, 1},
+		{"PT_READ_D", Const, 0},
+		{"PT_READ_I", Const, 0},
+		{"PT_READ_U", Const, 0},
+		{"PT_SIGEXC", Const, 0},
+		{"PT_STEP", Const, 0},
+		{"PT_TEXT_ADDR", Const, 0},
+		{"PT_TEXT_END_ADDR", Const, 0},
+		{"PT_THUPDATE", Const, 0},
+		{"PT_TRACE_ME", Const, 0},
+		{"PT_WRITE_D", Const, 0},
+		{"PT_WRITE_I", Const, 0},
+		{"PT_WRITE_U", Const, 0},
+		{"ParseDirent", Func, 0},
+		{"ParseNetlinkMessage", Func, 0},
+		{"ParseNetlinkRouteAttr", Func, 0},
+		{"ParseRoutingMessage", Func, 0},
+		{"ParseRoutingSockaddr", Func, 0},
+		{"ParseSocketControlMessage", Func, 0},
+		{"ParseUnixCredentials", Func, 0},
+		{"ParseUnixRights", Func, 0},
+		{"PathMax", Const, 0},
+		{"Pathconf", Func, 0},
+		{"Pause", Func, 0},
+		{"Pipe", Func, 0},
+		{"Pipe2", Func, 1},
+		{"PivotRoot", Func, 0},
+		{"Pointer", Type, 11},
+		{"PostQueuedCompletionStatus", Func, 0},
+		{"Pread", Func, 0},
+		{"Proc", Type, 0},
+		{"Proc.Dll", Field, 0},
+		{"Proc.Name", Field, 0},
+		{"ProcAttr", Type, 0},
+		{"ProcAttr.Dir", Field, 0},
+		{"ProcAttr.Env", Field, 0},
+		{"ProcAttr.Files", Field, 0},
+		{"ProcAttr.Sys", Field, 0},
+		{"Process32First", Func, 4},
+		{"Process32Next", Func, 4},
+		{"ProcessEntry32", Type, 4},
+		{"ProcessEntry32.DefaultHeapID", Field, 4},
+		{"ProcessEntry32.ExeFile", Field, 4},
+		{"ProcessEntry32.Flags", Field, 4},
+		{"ProcessEntry32.ModuleID", Field, 4},
+		{"ProcessEntry32.ParentProcessID", Field, 4},
+		{"ProcessEntry32.PriClassBase", Field, 4},
+		{"ProcessEntry32.ProcessID", Field, 4},
+		{"ProcessEntry32.Size", Field, 4},
+		{"ProcessEntry32.Threads", Field, 4},
+		{"ProcessEntry32.Usage", Field, 4},
+		{"ProcessInformation", Type, 0},
+		{"ProcessInformation.Process", Field, 0},
+		{"ProcessInformation.ProcessId", Field, 0},
+		{"ProcessInformation.Thread", Field, 0},
+		{"ProcessInformation.ThreadId", Field, 0},
+		{"Protoent", Type, 0},
+		{"Protoent.Aliases", Field, 0},
+		{"Protoent.Name", Field, 0},
+		{"Protoent.Proto", Field, 0},
+		{"PtraceAttach", Func, 0},
+		{"PtraceCont", Func, 0},
+		{"PtraceDetach", Func, 0},
+		{"PtraceGetEventMsg", Func, 0},
+		{"PtraceGetRegs", Func, 0},
+		{"PtracePeekData", Func, 0},
+		{"PtracePeekText", Func, 0},
+		{"PtracePokeData", Func, 0},
+		{"PtracePokeText", Func, 0},
+		{"PtraceRegs", Type, 0},
+		{"PtraceRegs.Cs", Field, 0},
+		{"PtraceRegs.Ds", Field, 0},
+		{"PtraceRegs.Eax", Field, 0},
+		{"PtraceRegs.Ebp", Field, 0},
+		{"PtraceRegs.Ebx", Field, 0},
+		{"PtraceRegs.Ecx", Field, 0},
+		{"PtraceRegs.Edi", Field, 0},
+		{"PtraceRegs.Edx", Field, 0},
+		{"PtraceRegs.Eflags", Field, 0},
+		{"PtraceRegs.Eip", Field, 0},
+		{"PtraceRegs.Es", Field, 0},
+		{"PtraceRegs.Esi", Field, 0},
+		{"PtraceRegs.Esp", Field, 0},
+		{"PtraceRegs.Fs", Field, 0},
+		{"PtraceRegs.Fs_base", Field, 0},
+		{"PtraceRegs.Gs", Field, 0},
+		{"PtraceRegs.Gs_base", Field, 0},
+		{"PtraceRegs.Orig_eax", Field, 0},
+		{"PtraceRegs.Orig_rax", Field, 0},
+		{"PtraceRegs.R10", Field, 0},
+		{"PtraceRegs.R11", Field, 0},
+		{"PtraceRegs.R12", Field, 0},
+		{"PtraceRegs.R13", Field, 0},
+		{"PtraceRegs.R14", Field, 0},
+		{"PtraceRegs.R15", Field, 0},
+		{"PtraceRegs.R8", Field, 0},
+		{"PtraceRegs.R9", Field, 0},
+		{"PtraceRegs.Rax", Field, 0},
+		{"PtraceRegs.Rbp", Field, 0},
+		{"PtraceRegs.Rbx", Field, 0},
+		{"PtraceRegs.Rcx", Field, 0},
+		{"PtraceRegs.Rdi", Field, 0},
+		{"PtraceRegs.Rdx", Field, 0},
+		{"PtraceRegs.Rip", Field, 0},
+		{"PtraceRegs.Rsi", Field, 0},
+		{"PtraceRegs.Rsp", Field, 0},
+		{"PtraceRegs.Ss", Field, 0},
+		{"PtraceRegs.Uregs", Field, 0},
+		{"PtraceRegs.Xcs", Field, 0},
+		{"PtraceRegs.Xds", Field, 0},
+		{"PtraceRegs.Xes", Field, 0},
+		{"PtraceRegs.Xfs", Field, 0},
+		{"PtraceRegs.Xgs", Field, 0},
+		{"PtraceRegs.Xss", Field, 0},
+		{"PtraceSetOptions", Func, 0},
+		{"PtraceSetRegs", Func, 0},
+		{"PtraceSingleStep", Func, 0},
+		{"PtraceSyscall", Func, 1},
+		{"Pwrite", Func, 0},
+		{"REG_BINARY", Const, 0},
+		{"REG_DWORD", Const, 0},
+		{"REG_DWORD_BIG_ENDIAN", Const, 0},
+		{"REG_DWORD_LITTLE_ENDIAN", Const, 0},
+		{"REG_EXPAND_SZ", Const, 0},
+		{"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0},
+		{"REG_LINK", Const, 0},
+		{"REG_MULTI_SZ", Const, 0},
+		{"REG_NONE", Const, 0},
+		{"REG_QWORD", Const, 0},
+		{"REG_QWORD_LITTLE_ENDIAN", Const, 0},
+		{"REG_RESOURCE_LIST", Const, 0},
+		{"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0},
+		{"REG_SZ", Const, 0},
+		{"RLIMIT_AS", Const, 0},
+		{"RLIMIT_CORE", Const, 0},
+		{"RLIMIT_CPU", Const, 0},
+		{"RLIMIT_CPU_USAGE_MONITOR", Const, 16},
+		{"RLIMIT_DATA", Const, 0},
+		{"RLIMIT_FSIZE", Const, 0},
+		{"RLIMIT_NOFILE", Const, 0},
+		{"RLIMIT_STACK", Const, 0},
+		{"RLIM_INFINITY", Const, 0},
+		{"RTAX_ADVMSS", Const, 0},
+		{"RTAX_AUTHOR", Const, 0},
+		{"RTAX_BRD", Const, 0},
+		{"RTAX_CWND", Const, 0},
+		{"RTAX_DST", Const, 0},
+		{"RTAX_FEATURES", Const, 0},
+		{"RTAX_FEATURE_ALLFRAG", Const, 0},
+		{"RTAX_FEATURE_ECN", Const, 0},
+		{"RTAX_FEATURE_SACK", Const, 0},
+		{"RTAX_FEATURE_TIMESTAMP", Const, 0},
+		{"RTAX_GATEWAY", Const, 0},
+		{"RTAX_GENMASK", Const, 0},
+		{"RTAX_HOPLIMIT", Const, 0},
+		{"RTAX_IFA", Const, 0},
+		{"RTAX_IFP", Const, 0},
+		{"RTAX_INITCWND", Const, 0},
+		{"RTAX_INITRWND", Const, 0},
+		{"RTAX_LABEL", Const, 1},
+		{"RTAX_LOCK", Const, 0},
+		{"RTAX_MAX", Const, 0},
+		{"RTAX_MTU", Const, 0},
+		{"RTAX_NETMASK", Const, 0},
+		{"RTAX_REORDERING", Const, 0},
+		{"RTAX_RTO_MIN", Const, 0},
+		{"RTAX_RTT", Const, 0},
+		{"RTAX_RTTVAR", Const, 0},
+		{"RTAX_SRC", Const, 1},
+		{"RTAX_SRCMASK", Const, 1},
+		{"RTAX_SSTHRESH", Const, 0},
+		{"RTAX_TAG", Const, 1},
+		{"RTAX_UNSPEC", Const, 0},
+		{"RTAX_WINDOW", Const, 0},
+		{"RTA_ALIGNTO", Const, 0},
+		{"RTA_AUTHOR", Const, 0},
+		{"RTA_BRD", Const, 0},
+		{"RTA_CACHEINFO", Const, 0},
+		{"RTA_DST", Const, 0},
+		{"RTA_FLOW", Const, 0},
+		{"RTA_GATEWAY", Const, 0},
+		{"RTA_GENMASK", Const, 0},
+		{"RTA_IFA", Const, 0},
+		{"RTA_IFP", Const, 0},
+		{"RTA_IIF", Const, 0},
+		{"RTA_LABEL", Const, 1},
+		{"RTA_MAX", Const, 0},
+		{"RTA_METRICS", Const, 0},
+		{"RTA_MULTIPATH", Const, 0},
+		{"RTA_NETMASK", Const, 0},
+		{"RTA_OIF", Const, 0},
+		{"RTA_PREFSRC", Const, 0},
+		{"RTA_PRIORITY", Const, 0},
+		{"RTA_SRC", Const, 0},
+		{"RTA_SRCMASK", Const, 1},
+		{"RTA_TABLE", Const, 0},
+		{"RTA_TAG", Const, 1},
+		{"RTA_UNSPEC", Const, 0},
+		{"RTCF_DIRECTSRC", Const, 0},
+		{"RTCF_DOREDIRECT", Const, 0},
+		{"RTCF_LOG", Const, 0},
+		{"RTCF_MASQ", Const, 0},
+		{"RTCF_NAT", Const, 0},
+		{"RTCF_VALVE", Const, 0},
+		{"RTF_ADDRCLASSMASK", Const, 0},
+		{"RTF_ADDRCONF", Const, 0},
+		{"RTF_ALLONLINK", Const, 0},
+		{"RTF_ANNOUNCE", Const, 1},
+		{"RTF_BLACKHOLE", Const, 0},
+		{"RTF_BROADCAST", Const, 0},
+		{"RTF_CACHE", Const, 0},
+		{"RTF_CLONED", Const, 1},
+		{"RTF_CLONING", Const, 0},
+		{"RTF_CONDEMNED", Const, 0},
+		{"RTF_DEFAULT", Const, 0},
+		{"RTF_DELCLONE", Const, 0},
+		{"RTF_DONE", Const, 0},
+		{"RTF_DYNAMIC", Const, 0},
+		{"RTF_FLOW", Const, 0},
+		{"RTF_FMASK", Const, 0},
+		{"RTF_GATEWAY", Const, 0},
+		{"RTF_GWFLAG_COMPAT", Const, 3},
+		{"RTF_HOST", Const, 0},
+		{"RTF_IFREF", Const, 0},
+		{"RTF_IFSCOPE", Const, 0},
+		{"RTF_INTERFACE", Const, 0},
+		{"RTF_IRTT", Const, 0},
+		{"RTF_LINKRT", Const, 0},
+		{"RTF_LLDATA", Const, 0},
+		{"RTF_LLINFO", Const, 0},
+		{"RTF_LOCAL", Const, 0},
+		{"RTF_MASK", Const, 1},
+		{"RTF_MODIFIED", Const, 0},
+		{"RTF_MPATH", Const, 1},
+		{"RTF_MPLS", Const, 1},
+		{"RTF_MSS", Const, 0},
+		{"RTF_MTU", Const, 0},
+		{"RTF_MULTICAST", Const, 0},
+		{"RTF_NAT", Const, 0},
+		{"RTF_NOFORWARD", Const, 0},
+		{"RTF_NONEXTHOP", Const, 0},
+		{"RTF_NOPMTUDISC", Const, 0},
+		{"RTF_PERMANENT_ARP", Const, 1},
+		{"RTF_PINNED", Const, 0},
+		{"RTF_POLICY", Const, 0},
+		{"RTF_PRCLONING", Const, 0},
+		{"RTF_PROTO1", Const, 0},
+		{"RTF_PROTO2", Const, 0},
+		{"RTF_PROTO3", Const, 0},
+		{"RTF_PROXY", Const, 16},
+		{"RTF_REINSTATE", Const, 0},
+		{"RTF_REJECT", Const, 0},
+		{"RTF_RNH_LOCKED", Const, 0},
+		{"RTF_ROUTER", Const, 16},
+		{"RTF_SOURCE", Const, 1},
+		{"RTF_SRC", Const, 1},
+		{"RTF_STATIC", Const, 0},
+		{"RTF_STICKY", Const, 0},
+		{"RTF_THROW", Const, 0},
+		{"RTF_TUNNEL", Const, 1},
+		{"RTF_UP", Const, 0},
+		{"RTF_USETRAILERS", Const, 1},
+		{"RTF_WASCLONED", Const, 0},
+		{"RTF_WINDOW", Const, 0},
+		{"RTF_XRESOLVE", Const, 0},
+		{"RTM_ADD", Const, 0},
+		{"RTM_BASE", Const, 0},
+		{"RTM_CHANGE", Const, 0},
+		{"RTM_CHGADDR", Const, 1},
+		{"RTM_DELACTION", Const, 0},
+		{"RTM_DELADDR", Const, 0},
+		{"RTM_DELADDRLABEL", Const, 0},
+		{"RTM_DELETE", Const, 0},
+		{"RTM_DELLINK", Const, 0},
+		{"RTM_DELMADDR", Const, 0},
+		{"RTM_DELNEIGH", Const, 0},
+		{"RTM_DELQDISC", Const, 0},
+		{"RTM_DELROUTE", Const, 0},
+		{"RTM_DELRULE", Const, 0},
+		{"RTM_DELTCLASS", Const, 0},
+		{"RTM_DELTFILTER", Const, 0},
+		{"RTM_DESYNC", Const, 1},
+		{"RTM_F_CLONED", Const, 0},
+		{"RTM_F_EQUALIZE", Const, 0},
+		{"RTM_F_NOTIFY", Const, 0},
+		{"RTM_F_PREFIX", Const, 0},
+		{"RTM_GET", Const, 0},
+		{"RTM_GET2", Const, 0},
+		{"RTM_GETACTION", Const, 0},
+		{"RTM_GETADDR", Const, 0},
+		{"RTM_GETADDRLABEL", Const, 0},
+		{"RTM_GETANYCAST", Const, 0},
+		{"RTM_GETDCB", Const, 0},
+		{"RTM_GETLINK", Const, 0},
+		{"RTM_GETMULTICAST", Const, 0},
+		{"RTM_GETNEIGH", Const, 0},
+		{"RTM_GETNEIGHTBL", Const, 0},
+		{"RTM_GETQDISC", Const, 0},
+		{"RTM_GETROUTE", Const, 0},
+		{"RTM_GETRULE", Const, 0},
+		{"RTM_GETTCLASS", Const, 0},
+		{"RTM_GETTFILTER", Const, 0},
+		{"RTM_IEEE80211", Const, 0},
+		{"RTM_IFANNOUNCE", Const, 0},
+		{"RTM_IFINFO", Const, 0},
+		{"RTM_IFINFO2", Const, 0},
+		{"RTM_LLINFO_UPD", Const, 1},
+		{"RTM_LOCK", Const, 0},
+		{"RTM_LOSING", Const, 0},
+		{"RTM_MAX", Const, 0},
+		{"RTM_MAXSIZE", Const, 1},
+		{"RTM_MISS", Const, 0},
+		{"RTM_NEWACTION", Const, 0},
+		{"RTM_NEWADDR", Const, 0},
+		{"RTM_NEWADDRLABEL", Const, 0},
+		{"RTM_NEWLINK", Const, 0},
+		{"RTM_NEWMADDR", Const, 0},
+		{"RTM_NEWMADDR2", Const, 0},
+		{"RTM_NEWNDUSEROPT", Const, 0},
+		{"RTM_NEWNEIGH", Const, 0},
+		{"RTM_NEWNEIGHTBL", Const, 0},
+		{"RTM_NEWPREFIX", Const, 0},
+		{"RTM_NEWQDISC", Const, 0},
+		{"RTM_NEWROUTE", Const, 0},
+		{"RTM_NEWRULE", Const, 0},
+		{"RTM_NEWTCLASS", Const, 0},
+		{"RTM_NEWTFILTER", Const, 0},
+		{"RTM_NR_FAMILIES", Const, 0},
+		{"RTM_NR_MSGTYPES", Const, 0},
+		{"RTM_OIFINFO", Const, 1},
+		{"RTM_OLDADD", Const, 0},
+		{"RTM_OLDDEL", Const, 0},
+		{"RTM_OOIFINFO", Const, 1},
+		{"RTM_REDIRECT", Const, 0},
+		{"RTM_RESOLVE", Const, 0},
+		{"RTM_RTTUNIT", Const, 0},
+		{"RTM_SETDCB", Const, 0},
+		{"RTM_SETGATE", Const, 1},
+		{"RTM_SETLINK", Const, 0},
+		{"RTM_SETNEIGHTBL", Const, 0},
+		{"RTM_VERSION", Const, 0},
+		{"RTNH_ALIGNTO", Const, 0},
+		{"RTNH_F_DEAD", Const, 0},
+		{"RTNH_F_ONLINK", Const, 0},
+		{"RTNH_F_PERVASIVE", Const, 0},
+		{"RTNLGRP_IPV4_IFADDR", Const, 1},
+		{"RTNLGRP_IPV4_MROUTE", Const, 1},
+		{"RTNLGRP_IPV4_ROUTE", Const, 1},
+		{"RTNLGRP_IPV4_RULE", Const, 1},
+		{"RTNLGRP_IPV6_IFADDR", Const, 1},
+		{"RTNLGRP_IPV6_IFINFO", Const, 1},
+		{"RTNLGRP_IPV6_MROUTE", Const, 1},
+		{"RTNLGRP_IPV6_PREFIX", Const, 1},
+		{"RTNLGRP_IPV6_ROUTE", Const, 1},
+		{"RTNLGRP_IPV6_RULE", Const, 1},
+		{"RTNLGRP_LINK", Const, 1},
+		{"RTNLGRP_ND_USEROPT", Const, 1},
+		{"RTNLGRP_NEIGH", Const, 1},
+		{"RTNLGRP_NONE", Const, 1},
+		{"RTNLGRP_NOTIFY", Const, 1},
+		{"RTNLGRP_TC", Const, 1},
+		{"RTN_ANYCAST", Const, 0},
+		{"RTN_BLACKHOLE", Const, 0},
+		{"RTN_BROADCAST", Const, 0},
+		{"RTN_LOCAL", Const, 0},
+		{"RTN_MAX", Const, 0},
+		{"RTN_MULTICAST", Const, 0},
+		{"RTN_NAT", Const, 0},
+		{"RTN_PROHIBIT", Const, 0},
+		{"RTN_THROW", Const, 0},
+		{"RTN_UNICAST", Const, 0},
+		{"RTN_UNREACHABLE", Const, 0},
+		{"RTN_UNSPEC", Const, 0},
+		{"RTN_XRESOLVE", Const, 0},
+		{"RTPROT_BIRD", Const, 0},
+		{"RTPROT_BOOT", Const, 0},
+		{"RTPROT_DHCP", Const, 0},
+		{"RTPROT_DNROUTED", Const, 0},
+		{"RTPROT_GATED", Const, 0},
+		{"RTPROT_KERNEL", Const, 0},
+		{"RTPROT_MRT", Const, 0},
+		{"RTPROT_NTK", Const, 0},
+		{"RTPROT_RA", Const, 0},
+		{"RTPROT_REDIRECT", Const, 0},
+		{"RTPROT_STATIC", Const, 0},
+		{"RTPROT_UNSPEC", Const, 0},
+		{"RTPROT_XORP", Const, 0},
+		{"RTPROT_ZEBRA", Const, 0},
+		{"RTV_EXPIRE", Const, 0},
+		{"RTV_HOPCOUNT", Const, 0},
+		{"RTV_MTU", Const, 0},
+		{"RTV_RPIPE", Const, 0},
+		{"RTV_RTT", Const, 0},
+		{"RTV_RTTVAR", Const, 0},
+		{"RTV_SPIPE", Const, 0},
+		{"RTV_SSTHRESH", Const, 0},
+		{"RTV_WEIGHT", Const, 0},
+		{"RT_CACHING_CONTEXT", Const, 1},
+		{"RT_CLASS_DEFAULT", Const, 0},
+		{"RT_CLASS_LOCAL", Const, 0},
+		{"RT_CLASS_MAIN", Const, 0},
+		{"RT_CLASS_MAX", Const, 0},
+		{"RT_CLASS_UNSPEC", Const, 0},
+		{"RT_DEFAULT_FIB", Const, 1},
+		{"RT_NORTREF", Const, 1},
+		{"RT_SCOPE_HOST", Const, 0},
+		{"RT_SCOPE_LINK", Const, 0},
+		{"RT_SCOPE_NOWHERE", Const, 0},
+		{"RT_SCOPE_SITE", Const, 0},
+		{"RT_SCOPE_UNIVERSE", Const, 0},
+		{"RT_TABLEID_MAX", Const, 1},
+		{"RT_TABLE_COMPAT", Const, 0},
+		{"RT_TABLE_DEFAULT", Const, 0},
+		{"RT_TABLE_LOCAL", Const, 0},
+		{"RT_TABLE_MAIN", Const, 0},
+		{"RT_TABLE_MAX", Const, 0},
+		{"RT_TABLE_UNSPEC", Const, 0},
+		{"RUSAGE_CHILDREN", Const, 0},
+		{"RUSAGE_SELF", Const, 0},
+		{"RUSAGE_THREAD", Const, 0},
+		{"Radvisory_t", Type, 0},
+		{"Radvisory_t.Count", Field, 0},
+		{"Radvisory_t.Offset", Field, 0},
+		{"Radvisory_t.Pad_cgo_0", Field, 0},
+		{"RawConn", Type, 9},
+		{"RawSockaddr", Type, 0},
+		{"RawSockaddr.Data", Field, 0},
+		{"RawSockaddr.Family", Field, 0},
+		{"RawSockaddr.Len", Field, 0},
+		{"RawSockaddrAny", Type, 0},
+		{"RawSockaddrAny.Addr", Field, 0},
+		{"RawSockaddrAny.Pad", Field, 0},
+		{"RawSockaddrDatalink", Type, 0},
+		{"RawSockaddrDatalink.Alen", Field, 0},
+		{"RawSockaddrDatalink.Data", Field, 0},
+		{"RawSockaddrDatalink.Family", Field, 0},
+		{"RawSockaddrDatalink.Index", Field, 0},
+		{"RawSockaddrDatalink.Len", Field, 0},
+		{"RawSockaddrDatalink.Nlen", Field, 0},
+		{"RawSockaddrDatalink.Pad_cgo_0", Field, 2},
+		{"RawSockaddrDatalink.Slen", Field, 0},
+		{"RawSockaddrDatalink.Type", Field, 0},
+		{"RawSockaddrInet4", Type, 0},
+		{"RawSockaddrInet4.Addr", Field, 0},
+		{"RawSockaddrInet4.Family", Field, 0},
+		{"RawSockaddrInet4.Len", Field, 0},
+		{"RawSockaddrInet4.Port", Field, 0},
+		{"RawSockaddrInet4.Zero", Field, 0},
+		{"RawSockaddrInet6", Type, 0},
+		{"RawSockaddrInet6.Addr", Field, 0},
+		{"RawSockaddrInet6.Family", Field, 0},
+		{"RawSockaddrInet6.Flowinfo", Field, 0},
+		{"RawSockaddrInet6.Len", Field, 0},
+		{"RawSockaddrInet6.Port", Field, 0},
+		{"RawSockaddrInet6.Scope_id", Field, 0},
+		{"RawSockaddrLinklayer", Type, 0},
+		{"RawSockaddrLinklayer.Addr", Field, 0},
+		{"RawSockaddrLinklayer.Family", Field, 0},
+		{"RawSockaddrLinklayer.Halen", Field, 0},
+		{"RawSockaddrLinklayer.Hatype", Field, 0},
+		{"RawSockaddrLinklayer.Ifindex", Field, 0},
+		{"RawSockaddrLinklayer.Pkttype", Field, 0},
+		{"RawSockaddrLinklayer.Protocol", Field, 0},
+		{"RawSockaddrNetlink", Type, 0},
+		{"RawSockaddrNetlink.Family", Field, 0},
+		{"RawSockaddrNetlink.Groups", Field, 0},
+		{"RawSockaddrNetlink.Pad", Field, 0},
+		{"RawSockaddrNetlink.Pid", Field, 0},
+		{"RawSockaddrUnix", Type, 0},
+		{"RawSockaddrUnix.Family", Field, 0},
+		{"RawSockaddrUnix.Len", Field, 0},
+		{"RawSockaddrUnix.Pad_cgo_0", Field, 2},
+		{"RawSockaddrUnix.Path", Field, 0},
+		{"RawSyscall", Func, 0},
+		{"RawSyscall6", Func, 0},
+		{"Read", Func, 0},
+		{"ReadConsole", Func, 1},
+		{"ReadDirectoryChanges", Func, 0},
+		{"ReadDirent", Func, 0},
+		{"ReadFile", Func, 0},
+		{"Readlink", Func, 0},
+		{"Reboot", Func, 0},
+		{"Recvfrom", Func, 0},
+		{"Recvmsg", Func, 0},
+		{"RegCloseKey", Func, 0},
+		{"RegEnumKeyEx", Func, 0},
+		{"RegOpenKeyEx", Func, 0},
+		{"RegQueryInfoKey", Func, 0},
+		{"RegQueryValueEx", Func, 0},
+		{"RemoveDirectory", Func, 0},
+		{"Removexattr", Func, 1},
+		{"Rename", Func, 0},
+		{"Renameat", Func, 0},
+		{"Revoke", Func, 0},
+		{"Rlimit", Type, 0},
+		{"Rlimit.Cur", Field, 0},
+		{"Rlimit.Max", Field, 0},
+		{"Rmdir", Func, 0},
+		{"RouteMessage", Type, 0},
+		{"RouteMessage.Data", Field, 0},
+		{"RouteMessage.Header", Field, 0},
+		{"RouteRIB", Func, 0},
+		{"RoutingMessage", Type, 0},
+		{"RtAttr", Type, 0},
+		{"RtAttr.Len", Field, 0},
+		{"RtAttr.Type", Field, 0},
+		{"RtGenmsg", Type, 0},
+		{"RtGenmsg.Family", Field, 0},
+		{"RtMetrics", Type, 0},
+		{"RtMetrics.Expire", Field, 0},
+		{"RtMetrics.Filler", Field, 0},
+		{"RtMetrics.Hopcount", Field, 0},
+		{"RtMetrics.Locks", Field, 0},
+		{"RtMetrics.Mtu", Field, 0},
+		{"RtMetrics.Pad", Field, 3},
+		{"RtMetrics.Pksent", Field, 0},
+		{"RtMetrics.Recvpipe", Field, 0},
+		{"RtMetrics.Refcnt", Field, 2},
+		{"RtMetrics.Rtt", Field, 0},
+		{"RtMetrics.Rttvar", Field, 0},
+		{"RtMetrics.Sendpipe", Field, 0},
+		{"RtMetrics.Ssthresh", Field, 0},
+		{"RtMetrics.Weight", Field, 0},
+		{"RtMsg", Type, 0},
+		{"RtMsg.Dst_len", Field, 0},
+		{"RtMsg.Family", Field, 0},
+		{"RtMsg.Flags", Field, 0},
+		{"RtMsg.Protocol", Field, 0},
+		{"RtMsg.Scope", Field, 0},
+		{"RtMsg.Src_len", Field, 0},
+		{"RtMsg.Table", Field, 0},
+		{"RtMsg.Tos", Field, 0},
+		{"RtMsg.Type", Field, 0},
+		{"RtMsghdr", Type, 0},
+		{"RtMsghdr.Addrs", Field, 0},
+		{"RtMsghdr.Errno", Field, 0},
+		{"RtMsghdr.Flags", Field, 0},
+		{"RtMsghdr.Fmask", Field, 0},
+		{"RtMsghdr.Hdrlen", Field, 2},
+		{"RtMsghdr.Index", Field, 0},
+		{"RtMsghdr.Inits", Field, 0},
+		{"RtMsghdr.Mpls", Field, 2},
+		{"RtMsghdr.Msglen", Field, 0},
+		{"RtMsghdr.Pad_cgo_0", Field, 0},
+		{"RtMsghdr.Pad_cgo_1", Field, 2},
+		{"RtMsghdr.Pid", Field, 0},
+		{"RtMsghdr.Priority", Field, 2},
+		{"RtMsghdr.Rmx", Field, 0},
+		{"RtMsghdr.Seq", Field, 0},
+		{"RtMsghdr.Tableid", Field, 2},
+		{"RtMsghdr.Type", Field, 0},
+		{"RtMsghdr.Use", Field, 0},
+		{"RtMsghdr.Version", Field, 0},
+		{"RtNexthop", Type, 0},
+		{"RtNexthop.Flags", Field, 0},
+		{"RtNexthop.Hops", Field, 0},
+		{"RtNexthop.Ifindex", Field, 0},
+		{"RtNexthop.Len", Field, 0},
+		{"Rusage", Type, 0},
+		{"Rusage.CreationTime", Field, 0},
+		{"Rusage.ExitTime", Field, 0},
+		{"Rusage.Idrss", Field, 0},
+		{"Rusage.Inblock", Field, 0},
+		{"Rusage.Isrss", Field, 0},
+		{"Rusage.Ixrss", Field, 0},
+		{"Rusage.KernelTime", Field, 0},
+		{"Rusage.Majflt", Field, 0},
+		{"Rusage.Maxrss", Field, 0},
+		{"Rusage.Minflt", Field, 0},
+		{"Rusage.Msgrcv", Field, 0},
+		{"Rusage.Msgsnd", Field, 0},
+		{"Rusage.Nivcsw", Field, 0},
+		{"Rusage.Nsignals", Field, 0},
+		{"Rusage.Nswap", Field, 0},
+		{"Rusage.Nvcsw", Field, 0},
+		{"Rusage.Oublock", Field, 0},
+		{"Rusage.Stime", Field, 0},
+		{"Rusage.UserTime", Field, 0},
+		{"Rusage.Utime", Field, 0},
+		{"SCM_BINTIME", Const, 0},
+		{"SCM_CREDENTIALS", Const, 0},
+		{"SCM_CREDS", Const, 0},
+		{"SCM_RIGHTS", Const, 0},
+		{"SCM_TIMESTAMP", Const, 0},
+		{"SCM_TIMESTAMPING", Const, 0},
+		{"SCM_TIMESTAMPNS", Const, 0},
+		{"SCM_TIMESTAMP_MONOTONIC", Const, 0},
+		{"SHUT_RD", Const, 0},
+		{"SHUT_RDWR", Const, 0},
+		{"SHUT_WR", Const, 0},
+		{"SID", Type, 0},
+		{"SIDAndAttributes", Type, 0},
+		{"SIDAndAttributes.Attributes", Field, 0},
+		{"SIDAndAttributes.Sid", Field, 0},
+		{"SIGABRT", Const, 0},
+		{"SIGALRM", Const, 0},
+		{"SIGBUS", Const, 0},
+		{"SIGCHLD", Const, 0},
+		{"SIGCLD", Const, 0},
+		{"SIGCONT", Const, 0},
+		{"SIGEMT", Const, 0},
+		{"SIGFPE", Const, 0},
+		{"SIGHUP", Const, 0},
+		{"SIGILL", Const, 0},
+		{"SIGINFO", Const, 0},
+		{"SIGINT", Const, 0},
+		{"SIGIO", Const, 0},
+		{"SIGIOT", Const, 0},
+		{"SIGKILL", Const, 0},
+		{"SIGLIBRT", Const, 1},
+		{"SIGLWP", Const, 0},
+		{"SIGPIPE", Const, 0},
+		{"SIGPOLL", Const, 0},
+		{"SIGPROF", Const, 0},
+		{"SIGPWR", Const, 0},
+		{"SIGQUIT", Const, 0},
+		{"SIGSEGV", Const, 0},
+		{"SIGSTKFLT", Const, 0},
+		{"SIGSTOP", Const, 0},
+		{"SIGSYS", Const, 0},
+		{"SIGTERM", Const, 0},
+		{"SIGTHR", Const, 0},
+		{"SIGTRAP", Const, 0},
+		{"SIGTSTP", Const, 0},
+		{"SIGTTIN", Const, 0},
+		{"SIGTTOU", Const, 0},
+		{"SIGUNUSED", Const, 0},
+		{"SIGURG", Const, 0},
+		{"SIGUSR1", Const, 0},
+		{"SIGUSR2", Const, 0},
+		{"SIGVTALRM", Const, 0},
+		{"SIGWINCH", Const, 0},
+		{"SIGXCPU", Const, 0},
+		{"SIGXFSZ", Const, 0},
+		{"SIOCADDDLCI", Const, 0},
+		{"SIOCADDMULTI", Const, 0},
+		{"SIOCADDRT", Const, 0},
+		{"SIOCAIFADDR", Const, 0},
+		{"SIOCAIFGROUP", Const, 0},
+		{"SIOCALIFADDR", Const, 0},
+		{"SIOCARPIPLL", Const, 0},
+		{"SIOCATMARK", Const, 0},
+		{"SIOCAUTOADDR", Const, 0},
+		{"SIOCAUTONETMASK", Const, 0},
+		{"SIOCBRDGADD", Const, 1},
+		{"SIOCBRDGADDS", Const, 1},
+		{"SIOCBRDGARL", Const, 1},
+		{"SIOCBRDGDADDR", Const, 1},
+		{"SIOCBRDGDEL", Const, 1},
+		{"SIOCBRDGDELS", Const, 1},
+		{"SIOCBRDGFLUSH", Const, 1},
+		{"SIOCBRDGFRL", Const, 1},
+		{"SIOCBRDGGCACHE", Const, 1},
+		{"SIOCBRDGGFD", Const, 1},
+		{"SIOCBRDGGHT", Const, 1},
+		{"SIOCBRDGGIFFLGS", Const, 1},
+		{"SIOCBRDGGMA", Const, 1},
+		{"SIOCBRDGGPARAM", Const, 1},
+		{"SIOCBRDGGPRI", Const, 1},
+		{"SIOCBRDGGRL", Const, 1},
+		{"SIOCBRDGGSIFS", Const, 1},
+		{"SIOCBRDGGTO", Const, 1},
+		{"SIOCBRDGIFS", Const, 1},
+		{"SIOCBRDGRTS", Const, 1},
+		{"SIOCBRDGSADDR", Const, 1},
+		{"SIOCBRDGSCACHE", Const, 1},
+		{"SIOCBRDGSFD", Const, 1},
+		{"SIOCBRDGSHT", Const, 1},
+		{"SIOCBRDGSIFCOST", Const, 1},
+		{"SIOCBRDGSIFFLGS", Const, 1},
+		{"SIOCBRDGSIFPRIO", Const, 1},
+		{"SIOCBRDGSMA", Const, 1},
+		{"SIOCBRDGSPRI", Const, 1},
+		{"SIOCBRDGSPROTO", Const, 1},
+		{"SIOCBRDGSTO", Const, 1},
+		{"SIOCBRDGSTXHC", Const, 1},
+		{"SIOCDARP", Const, 0},
+		{"SIOCDELDLCI", Const, 0},
+		{"SIOCDELMULTI", Const, 0},
+		{"SIOCDELRT", Const, 0},
+		{"SIOCDEVPRIVATE", Const, 0},
+		{"SIOCDIFADDR", Const, 0},
+		{"SIOCDIFGROUP", Const, 0},
+		{"SIOCDIFPHYADDR", Const, 0},
+		{"SIOCDLIFADDR", Const, 0},
+		{"SIOCDRARP", Const, 0},
+		{"SIOCGARP", Const, 0},
+		{"SIOCGDRVSPEC", Const, 0},
+		{"SIOCGETKALIVE", Const, 1},
+		{"SIOCGETLABEL", Const, 1},
+		{"SIOCGETPFLOW", Const, 1},
+		{"SIOCGETPFSYNC", Const, 1},
+		{"SIOCGETSGCNT", Const, 0},
+		{"SIOCGETVIFCNT", Const, 0},
+		{"SIOCGETVLAN", Const, 0},
+		{"SIOCGHIWAT", Const, 0},
+		{"SIOCGIFADDR", Const, 0},
+		{"SIOCGIFADDRPREF", Const, 1},
+		{"SIOCGIFALIAS", Const, 1},
+		{"SIOCGIFALTMTU", Const, 0},
+		{"SIOCGIFASYNCMAP", Const, 0},
+		{"SIOCGIFBOND", Const, 0},
+		{"SIOCGIFBR", Const, 0},
+		{"SIOCGIFBRDADDR", Const, 0},
+		{"SIOCGIFCAP", Const, 0},
+		{"SIOCGIFCONF", Const, 0},
+		{"SIOCGIFCOUNT", Const, 0},
+		{"SIOCGIFDATA", Const, 1},
+		{"SIOCGIFDESCR", Const, 0},
+		{"SIOCGIFDEVMTU", Const, 0},
+		{"SIOCGIFDLT", Const, 1},
+		{"SIOCGIFDSTADDR", Const, 0},
+		{"SIOCGIFENCAP", Const, 0},
+		{"SIOCGIFFIB", Const, 1},
+		{"SIOCGIFFLAGS", Const, 0},
+		{"SIOCGIFGATTR", Const, 1},
+		{"SIOCGIFGENERIC", Const, 0},
+		{"SIOCGIFGMEMB", Const, 0},
+		{"SIOCGIFGROUP", Const, 0},
+		{"SIOCGIFHARDMTU", Const, 3},
+		{"SIOCGIFHWADDR", Const, 0},
+		{"SIOCGIFINDEX", Const, 0},
+		{"SIOCGIFKPI", Const, 0},
+		{"SIOCGIFMAC", Const, 0},
+		{"SIOCGIFMAP", Const, 0},
+		{"SIOCGIFMEDIA", Const, 0},
+		{"SIOCGIFMEM", Const, 0},
+		{"SIOCGIFMETRIC", Const, 0},
+		{"SIOCGIFMTU", Const, 0},
+		{"SIOCGIFNAME", Const, 0},
+		{"SIOCGIFNETMASK", Const, 0},
+		{"SIOCGIFPDSTADDR", Const, 0},
+		{"SIOCGIFPFLAGS", Const, 0},
+		{"SIOCGIFPHYS", Const, 0},
+		{"SIOCGIFPRIORITY", Const, 1},
+		{"SIOCGIFPSRCADDR", Const, 0},
+		{"SIOCGIFRDOMAIN", Const, 1},
+		{"SIOCGIFRTLABEL", Const, 1},
+		{"SIOCGIFSLAVE", Const, 0},
+		{"SIOCGIFSTATUS", Const, 0},
+		{"SIOCGIFTIMESLOT", Const, 1},
+		{"SIOCGIFTXQLEN", Const, 0},
+		{"SIOCGIFVLAN", Const, 0},
+		{"SIOCGIFWAKEFLAGS", Const, 0},
+		{"SIOCGIFXFLAGS", Const, 1},
+		{"SIOCGLIFADDR", Const, 0},
+		{"SIOCGLIFPHYADDR", Const, 0},
+		{"SIOCGLIFPHYRTABLE", Const, 1},
+		{"SIOCGLIFPHYTTL", Const, 3},
+		{"SIOCGLINKSTR", Const, 1},
+		{"SIOCGLOWAT", Const, 0},
+		{"SIOCGPGRP", Const, 0},
+		{"SIOCGPRIVATE_0", Const, 0},
+		{"SIOCGPRIVATE_1", Const, 0},
+		{"SIOCGRARP", Const, 0},
+		{"SIOCGSPPPPARAMS", Const, 3},
+		{"SIOCGSTAMP", Const, 0},
+		{"SIOCGSTAMPNS", Const, 0},
+		{"SIOCGVH", Const, 1},
+		{"SIOCGVNETID", Const, 3},
+		{"SIOCIFCREATE", Const, 0},
+		{"SIOCIFCREATE2", Const, 0},
+		{"SIOCIFDESTROY", Const, 0},
+		{"SIOCIFGCLONERS", Const, 0},
+		{"SIOCINITIFADDR", Const, 1},
+		{"SIOCPROTOPRIVATE", Const, 0},
+		{"SIOCRSLVMULTI", Const, 0},
+		{"SIOCRTMSG", Const, 0},
+		{"SIOCSARP", Const, 0},
+		{"SIOCSDRVSPEC", Const, 0},
+		{"SIOCSETKALIVE", Const, 1},
+		{"SIOCSETLABEL", Const, 1},
+		{"SIOCSETPFLOW", Const, 1},
+		{"SIOCSETPFSYNC", Const, 1},
+		{"SIOCSETVLAN", Const, 0},
+		{"SIOCSHIWAT", Const, 0},
+		{"SIOCSIFADDR", Const, 0},
+		{"SIOCSIFADDRPREF", Const, 1},
+		{"SIOCSIFALTMTU", Const, 0},
+		{"SIOCSIFASYNCMAP", Const, 0},
+		{"SIOCSIFBOND", Const, 0},
+		{"SIOCSIFBR", Const, 0},
+		{"SIOCSIFBRDADDR", Const, 0},
+		{"SIOCSIFCAP", Const, 0},
+		{"SIOCSIFDESCR", Const, 0},
+		{"SIOCSIFDSTADDR", Const, 0},
+		{"SIOCSIFENCAP", Const, 0},
+		{"SIOCSIFFIB", Const, 1},
+		{"SIOCSIFFLAGS", Const, 0},
+		{"SIOCSIFGATTR", Const, 1},
+		{"SIOCSIFGENERIC", Const, 0},
+		{"SIOCSIFHWADDR", Const, 0},
+		{"SIOCSIFHWBROADCAST", Const, 0},
+		{"SIOCSIFKPI", Const, 0},
+		{"SIOCSIFLINK", Const, 0},
+		{"SIOCSIFLLADDR", Const, 0},
+		{"SIOCSIFMAC", Const, 0},
+		{"SIOCSIFMAP", Const, 0},
+		{"SIOCSIFMEDIA", Const, 0},
+		{"SIOCSIFMEM", Const, 0},
+		{"SIOCSIFMETRIC", Const, 0},
+		{"SIOCSIFMTU", Const, 0},
+		{"SIOCSIFNAME", Const, 0},
+		{"SIOCSIFNETMASK", Const, 0},
+		{"SIOCSIFPFLAGS", Const, 0},
+		{"SIOCSIFPHYADDR", Const, 0},
+		{"SIOCSIFPHYS", Const, 0},
+		{"SIOCSIFPRIORITY", Const, 1},
+		{"SIOCSIFRDOMAIN", Const, 1},
+		{"SIOCSIFRTLABEL", Const, 1},
+		{"SIOCSIFRVNET", Const, 0},
+		{"SIOCSIFSLAVE", Const, 0},
+		{"SIOCSIFTIMESLOT", Const, 1},
+		{"SIOCSIFTXQLEN", Const, 0},
+		{"SIOCSIFVLAN", Const, 0},
+		{"SIOCSIFVNET", Const, 0},
+		{"SIOCSIFXFLAGS", Const, 1},
+		{"SIOCSLIFPHYADDR", Const, 0},
+		{"SIOCSLIFPHYRTABLE", Const, 1},
+		{"SIOCSLIFPHYTTL", Const, 3},
+		{"SIOCSLINKSTR", Const, 1},
+		{"SIOCSLOWAT", Const, 0},
+		{"SIOCSPGRP", Const, 0},
+		{"SIOCSRARP", Const, 0},
+		{"SIOCSSPPPPARAMS", Const, 3},
+		{"SIOCSVH", Const, 1},
+		{"SIOCSVNETID", Const, 3},
+		{"SIOCZIFDATA", Const, 1},
+		{"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1},
+		{"SIO_GET_INTERFACE_LIST", Const, 0},
+		{"SIO_KEEPALIVE_VALS", Const, 3},
+		{"SIO_UDP_CONNRESET", Const, 4},
+		{"SOCK_CLOEXEC", Const, 0},
+		{"SOCK_DCCP", Const, 0},
+		{"SOCK_DGRAM", Const, 0},
+		{"SOCK_FLAGS_MASK", Const, 1},
+		{"SOCK_MAXADDRLEN", Const, 0},
+		{"SOCK_NONBLOCK", Const, 0},
+		{"SOCK_NOSIGPIPE", Const, 1},
+		{"SOCK_PACKET", Const, 0},
+		{"SOCK_RAW", Const, 0},
+		{"SOCK_RDM", Const, 0},
+		{"SOCK_SEQPACKET", Const, 0},
+		{"SOCK_STREAM", Const, 0},
+		{"SOL_AAL", Const, 0},
+		{"SOL_ATM", Const, 0},
+		{"SOL_DECNET", Const, 0},
+		{"SOL_ICMPV6", Const, 0},
+		{"SOL_IP", Const, 0},
+		{"SOL_IPV6", Const, 0},
+		{"SOL_IRDA", Const, 0},
+		{"SOL_PACKET", Const, 0},
+		{"SOL_RAW", Const, 0},
+		{"SOL_SOCKET", Const, 0},
+		{"SOL_TCP", Const, 0},
+		{"SOL_X25", Const, 0},
+		{"SOMAXCONN", Const, 0},
+		{"SO_ACCEPTCONN", Const, 0},
+		{"SO_ACCEPTFILTER", Const, 0},
+		{"SO_ATTACH_FILTER", Const, 0},
+		{"SO_BINDANY", Const, 1},
+		{"SO_BINDTODEVICE", Const, 0},
+		{"SO_BINTIME", Const, 0},
+		{"SO_BROADCAST", Const, 0},
+		{"SO_BSDCOMPAT", Const, 0},
+		{"SO_DEBUG", Const, 0},
+		{"SO_DETACH_FILTER", Const, 0},
+		{"SO_DOMAIN", Const, 0},
+		{"SO_DONTROUTE", Const, 0},
+		{"SO_DONTTRUNC", Const, 0},
+		{"SO_ERROR", Const, 0},
+		{"SO_KEEPALIVE", Const, 0},
+		{"SO_LABEL", Const, 0},
+		{"SO_LINGER", Const, 0},
+		{"SO_LINGER_SEC", Const, 0},
+		{"SO_LISTENINCQLEN", Const, 0},
+		{"SO_LISTENQLEN", Const, 0},
+		{"SO_LISTENQLIMIT", Const, 0},
+		{"SO_MARK", Const, 0},
+		{"SO_NETPROC", Const, 1},
+		{"SO_NKE", Const, 0},
+		{"SO_NOADDRERR", Const, 0},
+		{"SO_NOHEADER", Const, 1},
+		{"SO_NOSIGPIPE", Const, 0},
+		{"SO_NOTIFYCONFLICT", Const, 0},
+		{"SO_NO_CHECK", Const, 0},
+		{"SO_NO_DDP", Const, 0},
+		{"SO_NO_OFFLOAD", Const, 0},
+		{"SO_NP_EXTENSIONS", Const, 0},
+		{"SO_NREAD", Const, 0},
+		{"SO_NUMRCVPKT", Const, 16},
+		{"SO_NWRITE", Const, 0},
+		{"SO_OOBINLINE", Const, 0},
+		{"SO_OVERFLOWED", Const, 1},
+		{"SO_PASSCRED", Const, 0},
+		{"SO_PASSSEC", Const, 0},
+		{"SO_PEERCRED", Const, 0},
+		{"SO_PEERLABEL", Const, 0},
+		{"SO_PEERNAME", Const, 0},
+		{"SO_PEERSEC", Const, 0},
+		{"SO_PRIORITY", Const, 0},
+		{"SO_PROTOCOL", Const, 0},
+		{"SO_PROTOTYPE", Const, 1},
+		{"SO_RANDOMPORT", Const, 0},
+		{"SO_RCVBUF", Const, 0},
+		{"SO_RCVBUFFORCE", Const, 0},
+		{"SO_RCVLOWAT", Const, 0},
+		{"SO_RCVTIMEO", Const, 0},
+		{"SO_RESTRICTIONS", Const, 0},
+		{"SO_RESTRICT_DENYIN", Const, 0},
+		{"SO_RESTRICT_DENYOUT", Const, 0},
+		{"SO_RESTRICT_DENYSET", Const, 0},
+		{"SO_REUSEADDR", Const, 0},
+		{"SO_REUSEPORT", Const, 0},
+		{"SO_REUSESHAREUID", Const, 0},
+		{"SO_RTABLE", Const, 1},
+		{"SO_RXQ_OVFL", Const, 0},
+		{"SO_SECURITY_AUTHENTICATION", Const, 0},
+		{"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0},
+		{"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0},
+		{"SO_SETFIB", Const, 0},
+		{"SO_SNDBUF", Const, 0},
+		{"SO_SNDBUFFORCE", Const, 0},
+		{"SO_SNDLOWAT", Const, 0},
+		{"SO_SNDTIMEO", Const, 0},
+		{"SO_SPLICE", Const, 1},
+		{"SO_TIMESTAMP", Const, 0},
+		{"SO_TIMESTAMPING", Const, 0},
+		{"SO_TIMESTAMPNS", Const, 0},
+		{"SO_TIMESTAMP_MONOTONIC", Const, 0},
+		{"SO_TYPE", Const, 0},
+		{"SO_UPCALLCLOSEWAIT", Const, 0},
+		{"SO_UPDATE_ACCEPT_CONTEXT", Const, 0},
+		{"SO_UPDATE_CONNECT_CONTEXT", Const, 1},
+		{"SO_USELOOPBACK", Const, 0},
+		{"SO_USER_COOKIE", Const, 1},
+		{"SO_VENDOR", Const, 3},
+		{"SO_WANTMORE", Const, 0},
+		{"SO_WANTOOBFLAG", Const, 0},
+		{"SSLExtraCertChainPolicyPara", Type, 0},
+		{"SSLExtraCertChainPolicyPara.AuthType", Field, 0},
+		{"SSLExtraCertChainPolicyPara.Checks", Field, 0},
+		{"SSLExtraCertChainPolicyPara.ServerName", Field, 0},
+		{"SSLExtraCertChainPolicyPara.Size", Field, 0},
+		{"STANDARD_RIGHTS_ALL", Const, 0},
+		{"STANDARD_RIGHTS_EXECUTE", Const, 0},
+		{"STANDARD_RIGHTS_READ", Const, 0},
+		{"STANDARD_RIGHTS_REQUIRED", Const, 0},
+		{"STANDARD_RIGHTS_WRITE", Const, 0},
+		{"STARTF_USESHOWWINDOW", Const, 0},
+		{"STARTF_USESTDHANDLES", Const, 0},
+		{"STD_ERROR_HANDLE", Const, 0},
+		{"STD_INPUT_HANDLE", Const, 0},
+		{"STD_OUTPUT_HANDLE", Const, 0},
+		{"SUBLANG_ENGLISH_US", Const, 0},
+		{"SW_FORCEMINIMIZE", Const, 0},
+		{"SW_HIDE", Const, 0},
+		{"SW_MAXIMIZE", Const, 0},
+		{"SW_MINIMIZE", Const, 0},
+		{"SW_NORMAL", Const, 0},
+		{"SW_RESTORE", Const, 0},
+		{"SW_SHOW", Const, 0},
+		{"SW_SHOWDEFAULT", Const, 0},
+		{"SW_SHOWMAXIMIZED", Const, 0},
+		{"SW_SHOWMINIMIZED", Const, 0},
+		{"SW_SHOWMINNOACTIVE", Const, 0},
+		{"SW_SHOWNA", Const, 0},
+		{"SW_SHOWNOACTIVATE", Const, 0},
+		{"SW_SHOWNORMAL", Const, 0},
+		{"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4},
+		{"SYNCHRONIZE", Const, 0},
+		{"SYSCTL_VERSION", Const, 1},
+		{"SYSCTL_VERS_0", Const, 1},
+		{"SYSCTL_VERS_1", Const, 1},
+		{"SYSCTL_VERS_MASK", Const, 1},
+		{"SYS_ABORT2", Const, 0},
+		{"SYS_ACCEPT", Const, 0},
+		{"SYS_ACCEPT4", Const, 0},
+		{"SYS_ACCEPT_NOCANCEL", Const, 0},
+		{"SYS_ACCESS", Const, 0},
+		{"SYS_ACCESS_EXTENDED", Const, 0},
+		{"SYS_ACCT", Const, 0},
+		{"SYS_ADD_KEY", Const, 0},
+		{"SYS_ADD_PROFIL", Const, 0},
+		{"SYS_ADJFREQ", Const, 1},
+		{"SYS_ADJTIME", Const, 0},
+		{"SYS_ADJTIMEX", Const, 0},
+		{"SYS_AFS_SYSCALL", Const, 0},
+		{"SYS_AIO_CANCEL", Const, 0},
+		{"SYS_AIO_ERROR", Const, 0},
+		{"SYS_AIO_FSYNC", Const, 0},
+		{"SYS_AIO_MLOCK", Const, 14},
+		{"SYS_AIO_READ", Const, 0},
+		{"SYS_AIO_RETURN", Const, 0},
+		{"SYS_AIO_SUSPEND", Const, 0},
+		{"SYS_AIO_SUSPEND_NOCANCEL", Const, 0},
+		{"SYS_AIO_WAITCOMPLETE", Const, 14},
+		{"SYS_AIO_WRITE", Const, 0},
+		{"SYS_ALARM", Const, 0},
+		{"SYS_ARCH_PRCTL", Const, 0},
+		{"SYS_ARM_FADVISE64_64", Const, 0},
+		{"SYS_ARM_SYNC_FILE_RANGE", Const, 0},
+		{"SYS_ATGETMSG", Const, 0},
+		{"SYS_ATPGETREQ", Const, 0},
+		{"SYS_ATPGETRSP", Const, 0},
+		{"SYS_ATPSNDREQ", Const, 0},
+		{"SYS_ATPSNDRSP", Const, 0},
+		{"SYS_ATPUTMSG", Const, 0},
+		{"SYS_ATSOCKET", Const, 0},
+		{"SYS_AUDIT", Const, 0},
+		{"SYS_AUDITCTL", Const, 0},
+		{"SYS_AUDITON", Const, 0},
+		{"SYS_AUDIT_SESSION_JOIN", Const, 0},
+		{"SYS_AUDIT_SESSION_PORT", Const, 0},
+		{"SYS_AUDIT_SESSION_SELF", Const, 0},
+		{"SYS_BDFLUSH", Const, 0},
+		{"SYS_BIND", Const, 0},
+		{"SYS_BINDAT", Const, 3},
+		{"SYS_BREAK", Const, 0},
+		{"SYS_BRK", Const, 0},
+		{"SYS_BSDTHREAD_CREATE", Const, 0},
+		{"SYS_BSDTHREAD_REGISTER", Const, 0},
+		{"SYS_BSDTHREAD_TERMINATE", Const, 0},
+		{"SYS_CAPGET", Const, 0},
+		{"SYS_CAPSET", Const, 0},
+		{"SYS_CAP_ENTER", Const, 0},
+		{"SYS_CAP_FCNTLS_GET", Const, 1},
+		{"SYS_CAP_FCNTLS_LIMIT", Const, 1},
+		{"SYS_CAP_GETMODE", Const, 0},
+		{"SYS_CAP_GETRIGHTS", Const, 0},
+		{"SYS_CAP_IOCTLS_GET", Const, 1},
+		{"SYS_CAP_IOCTLS_LIMIT", Const, 1},
+		{"SYS_CAP_NEW", Const, 0},
+		{"SYS_CAP_RIGHTS_GET", Const, 1},
+		{"SYS_CAP_RIGHTS_LIMIT", Const, 1},
+		{"SYS_CHDIR", Const, 0},
+		{"SYS_CHFLAGS", Const, 0},
+		{"SYS_CHFLAGSAT", Const, 3},
+		{"SYS_CHMOD", Const, 0},
+		{"SYS_CHMOD_EXTENDED", Const, 0},
+		{"SYS_CHOWN", Const, 0},
+		{"SYS_CHOWN32", Const, 0},
+		{"SYS_CHROOT", Const, 0},
+		{"SYS_CHUD", Const, 0},
+		{"SYS_CLOCK_ADJTIME", Const, 0},
+		{"SYS_CLOCK_GETCPUCLOCKID2", Const, 1},
+		{"SYS_CLOCK_GETRES", Const, 0},
+		{"SYS_CLOCK_GETTIME", Const, 0},
+		{"SYS_CLOCK_NANOSLEEP", Const, 0},
+		{"SYS_CLOCK_SETTIME", Const, 0},
+		{"SYS_CLONE", Const, 0},
+		{"SYS_CLOSE", Const, 0},
+		{"SYS_CLOSEFROM", Const, 0},
+		{"SYS_CLOSE_NOCANCEL", Const, 0},
+		{"SYS_CONNECT", Const, 0},
+		{"SYS_CONNECTAT", Const, 3},
+		{"SYS_CONNECT_NOCANCEL", Const, 0},
+		{"SYS_COPYFILE", Const, 0},
+		{"SYS_CPUSET", Const, 0},
+		{"SYS_CPUSET_GETAFFINITY", Const, 0},
+		{"SYS_CPUSET_GETID", Const, 0},
+		{"SYS_CPUSET_SETAFFINITY", Const, 0},
+		{"SYS_CPUSET_SETID", Const, 0},
+		{"SYS_CREAT", Const, 0},
+		{"SYS_CREATE_MODULE", Const, 0},
+		{"SYS_CSOPS", Const, 0},
+		{"SYS_CSOPS_AUDITTOKEN", Const, 16},
+		{"SYS_DELETE", Const, 0},
+		{"SYS_DELETE_MODULE", Const, 0},
+		{"SYS_DUP", Const, 0},
+		{"SYS_DUP2", Const, 0},
+		{"SYS_DUP3", Const, 0},
+		{"SYS_EACCESS", Const, 0},
+		{"SYS_EPOLL_CREATE", Const, 0},
+		{"SYS_EPOLL_CREATE1", Const, 0},
+		{"SYS_EPOLL_CTL", Const, 0},
+		{"SYS_EPOLL_CTL_OLD", Const, 0},
+		{"SYS_EPOLL_PWAIT", Const, 0},
+		{"SYS_EPOLL_WAIT", Const, 0},
+		{"SYS_EPOLL_WAIT_OLD", Const, 0},
+		{"SYS_EVENTFD", Const, 0},
+		{"SYS_EVENTFD2", Const, 0},
+		{"SYS_EXCHANGEDATA", Const, 0},
+		{"SYS_EXECVE", Const, 0},
+		{"SYS_EXIT", Const, 0},
+		{"SYS_EXIT_GROUP", Const, 0},
+		{"SYS_EXTATTRCTL", Const, 0},
+		{"SYS_EXTATTR_DELETE_FD", Const, 0},
+		{"SYS_EXTATTR_DELETE_FILE", Const, 0},
+		{"SYS_EXTATTR_DELETE_LINK", Const, 0},
+		{"SYS_EXTATTR_GET_FD", Const, 0},
+		{"SYS_EXTATTR_GET_FILE", Const, 0},
+		{"SYS_EXTATTR_GET_LINK", Const, 0},
+		{"SYS_EXTATTR_LIST_FD", Const, 0},
+		{"SYS_EXTATTR_LIST_FILE", Const, 0},
+		{"SYS_EXTATTR_LIST_LINK", Const, 0},
+		{"SYS_EXTATTR_SET_FD", Const, 0},
+		{"SYS_EXTATTR_SET_FILE", Const, 0},
+		{"SYS_EXTATTR_SET_LINK", Const, 0},
+		{"SYS_FACCESSAT", Const, 0},
+		{"SYS_FADVISE64", Const, 0},
+		{"SYS_FADVISE64_64", Const, 0},
+		{"SYS_FALLOCATE", Const, 0},
+		{"SYS_FANOTIFY_INIT", Const, 0},
+		{"SYS_FANOTIFY_MARK", Const, 0},
+		{"SYS_FCHDIR", Const, 0},
+		{"SYS_FCHFLAGS", Const, 0},
+		{"SYS_FCHMOD", Const, 0},
+		{"SYS_FCHMODAT", Const, 0},
+		{"SYS_FCHMOD_EXTENDED", Const, 0},
+		{"SYS_FCHOWN", Const, 0},
+		{"SYS_FCHOWN32", Const, 0},
+		{"SYS_FCHOWNAT", Const, 0},
+		{"SYS_FCHROOT", Const, 1},
+		{"SYS_FCNTL", Const, 0},
+		{"SYS_FCNTL64", Const, 0},
+		{"SYS_FCNTL_NOCANCEL", Const, 0},
+		{"SYS_FDATASYNC", Const, 0},
+		{"SYS_FEXECVE", Const, 0},
+		{"SYS_FFCLOCK_GETCOUNTER", Const, 0},
+		{"SYS_FFCLOCK_GETESTIMATE", Const, 0},
+		{"SYS_FFCLOCK_SETESTIMATE", Const, 0},
+		{"SYS_FFSCTL", Const, 0},
+		{"SYS_FGETATTRLIST", Const, 0},
+		{"SYS_FGETXATTR", Const, 0},
+		{"SYS_FHOPEN", Const, 0},
+		{"SYS_FHSTAT", Const, 0},
+		{"SYS_FHSTATFS", Const, 0},
+		{"SYS_FILEPORT_MAKEFD", Const, 0},
+		{"SYS_FILEPORT_MAKEPORT", Const, 0},
+		{"SYS_FKTRACE", Const, 1},
+		{"SYS_FLISTXATTR", Const, 0},
+		{"SYS_FLOCK", Const, 0},
+		{"SYS_FORK", Const, 0},
+		{"SYS_FPATHCONF", Const, 0},
+		{"SYS_FREEBSD6_FTRUNCATE", Const, 0},
+		{"SYS_FREEBSD6_LSEEK", Const, 0},
+		{"SYS_FREEBSD6_MMAP", Const, 0},
+		{"SYS_FREEBSD6_PREAD", Const, 0},
+		{"SYS_FREEBSD6_PWRITE", Const, 0},
+		{"SYS_FREEBSD6_TRUNCATE", Const, 0},
+		{"SYS_FREMOVEXATTR", Const, 0},
+		{"SYS_FSCTL", Const, 0},
+		{"SYS_FSETATTRLIST", Const, 0},
+		{"SYS_FSETXATTR", Const, 0},
+		{"SYS_FSGETPATH", Const, 0},
+		{"SYS_FSTAT", Const, 0},
+		{"SYS_FSTAT64", Const, 0},
+		{"SYS_FSTAT64_EXTENDED", Const, 0},
+		{"SYS_FSTATAT", Const, 0},
+		{"SYS_FSTATAT64", Const, 0},
+		{"SYS_FSTATFS", Const, 0},
+		{"SYS_FSTATFS64", Const, 0},
+		{"SYS_FSTATV", Const, 0},
+		{"SYS_FSTATVFS1", Const, 1},
+		{"SYS_FSTAT_EXTENDED", Const, 0},
+		{"SYS_FSYNC", Const, 0},
+		{"SYS_FSYNC_NOCANCEL", Const, 0},
+		{"SYS_FSYNC_RANGE", Const, 1},
+		{"SYS_FTIME", Const, 0},
+		{"SYS_FTRUNCATE", Const, 0},
+		{"SYS_FTRUNCATE64", Const, 0},
+		{"SYS_FUTEX", Const, 0},
+		{"SYS_FUTIMENS", Const, 1},
+		{"SYS_FUTIMES", Const, 0},
+		{"SYS_FUTIMESAT", Const, 0},
+		{"SYS_GETATTRLIST", Const, 0},
+		{"SYS_GETAUDIT", Const, 0},
+		{"SYS_GETAUDIT_ADDR", Const, 0},
+		{"SYS_GETAUID", Const, 0},
+		{"SYS_GETCONTEXT", Const, 0},
+		{"SYS_GETCPU", Const, 0},
+		{"SYS_GETCWD", Const, 0},
+		{"SYS_GETDENTS", Const, 0},
+		{"SYS_GETDENTS64", Const, 0},
+		{"SYS_GETDIRENTRIES", Const, 0},
+		{"SYS_GETDIRENTRIES64", Const, 0},
+		{"SYS_GETDIRENTRIESATTR", Const, 0},
+		{"SYS_GETDTABLECOUNT", Const, 1},
+		{"SYS_GETDTABLESIZE", Const, 0},
+		{"SYS_GETEGID", Const, 0},
+		{"SYS_GETEGID32", Const, 0},
+		{"SYS_GETEUID", Const, 0},
+		{"SYS_GETEUID32", Const, 0},
+		{"SYS_GETFH", Const, 0},
+		{"SYS_GETFSSTAT", Const, 0},
+		{"SYS_GETFSSTAT64", Const, 0},
+		{"SYS_GETGID", Const, 0},
+		{"SYS_GETGID32", Const, 0},
+		{"SYS_GETGROUPS", Const, 0},
+		{"SYS_GETGROUPS32", Const, 0},
+		{"SYS_GETHOSTUUID", Const, 0},
+		{"SYS_GETITIMER", Const, 0},
+		{"SYS_GETLCID", Const, 0},
+		{"SYS_GETLOGIN", Const, 0},
+		{"SYS_GETLOGINCLASS", Const, 0},
+		{"SYS_GETPEERNAME", Const, 0},
+		{"SYS_GETPGID", Const, 0},
+		{"SYS_GETPGRP", Const, 0},
+		{"SYS_GETPID", Const, 0},
+		{"SYS_GETPMSG", Const, 0},
+		{"SYS_GETPPID", Const, 0},
+		{"SYS_GETPRIORITY", Const, 0},
+		{"SYS_GETRESGID", Const, 0},
+		{"SYS_GETRESGID32", Const, 0},
+		{"SYS_GETRESUID", Const, 0},
+		{"SYS_GETRESUID32", Const, 0},
+		{"SYS_GETRLIMIT", Const, 0},
+		{"SYS_GETRTABLE", Const, 1},
+		{"SYS_GETRUSAGE", Const, 0},
+		{"SYS_GETSGROUPS", Const, 0},
+		{"SYS_GETSID", Const, 0},
+		{"SYS_GETSOCKNAME", Const, 0},
+		{"SYS_GETSOCKOPT", Const, 0},
+		{"SYS_GETTHRID", Const, 1},
+		{"SYS_GETTID", Const, 0},
+		{"SYS_GETTIMEOFDAY", Const, 0},
+		{"SYS_GETUID", Const, 0},
+		{"SYS_GETUID32", Const, 0},
+		{"SYS_GETVFSSTAT", Const, 1},
+		{"SYS_GETWGROUPS", Const, 0},
+		{"SYS_GETXATTR", Const, 0},
+		{"SYS_GET_KERNEL_SYMS", Const, 0},
+		{"SYS_GET_MEMPOLICY", Const, 0},
+		{"SYS_GET_ROBUST_LIST", Const, 0},
+		{"SYS_GET_THREAD_AREA", Const, 0},
+		{"SYS_GSSD_SYSCALL", Const, 14},
+		{"SYS_GTTY", Const, 0},
+		{"SYS_IDENTITYSVC", Const, 0},
+		{"SYS_IDLE", Const, 0},
+		{"SYS_INITGROUPS", Const, 0},
+		{"SYS_INIT_MODULE", Const, 0},
+		{"SYS_INOTIFY_ADD_WATCH", Const, 0},
+		{"SYS_INOTIFY_INIT", Const, 0},
+		{"SYS_INOTIFY_INIT1", Const, 0},
+		{"SYS_INOTIFY_RM_WATCH", Const, 0},
+		{"SYS_IOCTL", Const, 0},
+		{"SYS_IOPERM", Const, 0},
+		{"SYS_IOPL", Const, 0},
+		{"SYS_IOPOLICYSYS", Const, 0},
+		{"SYS_IOPRIO_GET", Const, 0},
+		{"SYS_IOPRIO_SET", Const, 0},
+		{"SYS_IO_CANCEL", Const, 0},
+		{"SYS_IO_DESTROY", Const, 0},
+		{"SYS_IO_GETEVENTS", Const, 0},
+		{"SYS_IO_SETUP", Const, 0},
+		{"SYS_IO_SUBMIT", Const, 0},
+		{"SYS_IPC", Const, 0},
+		{"SYS_ISSETUGID", Const, 0},
+		{"SYS_JAIL", Const, 0},
+		{"SYS_JAIL_ATTACH", Const, 0},
+		{"SYS_JAIL_GET", Const, 0},
+		{"SYS_JAIL_REMOVE", Const, 0},
+		{"SYS_JAIL_SET", Const, 0},
+		{"SYS_KAS_INFO", Const, 16},
+		{"SYS_KDEBUG_TRACE", Const, 0},
+		{"SYS_KENV", Const, 0},
+		{"SYS_KEVENT", Const, 0},
+		{"SYS_KEVENT64", Const, 0},
+		{"SYS_KEXEC_LOAD", Const, 0},
+		{"SYS_KEYCTL", Const, 0},
+		{"SYS_KILL", Const, 0},
+		{"SYS_KLDFIND", Const, 0},
+		{"SYS_KLDFIRSTMOD", Const, 0},
+		{"SYS_KLDLOAD", Const, 0},
+		{"SYS_KLDNEXT", Const, 0},
+		{"SYS_KLDSTAT", Const, 0},
+		{"SYS_KLDSYM", Const, 0},
+		{"SYS_KLDUNLOAD", Const, 0},
+		{"SYS_KLDUNLOADF", Const, 0},
+		{"SYS_KMQ_NOTIFY", Const, 14},
+		{"SYS_KMQ_OPEN", Const, 14},
+		{"SYS_KMQ_SETATTR", Const, 14},
+		{"SYS_KMQ_TIMEDRECEIVE", Const, 14},
+		{"SYS_KMQ_TIMEDSEND", Const, 14},
+		{"SYS_KMQ_UNLINK", Const, 14},
+		{"SYS_KQUEUE", Const, 0},
+		{"SYS_KQUEUE1", Const, 1},
+		{"SYS_KSEM_CLOSE", Const, 14},
+		{"SYS_KSEM_DESTROY", Const, 14},
+		{"SYS_KSEM_GETVALUE", Const, 14},
+		{"SYS_KSEM_INIT", Const, 14},
+		{"SYS_KSEM_OPEN", Const, 14},
+		{"SYS_KSEM_POST", Const, 14},
+		{"SYS_KSEM_TIMEDWAIT", Const, 14},
+		{"SYS_KSEM_TRYWAIT", Const, 14},
+		{"SYS_KSEM_UNLINK", Const, 14},
+		{"SYS_KSEM_WAIT", Const, 14},
+		{"SYS_KTIMER_CREATE", Const, 0},
+		{"SYS_KTIMER_DELETE", Const, 0},
+		{"SYS_KTIMER_GETOVERRUN", Const, 0},
+		{"SYS_KTIMER_GETTIME", Const, 0},
+		{"SYS_KTIMER_SETTIME", Const, 0},
+		{"SYS_KTRACE", Const, 0},
+		{"SYS_LCHFLAGS", Const, 0},
+		{"SYS_LCHMOD", Const, 0},
+		{"SYS_LCHOWN", Const, 0},
+		{"SYS_LCHOWN32", Const, 0},
+		{"SYS_LEDGER", Const, 16},
+		{"SYS_LGETFH", Const, 0},
+		{"SYS_LGETXATTR", Const, 0},
+		{"SYS_LINK", Const, 0},
+		{"SYS_LINKAT", Const, 0},
+		{"SYS_LIO_LISTIO", Const, 0},
+		{"SYS_LISTEN", Const, 0},
+		{"SYS_LISTXATTR", Const, 0},
+		{"SYS_LLISTXATTR", Const, 0},
+		{"SYS_LOCK", Const, 0},
+		{"SYS_LOOKUP_DCOOKIE", Const, 0},
+		{"SYS_LPATHCONF", Const, 0},
+		{"SYS_LREMOVEXATTR", Const, 0},
+		{"SYS_LSEEK", Const, 0},
+		{"SYS_LSETXATTR", Const, 0},
+		{"SYS_LSTAT", Const, 0},
+		{"SYS_LSTAT64", Const, 0},
+		{"SYS_LSTAT64_EXTENDED", Const, 0},
+		{"SYS_LSTATV", Const, 0},
+		{"SYS_LSTAT_EXTENDED", Const, 0},
+		{"SYS_LUTIMES", Const, 0},
+		{"SYS_MAC_SYSCALL", Const, 0},
+		{"SYS_MADVISE", Const, 0},
+		{"SYS_MADVISE1", Const, 0},
+		{"SYS_MAXSYSCALL", Const, 0},
+		{"SYS_MBIND", Const, 0},
+		{"SYS_MIGRATE_PAGES", Const, 0},
+		{"SYS_MINCORE", Const, 0},
+		{"SYS_MINHERIT", Const, 0},
+		{"SYS_MKCOMPLEX", Const, 0},
+		{"SYS_MKDIR", Const, 0},
+		{"SYS_MKDIRAT", Const, 0},
+		{"SYS_MKDIR_EXTENDED", Const, 0},
+		{"SYS_MKFIFO", Const, 0},
+		{"SYS_MKFIFOAT", Const, 0},
+		{"SYS_MKFIFO_EXTENDED", Const, 0},
+		{"SYS_MKNOD", Const, 0},
+		{"SYS_MKNODAT", Const, 0},
+		{"SYS_MLOCK", Const, 0},
+		{"SYS_MLOCKALL", Const, 0},
+		{"SYS_MMAP", Const, 0},
+		{"SYS_MMAP2", Const, 0},
+		{"SYS_MODCTL", Const, 1},
+		{"SYS_MODFIND", Const, 0},
+		{"SYS_MODFNEXT", Const, 0},
+		{"SYS_MODIFY_LDT", Const, 0},
+		{"SYS_MODNEXT", Const, 0},
+		{"SYS_MODSTAT", Const, 0},
+		{"SYS_MODWATCH", Const, 0},
+		{"SYS_MOUNT", Const, 0},
+		{"SYS_MOVE_PAGES", Const, 0},
+		{"SYS_MPROTECT", Const, 0},
+		{"SYS_MPX", Const, 0},
+		{"SYS_MQUERY", Const, 1},
+		{"SYS_MQ_GETSETATTR", Const, 0},
+		{"SYS_MQ_NOTIFY", Const, 0},
+		{"SYS_MQ_OPEN", Const, 0},
+		{"SYS_MQ_TIMEDRECEIVE", Const, 0},
+		{"SYS_MQ_TIMEDSEND", Const, 0},
+		{"SYS_MQ_UNLINK", Const, 0},
+		{"SYS_MREMAP", Const, 0},
+		{"SYS_MSGCTL", Const, 0},
+		{"SYS_MSGGET", Const, 0},
+		{"SYS_MSGRCV", Const, 0},
+		{"SYS_MSGRCV_NOCANCEL", Const, 0},
+		{"SYS_MSGSND", Const, 0},
+		{"SYS_MSGSND_NOCANCEL", Const, 0},
+		{"SYS_MSGSYS", Const, 0},
+		{"SYS_MSYNC", Const, 0},
+		{"SYS_MSYNC_NOCANCEL", Const, 0},
+		{"SYS_MUNLOCK", Const, 0},
+		{"SYS_MUNLOCKALL", Const, 0},
+		{"SYS_MUNMAP", Const, 0},
+		{"SYS_NAME_TO_HANDLE_AT", Const, 0},
+		{"SYS_NANOSLEEP", Const, 0},
+		{"SYS_NEWFSTATAT", Const, 0},
+		{"SYS_NFSCLNT", Const, 0},
+		{"SYS_NFSSERVCTL", Const, 0},
+		{"SYS_NFSSVC", Const, 0},
+		{"SYS_NFSTAT", Const, 0},
+		{"SYS_NICE", Const, 0},
+		{"SYS_NLM_SYSCALL", Const, 14},
+		{"SYS_NLSTAT", Const, 0},
+		{"SYS_NMOUNT", Const, 0},
+		{"SYS_NSTAT", Const, 0},
+		{"SYS_NTP_ADJTIME", Const, 0},
+		{"SYS_NTP_GETTIME", Const, 0},
+		{"SYS_NUMA_GETAFFINITY", Const, 14},
+		{"SYS_NUMA_SETAFFINITY", Const, 14},
+		{"SYS_OABI_SYSCALL_BASE", Const, 0},
+		{"SYS_OBREAK", Const, 0},
+		{"SYS_OLDFSTAT", Const, 0},
+		{"SYS_OLDLSTAT", Const, 0},
+		{"SYS_OLDOLDUNAME", Const, 0},
+		{"SYS_OLDSTAT", Const, 0},
+		{"SYS_OLDUNAME", Const, 0},
+		{"SYS_OPEN", Const, 0},
+		{"SYS_OPENAT", Const, 0},
+		{"SYS_OPENBSD_POLL", Const, 0},
+		{"SYS_OPEN_BY_HANDLE_AT", Const, 0},
+		{"SYS_OPEN_DPROTECTED_NP", Const, 16},
+		{"SYS_OPEN_EXTENDED", Const, 0},
+		{"SYS_OPEN_NOCANCEL", Const, 0},
+		{"SYS_OVADVISE", Const, 0},
+		{"SYS_PACCEPT", Const, 1},
+		{"SYS_PATHCONF", Const, 0},
+		{"SYS_PAUSE", Const, 0},
+		{"SYS_PCICONFIG_IOBASE", Const, 0},
+		{"SYS_PCICONFIG_READ", Const, 0},
+		{"SYS_PCICONFIG_WRITE", Const, 0},
+		{"SYS_PDFORK", Const, 0},
+		{"SYS_PDGETPID", Const, 0},
+		{"SYS_PDKILL", Const, 0},
+		{"SYS_PERF_EVENT_OPEN", Const, 0},
+		{"SYS_PERSONALITY", Const, 0},
+		{"SYS_PID_HIBERNATE", Const, 0},
+		{"SYS_PID_RESUME", Const, 0},
+		{"SYS_PID_SHUTDOWN_SOCKETS", Const, 0},
+		{"SYS_PID_SUSPEND", Const, 0},
+		{"SYS_PIPE", Const, 0},
+		{"SYS_PIPE2", Const, 0},
+		{"SYS_PIVOT_ROOT", Const, 0},
+		{"SYS_PMC_CONTROL", Const, 1},
+		{"SYS_PMC_GET_INFO", Const, 1},
+		{"SYS_POLL", Const, 0},
+		{"SYS_POLLTS", Const, 1},
+		{"SYS_POLL_NOCANCEL", Const, 0},
+		{"SYS_POSIX_FADVISE", Const, 0},
+		{"SYS_POSIX_FALLOCATE", Const, 0},
+		{"SYS_POSIX_OPENPT", Const, 0},
+		{"SYS_POSIX_SPAWN", Const, 0},
+		{"SYS_PPOLL", Const, 0},
+		{"SYS_PRCTL", Const, 0},
+		{"SYS_PREAD", Const, 0},
+		{"SYS_PREAD64", Const, 0},
+		{"SYS_PREADV", Const, 0},
+		{"SYS_PREAD_NOCANCEL", Const, 0},
+		{"SYS_PRLIMIT64", Const, 0},
+		{"SYS_PROCCTL", Const, 3},
+		{"SYS_PROCESS_POLICY", Const, 0},
+		{"SYS_PROCESS_VM_READV", Const, 0},
+		{"SYS_PROCESS_VM_WRITEV", Const, 0},
+		{"SYS_PROC_INFO", Const, 0},
+		{"SYS_PROF", Const, 0},
+		{"SYS_PROFIL", Const, 0},
+		{"SYS_PSELECT", Const, 0},
+		{"SYS_PSELECT6", Const, 0},
+		{"SYS_PSET_ASSIGN", Const, 1},
+		{"SYS_PSET_CREATE", Const, 1},
+		{"SYS_PSET_DESTROY", Const, 1},
+		{"SYS_PSYNCH_CVBROAD", Const, 0},
+		{"SYS_PSYNCH_CVCLRPREPOST", Const, 0},
+		{"SYS_PSYNCH_CVSIGNAL", Const, 0},
+		{"SYS_PSYNCH_CVWAIT", Const, 0},
+		{"SYS_PSYNCH_MUTEXDROP", Const, 0},
+		{"SYS_PSYNCH_MUTEXWAIT", Const, 0},
+		{"SYS_PSYNCH_RW_DOWNGRADE", Const, 0},
+		{"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0},
+		{"SYS_PSYNCH_RW_RDLOCK", Const, 0},
+		{"SYS_PSYNCH_RW_UNLOCK", Const, 0},
+		{"SYS_PSYNCH_RW_UNLOCK2", Const, 0},
+		{"SYS_PSYNCH_RW_UPGRADE", Const, 0},
+		{"SYS_PSYNCH_RW_WRLOCK", Const, 0},
+		{"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0},
+		{"SYS_PTRACE", Const, 0},
+		{"SYS_PUTPMSG", Const, 0},
+		{"SYS_PWRITE", Const, 0},
+		{"SYS_PWRITE64", Const, 0},
+		{"SYS_PWRITEV", Const, 0},
+		{"SYS_PWRITE_NOCANCEL", Const, 0},
+		{"SYS_QUERY_MODULE", Const, 0},
+		{"SYS_QUOTACTL", Const, 0},
+		{"SYS_RASCTL", Const, 1},
+		{"SYS_RCTL_ADD_RULE", Const, 0},
+		{"SYS_RCTL_GET_LIMITS", Const, 0},
+		{"SYS_RCTL_GET_RACCT", Const, 0},
+		{"SYS_RCTL_GET_RULES", Const, 0},
+		{"SYS_RCTL_REMOVE_RULE", Const, 0},
+		{"SYS_READ", Const, 0},
+		{"SYS_READAHEAD", Const, 0},
+		{"SYS_READDIR", Const, 0},
+		{"SYS_READLINK", Const, 0},
+		{"SYS_READLINKAT", Const, 0},
+		{"SYS_READV", Const, 0},
+		{"SYS_READV_NOCANCEL", Const, 0},
+		{"SYS_READ_NOCANCEL", Const, 0},
+		{"SYS_REBOOT", Const, 0},
+		{"SYS_RECV", Const, 0},
+		{"SYS_RECVFROM", Const, 0},
+		{"SYS_RECVFROM_NOCANCEL", Const, 0},
+		{"SYS_RECVMMSG", Const, 0},
+		{"SYS_RECVMSG", Const, 0},
+		{"SYS_RECVMSG_NOCANCEL", Const, 0},
+		{"SYS_REMAP_FILE_PAGES", Const, 0},
+		{"SYS_REMOVEXATTR", Const, 0},
+		{"SYS_RENAME", Const, 0},
+		{"SYS_RENAMEAT", Const, 0},
+		{"SYS_REQUEST_KEY", Const, 0},
+		{"SYS_RESTART_SYSCALL", Const, 0},
+		{"SYS_REVOKE", Const, 0},
+		{"SYS_RFORK", Const, 0},
+		{"SYS_RMDIR", Const, 0},
+		{"SYS_RTPRIO", Const, 0},
+		{"SYS_RTPRIO_THREAD", Const, 0},
+		{"SYS_RT_SIGACTION", Const, 0},
+		{"SYS_RT_SIGPENDING", Const, 0},
+		{"SYS_RT_SIGPROCMASK", Const, 0},
+		{"SYS_RT_SIGQUEUEINFO", Const, 0},
+		{"SYS_RT_SIGRETURN", Const, 0},
+		{"SYS_RT_SIGSUSPEND", Const, 0},
+		{"SYS_RT_SIGTIMEDWAIT", Const, 0},
+		{"SYS_RT_TGSIGQUEUEINFO", Const, 0},
+		{"SYS_SBRK", Const, 0},
+		{"SYS_SCHED_GETAFFINITY", Const, 0},
+		{"SYS_SCHED_GETPARAM", Const, 0},
+		{"SYS_SCHED_GETSCHEDULER", Const, 0},
+		{"SYS_SCHED_GET_PRIORITY_MAX", Const, 0},
+		{"SYS_SCHED_GET_PRIORITY_MIN", Const, 0},
+		{"SYS_SCHED_RR_GET_INTERVAL", Const, 0},
+		{"SYS_SCHED_SETAFFINITY", Const, 0},
+		{"SYS_SCHED_SETPARAM", Const, 0},
+		{"SYS_SCHED_SETSCHEDULER", Const, 0},
+		{"SYS_SCHED_YIELD", Const, 0},
+		{"SYS_SCTP_GENERIC_RECVMSG", Const, 0},
+		{"SYS_SCTP_GENERIC_SENDMSG", Const, 0},
+		{"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0},
+		{"SYS_SCTP_PEELOFF", Const, 0},
+		{"SYS_SEARCHFS", Const, 0},
+		{"SYS_SECURITY", Const, 0},
+		{"SYS_SELECT", Const, 0},
+		{"SYS_SELECT_NOCANCEL", Const, 0},
+		{"SYS_SEMCONFIG", Const, 1},
+		{"SYS_SEMCTL", Const, 0},
+		{"SYS_SEMGET", Const, 0},
+		{"SYS_SEMOP", Const, 0},
+		{"SYS_SEMSYS", Const, 0},
+		{"SYS_SEMTIMEDOP", Const, 0},
+		{"SYS_SEM_CLOSE", Const, 0},
+		{"SYS_SEM_DESTROY", Const, 0},
+		{"SYS_SEM_GETVALUE", Const, 0},
+		{"SYS_SEM_INIT", Const, 0},
+		{"SYS_SEM_OPEN", Const, 0},
+		{"SYS_SEM_POST", Const, 0},
+		{"SYS_SEM_TRYWAIT", Const, 0},
+		{"SYS_SEM_UNLINK", Const, 0},
+		{"SYS_SEM_WAIT", Const, 0},
+		{"SYS_SEM_WAIT_NOCANCEL", Const, 0},
+		{"SYS_SEND", Const, 0},
+		{"SYS_SENDFILE", Const, 0},
+		{"SYS_SENDFILE64", Const, 0},
+		{"SYS_SENDMMSG", Const, 0},
+		{"SYS_SENDMSG", Const, 0},
+		{"SYS_SENDMSG_NOCANCEL", Const, 0},
+		{"SYS_SENDTO", Const, 0},
+		{"SYS_SENDTO_NOCANCEL", Const, 0},
+		{"SYS_SETATTRLIST", Const, 0},
+		{"SYS_SETAUDIT", Const, 0},
+		{"SYS_SETAUDIT_ADDR", Const, 0},
+		{"SYS_SETAUID", Const, 0},
+		{"SYS_SETCONTEXT", Const, 0},
+		{"SYS_SETDOMAINNAME", Const, 0},
+		{"SYS_SETEGID", Const, 0},
+		{"SYS_SETEUID", Const, 0},
+		{"SYS_SETFIB", Const, 0},
+		{"SYS_SETFSGID", Const, 0},
+		{"SYS_SETFSGID32", Const, 0},
+		{"SYS_SETFSUID", Const, 0},
+		{"SYS_SETFSUID32", Const, 0},
+		{"SYS_SETGID", Const, 0},
+		{"SYS_SETGID32", Const, 0},
+		{"SYS_SETGROUPS", Const, 0},
+		{"SYS_SETGROUPS32", Const, 0},
+		{"SYS_SETHOSTNAME", Const, 0},
+		{"SYS_SETITIMER", Const, 0},
+		{"SYS_SETLCID", Const, 0},
+		{"SYS_SETLOGIN", Const, 0},
+		{"SYS_SETLOGINCLASS", Const, 0},
+		{"SYS_SETNS", Const, 0},
+		{"SYS_SETPGID", Const, 0},
+		{"SYS_SETPRIORITY", Const, 0},
+		{"SYS_SETPRIVEXEC", Const, 0},
+		{"SYS_SETREGID", Const, 0},
+		{"SYS_SETREGID32", Const, 0},
+		{"SYS_SETRESGID", Const, 0},
+		{"SYS_SETRESGID32", Const, 0},
+		{"SYS_SETRESUID", Const, 0},
+		{"SYS_SETRESUID32", Const, 0},
+		{"SYS_SETREUID", Const, 0},
+		{"SYS_SETREUID32", Const, 0},
+		{"SYS_SETRLIMIT", Const, 0},
+		{"SYS_SETRTABLE", Const, 1},
+		{"SYS_SETSGROUPS", Const, 0},
+		{"SYS_SETSID", Const, 0},
+		{"SYS_SETSOCKOPT", Const, 0},
+		{"SYS_SETTID", Const, 0},
+		{"SYS_SETTID_WITH_PID", Const, 0},
+		{"SYS_SETTIMEOFDAY", Const, 0},
+		{"SYS_SETUID", Const, 0},
+		{"SYS_SETUID32", Const, 0},
+		{"SYS_SETWGROUPS", Const, 0},
+		{"SYS_SETXATTR", Const, 0},
+		{"SYS_SET_MEMPOLICY", Const, 0},
+		{"SYS_SET_ROBUST_LIST", Const, 0},
+		{"SYS_SET_THREAD_AREA", Const, 0},
+		{"SYS_SET_TID_ADDRESS", Const, 0},
+		{"SYS_SGETMASK", Const, 0},
+		{"SYS_SHARED_REGION_CHECK_NP", Const, 0},
+		{"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0},
+		{"SYS_SHMAT", Const, 0},
+		{"SYS_SHMCTL", Const, 0},
+		{"SYS_SHMDT", Const, 0},
+		{"SYS_SHMGET", Const, 0},
+		{"SYS_SHMSYS", Const, 0},
+		{"SYS_SHM_OPEN", Const, 0},
+		{"SYS_SHM_UNLINK", Const, 0},
+		{"SYS_SHUTDOWN", Const, 0},
+		{"SYS_SIGACTION", Const, 0},
+		{"SYS_SIGALTSTACK", Const, 0},
+		{"SYS_SIGNAL", Const, 0},
+		{"SYS_SIGNALFD", Const, 0},
+		{"SYS_SIGNALFD4", Const, 0},
+		{"SYS_SIGPENDING", Const, 0},
+		{"SYS_SIGPROCMASK", Const, 0},
+		{"SYS_SIGQUEUE", Const, 0},
+		{"SYS_SIGQUEUEINFO", Const, 1},
+		{"SYS_SIGRETURN", Const, 0},
+		{"SYS_SIGSUSPEND", Const, 0},
+		{"SYS_SIGSUSPEND_NOCANCEL", Const, 0},
+		{"SYS_SIGTIMEDWAIT", Const, 0},
+		{"SYS_SIGWAIT", Const, 0},
+		{"SYS_SIGWAITINFO", Const, 0},
+		{"SYS_SOCKET", Const, 0},
+		{"SYS_SOCKETCALL", Const, 0},
+		{"SYS_SOCKETPAIR", Const, 0},
+		{"SYS_SPLICE", Const, 0},
+		{"SYS_SSETMASK", Const, 0},
+		{"SYS_SSTK", Const, 0},
+		{"SYS_STACK_SNAPSHOT", Const, 0},
+		{"SYS_STAT", Const, 0},
+		{"SYS_STAT64", Const, 0},
+		{"SYS_STAT64_EXTENDED", Const, 0},
+		{"SYS_STATFS", Const, 0},
+		{"SYS_STATFS64", Const, 0},
+		{"SYS_STATV", Const, 0},
+		{"SYS_STATVFS1", Const, 1},
+		{"SYS_STAT_EXTENDED", Const, 0},
+		{"SYS_STIME", Const, 0},
+		{"SYS_STTY", Const, 0},
+		{"SYS_SWAPCONTEXT", Const, 0},
+		{"SYS_SWAPCTL", Const, 1},
+		{"SYS_SWAPOFF", Const, 0},
+		{"SYS_SWAPON", Const, 0},
+		{"SYS_SYMLINK", Const, 0},
+		{"SYS_SYMLINKAT", Const, 0},
+		{"SYS_SYNC", Const, 0},
+		{"SYS_SYNCFS", Const, 0},
+		{"SYS_SYNC_FILE_RANGE", Const, 0},
+		{"SYS_SYSARCH", Const, 0},
+		{"SYS_SYSCALL", Const, 0},
+		{"SYS_SYSCALL_BASE", Const, 0},
+		{"SYS_SYSFS", Const, 0},
+		{"SYS_SYSINFO", Const, 0},
+		{"SYS_SYSLOG", Const, 0},
+		{"SYS_TEE", Const, 0},
+		{"SYS_TGKILL", Const, 0},
+		{"SYS_THREAD_SELFID", Const, 0},
+		{"SYS_THR_CREATE", Const, 0},
+		{"SYS_THR_EXIT", Const, 0},
+		{"SYS_THR_KILL", Const, 0},
+		{"SYS_THR_KILL2", Const, 0},
+		{"SYS_THR_NEW", Const, 0},
+		{"SYS_THR_SELF", Const, 0},
+		{"SYS_THR_SET_NAME", Const, 0},
+		{"SYS_THR_SUSPEND", Const, 0},
+		{"SYS_THR_WAKE", Const, 0},
+		{"SYS_TIME", Const, 0},
+		{"SYS_TIMERFD_CREATE", Const, 0},
+		{"SYS_TIMERFD_GETTIME", Const, 0},
+		{"SYS_TIMERFD_SETTIME", Const, 0},
+		{"SYS_TIMER_CREATE", Const, 0},
+		{"SYS_TIMER_DELETE", Const, 0},
+		{"SYS_TIMER_GETOVERRUN", Const, 0},
+		{"SYS_TIMER_GETTIME", Const, 0},
+		{"SYS_TIMER_SETTIME", Const, 0},
+		{"SYS_TIMES", Const, 0},
+		{"SYS_TKILL", Const, 0},
+		{"SYS_TRUNCATE", Const, 0},
+		{"SYS_TRUNCATE64", Const, 0},
+		{"SYS_TUXCALL", Const, 0},
+		{"SYS_UGETRLIMIT", Const, 0},
+		{"SYS_ULIMIT", Const, 0},
+		{"SYS_UMASK", Const, 0},
+		{"SYS_UMASK_EXTENDED", Const, 0},
+		{"SYS_UMOUNT", Const, 0},
+		{"SYS_UMOUNT2", Const, 0},
+		{"SYS_UNAME", Const, 0},
+		{"SYS_UNDELETE", Const, 0},
+		{"SYS_UNLINK", Const, 0},
+		{"SYS_UNLINKAT", Const, 0},
+		{"SYS_UNMOUNT", Const, 0},
+		{"SYS_UNSHARE", Const, 0},
+		{"SYS_USELIB", Const, 0},
+		{"SYS_USTAT", Const, 0},
+		{"SYS_UTIME", Const, 0},
+		{"SYS_UTIMENSAT", Const, 0},
+		{"SYS_UTIMES", Const, 0},
+		{"SYS_UTRACE", Const, 0},
+		{"SYS_UUIDGEN", Const, 0},
+		{"SYS_VADVISE", Const, 1},
+		{"SYS_VFORK", Const, 0},
+		{"SYS_VHANGUP", Const, 0},
+		{"SYS_VM86", Const, 0},
+		{"SYS_VM86OLD", Const, 0},
+		{"SYS_VMSPLICE", Const, 0},
+		{"SYS_VM_PRESSURE_MONITOR", Const, 0},
+		{"SYS_VSERVER", Const, 0},
+		{"SYS_WAIT4", Const, 0},
+		{"SYS_WAIT4_NOCANCEL", Const, 0},
+		{"SYS_WAIT6", Const, 1},
+		{"SYS_WAITEVENT", Const, 0},
+		{"SYS_WAITID", Const, 0},
+		{"SYS_WAITID_NOCANCEL", Const, 0},
+		{"SYS_WAITPID", Const, 0},
+		{"SYS_WATCHEVENT", Const, 0},
+		{"SYS_WORKQ_KERNRETURN", Const, 0},
+		{"SYS_WORKQ_OPEN", Const, 0},
+		{"SYS_WRITE", Const, 0},
+		{"SYS_WRITEV", Const, 0},
+		{"SYS_WRITEV_NOCANCEL", Const, 0},
+		{"SYS_WRITE_NOCANCEL", Const, 0},
+		{"SYS_YIELD", Const, 0},
+		{"SYS__LLSEEK", Const, 0},
+		{"SYS__LWP_CONTINUE", Const, 1},
+		{"SYS__LWP_CREATE", Const, 1},
+		{"SYS__LWP_CTL", Const, 1},
+		{"SYS__LWP_DETACH", Const, 1},
+		{"SYS__LWP_EXIT", Const, 1},
+		{"SYS__LWP_GETNAME", Const, 1},
+		{"SYS__LWP_GETPRIVATE", Const, 1},
+		{"SYS__LWP_KILL", Const, 1},
+		{"SYS__LWP_PARK", Const, 1},
+		{"SYS__LWP_SELF", Const, 1},
+		{"SYS__LWP_SETNAME", Const, 1},
+		{"SYS__LWP_SETPRIVATE", Const, 1},
+		{"SYS__LWP_SUSPEND", Const, 1},
+		{"SYS__LWP_UNPARK", Const, 1},
+		{"SYS__LWP_UNPARK_ALL", Const, 1},
+		{"SYS__LWP_WAIT", Const, 1},
+		{"SYS__LWP_WAKEUP", Const, 1},
+		{"SYS__NEWSELECT", Const, 0},
+		{"SYS__PSET_BIND", Const, 1},
+		{"SYS__SCHED_GETAFFINITY", Const, 1},
+		{"SYS__SCHED_GETPARAM", Const, 1},
+		{"SYS__SCHED_SETAFFINITY", Const, 1},
+		{"SYS__SCHED_SETPARAM", Const, 1},
+		{"SYS__SYSCTL", Const, 0},
+		{"SYS__UMTX_LOCK", Const, 0},
+		{"SYS__UMTX_OP", Const, 0},
+		{"SYS__UMTX_UNLOCK", Const, 0},
+		{"SYS___ACL_ACLCHECK_FD", Const, 0},
+		{"SYS___ACL_ACLCHECK_FILE", Const, 0},
+		{"SYS___ACL_ACLCHECK_LINK", Const, 0},
+		{"SYS___ACL_DELETE_FD", Const, 0},
+		{"SYS___ACL_DELETE_FILE", Const, 0},
+		{"SYS___ACL_DELETE_LINK", Const, 0},
+		{"SYS___ACL_GET_FD", Const, 0},
+		{"SYS___ACL_GET_FILE", Const, 0},
+		{"SYS___ACL_GET_LINK", Const, 0},
+		{"SYS___ACL_SET_FD", Const, 0},
+		{"SYS___ACL_SET_FILE", Const, 0},
+		{"SYS___ACL_SET_LINK", Const, 0},
+		{"SYS___CAP_RIGHTS_GET", Const, 14},
+		{"SYS___CLONE", Const, 1},
+		{"SYS___DISABLE_THREADSIGNAL", Const, 0},
+		{"SYS___GETCWD", Const, 0},
+		{"SYS___GETLOGIN", Const, 1},
+		{"SYS___GET_TCB", Const, 1},
+		{"SYS___MAC_EXECVE", Const, 0},
+		{"SYS___MAC_GETFSSTAT", Const, 0},
+		{"SYS___MAC_GET_FD", Const, 0},
+		{"SYS___MAC_GET_FILE", Const, 0},
+		{"SYS___MAC_GET_LCID", Const, 0},
+		{"SYS___MAC_GET_LCTX", Const, 0},
+		{"SYS___MAC_GET_LINK", Const, 0},
+		{"SYS___MAC_GET_MOUNT", Const, 0},
+		{"SYS___MAC_GET_PID", Const, 0},
+		{"SYS___MAC_GET_PROC", Const, 0},
+		{"SYS___MAC_MOUNT", Const, 0},
+		{"SYS___MAC_SET_FD", Const, 0},
+		{"SYS___MAC_SET_FILE", Const, 0},
+		{"SYS___MAC_SET_LCTX", Const, 0},
+		{"SYS___MAC_SET_LINK", Const, 0},
+		{"SYS___MAC_SET_PROC", Const, 0},
+		{"SYS___MAC_SYSCALL", Const, 0},
+		{"SYS___OLD_SEMWAIT_SIGNAL", Const, 0},
+		{"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
+		{"SYS___POSIX_CHOWN", Const, 1},
+		{"SYS___POSIX_FCHOWN", Const, 1},
+		{"SYS___POSIX_LCHOWN", Const, 1},
+		{"SYS___POSIX_RENAME", Const, 1},
+		{"SYS___PTHREAD_CANCELED", Const, 0},
+		{"SYS___PTHREAD_CHDIR", Const, 0},
+		{"SYS___PTHREAD_FCHDIR", Const, 0},
+		{"SYS___PTHREAD_KILL", Const, 0},
+		{"SYS___PTHREAD_MARKCANCEL", Const, 0},
+		{"SYS___PTHREAD_SIGMASK", Const, 0},
+		{"SYS___QUOTACTL", Const, 1},
+		{"SYS___SEMCTL", Const, 1},
+		{"SYS___SEMWAIT_SIGNAL", Const, 0},
+		{"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0},
+		{"SYS___SETLOGIN", Const, 1},
+		{"SYS___SETUGID", Const, 0},
+		{"SYS___SET_TCB", Const, 1},
+		{"SYS___SIGACTION_SIGTRAMP", Const, 1},
+		{"SYS___SIGTIMEDWAIT", Const, 1},
+		{"SYS___SIGWAIT", Const, 0},
+		{"SYS___SIGWAIT_NOCANCEL", Const, 0},
+		{"SYS___SYSCTL", Const, 0},
+		{"SYS___TFORK", Const, 1},
+		{"SYS___THREXIT", Const, 1},
+		{"SYS___THRSIGDIVERT", Const, 1},
+		{"SYS___THRSLEEP", Const, 1},
+		{"SYS___THRWAKEUP", Const, 1},
+		{"S_ARCH1", Const, 1},
+		{"S_ARCH2", Const, 1},
+		{"S_BLKSIZE", Const, 0},
+		{"S_IEXEC", Const, 0},
+		{"S_IFBLK", Const, 0},
+		{"S_IFCHR", Const, 0},
+		{"S_IFDIR", Const, 0},
+		{"S_IFIFO", Const, 0},
+		{"S_IFLNK", Const, 0},
+		{"S_IFMT", Const, 0},
+		{"S_IFREG", Const, 0},
+		{"S_IFSOCK", Const, 0},
+		{"S_IFWHT", Const, 0},
+		{"S_IREAD", Const, 0},
+		{"S_IRGRP", Const, 0},
+		{"S_IROTH", Const, 0},
+		{"S_IRUSR", Const, 0},
+		{"S_IRWXG", Const, 0},
+		{"S_IRWXO", Const, 0},
+		{"S_IRWXU", Const, 0},
+		{"S_ISGID", Const, 0},
+		{"S_ISTXT", Const, 0},
+		{"S_ISUID", Const, 0},
+		{"S_ISVTX", Const, 0},
+		{"S_IWGRP", Const, 0},
+		{"S_IWOTH", Const, 0},
+		{"S_IWRITE", Const, 0},
+		{"S_IWUSR", Const, 0},
+		{"S_IXGRP", Const, 0},
+		{"S_IXOTH", Const, 0},
+		{"S_IXUSR", Const, 0},
+		{"S_LOGIN_SET", Const, 1},
+		{"SecurityAttributes", Type, 0},
+		{"SecurityAttributes.InheritHandle", Field, 0},
+		{"SecurityAttributes.Length", Field, 0},
+		{"SecurityAttributes.SecurityDescriptor", Field, 0},
+		{"Seek", Func, 0},
+		{"Select", Func, 0},
+		{"Sendfile", Func, 0},
+		{"Sendmsg", Func, 0},
+		{"SendmsgN", Func, 3},
+		{"Sendto", Func, 0},
+		{"Servent", Type, 0},
+		{"Servent.Aliases", Field, 0},
+		{"Servent.Name", Field, 0},
+		{"Servent.Port", Field, 0},
+		{"Servent.Proto", Field, 0},
+		{"SetBpf", Func, 0},
+		{"SetBpfBuflen", Func, 0},
+		{"SetBpfDatalink", Func, 0},
+		{"SetBpfHeadercmpl", Func, 0},
+		{"SetBpfImmediate", Func, 0},
+		{"SetBpfInterface", Func, 0},
+		{"SetBpfPromisc", Func, 0},
+		{"SetBpfTimeout", Func, 0},
+		{"SetCurrentDirectory", Func, 0},
+		{"SetEndOfFile", Func, 0},
+		{"SetEnvironmentVariable", Func, 0},
+		{"SetFileAttributes", Func, 0},
+		{"SetFileCompletionNotificationModes", Func, 2},
+		{"SetFilePointer", Func, 0},
+		{"SetFileTime", Func, 0},
+		{"SetHandleInformation", Func, 0},
+		{"SetKevent", Func, 0},
+		{"SetLsfPromisc", Func, 0},
+		{"SetNonblock", Func, 0},
+		{"Setdomainname", Func, 0},
+		{"Setegid", Func, 0},
+		{"Setenv", Func, 0},
+		{"Seteuid", Func, 0},
+		{"Setfsgid", Func, 0},
+		{"Setfsuid", Func, 0},
+		{"Setgid", Func, 0},
+		{"Setgroups", Func, 0},
+		{"Sethostname", Func, 0},
+		{"Setlogin", Func, 0},
+		{"Setpgid", Func, 0},
+		{"Setpriority", Func, 0},
+		{"Setprivexec", Func, 0},
+		{"Setregid", Func, 0},
+		{"Setresgid", Func, 0},
+		{"Setresuid", Func, 0},
+		{"Setreuid", Func, 0},
+		{"Setrlimit", Func, 0},
+		{"Setsid", Func, 0},
+		{"Setsockopt", Func, 0},
+		{"SetsockoptByte", Func, 0},
+		{"SetsockoptICMPv6Filter", Func, 2},
+		{"SetsockoptIPMreq", Func, 0},
+		{"SetsockoptIPMreqn", Func, 0},
+		{"SetsockoptIPv6Mreq", Func, 0},
+		{"SetsockoptInet4Addr", Func, 0},
+		{"SetsockoptInt", Func, 0},
+		{"SetsockoptLinger", Func, 0},
+		{"SetsockoptString", Func, 0},
+		{"SetsockoptTimeval", Func, 0},
+		{"Settimeofday", Func, 0},
+		{"Setuid", Func, 0},
+		{"Setxattr", Func, 1},
+		{"Shutdown", Func, 0},
+		{"SidTypeAlias", Const, 0},
+		{"SidTypeComputer", Const, 0},
+		{"SidTypeDeletedAccount", Const, 0},
+		{"SidTypeDomain", Const, 0},
+		{"SidTypeGroup", Const, 0},
+		{"SidTypeInvalid", Const, 0},
+		{"SidTypeLabel", Const, 0},
+		{"SidTypeUnknown", Const, 0},
+		{"SidTypeUser", Const, 0},
+		{"SidTypeWellKnownGroup", Const, 0},
+		{"Signal", Type, 0},
+		{"SizeofBpfHdr", Const, 0},
+		{"SizeofBpfInsn", Const, 0},
+		{"SizeofBpfProgram", Const, 0},
+		{"SizeofBpfStat", Const, 0},
+		{"SizeofBpfVersion", Const, 0},
+		{"SizeofBpfZbuf", Const, 0},
+		{"SizeofBpfZbufHeader", Const, 0},
+		{"SizeofCmsghdr", Const, 0},
+		{"SizeofICMPv6Filter", Const, 2},
+		{"SizeofIPMreq", Const, 0},
+		{"SizeofIPMreqn", Const, 0},
+		{"SizeofIPv6MTUInfo", Const, 2},
+		{"SizeofIPv6Mreq", Const, 0},
+		{"SizeofIfAddrmsg", Const, 0},
+		{"SizeofIfAnnounceMsghdr", Const, 1},
+		{"SizeofIfData", Const, 0},
+		{"SizeofIfInfomsg", Const, 0},
+		{"SizeofIfMsghdr", Const, 0},
+		{"SizeofIfaMsghdr", Const, 0},
+		{"SizeofIfmaMsghdr", Const, 0},
+		{"SizeofIfmaMsghdr2", Const, 0},
+		{"SizeofInet4Pktinfo", Const, 0},
+		{"SizeofInet6Pktinfo", Const, 0},
+		{"SizeofInotifyEvent", Const, 0},
+		{"SizeofLinger", Const, 0},
+		{"SizeofMsghdr", Const, 0},
+		{"SizeofNlAttr", Const, 0},
+		{"SizeofNlMsgerr", Const, 0},
+		{"SizeofNlMsghdr", Const, 0},
+		{"SizeofRtAttr", Const, 0},
+		{"SizeofRtGenmsg", Const, 0},
+		{"SizeofRtMetrics", Const, 0},
+		{"SizeofRtMsg", Const, 0},
+		{"SizeofRtMsghdr", Const, 0},
+		{"SizeofRtNexthop", Const, 0},
+		{"SizeofSockFilter", Const, 0},
+		{"SizeofSockFprog", Const, 0},
+		{"SizeofSockaddrAny", Const, 0},
+		{"SizeofSockaddrDatalink", Const, 0},
+		{"SizeofSockaddrInet4", Const, 0},
+		{"SizeofSockaddrInet6", Const, 0},
+		{"SizeofSockaddrLinklayer", Const, 0},
+		{"SizeofSockaddrNetlink", Const, 0},
+		{"SizeofSockaddrUnix", Const, 0},
+		{"SizeofTCPInfo", Const, 1},
+		{"SizeofUcred", Const, 0},
+		{"SlicePtrFromStrings", Func, 1},
+		{"SockFilter", Type, 0},
+		{"SockFilter.Code", Field, 0},
+		{"SockFilter.Jf", Field, 0},
+		{"SockFilter.Jt", Field, 0},
+		{"SockFilter.K", Field, 0},
+		{"SockFprog", Type, 0},
+		{"SockFprog.Filter", Field, 0},
+		{"SockFprog.Len", Field, 0},
+		{"SockFprog.Pad_cgo_0", Field, 0},
+		{"Sockaddr", Type, 0},
+		{"SockaddrDatalink", Type, 0},
+		{"SockaddrDatalink.Alen", Field, 0},
+		{"SockaddrDatalink.Data", Field, 0},
+		{"SockaddrDatalink.Family", Field, 0},
+		{"SockaddrDatalink.Index", Field, 0},
+		{"SockaddrDatalink.Len", Field, 0},
+		{"SockaddrDatalink.Nlen", Field, 0},
+		{"SockaddrDatalink.Slen", Field, 0},
+		{"SockaddrDatalink.Type", Field, 0},
+		{"SockaddrGen", Type, 0},
+		{"SockaddrInet4", Type, 0},
+		{"SockaddrInet4.Addr", Field, 0},
+		{"SockaddrInet4.Port", Field, 0},
+		{"SockaddrInet6", Type, 0},
+		{"SockaddrInet6.Addr", Field, 0},
+		{"SockaddrInet6.Port", Field, 0},
+		{"SockaddrInet6.ZoneId", Field, 0},
+		{"SockaddrLinklayer", Type, 0},
+		{"SockaddrLinklayer.Addr", Field, 0},
+		{"SockaddrLinklayer.Halen", Field, 0},
+		{"SockaddrLinklayer.Hatype", Field, 0},
+		{"SockaddrLinklayer.Ifindex", Field, 0},
+		{"SockaddrLinklayer.Pkttype", Field, 0},
+		{"SockaddrLinklayer.Protocol", Field, 0},
+		{"SockaddrNetlink", Type, 0},
+		{"SockaddrNetlink.Family", Field, 0},
+		{"SockaddrNetlink.Groups", Field, 0},
+		{"SockaddrNetlink.Pad", Field, 0},
+		{"SockaddrNetlink.Pid", Field, 0},
+		{"SockaddrUnix", Type, 0},
+		{"SockaddrUnix.Name", Field, 0},
+		{"Socket", Func, 0},
+		{"SocketControlMessage", Type, 0},
+		{"SocketControlMessage.Data", Field, 0},
+		{"SocketControlMessage.Header", Field, 0},
+		{"SocketDisableIPv6", Var, 0},
+		{"Socketpair", Func, 0},
+		{"Splice", Func, 0},
+		{"StartProcess", Func, 0},
+		{"StartupInfo", Type, 0},
+		{"StartupInfo.Cb", Field, 0},
+		{"StartupInfo.Desktop", Field, 0},
+		{"StartupInfo.FillAttribute", Field, 0},
+		{"StartupInfo.Flags", Field, 0},
+		{"StartupInfo.ShowWindow", Field, 0},
+		{"StartupInfo.StdErr", Field, 0},
+		{"StartupInfo.StdInput", Field, 0},
+		{"StartupInfo.StdOutput", Field, 0},
+		{"StartupInfo.Title", Field, 0},
+		{"StartupInfo.X", Field, 0},
+		{"StartupInfo.XCountChars", Field, 0},
+		{"StartupInfo.XSize", Field, 0},
+		{"StartupInfo.Y", Field, 0},
+		{"StartupInfo.YCountChars", Field, 0},
+		{"StartupInfo.YSize", Field, 0},
+		{"Stat", Func, 0},
+		{"Stat_t", Type, 0},
+		{"Stat_t.Atim", Field, 0},
+		{"Stat_t.Atim_ext", Field, 12},
+		{"Stat_t.Atimespec", Field, 0},
+		{"Stat_t.Birthtimespec", Field, 0},
+		{"Stat_t.Blksize", Field, 0},
+		{"Stat_t.Blocks", Field, 0},
+		{"Stat_t.Btim_ext", Field, 12},
+		{"Stat_t.Ctim", Field, 0},
+		{"Stat_t.Ctim_ext", Field, 12},
+		{"Stat_t.Ctimespec", Field, 0},
+		{"Stat_t.Dev", Field, 0},
+		{"Stat_t.Flags", Field, 0},
+		{"Stat_t.Gen", Field, 0},
+		{"Stat_t.Gid", Field, 0},
+		{"Stat_t.Ino", Field, 0},
+		{"Stat_t.Lspare", Field, 0},
+		{"Stat_t.Lspare0", Field, 2},
+		{"Stat_t.Lspare1", Field, 2},
+		{"Stat_t.Mode", Field, 0},
+		{"Stat_t.Mtim", Field, 0},
+		{"Stat_t.Mtim_ext", Field, 12},
+		{"Stat_t.Mtimespec", Field, 0},
+		{"Stat_t.Nlink", Field, 0},
+		{"Stat_t.Pad_cgo_0", Field, 0},
+		{"Stat_t.Pad_cgo_1", Field, 0},
+		{"Stat_t.Pad_cgo_2", Field, 0},
+		{"Stat_t.Padding0", Field, 12},
+		{"Stat_t.Padding1", Field, 12},
+		{"Stat_t.Qspare", Field, 0},
+		{"Stat_t.Rdev", Field, 0},
+		{"Stat_t.Size", Field, 0},
+		{"Stat_t.Spare", Field, 2},
+		{"Stat_t.Uid", Field, 0},
+		{"Stat_t.X__pad0", Field, 0},
+		{"Stat_t.X__pad1", Field, 0},
+		{"Stat_t.X__pad2", Field, 0},
+		{"Stat_t.X__st_birthtim", Field, 2},
+		{"Stat_t.X__st_ino", Field, 0},
+		{"Stat_t.X__unused", Field, 0},
+		{"Statfs", Func, 0},
+		{"Statfs_t", Type, 0},
+		{"Statfs_t.Asyncreads", Field, 0},
+		{"Statfs_t.Asyncwrites", Field, 0},
+		{"Statfs_t.Bavail", Field, 0},
+		{"Statfs_t.Bfree", Field, 0},
+		{"Statfs_t.Blocks", Field, 0},
+		{"Statfs_t.Bsize", Field, 0},
+		{"Statfs_t.Charspare", Field, 0},
+		{"Statfs_t.F_asyncreads", Field, 2},
+		{"Statfs_t.F_asyncwrites", Field, 2},
+		{"Statfs_t.F_bavail", Field, 2},
+		{"Statfs_t.F_bfree", Field, 2},
+		{"Statfs_t.F_blocks", Field, 2},
+		{"Statfs_t.F_bsize", Field, 2},
+		{"Statfs_t.F_ctime", Field, 2},
+		{"Statfs_t.F_favail", Field, 2},
+		{"Statfs_t.F_ffree", Field, 2},
+		{"Statfs_t.F_files", Field, 2},
+		{"Statfs_t.F_flags", Field, 2},
+		{"Statfs_t.F_fsid", Field, 2},
+		{"Statfs_t.F_fstypename", Field, 2},
+		{"Statfs_t.F_iosize", Field, 2},
+		{"Statfs_t.F_mntfromname", Field, 2},
+		{"Statfs_t.F_mntfromspec", Field, 3},
+		{"Statfs_t.F_mntonname", Field, 2},
+		{"Statfs_t.F_namemax", Field, 2},
+		{"Statfs_t.F_owner", Field, 2},
+		{"Statfs_t.F_spare", Field, 2},
+		{"Statfs_t.F_syncreads", Field, 2},
+		{"Statfs_t.F_syncwrites", Field, 2},
+		{"Statfs_t.Ffree", Field, 0},
+		{"Statfs_t.Files", Field, 0},
+		{"Statfs_t.Flags", Field, 0},
+		{"Statfs_t.Frsize", Field, 0},
+		{"Statfs_t.Fsid", Field, 0},
+		{"Statfs_t.Fssubtype", Field, 0},
+		{"Statfs_t.Fstypename", Field, 0},
+		{"Statfs_t.Iosize", Field, 0},
+		{"Statfs_t.Mntfromname", Field, 0},
+		{"Statfs_t.Mntonname", Field, 0},
+		{"Statfs_t.Mount_info", Field, 2},
+		{"Statfs_t.Namelen", Field, 0},
+		{"Statfs_t.Namemax", Field, 0},
+		{"Statfs_t.Owner", Field, 0},
+		{"Statfs_t.Pad_cgo_0", Field, 0},
+		{"Statfs_t.Pad_cgo_1", Field, 2},
+		{"Statfs_t.Reserved", Field, 0},
+		{"Statfs_t.Spare", Field, 0},
+		{"Statfs_t.Syncreads", Field, 0},
+		{"Statfs_t.Syncwrites", Field, 0},
+		{"Statfs_t.Type", Field, 0},
+		{"Statfs_t.Version", Field, 0},
+		{"Stderr", Var, 0},
+		{"Stdin", Var, 0},
+		{"Stdout", Var, 0},
+		{"StringBytePtr", Func, 0},
+		{"StringByteSlice", Func, 0},
+		{"StringSlicePtr", Func, 0},
+		{"StringToSid", Func, 0},
+		{"StringToUTF16", Func, 0},
+		{"StringToUTF16Ptr", Func, 0},
+		{"Symlink", Func, 0},
+		{"Sync", Func, 0},
+		{"SyncFileRange", Func, 0},
+		{"SysProcAttr", Type, 0},
+		{"SysProcAttr.AdditionalInheritedHandles", Field, 17},
+		{"SysProcAttr.AmbientCaps", Field, 9},
+		{"SysProcAttr.CgroupFD", Field, 20},
+		{"SysProcAttr.Chroot", Field, 0},
+		{"SysProcAttr.Cloneflags", Field, 2},
+		{"SysProcAttr.CmdLine", Field, 0},
+		{"SysProcAttr.CreationFlags", Field, 1},
+		{"SysProcAttr.Credential", Field, 0},
+		{"SysProcAttr.Ctty", Field, 1},
+		{"SysProcAttr.Foreground", Field, 5},
+		{"SysProcAttr.GidMappings", Field, 4},
+		{"SysProcAttr.GidMappingsEnableSetgroups", Field, 5},
+		{"SysProcAttr.HideWindow", Field, 0},
+		{"SysProcAttr.Jail", Field, 21},
+		{"SysProcAttr.NoInheritHandles", Field, 16},
+		{"SysProcAttr.Noctty", Field, 0},
+		{"SysProcAttr.ParentProcess", Field, 17},
+		{"SysProcAttr.Pdeathsig", Field, 0},
+		{"SysProcAttr.Pgid", Field, 5},
+		{"SysProcAttr.PidFD", Field, 22},
+		{"SysProcAttr.ProcessAttributes", Field, 13},
+		{"SysProcAttr.Ptrace", Field, 0},
+		{"SysProcAttr.Setctty", Field, 0},
+		{"SysProcAttr.Setpgid", Field, 0},
+		{"SysProcAttr.Setsid", Field, 0},
+		{"SysProcAttr.ThreadAttributes", Field, 13},
+		{"SysProcAttr.Token", Field, 10},
+		{"SysProcAttr.UidMappings", Field, 4},
+		{"SysProcAttr.Unshareflags", Field, 7},
+		{"SysProcAttr.UseCgroupFD", Field, 20},
+		{"SysProcIDMap", Type, 4},
+		{"SysProcIDMap.ContainerID", Field, 4},
+		{"SysProcIDMap.HostID", Field, 4},
+		{"SysProcIDMap.Size", Field, 4},
+		{"Syscall", Func, 0},
+		{"Syscall12", Func, 0},
+		{"Syscall15", Func, 0},
+		{"Syscall18", Func, 12},
+		{"Syscall6", Func, 0},
+		{"Syscall9", Func, 0},
+		{"SyscallN", Func, 18},
+		{"Sysctl", Func, 0},
+		{"SysctlUint32", Func, 0},
+		{"Sysctlnode", Type, 2},
+		{"Sysctlnode.Flags", Field, 2},
+		{"Sysctlnode.Name", Field, 2},
+		{"Sysctlnode.Num", Field, 2},
+		{"Sysctlnode.Un", Field, 2},
+		{"Sysctlnode.Ver", Field, 2},
+		{"Sysctlnode.X__rsvd", Field, 2},
+		{"Sysctlnode.X_sysctl_desc", Field, 2},
+		{"Sysctlnode.X_sysctl_func", Field, 2},
+		{"Sysctlnode.X_sysctl_parent", Field, 2},
+		{"Sysctlnode.X_sysctl_size", Field, 2},
+		{"Sysinfo", Func, 0},
+		{"Sysinfo_t", Type, 0},
+		{"Sysinfo_t.Bufferram", Field, 0},
+		{"Sysinfo_t.Freehigh", Field, 0},
+		{"Sysinfo_t.Freeram", Field, 0},
+		{"Sysinfo_t.Freeswap", Field, 0},
+		{"Sysinfo_t.Loads", Field, 0},
+		{"Sysinfo_t.Pad", Field, 0},
+		{"Sysinfo_t.Pad_cgo_0", Field, 0},
+		{"Sysinfo_t.Pad_cgo_1", Field, 0},
+		{"Sysinfo_t.Procs", Field, 0},
+		{"Sysinfo_t.Sharedram", Field, 0},
+		{"Sysinfo_t.Totalhigh", Field, 0},
+		{"Sysinfo_t.Totalram", Field, 0},
+		{"Sysinfo_t.Totalswap", Field, 0},
+		{"Sysinfo_t.Unit", Field, 0},
+		{"Sysinfo_t.Uptime", Field, 0},
+		{"Sysinfo_t.X_f", Field, 0},
+		{"Systemtime", Type, 0},
+		{"Systemtime.Day", Field, 0},
+		{"Systemtime.DayOfWeek", Field, 0},
+		{"Systemtime.Hour", Field, 0},
+		{"Systemtime.Milliseconds", Field, 0},
+		{"Systemtime.Minute", Field, 0},
+		{"Systemtime.Month", Field, 0},
+		{"Systemtime.Second", Field, 0},
+		{"Systemtime.Year", Field, 0},
+		{"TCGETS", Const, 0},
+		{"TCIFLUSH", Const, 1},
+		{"TCIOFLUSH", Const, 1},
+		{"TCOFLUSH", Const, 1},
+		{"TCPInfo", Type, 1},
+		{"TCPInfo.Advmss", Field, 1},
+		{"TCPInfo.Ato", Field, 1},
+		{"TCPInfo.Backoff", Field, 1},
+		{"TCPInfo.Ca_state", Field, 1},
+		{"TCPInfo.Fackets", Field, 1},
+		{"TCPInfo.Last_ack_recv", Field, 1},
+		{"TCPInfo.Last_ack_sent", Field, 1},
+		{"TCPInfo.Last_data_recv", Field, 1},
+		{"TCPInfo.Last_data_sent", Field, 1},
+		{"TCPInfo.Lost", Field, 1},
+		{"TCPInfo.Options", Field, 1},
+		{"TCPInfo.Pad_cgo_0", Field, 1},
+		{"TCPInfo.Pmtu", Field, 1},
+		{"TCPInfo.Probes", Field, 1},
+		{"TCPInfo.Rcv_mss", Field, 1},
+		{"TCPInfo.Rcv_rtt", Field, 1},
+		{"TCPInfo.Rcv_space", Field, 1},
+		{"TCPInfo.Rcv_ssthresh", Field, 1},
+		{"TCPInfo.Reordering", Field, 1},
+		{"TCPInfo.Retrans", Field, 1},
+		{"TCPInfo.Retransmits", Field, 1},
+		{"TCPInfo.Rto", Field, 1},
+		{"TCPInfo.Rtt", Field, 1},
+		{"TCPInfo.Rttvar", Field, 1},
+		{"TCPInfo.Sacked", Field, 1},
+		{"TCPInfo.Snd_cwnd", Field, 1},
+		{"TCPInfo.Snd_mss", Field, 1},
+		{"TCPInfo.Snd_ssthresh", Field, 1},
+		{"TCPInfo.State", Field, 1},
+		{"TCPInfo.Total_retrans", Field, 1},
+		{"TCPInfo.Unacked", Field, 1},
+		{"TCPKeepalive", Type, 3},
+		{"TCPKeepalive.Interval", Field, 3},
+		{"TCPKeepalive.OnOff", Field, 3},
+		{"TCPKeepalive.Time", Field, 3},
+		{"TCP_CA_NAME_MAX", Const, 0},
+		{"TCP_CONGCTL", Const, 1},
+		{"TCP_CONGESTION", Const, 0},
+		{"TCP_CONNECTIONTIMEOUT", Const, 0},
+		{"TCP_CORK", Const, 0},
+		{"TCP_DEFER_ACCEPT", Const, 0},
+		{"TCP_ENABLE_ECN", Const, 16},
+		{"TCP_INFO", Const, 0},
+		{"TCP_KEEPALIVE", Const, 0},
+		{"TCP_KEEPCNT", Const, 0},
+		{"TCP_KEEPIDLE", Const, 0},
+		{"TCP_KEEPINIT", Const, 1},
+		{"TCP_KEEPINTVL", Const, 0},
+		{"TCP_LINGER2", Const, 0},
+		{"TCP_MAXBURST", Const, 0},
+		{"TCP_MAXHLEN", Const, 0},
+		{"TCP_MAXOLEN", Const, 0},
+		{"TCP_MAXSEG", Const, 0},
+		{"TCP_MAXWIN", Const, 0},
+		{"TCP_MAX_SACK", Const, 0},
+		{"TCP_MAX_WINSHIFT", Const, 0},
+		{"TCP_MD5SIG", Const, 0},
+		{"TCP_MD5SIG_MAXKEYLEN", Const, 0},
+		{"TCP_MINMSS", Const, 0},
+		{"TCP_MINMSSOVERLOAD", Const, 0},
+		{"TCP_MSS", Const, 0},
+		{"TCP_NODELAY", Const, 0},
+		{"TCP_NOOPT", Const, 0},
+		{"TCP_NOPUSH", Const, 0},
+		{"TCP_NOTSENT_LOWAT", Const, 16},
+		{"TCP_NSTATES", Const, 1},
+		{"TCP_QUICKACK", Const, 0},
+		{"TCP_RXT_CONNDROPTIME", Const, 0},
+		{"TCP_RXT_FINDROP", Const, 0},
+		{"TCP_SACK_ENABLE", Const, 1},
+		{"TCP_SENDMOREACKS", Const, 16},
+		{"TCP_SYNCNT", Const, 0},
+		{"TCP_VENDOR", Const, 3},
+		{"TCP_WINDOW_CLAMP", Const, 0},
+		{"TCSAFLUSH", Const, 1},
+		{"TCSETS", Const, 0},
+		{"TF_DISCONNECT", Const, 0},
+		{"TF_REUSE_SOCKET", Const, 0},
+		{"TF_USE_DEFAULT_WORKER", Const, 0},
+		{"TF_USE_KERNEL_APC", Const, 0},
+		{"TF_USE_SYSTEM_THREAD", Const, 0},
+		{"TF_WRITE_BEHIND", Const, 0},
+		{"TH32CS_INHERIT", Const, 4},
+		{"TH32CS_SNAPALL", Const, 4},
+		{"TH32CS_SNAPHEAPLIST", Const, 4},
+		{"TH32CS_SNAPMODULE", Const, 4},
+		{"TH32CS_SNAPMODULE32", Const, 4},
+		{"TH32CS_SNAPPROCESS", Const, 4},
+		{"TH32CS_SNAPTHREAD", Const, 4},
+		{"TIME_ZONE_ID_DAYLIGHT", Const, 0},
+		{"TIME_ZONE_ID_STANDARD", Const, 0},
+		{"TIME_ZONE_ID_UNKNOWN", Const, 0},
+		{"TIOCCBRK", Const, 0},
+		{"TIOCCDTR", Const, 0},
+		{"TIOCCONS", Const, 0},
+		{"TIOCDCDTIMESTAMP", Const, 0},
+		{"TIOCDRAIN", Const, 0},
+		{"TIOCDSIMICROCODE", Const, 0},
+		{"TIOCEXCL", Const, 0},
+		{"TIOCEXT", Const, 0},
+		{"TIOCFLAG_CDTRCTS", Const, 1},
+		{"TIOCFLAG_CLOCAL", Const, 1},
+		{"TIOCFLAG_CRTSCTS", Const, 1},
+		{"TIOCFLAG_MDMBUF", Const, 1},
+		{"TIOCFLAG_PPS", Const, 1},
+		{"TIOCFLAG_SOFTCAR", Const, 1},
+		{"TIOCFLUSH", Const, 0},
+		{"TIOCGDEV", Const, 0},
+		{"TIOCGDRAINWAIT", Const, 0},
+		{"TIOCGETA", Const, 0},
+		{"TIOCGETD", Const, 0},
+		{"TIOCGFLAGS", Const, 1},
+		{"TIOCGICOUNT", Const, 0},
+		{"TIOCGLCKTRMIOS", Const, 0},
+		{"TIOCGLINED", Const, 1},
+		{"TIOCGPGRP", Const, 0},
+		{"TIOCGPTN", Const, 0},
+		{"TIOCGQSIZE", Const, 1},
+		{"TIOCGRANTPT", Const, 1},
+		{"TIOCGRS485", Const, 0},
+		{"TIOCGSERIAL", Const, 0},
+		{"TIOCGSID", Const, 0},
+		{"TIOCGSIZE", Const, 1},
+		{"TIOCGSOFTCAR", Const, 0},
+		{"TIOCGTSTAMP", Const, 1},
+		{"TIOCGWINSZ", Const, 0},
+		{"TIOCINQ", Const, 0},
+		{"TIOCIXOFF", Const, 0},
+		{"TIOCIXON", Const, 0},
+		{"TIOCLINUX", Const, 0},
+		{"TIOCMBIC", Const, 0},
+		{"TIOCMBIS", Const, 0},
+		{"TIOCMGDTRWAIT", Const, 0},
+		{"TIOCMGET", Const, 0},
+		{"TIOCMIWAIT", Const, 0},
+		{"TIOCMODG", Const, 0},
+		{"TIOCMODS", Const, 0},
+		{"TIOCMSDTRWAIT", Const, 0},
+		{"TIOCMSET", Const, 0},
+		{"TIOCM_CAR", Const, 0},
+		{"TIOCM_CD", Const, 0},
+		{"TIOCM_CTS", Const, 0},
+		{"TIOCM_DCD", Const, 0},
+		{"TIOCM_DSR", Const, 0},
+		{"TIOCM_DTR", Const, 0},
+		{"TIOCM_LE", Const, 0},
+		{"TIOCM_RI", Const, 0},
+		{"TIOCM_RNG", Const, 0},
+		{"TIOCM_RTS", Const, 0},
+		{"TIOCM_SR", Const, 0},
+		{"TIOCM_ST", Const, 0},
+		{"TIOCNOTTY", Const, 0},
+		{"TIOCNXCL", Const, 0},
+		{"TIOCOUTQ", Const, 0},
+		{"TIOCPKT", Const, 0},
+		{"TIOCPKT_DATA", Const, 0},
+		{"TIOCPKT_DOSTOP", Const, 0},
+		{"TIOCPKT_FLUSHREAD", Const, 0},
+		{"TIOCPKT_FLUSHWRITE", Const, 0},
+		{"TIOCPKT_IOCTL", Const, 0},
+		{"TIOCPKT_NOSTOP", Const, 0},
+		{"TIOCPKT_START", Const, 0},
+		{"TIOCPKT_STOP", Const, 0},
+		{"TIOCPTMASTER", Const, 0},
+		{"TIOCPTMGET", Const, 1},
+		{"TIOCPTSNAME", Const, 1},
+		{"TIOCPTYGNAME", Const, 0},
+		{"TIOCPTYGRANT", Const, 0},
+		{"TIOCPTYUNLK", Const, 0},
+		{"TIOCRCVFRAME", Const, 1},
+		{"TIOCREMOTE", Const, 0},
+		{"TIOCSBRK", Const, 0},
+		{"TIOCSCONS", Const, 0},
+		{"TIOCSCTTY", Const, 0},
+		{"TIOCSDRAINWAIT", Const, 0},
+		{"TIOCSDTR", Const, 0},
+		{"TIOCSERCONFIG", Const, 0},
+		{"TIOCSERGETLSR", Const, 0},
+		{"TIOCSERGETMULTI", Const, 0},
+		{"TIOCSERGSTRUCT", Const, 0},
+		{"TIOCSERGWILD", Const, 0},
+		{"TIOCSERSETMULTI", Const, 0},
+		{"TIOCSERSWILD", Const, 0},
+		{"TIOCSER_TEMT", Const, 0},
+		{"TIOCSETA", Const, 0},
+		{"TIOCSETAF", Const, 0},
+		{"TIOCSETAW", Const, 0},
+		{"TIOCSETD", Const, 0},
+		{"TIOCSFLAGS", Const, 1},
+		{"TIOCSIG", Const, 0},
+		{"TIOCSLCKTRMIOS", Const, 0},
+		{"TIOCSLINED", Const, 1},
+		{"TIOCSPGRP", Const, 0},
+		{"TIOCSPTLCK", Const, 0},
+		{"TIOCSQSIZE", Const, 1},
+		{"TIOCSRS485", Const, 0},
+		{"TIOCSSERIAL", Const, 0},
+		{"TIOCSSIZE", Const, 1},
+		{"TIOCSSOFTCAR", Const, 0},
+		{"TIOCSTART", Const, 0},
+		{"TIOCSTAT", Const, 0},
+		{"TIOCSTI", Const, 0},
+		{"TIOCSTOP", Const, 0},
+		{"TIOCSTSTAMP", Const, 1},
+		{"TIOCSWINSZ", Const, 0},
+		{"TIOCTIMESTAMP", Const, 0},
+		{"TIOCUCNTL", Const, 0},
+		{"TIOCVHANGUP", Const, 0},
+		{"TIOCXMTFRAME", Const, 1},
+		{"TOKEN_ADJUST_DEFAULT", Const, 0},
+		{"TOKEN_ADJUST_GROUPS", Const, 0},
+		{"TOKEN_ADJUST_PRIVILEGES", Const, 0},
+		{"TOKEN_ADJUST_SESSIONID", Const, 11},
+		{"TOKEN_ALL_ACCESS", Const, 0},
+		{"TOKEN_ASSIGN_PRIMARY", Const, 0},
+		{"TOKEN_DUPLICATE", Const, 0},
+		{"TOKEN_EXECUTE", Const, 0},
+		{"TOKEN_IMPERSONATE", Const, 0},
+		{"TOKEN_QUERY", Const, 0},
+		{"TOKEN_QUERY_SOURCE", Const, 0},
+		{"TOKEN_READ", Const, 0},
+		{"TOKEN_WRITE", Const, 0},
+		{"TOSTOP", Const, 0},
+		{"TRUNCATE_EXISTING", Const, 0},
+		{"TUNATTACHFILTER", Const, 0},
+		{"TUNDETACHFILTER", Const, 0},
+		{"TUNGETFEATURES", Const, 0},
+		{"TUNGETIFF", Const, 0},
+		{"TUNGETSNDBUF", Const, 0},
+		{"TUNGETVNETHDRSZ", Const, 0},
+		{"TUNSETDEBUG", Const, 0},
+		{"TUNSETGROUP", Const, 0},
+		{"TUNSETIFF", Const, 0},
+		{"TUNSETLINK", Const, 0},
+		{"TUNSETNOCSUM", Const, 0},
+		{"TUNSETOFFLOAD", Const, 0},
+		{"TUNSETOWNER", Const, 0},
+		{"TUNSETPERSIST", Const, 0},
+		{"TUNSETSNDBUF", Const, 0},
+		{"TUNSETTXFILTER", Const, 0},
+		{"TUNSETVNETHDRSZ", Const, 0},
+		{"Tee", Func, 0},
+		{"TerminateProcess", Func, 0},
+		{"Termios", Type, 0},
+		{"Termios.Cc", Field, 0},
+		{"Termios.Cflag", Field, 0},
+		{"Termios.Iflag", Field, 0},
+		{"Termios.Ispeed", Field, 0},
+		{"Termios.Lflag", Field, 0},
+		{"Termios.Line", Field, 0},
+		{"Termios.Oflag", Field, 0},
+		{"Termios.Ospeed", Field, 0},
+		{"Termios.Pad_cgo_0", Field, 0},
+		{"Tgkill", Func, 0},
+		{"Time", Func, 0},
+		{"Time_t", Type, 0},
+		{"Times", Func, 0},
+		{"Timespec", Type, 0},
+		{"Timespec.Nsec", Field, 0},
+		{"Timespec.Pad_cgo_0", Field, 2},
+		{"Timespec.Sec", Field, 0},
+		{"TimespecToNsec", Func, 0},
+		{"Timeval", Type, 0},
+		{"Timeval.Pad_cgo_0", Field, 0},
+		{"Timeval.Sec", Field, 0},
+		{"Timeval.Usec", Field, 0},
+		{"Timeval32", Type, 0},
+		{"Timeval32.Sec", Field, 0},
+		{"Timeval32.Usec", Field, 0},
+		{"TimevalToNsec", Func, 0},
+		{"Timex", Type, 0},
+		{"Timex.Calcnt", Field, 0},
+		{"Timex.Constant", Field, 0},
+		{"Timex.Errcnt", Field, 0},
+		{"Timex.Esterror", Field, 0},
+		{"Timex.Freq", Field, 0},
+		{"Timex.Jitcnt", Field, 0},
+		{"Timex.Jitter", Field, 0},
+		{"Timex.Maxerror", Field, 0},
+		{"Timex.Modes", Field, 0},
+		{"Timex.Offset", Field, 0},
+		{"Timex.Pad_cgo_0", Field, 0},
+		{"Timex.Pad_cgo_1", Field, 0},
+		{"Timex.Pad_cgo_2", Field, 0},
+		{"Timex.Pad_cgo_3", Field, 0},
+		{"Timex.Ppsfreq", Field, 0},
+		{"Timex.Precision", Field, 0},
+		{"Timex.Shift", Field, 0},
+		{"Timex.Stabil", Field, 0},
+		{"Timex.Status", Field, 0},
+		{"Timex.Stbcnt", Field, 0},
+		{"Timex.Tai", Field, 0},
+		{"Timex.Tick", Field, 0},
+		{"Timex.Time", Field, 0},
+		{"Timex.Tolerance", Field, 0},
+		{"Timezoneinformation", Type, 0},
+		{"Timezoneinformation.Bias", Field, 0},
+		{"Timezoneinformation.DaylightBias", Field, 0},
+		{"Timezoneinformation.DaylightDate", Field, 0},
+		{"Timezoneinformation.DaylightName", Field, 0},
+		{"Timezoneinformation.StandardBias", Field, 0},
+		{"Timezoneinformation.StandardDate", Field, 0},
+		{"Timezoneinformation.StandardName", Field, 0},
+		{"Tms", Type, 0},
+		{"Tms.Cstime", Field, 0},
+		{"Tms.Cutime", Field, 0},
+		{"Tms.Stime", Field, 0},
+		{"Tms.Utime", Field, 0},
+		{"Token", Type, 0},
+		{"TokenAccessInformation", Const, 0},
+		{"TokenAuditPolicy", Const, 0},
+		{"TokenDefaultDacl", Const, 0},
+		{"TokenElevation", Const, 0},
+		{"TokenElevationType", Const, 0},
+		{"TokenGroups", Const, 0},
+		{"TokenGroupsAndPrivileges", Const, 0},
+		{"TokenHasRestrictions", Const, 0},
+		{"TokenImpersonationLevel", Const, 0},
+		{"TokenIntegrityLevel", Const, 0},
+		{"TokenLinkedToken", Const, 0},
+		{"TokenLogonSid", Const, 0},
+		{"TokenMandatoryPolicy", Const, 0},
+		{"TokenOrigin", Const, 0},
+		{"TokenOwner", Const, 0},
+		{"TokenPrimaryGroup", Const, 0},
+		{"TokenPrivileges", Const, 0},
+		{"TokenRestrictedSids", Const, 0},
+		{"TokenSandBoxInert", Const, 0},
+		{"TokenSessionId", Const, 0},
+		{"TokenSessionReference", Const, 0},
+		{"TokenSource", Const, 0},
+		{"TokenStatistics", Const, 0},
+		{"TokenType", Const, 0},
+		{"TokenUIAccess", Const, 0},
+		{"TokenUser", Const, 0},
+		{"TokenVirtualizationAllowed", Const, 0},
+		{"TokenVirtualizationEnabled", Const, 0},
+		{"Tokenprimarygroup", Type, 0},
+		{"Tokenprimarygroup.PrimaryGroup", Field, 0},
+		{"Tokenuser", Type, 0},
+		{"Tokenuser.User", Field, 0},
+		{"TranslateAccountName", Func, 0},
+		{"TranslateName", Func, 0},
+		{"TransmitFile", Func, 0},
+		{"TransmitFileBuffers", Type, 0},
+		{"TransmitFileBuffers.Head", Field, 0},
+		{"TransmitFileBuffers.HeadLength", Field, 0},
+		{"TransmitFileBuffers.Tail", Field, 0},
+		{"TransmitFileBuffers.TailLength", Field, 0},
+		{"Truncate", Func, 0},
+		{"UNIX_PATH_MAX", Const, 12},
+		{"USAGE_MATCH_TYPE_AND", Const, 0},
+		{"USAGE_MATCH_TYPE_OR", Const, 0},
+		{"UTF16FromString", Func, 1},
+		{"UTF16PtrFromString", Func, 1},
+		{"UTF16ToString", Func, 0},
+		{"Ucred", Type, 0},
+		{"Ucred.Gid", Field, 0},
+		{"Ucred.Pid", Field, 0},
+		{"Ucred.Uid", Field, 0},
+		{"Umask", Func, 0},
+		{"Uname", Func, 0},
+		{"Undelete", Func, 0},
+		{"UnixCredentials", Func, 0},
+		{"UnixRights", Func, 0},
+		{"Unlink", Func, 0},
+		{"Unlinkat", Func, 0},
+		{"UnmapViewOfFile", Func, 0},
+		{"Unmount", Func, 0},
+		{"Unsetenv", Func, 4},
+		{"Unshare", Func, 0},
+		{"UserInfo10", Type, 0},
+		{"UserInfo10.Comment", Field, 0},
+		{"UserInfo10.FullName", Field, 0},
+		{"UserInfo10.Name", Field, 0},
+		{"UserInfo10.UsrComment", Field, 0},
+		{"Ustat", Func, 0},
+		{"Ustat_t", Type, 0},
+		{"Ustat_t.Fname", Field, 0},
+		{"Ustat_t.Fpack", Field, 0},
+		{"Ustat_t.Pad_cgo_0", Field, 0},
+		{"Ustat_t.Pad_cgo_1", Field, 0},
+		{"Ustat_t.Tfree", Field, 0},
+		{"Ustat_t.Tinode", Field, 0},
+		{"Utimbuf", Type, 0},
+		{"Utimbuf.Actime", Field, 0},
+		{"Utimbuf.Modtime", Field, 0},
+		{"Utime", Func, 0},
+		{"Utimes", Func, 0},
+		{"UtimesNano", Func, 1},
+		{"Utsname", Type, 0},
+		{"Utsname.Domainname", Field, 0},
+		{"Utsname.Machine", Field, 0},
+		{"Utsname.Nodename", Field, 0},
+		{"Utsname.Release", Field, 0},
+		{"Utsname.Sysname", Field, 0},
+		{"Utsname.Version", Field, 0},
+		{"VDISCARD", Const, 0},
+		{"VDSUSP", Const, 1},
+		{"VEOF", Const, 0},
+		{"VEOL", Const, 0},
+		{"VEOL2", Const, 0},
+		{"VERASE", Const, 0},
+		{"VERASE2", Const, 1},
+		{"VINTR", Const, 0},
+		{"VKILL", Const, 0},
+		{"VLNEXT", Const, 0},
+		{"VMIN", Const, 0},
+		{"VQUIT", Const, 0},
+		{"VREPRINT", Const, 0},
+		{"VSTART", Const, 0},
+		{"VSTATUS", Const, 1},
+		{"VSTOP", Const, 0},
+		{"VSUSP", Const, 0},
+		{"VSWTC", Const, 0},
+		{"VT0", Const, 1},
+		{"VT1", Const, 1},
+		{"VTDLY", Const, 1},
+		{"VTIME", Const, 0},
+		{"VWERASE", Const, 0},
+		{"VirtualLock", Func, 0},
+		{"VirtualUnlock", Func, 0},
+		{"WAIT_ABANDONED", Const, 0},
+		{"WAIT_FAILED", Const, 0},
+		{"WAIT_OBJECT_0", Const, 0},
+		{"WAIT_TIMEOUT", Const, 0},
+		{"WALL", Const, 0},
+		{"WALLSIG", Const, 1},
+		{"WALTSIG", Const, 1},
+		{"WCLONE", Const, 0},
+		{"WCONTINUED", Const, 0},
+		{"WCOREFLAG", Const, 0},
+		{"WEXITED", Const, 0},
+		{"WLINUXCLONE", Const, 0},
+		{"WNOHANG", Const, 0},
+		{"WNOTHREAD", Const, 0},
+		{"WNOWAIT", Const, 0},
+		{"WNOZOMBIE", Const, 1},
+		{"WOPTSCHECKED", Const, 1},
+		{"WORDSIZE", Const, 0},
+		{"WSABuf", Type, 0},
+		{"WSABuf.Buf", Field, 0},
+		{"WSABuf.Len", Field, 0},
+		{"WSACleanup", Func, 0},
+		{"WSADESCRIPTION_LEN", Const, 0},
+		{"WSAData", Type, 0},
+		{"WSAData.Description", Field, 0},
+		{"WSAData.HighVersion", Field, 0},
+		{"WSAData.MaxSockets", Field, 0},
+		{"WSAData.MaxUdpDg", Field, 0},
+		{"WSAData.SystemStatus", Field, 0},
+		{"WSAData.VendorInfo", Field, 0},
+		{"WSAData.Version", Field, 0},
+		{"WSAEACCES", Const, 2},
+		{"WSAECONNABORTED", Const, 9},
+		{"WSAECONNRESET", Const, 3},
+		{"WSAENOPROTOOPT", Const, 23},
+		{"WSAEnumProtocols", Func, 2},
+		{"WSAID_CONNECTEX", Var, 1},
+		{"WSAIoctl", Func, 0},
+		{"WSAPROTOCOL_LEN", Const, 2},
+		{"WSAProtocolChain", Type, 2},
+		{"WSAProtocolChain.ChainEntries", Field, 2},
+		{"WSAProtocolChain.ChainLen", Field, 2},
+		{"WSAProtocolInfo", Type, 2},
+		{"WSAProtocolInfo.AddressFamily", Field, 2},
+		{"WSAProtocolInfo.CatalogEntryId", Field, 2},
+		{"WSAProtocolInfo.MaxSockAddr", Field, 2},
+		{"WSAProtocolInfo.MessageSize", Field, 2},
+		{"WSAProtocolInfo.MinSockAddr", Field, 2},
+		{"WSAProtocolInfo.NetworkByteOrder", Field, 2},
+		{"WSAProtocolInfo.Protocol", Field, 2},
+		{"WSAProtocolInfo.ProtocolChain", Field, 2},
+		{"WSAProtocolInfo.ProtocolMaxOffset", Field, 2},
+		{"WSAProtocolInfo.ProtocolName", Field, 2},
+		{"WSAProtocolInfo.ProviderFlags", Field, 2},
+		{"WSAProtocolInfo.ProviderId", Field, 2},
+		{"WSAProtocolInfo.ProviderReserved", Field, 2},
+		{"WSAProtocolInfo.SecurityScheme", Field, 2},
+		{"WSAProtocolInfo.ServiceFlags1", Field, 2},
+		{"WSAProtocolInfo.ServiceFlags2", Field, 2},
+		{"WSAProtocolInfo.ServiceFlags3", Field, 2},
+		{"WSAProtocolInfo.ServiceFlags4", Field, 2},
+		{"WSAProtocolInfo.SocketType", Field, 2},
+		{"WSAProtocolInfo.Version", Field, 2},
+		{"WSARecv", Func, 0},
+		{"WSARecvFrom", Func, 0},
+		{"WSASYS_STATUS_LEN", Const, 0},
+		{"WSASend", Func, 0},
+		{"WSASendTo", Func, 0},
+		{"WSASendto", Func, 0},
+		{"WSAStartup", Func, 0},
+		{"WSTOPPED", Const, 0},
+		{"WTRAPPED", Const, 1},
+		{"WUNTRACED", Const, 0},
+		{"Wait4", Func, 0},
+		{"WaitForSingleObject", Func, 0},
+		{"WaitStatus", Type, 0},
+		{"WaitStatus.ExitCode", Field, 0},
+		{"Win32FileAttributeData", Type, 0},
+		{"Win32FileAttributeData.CreationTime", Field, 0},
+		{"Win32FileAttributeData.FileAttributes", Field, 0},
+		{"Win32FileAttributeData.FileSizeHigh", Field, 0},
+		{"Win32FileAttributeData.FileSizeLow", Field, 0},
+		{"Win32FileAttributeData.LastAccessTime", Field, 0},
+		{"Win32FileAttributeData.LastWriteTime", Field, 0},
+		{"Win32finddata", Type, 0},
+		{"Win32finddata.AlternateFileName", Field, 0},
+		{"Win32finddata.CreationTime", Field, 0},
+		{"Win32finddata.FileAttributes", Field, 0},
+		{"Win32finddata.FileName", Field, 0},
+		{"Win32finddata.FileSizeHigh", Field, 0},
+		{"Win32finddata.FileSizeLow", Field, 0},
+		{"Win32finddata.LastAccessTime", Field, 0},
+		{"Win32finddata.LastWriteTime", Field, 0},
+		{"Win32finddata.Reserved0", Field, 0},
+		{"Win32finddata.Reserved1", Field, 0},
+		{"Write", Func, 0},
+		{"WriteConsole", Func, 1},
+		{"WriteFile", Func, 0},
+		{"X509_ASN_ENCODING", Const, 0},
+		{"XCASE", Const, 0},
+		{"XP1_CONNECTIONLESS", Const, 2},
+		{"XP1_CONNECT_DATA", Const, 2},
+		{"XP1_DISCONNECT_DATA", Const, 2},
+		{"XP1_EXPEDITED_DATA", Const, 2},
+		{"XP1_GRACEFUL_CLOSE", Const, 2},
+		{"XP1_GUARANTEED_DELIVERY", Const, 2},
+		{"XP1_GUARANTEED_ORDER", Const, 2},
+		{"XP1_IFS_HANDLES", Const, 2},
+		{"XP1_MESSAGE_ORIENTED", Const, 2},
+		{"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2},
+		{"XP1_MULTIPOINT_DATA_PLANE", Const, 2},
+		{"XP1_PARTIAL_MESSAGE", Const, 2},
+		{"XP1_PSEUDO_STREAM", Const, 2},
+		{"XP1_QOS_SUPPORTED", Const, 2},
+		{"XP1_SAN_SUPPORT_SDP", Const, 2},
+		{"XP1_SUPPORT_BROADCAST", Const, 2},
+		{"XP1_SUPPORT_MULTIPOINT", Const, 2},
+		{"XP1_UNI_RECV", Const, 2},
+		{"XP1_UNI_SEND", Const, 2},
 	},
 	"syscall/js": {
-		{"CopyBytesToGo", Func, 0, ""},
-		{"CopyBytesToJS", Func, 0, ""},
-		{"Error", Type, 0, ""},
-		{"Func", Type, 0, ""},
-		{"FuncOf", Func, 0, ""},
-		{"Global", Func, 0, ""},
-		{"Null", Func, 0, ""},
-		{"Type", Type, 0, ""},
-		{"TypeBoolean", Const, 0, ""},
-		{"TypeFunction", Const, 0, ""},
-		{"TypeNull", Const, 0, ""},
-		{"TypeNumber", Const, 0, ""},
-		{"TypeObject", Const, 0, ""},
-		{"TypeString", Const, 0, ""},
-		{"TypeSymbol", Const, 0, ""},
-		{"TypeUndefined", Const, 0, ""},
-		{"Undefined", Func, 0, ""},
-		{"Value", Type, 0, ""},
-		{"ValueError", Type, 0, ""},
-		{"ValueOf", Func, 0, ""},
+		{"CopyBytesToGo", Func, 0},
+		{"CopyBytesToJS", Func, 0},
+		{"Error", Type, 0},
+		{"Func", Type, 0},
+		{"FuncOf", Func, 0},
+		{"Global", Func, 0},
+		{"Null", Func, 0},
+		{"Type", Type, 0},
+		{"TypeBoolean", Const, 0},
+		{"TypeFunction", Const, 0},
+		{"TypeNull", Const, 0},
+		{"TypeNumber", Const, 0},
+		{"TypeObject", Const, 0},
+		{"TypeString", Const, 0},
+		{"TypeSymbol", Const, 0},
+		{"TypeUndefined", Const, 0},
+		{"Undefined", Func, 0},
+		{"Value", Type, 0},
+		{"ValueError", Type, 0},
+		{"ValueOf", Func, 0},
 	},
 	"testing": {
-		{"(*B).Chdir", Method, 24, ""},
-		{"(*B).Cleanup", Method, 14, ""},
-		{"(*B).Context", Method, 24, ""},
-		{"(*B).Elapsed", Method, 20, ""},
-		{"(*B).Error", Method, 0, ""},
-		{"(*B).Errorf", Method, 0, ""},
-		{"(*B).Fail", Method, 0, ""},
-		{"(*B).FailNow", Method, 0, ""},
-		{"(*B).Failed", Method, 0, ""},
-		{"(*B).Fatal", Method, 0, ""},
-		{"(*B).Fatalf", Method, 0, ""},
-		{"(*B).Helper", Method, 9, ""},
-		{"(*B).Log", Method, 0, ""},
-		{"(*B).Logf", Method, 0, ""},
-		{"(*B).Loop", Method, 24, ""},
-		{"(*B).Name", Method, 8, ""},
-		{"(*B).ReportAllocs", Method, 1, ""},
-		{"(*B).ReportMetric", Method, 13, ""},
-		{"(*B).ResetTimer", Method, 0, ""},
-		{"(*B).Run", Method, 7, ""},
-		{"(*B).RunParallel", Method, 3, ""},
-		{"(*B).SetBytes", Method, 0, ""},
-		{"(*B).SetParallelism", Method, 3, ""},
-		{"(*B).Setenv", Method, 17, ""},
-		{"(*B).Skip", Method, 1, ""},
-		{"(*B).SkipNow", Method, 1, ""},
-		{"(*B).Skipf", Method, 1, ""},
-		{"(*B).Skipped", Method, 1, ""},
-		{"(*B).StartTimer", Method, 0, ""},
-		{"(*B).StopTimer", Method, 0, ""},
-		{"(*B).TempDir", Method, 15, ""},
-		{"(*F).Add", Method, 18, ""},
-		{"(*F).Chdir", Method, 24, ""},
-		{"(*F).Cleanup", Method, 18, ""},
-		{"(*F).Context", Method, 24, ""},
-		{"(*F).Error", Method, 18, ""},
-		{"(*F).Errorf", Method, 18, ""},
-		{"(*F).Fail", Method, 18, ""},
-		{"(*F).FailNow", Method, 18, ""},
-		{"(*F).Failed", Method, 18, ""},
-		{"(*F).Fatal", Method, 18, ""},
-		{"(*F).Fatalf", Method, 18, ""},
-		{"(*F).Fuzz", Method, 18, ""},
-		{"(*F).Helper", Method, 18, ""},
-		{"(*F).Log", Method, 18, ""},
-		{"(*F).Logf", Method, 18, ""},
-		{"(*F).Name", Method, 18, ""},
-		{"(*F).Setenv", Method, 18, ""},
-		{"(*F).Skip", Method, 18, ""},
-		{"(*F).SkipNow", Method, 18, ""},
-		{"(*F).Skipf", Method, 18, ""},
-		{"(*F).Skipped", Method, 18, ""},
-		{"(*F).TempDir", Method, 18, ""},
-		{"(*M).Run", Method, 4, ""},
-		{"(*PB).Next", Method, 3, ""},
-		{"(*T).Chdir", Method, 24, ""},
-		{"(*T).Cleanup", Method, 14, ""},
-		{"(*T).Context", Method, 24, ""},
-		{"(*T).Deadline", Method, 15, ""},
-		{"(*T).Error", Method, 0, ""},
-		{"(*T).Errorf", Method, 0, ""},
-		{"(*T).Fail", Method, 0, ""},
-		{"(*T).FailNow", Method, 0, ""},
-		{"(*T).Failed", Method, 0, ""},
-		{"(*T).Fatal", Method, 0, ""},
-		{"(*T).Fatalf", Method, 0, ""},
-		{"(*T).Helper", Method, 9, ""},
-		{"(*T).Log", Method, 0, ""},
-		{"(*T).Logf", Method, 0, ""},
-		{"(*T).Name", Method, 8, ""},
-		{"(*T).Parallel", Method, 0, ""},
-		{"(*T).Run", Method, 7, ""},
-		{"(*T).Setenv", Method, 17, ""},
-		{"(*T).Skip", Method, 1, ""},
-		{"(*T).SkipNow", Method, 1, ""},
-		{"(*T).Skipf", Method, 1, ""},
-		{"(*T).Skipped", Method, 1, ""},
-		{"(*T).TempDir", Method, 15, ""},
-		{"(BenchmarkResult).AllocedBytesPerOp", Method, 1, ""},
-		{"(BenchmarkResult).AllocsPerOp", Method, 1, ""},
-		{"(BenchmarkResult).MemString", Method, 1, ""},
-		{"(BenchmarkResult).NsPerOp", Method, 0, ""},
-		{"(BenchmarkResult).String", Method, 0, ""},
-		{"AllocsPerRun", Func, 1, "func(runs int, f func()) (avg float64)"},
-		{"B", Type, 0, ""},
-		{"B.N", Field, 0, ""},
-		{"Benchmark", Func, 0, "func(f func(b *B)) BenchmarkResult"},
-		{"BenchmarkResult", Type, 0, ""},
-		{"BenchmarkResult.Bytes", Field, 0, ""},
-		{"BenchmarkResult.Extra", Field, 13, ""},
-		{"BenchmarkResult.MemAllocs", Field, 1, ""},
-		{"BenchmarkResult.MemBytes", Field, 1, ""},
-		{"BenchmarkResult.N", Field, 0, ""},
-		{"BenchmarkResult.T", Field, 0, ""},
-		{"Cover", Type, 2, ""},
-		{"Cover.Blocks", Field, 2, ""},
-		{"Cover.Counters", Field, 2, ""},
-		{"Cover.CoveredPackages", Field, 2, ""},
-		{"Cover.Mode", Field, 2, ""},
-		{"CoverBlock", Type, 2, ""},
-		{"CoverBlock.Col0", Field, 2, ""},
-		{"CoverBlock.Col1", Field, 2, ""},
-		{"CoverBlock.Line0", Field, 2, ""},
-		{"CoverBlock.Line1", Field, 2, ""},
-		{"CoverBlock.Stmts", Field, 2, ""},
-		{"CoverMode", Func, 8, "func() string"},
-		{"Coverage", Func, 4, "func() float64"},
-		{"F", Type, 18, ""},
-		{"Init", Func, 13, "func()"},
-		{"InternalBenchmark", Type, 0, ""},
-		{"InternalBenchmark.F", Field, 0, ""},
-		{"InternalBenchmark.Name", Field, 0, ""},
-		{"InternalExample", Type, 0, ""},
-		{"InternalExample.F", Field, 0, ""},
-		{"InternalExample.Name", Field, 0, ""},
-		{"InternalExample.Output", Field, 0, ""},
-		{"InternalExample.Unordered", Field, 7, ""},
-		{"InternalFuzzTarget", Type, 18, ""},
-		{"InternalFuzzTarget.Fn", Field, 18, ""},
-		{"InternalFuzzTarget.Name", Field, 18, ""},
-		{"InternalTest", Type, 0, ""},
-		{"InternalTest.F", Field, 0, ""},
-		{"InternalTest.Name", Field, 0, ""},
-		{"M", Type, 4, ""},
-		{"Main", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)"},
-		{"MainStart", Func, 4, "func(deps testDeps, tests []InternalTest, benchmarks []InternalBenchmark, fuzzTargets []InternalFuzzTarget, examples []InternalExample) *M"},
-		{"PB", Type, 3, ""},
-		{"RegisterCover", Func, 2, "func(c Cover)"},
-		{"RunBenchmarks", Func, 0, "func(matchString func(pat string, str string) (bool, error), benchmarks []InternalBenchmark)"},
-		{"RunExamples", Func, 0, "func(matchString func(pat string, str string) (bool, error), examples []InternalExample) (ok bool)"},
-		{"RunTests", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest) (ok bool)"},
-		{"Short", Func, 0, "func() bool"},
-		{"T", Type, 0, ""},
-		{"TB", Type, 2, ""},
-		{"Testing", Func, 21, "func() bool"},
-		{"Verbose", Func, 1, "func() bool"},
+		{"(*B).Chdir", Method, 24},
+		{"(*B).Cleanup", Method, 14},
+		{"(*B).Context", Method, 24},
+		{"(*B).Elapsed", Method, 20},
+		{"(*B).Error", Method, 0},
+		{"(*B).Errorf", Method, 0},
+		{"(*B).Fail", Method, 0},
+		{"(*B).FailNow", Method, 0},
+		{"(*B).Failed", Method, 0},
+		{"(*B).Fatal", Method, 0},
+		{"(*B).Fatalf", Method, 0},
+		{"(*B).Helper", Method, 9},
+		{"(*B).Log", Method, 0},
+		{"(*B).Logf", Method, 0},
+		{"(*B).Loop", Method, 24},
+		{"(*B).Name", Method, 8},
+		{"(*B).ReportAllocs", Method, 1},
+		{"(*B).ReportMetric", Method, 13},
+		{"(*B).ResetTimer", Method, 0},
+		{"(*B).Run", Method, 7},
+		{"(*B).RunParallel", Method, 3},
+		{"(*B).SetBytes", Method, 0},
+		{"(*B).SetParallelism", Method, 3},
+		{"(*B).Setenv", Method, 17},
+		{"(*B).Skip", Method, 1},
+		{"(*B).SkipNow", Method, 1},
+		{"(*B).Skipf", Method, 1},
+		{"(*B).Skipped", Method, 1},
+		{"(*B).StartTimer", Method, 0},
+		{"(*B).StopTimer", Method, 0},
+		{"(*B).TempDir", Method, 15},
+		{"(*F).Add", Method, 18},
+		{"(*F).Chdir", Method, 24},
+		{"(*F).Cleanup", Method, 18},
+		{"(*F).Context", Method, 24},
+		{"(*F).Error", Method, 18},
+		{"(*F).Errorf", Method, 18},
+		{"(*F).Fail", Method, 18},
+		{"(*F).FailNow", Method, 18},
+		{"(*F).Failed", Method, 18},
+		{"(*F).Fatal", Method, 18},
+		{"(*F).Fatalf", Method, 18},
+		{"(*F).Fuzz", Method, 18},
+		{"(*F).Helper", Method, 18},
+		{"(*F).Log", Method, 18},
+		{"(*F).Logf", Method, 18},
+		{"(*F).Name", Method, 18},
+		{"(*F).Setenv", Method, 18},
+		{"(*F).Skip", Method, 18},
+		{"(*F).SkipNow", Method, 18},
+		{"(*F).Skipf", Method, 18},
+		{"(*F).Skipped", Method, 18},
+		{"(*F).TempDir", Method, 18},
+		{"(*M).Run", Method, 4},
+		{"(*PB).Next", Method, 3},
+		{"(*T).Chdir", Method, 24},
+		{"(*T).Cleanup", Method, 14},
+		{"(*T).Context", Method, 24},
+		{"(*T).Deadline", Method, 15},
+		{"(*T).Error", Method, 0},
+		{"(*T).Errorf", Method, 0},
+		{"(*T).Fail", Method, 0},
+		{"(*T).FailNow", Method, 0},
+		{"(*T).Failed", Method, 0},
+		{"(*T).Fatal", Method, 0},
+		{"(*T).Fatalf", Method, 0},
+		{"(*T).Helper", Method, 9},
+		{"(*T).Log", Method, 0},
+		{"(*T).Logf", Method, 0},
+		{"(*T).Name", Method, 8},
+		{"(*T).Parallel", Method, 0},
+		{"(*T).Run", Method, 7},
+		{"(*T).Setenv", Method, 17},
+		{"(*T).Skip", Method, 1},
+		{"(*T).SkipNow", Method, 1},
+		{"(*T).Skipf", Method, 1},
+		{"(*T).Skipped", Method, 1},
+		{"(*T).TempDir", Method, 15},
+		{"(BenchmarkResult).AllocedBytesPerOp", Method, 1},
+		{"(BenchmarkResult).AllocsPerOp", Method, 1},
+		{"(BenchmarkResult).MemString", Method, 1},
+		{"(BenchmarkResult).NsPerOp", Method, 0},
+		{"(BenchmarkResult).String", Method, 0},
+		{"AllocsPerRun", Func, 1},
+		{"B", Type, 0},
+		{"B.N", Field, 0},
+		{"Benchmark", Func, 0},
+		{"BenchmarkResult", Type, 0},
+		{"BenchmarkResult.Bytes", Field, 0},
+		{"BenchmarkResult.Extra", Field, 13},
+		{"BenchmarkResult.MemAllocs", Field, 1},
+		{"BenchmarkResult.MemBytes", Field, 1},
+		{"BenchmarkResult.N", Field, 0},
+		{"BenchmarkResult.T", Field, 0},
+		{"Cover", Type, 2},
+		{"Cover.Blocks", Field, 2},
+		{"Cover.Counters", Field, 2},
+		{"Cover.CoveredPackages", Field, 2},
+		{"Cover.Mode", Field, 2},
+		{"CoverBlock", Type, 2},
+		{"CoverBlock.Col0", Field, 2},
+		{"CoverBlock.Col1", Field, 2},
+		{"CoverBlock.Line0", Field, 2},
+		{"CoverBlock.Line1", Field, 2},
+		{"CoverBlock.Stmts", Field, 2},
+		{"CoverMode", Func, 8},
+		{"Coverage", Func, 4},
+		{"F", Type, 18},
+		{"Init", Func, 13},
+		{"InternalBenchmark", Type, 0},
+		{"InternalBenchmark.F", Field, 0},
+		{"InternalBenchmark.Name", Field, 0},
+		{"InternalExample", Type, 0},
+		{"InternalExample.F", Field, 0},
+		{"InternalExample.Name", Field, 0},
+		{"InternalExample.Output", Field, 0},
+		{"InternalExample.Unordered", Field, 7},
+		{"InternalFuzzTarget", Type, 18},
+		{"InternalFuzzTarget.Fn", Field, 18},
+		{"InternalFuzzTarget.Name", Field, 18},
+		{"InternalTest", Type, 0},
+		{"InternalTest.F", Field, 0},
+		{"InternalTest.Name", Field, 0},
+		{"M", Type, 4},
+		{"Main", Func, 0},
+		{"MainStart", Func, 4},
+		{"PB", Type, 3},
+		{"RegisterCover", Func, 2},
+		{"RunBenchmarks", Func, 0},
+		{"RunExamples", Func, 0},
+		{"RunTests", Func, 0},
+		{"Short", Func, 0},
+		{"T", Type, 0},
+		{"TB", Type, 2},
+		{"Testing", Func, 21},
+		{"Verbose", Func, 1},
 	},
 	"testing/fstest": {
-		{"(MapFS).Glob", Method, 16, ""},
-		{"(MapFS).Lstat", Method, 25, ""},
-		{"(MapFS).Open", Method, 16, ""},
-		{"(MapFS).ReadDir", Method, 16, ""},
-		{"(MapFS).ReadFile", Method, 16, ""},
-		{"(MapFS).ReadLink", Method, 25, ""},
-		{"(MapFS).Stat", Method, 16, ""},
-		{"(MapFS).Sub", Method, 16, ""},
-		{"MapFS", Type, 16, ""},
-		{"MapFile", Type, 16, ""},
-		{"MapFile.Data", Field, 16, ""},
-		{"MapFile.ModTime", Field, 16, ""},
-		{"MapFile.Mode", Field, 16, ""},
-		{"MapFile.Sys", Field, 16, ""},
-		{"TestFS", Func, 16, "func(fsys fs.FS, expected ...string) error"},
+		{"(MapFS).Glob", Method, 16},
+		{"(MapFS).Lstat", Method, 25},
+		{"(MapFS).Open", Method, 16},
+		{"(MapFS).ReadDir", Method, 16},
+		{"(MapFS).ReadFile", Method, 16},
+		{"(MapFS).ReadLink", Method, 25},
+		{"(MapFS).Stat", Method, 16},
+		{"(MapFS).Sub", Method, 16},
+		{"MapFS", Type, 16},
+		{"MapFile", Type, 16},
+		{"MapFile.Data", Field, 16},
+		{"MapFile.ModTime", Field, 16},
+		{"MapFile.Mode", Field, 16},
+		{"MapFile.Sys", Field, 16},
+		{"TestFS", Func, 16},
 	},
 	"testing/iotest": {
-		{"DataErrReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"ErrReader", Func, 16, "func(err error) io.Reader"},
-		{"ErrTimeout", Var, 0, ""},
-		{"HalfReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"NewReadLogger", Func, 0, "func(prefix string, r io.Reader) io.Reader"},
-		{"NewWriteLogger", Func, 0, "func(prefix string, w io.Writer) io.Writer"},
-		{"OneByteReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"TestReader", Func, 16, "func(r io.Reader, content []byte) error"},
-		{"TimeoutReader", Func, 0, "func(r io.Reader) io.Reader"},
-		{"TruncateWriter", Func, 0, "func(w io.Writer, n int64) io.Writer"},
+		{"DataErrReader", Func, 0},
+		{"ErrReader", Func, 16},
+		{"ErrTimeout", Var, 0},
+		{"HalfReader", Func, 0},
+		{"NewReadLogger", Func, 0},
+		{"NewWriteLogger", Func, 0},
+		{"OneByteReader", Func, 0},
+		{"TestReader", Func, 16},
+		{"TimeoutReader", Func, 0},
+		{"TruncateWriter", Func, 0},
 	},
 	"testing/quick": {
-		{"(*CheckEqualError).Error", Method, 0, ""},
-		{"(*CheckError).Error", Method, 0, ""},
-		{"(SetupError).Error", Method, 0, ""},
-		{"Check", Func, 0, "func(f any, config *Config) error"},
-		{"CheckEqual", Func, 0, "func(f any, g any, config *Config) error"},
-		{"CheckEqualError", Type, 0, ""},
-		{"CheckEqualError.CheckError", Field, 0, ""},
-		{"CheckEqualError.Out1", Field, 0, ""},
-		{"CheckEqualError.Out2", Field, 0, ""},
-		{"CheckError", Type, 0, ""},
-		{"CheckError.Count", Field, 0, ""},
-		{"CheckError.In", Field, 0, ""},
-		{"Config", Type, 0, ""},
-		{"Config.MaxCount", Field, 0, ""},
-		{"Config.MaxCountScale", Field, 0, ""},
-		{"Config.Rand", Field, 0, ""},
-		{"Config.Values", Field, 0, ""},
-		{"Generator", Type, 0, ""},
-		{"SetupError", Type, 0, ""},
-		{"Value", Func, 0, "func(t reflect.Type, rand *rand.Rand) (value reflect.Value, ok bool)"},
+		{"(*CheckEqualError).Error", Method, 0},
+		{"(*CheckError).Error", Method, 0},
+		{"(SetupError).Error", Method, 0},
+		{"Check", Func, 0},
+		{"CheckEqual", Func, 0},
+		{"CheckEqualError", Type, 0},
+		{"CheckEqualError.CheckError", Field, 0},
+		{"CheckEqualError.Out1", Field, 0},
+		{"CheckEqualError.Out2", Field, 0},
+		{"CheckError", Type, 0},
+		{"CheckError.Count", Field, 0},
+		{"CheckError.In", Field, 0},
+		{"Config", Type, 0},
+		{"Config.MaxCount", Field, 0},
+		{"Config.MaxCountScale", Field, 0},
+		{"Config.Rand", Field, 0},
+		{"Config.Values", Field, 0},
+		{"Generator", Type, 0},
+		{"SetupError", Type, 0},
+		{"Value", Func, 0},
 	},
 	"testing/slogtest": {
-		{"Run", Func, 22, "func(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)"},
-		{"TestHandler", Func, 21, "func(h slog.Handler, results func() []map[string]any) error"},
+		{"Run", Func, 22},
+		{"TestHandler", Func, 21},
 	},
 	"text/scanner": {
-		{"(*Position).IsValid", Method, 0, ""},
-		{"(*Scanner).Init", Method, 0, ""},
-		{"(*Scanner).IsValid", Method, 0, ""},
-		{"(*Scanner).Next", Method, 0, ""},
-		{"(*Scanner).Peek", Method, 0, ""},
-		{"(*Scanner).Pos", Method, 0, ""},
-		{"(*Scanner).Scan", Method, 0, ""},
-		{"(*Scanner).TokenText", Method, 0, ""},
-		{"(Position).String", Method, 0, ""},
-		{"(Scanner).String", Method, 0, ""},
-		{"Char", Const, 0, ""},
-		{"Comment", Const, 0, ""},
-		{"EOF", Const, 0, ""},
-		{"Float", Const, 0, ""},
-		{"GoTokens", Const, 0, ""},
-		{"GoWhitespace", Const, 0, ""},
-		{"Ident", Const, 0, ""},
-		{"Int", Const, 0, ""},
-		{"Position", Type, 0, ""},
-		{"Position.Column", Field, 0, ""},
-		{"Position.Filename", Field, 0, ""},
-		{"Position.Line", Field, 0, ""},
-		{"Position.Offset", Field, 0, ""},
-		{"RawString", Const, 0, ""},
-		{"ScanChars", Const, 0, ""},
-		{"ScanComments", Const, 0, ""},
-		{"ScanFloats", Const, 0, ""},
-		{"ScanIdents", Const, 0, ""},
-		{"ScanInts", Const, 0, ""},
-		{"ScanRawStrings", Const, 0, ""},
-		{"ScanStrings", Const, 0, ""},
-		{"Scanner", Type, 0, ""},
-		{"Scanner.Error", Field, 0, ""},
-		{"Scanner.ErrorCount", Field, 0, ""},
-		{"Scanner.IsIdentRune", Field, 4, ""},
-		{"Scanner.Mode", Field, 0, ""},
-		{"Scanner.Position", Field, 0, ""},
-		{"Scanner.Whitespace", Field, 0, ""},
-		{"SkipComments", Const, 0, ""},
-		{"String", Const, 0, ""},
-		{"TokenString", Func, 0, "func(tok rune) string"},
+		{"(*Position).IsValid", Method, 0},
+		{"(*Scanner).Init", Method, 0},
+		{"(*Scanner).IsValid", Method, 0},
+		{"(*Scanner).Next", Method, 0},
+		{"(*Scanner).Peek", Method, 0},
+		{"(*Scanner).Pos", Method, 0},
+		{"(*Scanner).Scan", Method, 0},
+		{"(*Scanner).TokenText", Method, 0},
+		{"(Position).String", Method, 0},
+		{"(Scanner).String", Method, 0},
+		{"Char", Const, 0},
+		{"Comment", Const, 0},
+		{"EOF", Const, 0},
+		{"Float", Const, 0},
+		{"GoTokens", Const, 0},
+		{"GoWhitespace", Const, 0},
+		{"Ident", Const, 0},
+		{"Int", Const, 0},
+		{"Position", Type, 0},
+		{"Position.Column", Field, 0},
+		{"Position.Filename", Field, 0},
+		{"Position.Line", Field, 0},
+		{"Position.Offset", Field, 0},
+		{"RawString", Const, 0},
+		{"ScanChars", Const, 0},
+		{"ScanComments", Const, 0},
+		{"ScanFloats", Const, 0},
+		{"ScanIdents", Const, 0},
+		{"ScanInts", Const, 0},
+		{"ScanRawStrings", Const, 0},
+		{"ScanStrings", Const, 0},
+		{"Scanner", Type, 0},
+		{"Scanner.Error", Field, 0},
+		{"Scanner.ErrorCount", Field, 0},
+		{"Scanner.IsIdentRune", Field, 4},
+		{"Scanner.Mode", Field, 0},
+		{"Scanner.Position", Field, 0},
+		{"Scanner.Whitespace", Field, 0},
+		{"SkipComments", Const, 0},
+		{"String", Const, 0},
+		{"TokenString", Func, 0},
 	},
 	"text/tabwriter": {
-		{"(*Writer).Flush", Method, 0, ""},
-		{"(*Writer).Init", Method, 0, ""},
-		{"(*Writer).Write", Method, 0, ""},
-		{"AlignRight", Const, 0, ""},
-		{"Debug", Const, 0, ""},
-		{"DiscardEmptyColumns", Const, 0, ""},
-		{"Escape", Const, 0, ""},
-		{"FilterHTML", Const, 0, ""},
-		{"NewWriter", Func, 0, "func(output io.Writer, minwidth int, tabwidth int, padding int, padchar byte, flags uint) *Writer"},
-		{"StripEscape", Const, 0, ""},
-		{"TabIndent", Const, 0, ""},
-		{"Writer", Type, 0, ""},
+		{"(*Writer).Flush", Method, 0},
+		{"(*Writer).Init", Method, 0},
+		{"(*Writer).Write", Method, 0},
+		{"AlignRight", Const, 0},
+		{"Debug", Const, 0},
+		{"DiscardEmptyColumns", Const, 0},
+		{"Escape", Const, 0},
+		{"FilterHTML", Const, 0},
+		{"NewWriter", Func, 0},
+		{"StripEscape", Const, 0},
+		{"TabIndent", Const, 0},
+		{"Writer", Type, 0},
 	},
 	"text/template": {
-		{"(*Template).AddParseTree", Method, 0, ""},
-		{"(*Template).Clone", Method, 0, ""},
-		{"(*Template).DefinedTemplates", Method, 5, ""},
-		{"(*Template).Delims", Method, 0, ""},
-		{"(*Template).Execute", Method, 0, ""},
-		{"(*Template).ExecuteTemplate", Method, 0, ""},
-		{"(*Template).Funcs", Method, 0, ""},
-		{"(*Template).Lookup", Method, 0, ""},
-		{"(*Template).Name", Method, 0, ""},
-		{"(*Template).New", Method, 0, ""},
-		{"(*Template).Option", Method, 5, ""},
-		{"(*Template).Parse", Method, 0, ""},
-		{"(*Template).ParseFS", Method, 16, ""},
-		{"(*Template).ParseFiles", Method, 0, ""},
-		{"(*Template).ParseGlob", Method, 0, ""},
-		{"(*Template).Templates", Method, 0, ""},
-		{"(ExecError).Error", Method, 6, ""},
-		{"(ExecError).Unwrap", Method, 13, ""},
-		{"(Template).Copy", Method, 2, ""},
-		{"(Template).ErrorContext", Method, 1, ""},
-		{"ExecError", Type, 6, ""},
-		{"ExecError.Err", Field, 6, ""},
-		{"ExecError.Name", Field, 6, ""},
-		{"FuncMap", Type, 0, ""},
-		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
-		{"HTMLEscapeString", Func, 0, "func(s string) string"},
-		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
-		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
-		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
-		{"JSEscapeString", Func, 0, "func(s string) string"},
-		{"JSEscaper", Func, 0, "func(args ...any) string"},
-		{"Must", Func, 0, "func(t *Template, err error) *Template"},
-		{"New", Func, 0, "func(name string) *Template"},
-		{"ParseFS", Func, 16, "func(fsys fs.FS, patterns ...string) (*Template, error)"},
-		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
-		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
-		{"Template", Type, 0, ""},
-		{"Template.Tree", Field, 0, ""},
-		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
+		{"(*Template).AddParseTree", Method, 0},
+		{"(*Template).Clone", Method, 0},
+		{"(*Template).DefinedTemplates", Method, 5},
+		{"(*Template).Delims", Method, 0},
+		{"(*Template).Execute", Method, 0},
+		{"(*Template).ExecuteTemplate", Method, 0},
+		{"(*Template).Funcs", Method, 0},
+		{"(*Template).Lookup", Method, 0},
+		{"(*Template).Name", Method, 0},
+		{"(*Template).New", Method, 0},
+		{"(*Template).Option", Method, 5},
+		{"(*Template).Parse", Method, 0},
+		{"(*Template).ParseFS", Method, 16},
+		{"(*Template).ParseFiles", Method, 0},
+		{"(*Template).ParseGlob", Method, 0},
+		{"(*Template).Templates", Method, 0},
+		{"(ExecError).Error", Method, 6},
+		{"(ExecError).Unwrap", Method, 13},
+		{"(Template).Copy", Method, 2},
+		{"(Template).ErrorContext", Method, 1},
+		{"ExecError", Type, 6},
+		{"ExecError.Err", Field, 6},
+		{"ExecError.Name", Field, 6},
+		{"FuncMap", Type, 0},
+		{"HTMLEscape", Func, 0},
+		{"HTMLEscapeString", Func, 0},
+		{"HTMLEscaper", Func, 0},
+		{"IsTrue", Func, 6},
+		{"JSEscape", Func, 0},
+		{"JSEscapeString", Func, 0},
+		{"JSEscaper", Func, 0},
+		{"Must", Func, 0},
+		{"New", Func, 0},
+		{"ParseFS", Func, 16},
+		{"ParseFiles", Func, 0},
+		{"ParseGlob", Func, 0},
+		{"Template", Type, 0},
+		{"Template.Tree", Field, 0},
+		{"URLQueryEscaper", Func, 0},
 	},
 	"text/template/parse": {
-		{"(*ActionNode).Copy", Method, 0, ""},
-		{"(*ActionNode).String", Method, 0, ""},
-		{"(*BoolNode).Copy", Method, 0, ""},
-		{"(*BoolNode).String", Method, 0, ""},
-		{"(*BranchNode).Copy", Method, 4, ""},
-		{"(*BranchNode).String", Method, 0, ""},
-		{"(*BreakNode).Copy", Method, 18, ""},
-		{"(*BreakNode).String", Method, 18, ""},
-		{"(*ChainNode).Add", Method, 1, ""},
-		{"(*ChainNode).Copy", Method, 1, ""},
-		{"(*ChainNode).String", Method, 1, ""},
-		{"(*CommandNode).Copy", Method, 0, ""},
-		{"(*CommandNode).String", Method, 0, ""},
-		{"(*CommentNode).Copy", Method, 16, ""},
-		{"(*CommentNode).String", Method, 16, ""},
-		{"(*ContinueNode).Copy", Method, 18, ""},
-		{"(*ContinueNode).String", Method, 18, ""},
-		{"(*DotNode).Copy", Method, 0, ""},
-		{"(*DotNode).String", Method, 0, ""},
-		{"(*DotNode).Type", Method, 0, ""},
-		{"(*FieldNode).Copy", Method, 0, ""},
-		{"(*FieldNode).String", Method, 0, ""},
-		{"(*IdentifierNode).Copy", Method, 0, ""},
-		{"(*IdentifierNode).SetPos", Method, 1, ""},
-		{"(*IdentifierNode).SetTree", Method, 4, ""},
-		{"(*IdentifierNode).String", Method, 0, ""},
-		{"(*IfNode).Copy", Method, 0, ""},
-		{"(*IfNode).String", Method, 0, ""},
-		{"(*ListNode).Copy", Method, 0, ""},
-		{"(*ListNode).CopyList", Method, 0, ""},
-		{"(*ListNode).String", Method, 0, ""},
-		{"(*NilNode).Copy", Method, 1, ""},
-		{"(*NilNode).String", Method, 1, ""},
-		{"(*NilNode).Type", Method, 1, ""},
-		{"(*NumberNode).Copy", Method, 0, ""},
-		{"(*NumberNode).String", Method, 0, ""},
-		{"(*PipeNode).Copy", Method, 0, ""},
-		{"(*PipeNode).CopyPipe", Method, 0, ""},
-		{"(*PipeNode).String", Method, 0, ""},
-		{"(*RangeNode).Copy", Method, 0, ""},
-		{"(*RangeNode).String", Method, 0, ""},
-		{"(*StringNode).Copy", Method, 0, ""},
-		{"(*StringNode).String", Method, 0, ""},
-		{"(*TemplateNode).Copy", Method, 0, ""},
-		{"(*TemplateNode).String", Method, 0, ""},
-		{"(*TextNode).Copy", Method, 0, ""},
-		{"(*TextNode).String", Method, 0, ""},
-		{"(*Tree).Copy", Method, 2, ""},
-		{"(*Tree).ErrorContext", Method, 1, ""},
-		{"(*Tree).Parse", Method, 0, ""},
-		{"(*VariableNode).Copy", Method, 0, ""},
-		{"(*VariableNode).String", Method, 0, ""},
-		{"(*WithNode).Copy", Method, 0, ""},
-		{"(*WithNode).String", Method, 0, ""},
-		{"(ActionNode).Position", Method, 1, ""},
-		{"(ActionNode).Type", Method, 0, ""},
-		{"(BoolNode).Position", Method, 1, ""},
-		{"(BoolNode).Type", Method, 0, ""},
-		{"(BranchNode).Position", Method, 1, ""},
-		{"(BranchNode).Type", Method, 0, ""},
-		{"(BreakNode).Position", Method, 18, ""},
-		{"(BreakNode).Type", Method, 18, ""},
-		{"(ChainNode).Position", Method, 1, ""},
-		{"(ChainNode).Type", Method, 1, ""},
-		{"(CommandNode).Position", Method, 1, ""},
-		{"(CommandNode).Type", Method, 0, ""},
-		{"(CommentNode).Position", Method, 16, ""},
-		{"(CommentNode).Type", Method, 16, ""},
-		{"(ContinueNode).Position", Method, 18, ""},
-		{"(ContinueNode).Type", Method, 18, ""},
-		{"(DotNode).Position", Method, 1, ""},
-		{"(FieldNode).Position", Method, 1, ""},
-		{"(FieldNode).Type", Method, 0, ""},
-		{"(IdentifierNode).Position", Method, 1, ""},
-		{"(IdentifierNode).Type", Method, 0, ""},
-		{"(IfNode).Position", Method, 1, ""},
-		{"(IfNode).Type", Method, 0, ""},
-		{"(ListNode).Position", Method, 1, ""},
-		{"(ListNode).Type", Method, 0, ""},
-		{"(NilNode).Position", Method, 1, ""},
-		{"(NodeType).Type", Method, 0, ""},
-		{"(NumberNode).Position", Method, 1, ""},
-		{"(NumberNode).Type", Method, 0, ""},
-		{"(PipeNode).Position", Method, 1, ""},
-		{"(PipeNode).Type", Method, 0, ""},
-		{"(Pos).Position", Method, 1, ""},
-		{"(RangeNode).Position", Method, 1, ""},
-		{"(RangeNode).Type", Method, 0, ""},
-		{"(StringNode).Position", Method, 1, ""},
-		{"(StringNode).Type", Method, 0, ""},
-		{"(TemplateNode).Position", Method, 1, ""},
-		{"(TemplateNode).Type", Method, 0, ""},
-		{"(TextNode).Position", Method, 1, ""},
-		{"(TextNode).Type", Method, 0, ""},
-		{"(VariableNode).Position", Method, 1, ""},
-		{"(VariableNode).Type", Method, 0, ""},
-		{"(WithNode).Position", Method, 1, ""},
-		{"(WithNode).Type", Method, 0, ""},
-		{"ActionNode", Type, 0, ""},
-		{"ActionNode.Line", Field, 0, ""},
-		{"ActionNode.NodeType", Field, 0, ""},
-		{"ActionNode.Pipe", Field, 0, ""},
-		{"ActionNode.Pos", Field, 1, ""},
-		{"BoolNode", Type, 0, ""},
-		{"BoolNode.NodeType", Field, 0, ""},
-		{"BoolNode.Pos", Field, 1, ""},
-		{"BoolNode.True", Field, 0, ""},
-		{"BranchNode", Type, 0, ""},
-		{"BranchNode.ElseList", Field, 0, ""},
-		{"BranchNode.Line", Field, 0, ""},
-		{"BranchNode.List", Field, 0, ""},
-		{"BranchNode.NodeType", Field, 0, ""},
-		{"BranchNode.Pipe", Field, 0, ""},
-		{"BranchNode.Pos", Field, 1, ""},
-		{"BreakNode", Type, 18, ""},
-		{"BreakNode.Line", Field, 18, ""},
-		{"BreakNode.NodeType", Field, 18, ""},
-		{"BreakNode.Pos", Field, 18, ""},
-		{"ChainNode", Type, 1, ""},
-		{"ChainNode.Field", Field, 1, ""},
-		{"ChainNode.Node", Field, 1, ""},
-		{"ChainNode.NodeType", Field, 1, ""},
-		{"ChainNode.Pos", Field, 1, ""},
-		{"CommandNode", Type, 0, ""},
-		{"CommandNode.Args", Field, 0, ""},
-		{"CommandNode.NodeType", Field, 0, ""},
-		{"CommandNode.Pos", Field, 1, ""},
-		{"CommentNode", Type, 16, ""},
-		{"CommentNode.NodeType", Field, 16, ""},
-		{"CommentNode.Pos", Field, 16, ""},
-		{"CommentNode.Text", Field, 16, ""},
-		{"ContinueNode", Type, 18, ""},
-		{"ContinueNode.Line", Field, 18, ""},
-		{"ContinueNode.NodeType", Field, 18, ""},
-		{"ContinueNode.Pos", Field, 18, ""},
-		{"DotNode", Type, 0, ""},
-		{"DotNode.NodeType", Field, 4, ""},
-		{"DotNode.Pos", Field, 1, ""},
-		{"FieldNode", Type, 0, ""},
-		{"FieldNode.Ident", Field, 0, ""},
-		{"FieldNode.NodeType", Field, 0, ""},
-		{"FieldNode.Pos", Field, 1, ""},
-		{"IdentifierNode", Type, 0, ""},
-		{"IdentifierNode.Ident", Field, 0, ""},
-		{"IdentifierNode.NodeType", Field, 0, ""},
-		{"IdentifierNode.Pos", Field, 1, ""},
-		{"IfNode", Type, 0, ""},
-		{"IfNode.BranchNode", Field, 0, ""},
-		{"IsEmptyTree", Func, 0, "func(n Node) bool"},
-		{"ListNode", Type, 0, ""},
-		{"ListNode.NodeType", Field, 0, ""},
-		{"ListNode.Nodes", Field, 0, ""},
-		{"ListNode.Pos", Field, 1, ""},
-		{"Mode", Type, 16, ""},
-		{"New", Func, 0, "func(name string, funcs ...map[string]any) *Tree"},
-		{"NewIdentifier", Func, 0, "func(ident string) *IdentifierNode"},
-		{"NilNode", Type, 1, ""},
-		{"NilNode.NodeType", Field, 4, ""},
-		{"NilNode.Pos", Field, 1, ""},
-		{"Node", Type, 0, ""},
-		{"NodeAction", Const, 0, ""},
-		{"NodeBool", Const, 0, ""},
-		{"NodeBreak", Const, 18, ""},
-		{"NodeChain", Const, 1, ""},
-		{"NodeCommand", Const, 0, ""},
-		{"NodeComment", Const, 16, ""},
-		{"NodeContinue", Const, 18, ""},
-		{"NodeDot", Const, 0, ""},
-		{"NodeField", Const, 0, ""},
-		{"NodeIdentifier", Const, 0, ""},
-		{"NodeIf", Const, 0, ""},
-		{"NodeList", Const, 0, ""},
-		{"NodeNil", Const, 1, ""},
-		{"NodeNumber", Const, 0, ""},
-		{"NodePipe", Const, 0, ""},
-		{"NodeRange", Const, 0, ""},
-		{"NodeString", Const, 0, ""},
-		{"NodeTemplate", Const, 0, ""},
-		{"NodeText", Const, 0, ""},
-		{"NodeType", Type, 0, ""},
-		{"NodeVariable", Const, 0, ""},
-		{"NodeWith", Const, 0, ""},
-		{"NumberNode", Type, 0, ""},
-		{"NumberNode.Complex128", Field, 0, ""},
-		{"NumberNode.Float64", Field, 0, ""},
-		{"NumberNode.Int64", Field, 0, ""},
-		{"NumberNode.IsComplex", Field, 0, ""},
-		{"NumberNode.IsFloat", Field, 0, ""},
-		{"NumberNode.IsInt", Field, 0, ""},
-		{"NumberNode.IsUint", Field, 0, ""},
-		{"NumberNode.NodeType", Field, 0, ""},
-		{"NumberNode.Pos", Field, 1, ""},
-		{"NumberNode.Text", Field, 0, ""},
-		{"NumberNode.Uint64", Field, 0, ""},
-		{"Parse", Func, 0, "func(name string, text string, leftDelim string, rightDelim string, funcs ...map[string]any) (map[string]*Tree, error)"},
-		{"ParseComments", Const, 16, ""},
-		{"PipeNode", Type, 0, ""},
-		{"PipeNode.Cmds", Field, 0, ""},
-		{"PipeNode.Decl", Field, 0, ""},
-		{"PipeNode.IsAssign", Field, 11, ""},
-		{"PipeNode.Line", Field, 0, ""},
-		{"PipeNode.NodeType", Field, 0, ""},
-		{"PipeNode.Pos", Field, 1, ""},
-		{"Pos", Type, 1, ""},
-		{"RangeNode", Type, 0, ""},
-		{"RangeNode.BranchNode", Field, 0, ""},
-		{"SkipFuncCheck", Const, 17, ""},
-		{"StringNode", Type, 0, ""},
-		{"StringNode.NodeType", Field, 0, ""},
-		{"StringNode.Pos", Field, 1, ""},
-		{"StringNode.Quoted", Field, 0, ""},
-		{"StringNode.Text", Field, 0, ""},
-		{"TemplateNode", Type, 0, ""},
-		{"TemplateNode.Line", Field, 0, ""},
-		{"TemplateNode.Name", Field, 0, ""},
-		{"TemplateNode.NodeType", Field, 0, ""},
-		{"TemplateNode.Pipe", Field, 0, ""},
-		{"TemplateNode.Pos", Field, 1, ""},
-		{"TextNode", Type, 0, ""},
-		{"TextNode.NodeType", Field, 0, ""},
-		{"TextNode.Pos", Field, 1, ""},
-		{"TextNode.Text", Field, 0, ""},
-		{"Tree", Type, 0, ""},
-		{"Tree.Mode", Field, 16, ""},
-		{"Tree.Name", Field, 0, ""},
-		{"Tree.ParseName", Field, 1, ""},
-		{"Tree.Root", Field, 0, ""},
-		{"VariableNode", Type, 0, ""},
-		{"VariableNode.Ident", Field, 0, ""},
-		{"VariableNode.NodeType", Field, 0, ""},
-		{"VariableNode.Pos", Field, 1, ""},
-		{"WithNode", Type, 0, ""},
-		{"WithNode.BranchNode", Field, 0, ""},
+		{"(*ActionNode).Copy", Method, 0},
+		{"(*ActionNode).String", Method, 0},
+		{"(*BoolNode).Copy", Method, 0},
+		{"(*BoolNode).String", Method, 0},
+		{"(*BranchNode).Copy", Method, 4},
+		{"(*BranchNode).String", Method, 0},
+		{"(*BreakNode).Copy", Method, 18},
+		{"(*BreakNode).String", Method, 18},
+		{"(*ChainNode).Add", Method, 1},
+		{"(*ChainNode).Copy", Method, 1},
+		{"(*ChainNode).String", Method, 1},
+		{"(*CommandNode).Copy", Method, 0},
+		{"(*CommandNode).String", Method, 0},
+		{"(*CommentNode).Copy", Method, 16},
+		{"(*CommentNode).String", Method, 16},
+		{"(*ContinueNode).Copy", Method, 18},
+		{"(*ContinueNode).String", Method, 18},
+		{"(*DotNode).Copy", Method, 0},
+		{"(*DotNode).String", Method, 0},
+		{"(*DotNode).Type", Method, 0},
+		{"(*FieldNode).Copy", Method, 0},
+		{"(*FieldNode).String", Method, 0},
+		{"(*IdentifierNode).Copy", Method, 0},
+		{"(*IdentifierNode).SetPos", Method, 1},
+		{"(*IdentifierNode).SetTree", Method, 4},
+		{"(*IdentifierNode).String", Method, 0},
+		{"(*IfNode).Copy", Method, 0},
+		{"(*IfNode).String", Method, 0},
+		{"(*ListNode).Copy", Method, 0},
+		{"(*ListNode).CopyList", Method, 0},
+		{"(*ListNode).String", Method, 0},
+		{"(*NilNode).Copy", Method, 1},
+		{"(*NilNode).String", Method, 1},
+		{"(*NilNode).Type", Method, 1},
+		{"(*NumberNode).Copy", Method, 0},
+		{"(*NumberNode).String", Method, 0},
+		{"(*PipeNode).Copy", Method, 0},
+		{"(*PipeNode).CopyPipe", Method, 0},
+		{"(*PipeNode).String", Method, 0},
+		{"(*RangeNode).Copy", Method, 0},
+		{"(*RangeNode).String", Method, 0},
+		{"(*StringNode).Copy", Method, 0},
+		{"(*StringNode).String", Method, 0},
+		{"(*TemplateNode).Copy", Method, 0},
+		{"(*TemplateNode).String", Method, 0},
+		{"(*TextNode).Copy", Method, 0},
+		{"(*TextNode).String", Method, 0},
+		{"(*Tree).Copy", Method, 2},
+		{"(*Tree).ErrorContext", Method, 1},
+		{"(*Tree).Parse", Method, 0},
+		{"(*VariableNode).Copy", Method, 0},
+		{"(*VariableNode).String", Method, 0},
+		{"(*WithNode).Copy", Method, 0},
+		{"(*WithNode).String", Method, 0},
+		{"(ActionNode).Position", Method, 1},
+		{"(ActionNode).Type", Method, 0},
+		{"(BoolNode).Position", Method, 1},
+		{"(BoolNode).Type", Method, 0},
+		{"(BranchNode).Position", Method, 1},
+		{"(BranchNode).Type", Method, 0},
+		{"(BreakNode).Position", Method, 18},
+		{"(BreakNode).Type", Method, 18},
+		{"(ChainNode).Position", Method, 1},
+		{"(ChainNode).Type", Method, 1},
+		{"(CommandNode).Position", Method, 1},
+		{"(CommandNode).Type", Method, 0},
+		{"(CommentNode).Position", Method, 16},
+		{"(CommentNode).Type", Method, 16},
+		{"(ContinueNode).Position", Method, 18},
+		{"(ContinueNode).Type", Method, 18},
+		{"(DotNode).Position", Method, 1},
+		{"(FieldNode).Position", Method, 1},
+		{"(FieldNode).Type", Method, 0},
+		{"(IdentifierNode).Position", Method, 1},
+		{"(IdentifierNode).Type", Method, 0},
+		{"(IfNode).Position", Method, 1},
+		{"(IfNode).Type", Method, 0},
+		{"(ListNode).Position", Method, 1},
+		{"(ListNode).Type", Method, 0},
+		{"(NilNode).Position", Method, 1},
+		{"(NodeType).Type", Method, 0},
+		{"(NumberNode).Position", Method, 1},
+		{"(NumberNode).Type", Method, 0},
+		{"(PipeNode).Position", Method, 1},
+		{"(PipeNode).Type", Method, 0},
+		{"(Pos).Position", Method, 1},
+		{"(RangeNode).Position", Method, 1},
+		{"(RangeNode).Type", Method, 0},
+		{"(StringNode).Position", Method, 1},
+		{"(StringNode).Type", Method, 0},
+		{"(TemplateNode).Position", Method, 1},
+		{"(TemplateNode).Type", Method, 0},
+		{"(TextNode).Position", Method, 1},
+		{"(TextNode).Type", Method, 0},
+		{"(VariableNode).Position", Method, 1},
+		{"(VariableNode).Type", Method, 0},
+		{"(WithNode).Position", Method, 1},
+		{"(WithNode).Type", Method, 0},
+		{"ActionNode", Type, 0},
+		{"ActionNode.Line", Field, 0},
+		{"ActionNode.NodeType", Field, 0},
+		{"ActionNode.Pipe", Field, 0},
+		{"ActionNode.Pos", Field, 1},
+		{"BoolNode", Type, 0},
+		{"BoolNode.NodeType", Field, 0},
+		{"BoolNode.Pos", Field, 1},
+		{"BoolNode.True", Field, 0},
+		{"BranchNode", Type, 0},
+		{"BranchNode.ElseList", Field, 0},
+		{"BranchNode.Line", Field, 0},
+		{"BranchNode.List", Field, 0},
+		{"BranchNode.NodeType", Field, 0},
+		{"BranchNode.Pipe", Field, 0},
+		{"BranchNode.Pos", Field, 1},
+		{"BreakNode", Type, 18},
+		{"BreakNode.Line", Field, 18},
+		{"BreakNode.NodeType", Field, 18},
+		{"BreakNode.Pos", Field, 18},
+		{"ChainNode", Type, 1},
+		{"ChainNode.Field", Field, 1},
+		{"ChainNode.Node", Field, 1},
+		{"ChainNode.NodeType", Field, 1},
+		{"ChainNode.Pos", Field, 1},
+		{"CommandNode", Type, 0},
+		{"CommandNode.Args", Field, 0},
+		{"CommandNode.NodeType", Field, 0},
+		{"CommandNode.Pos", Field, 1},
+		{"CommentNode", Type, 16},
+		{"CommentNode.NodeType", Field, 16},
+		{"CommentNode.Pos", Field, 16},
+		{"CommentNode.Text", Field, 16},
+		{"ContinueNode", Type, 18},
+		{"ContinueNode.Line", Field, 18},
+		{"ContinueNode.NodeType", Field, 18},
+		{"ContinueNode.Pos", Field, 18},
+		{"DotNode", Type, 0},
+		{"DotNode.NodeType", Field, 4},
+		{"DotNode.Pos", Field, 1},
+		{"FieldNode", Type, 0},
+		{"FieldNode.Ident", Field, 0},
+		{"FieldNode.NodeType", Field, 0},
+		{"FieldNode.Pos", Field, 1},
+		{"IdentifierNode", Type, 0},
+		{"IdentifierNode.Ident", Field, 0},
+		{"IdentifierNode.NodeType", Field, 0},
+		{"IdentifierNode.Pos", Field, 1},
+		{"IfNode", Type, 0},
+		{"IfNode.BranchNode", Field, 0},
+		{"IsEmptyTree", Func, 0},
+		{"ListNode", Type, 0},
+		{"ListNode.NodeType", Field, 0},
+		{"ListNode.Nodes", Field, 0},
+		{"ListNode.Pos", Field, 1},
+		{"Mode", Type, 16},
+		{"New", Func, 0},
+		{"NewIdentifier", Func, 0},
+		{"NilNode", Type, 1},
+		{"NilNode.NodeType", Field, 4},
+		{"NilNode.Pos", Field, 1},
+		{"Node", Type, 0},
+		{"NodeAction", Const, 0},
+		{"NodeBool", Const, 0},
+		{"NodeBreak", Const, 18},
+		{"NodeChain", Const, 1},
+		{"NodeCommand", Const, 0},
+		{"NodeComment", Const, 16},
+		{"NodeContinue", Const, 18},
+		{"NodeDot", Const, 0},
+		{"NodeField", Const, 0},
+		{"NodeIdentifier", Const, 0},
+		{"NodeIf", Const, 0},
+		{"NodeList", Const, 0},
+		{"NodeNil", Const, 1},
+		{"NodeNumber", Const, 0},
+		{"NodePipe", Const, 0},
+		{"NodeRange", Const, 0},
+		{"NodeString", Const, 0},
+		{"NodeTemplate", Const, 0},
+		{"NodeText", Const, 0},
+		{"NodeType", Type, 0},
+		{"NodeVariable", Const, 0},
+		{"NodeWith", Const, 0},
+		{"NumberNode", Type, 0},
+		{"NumberNode.Complex128", Field, 0},
+		{"NumberNode.Float64", Field, 0},
+		{"NumberNode.Int64", Field, 0},
+		{"NumberNode.IsComplex", Field, 0},
+		{"NumberNode.IsFloat", Field, 0},
+		{"NumberNode.IsInt", Field, 0},
+		{"NumberNode.IsUint", Field, 0},
+		{"NumberNode.NodeType", Field, 0},
+		{"NumberNode.Pos", Field, 1},
+		{"NumberNode.Text", Field, 0},
+		{"NumberNode.Uint64", Field, 0},
+		{"Parse", Func, 0},
+		{"ParseComments", Const, 16},
+		{"PipeNode", Type, 0},
+		{"PipeNode.Cmds", Field, 0},
+		{"PipeNode.Decl", Field, 0},
+		{"PipeNode.IsAssign", Field, 11},
+		{"PipeNode.Line", Field, 0},
+		{"PipeNode.NodeType", Field, 0},
+		{"PipeNode.Pos", Field, 1},
+		{"Pos", Type, 1},
+		{"RangeNode", Type, 0},
+		{"RangeNode.BranchNode", Field, 0},
+		{"SkipFuncCheck", Const, 17},
+		{"StringNode", Type, 0},
+		{"StringNode.NodeType", Field, 0},
+		{"StringNode.Pos", Field, 1},
+		{"StringNode.Quoted", Field, 0},
+		{"StringNode.Text", Field, 0},
+		{"TemplateNode", Type, 0},
+		{"TemplateNode.Line", Field, 0},
+		{"TemplateNode.Name", Field, 0},
+		{"TemplateNode.NodeType", Field, 0},
+		{"TemplateNode.Pipe", Field, 0},
+		{"TemplateNode.Pos", Field, 1},
+		{"TextNode", Type, 0},
+		{"TextNode.NodeType", Field, 0},
+		{"TextNode.Pos", Field, 1},
+		{"TextNode.Text", Field, 0},
+		{"Tree", Type, 0},
+		{"Tree.Mode", Field, 16},
+		{"Tree.Name", Field, 0},
+		{"Tree.ParseName", Field, 1},
+		{"Tree.Root", Field, 0},
+		{"VariableNode", Type, 0},
+		{"VariableNode.Ident", Field, 0},
+		{"VariableNode.NodeType", Field, 0},
+		{"VariableNode.Pos", Field, 1},
+		{"WithNode", Type, 0},
+		{"WithNode.BranchNode", Field, 0},
 	},
 	"time": {
-		{"(*Location).String", Method, 0, ""},
-		{"(*ParseError).Error", Method, 0, ""},
-		{"(*Ticker).Reset", Method, 15, ""},
-		{"(*Ticker).Stop", Method, 0, ""},
-		{"(*Time).GobDecode", Method, 0, ""},
-		{"(*Time).UnmarshalBinary", Method, 2, ""},
-		{"(*Time).UnmarshalJSON", Method, 0, ""},
-		{"(*Time).UnmarshalText", Method, 2, ""},
-		{"(*Timer).Reset", Method, 1, ""},
-		{"(*Timer).Stop", Method, 0, ""},
-		{"(Duration).Abs", Method, 19, ""},
-		{"(Duration).Hours", Method, 0, ""},
-		{"(Duration).Microseconds", Method, 13, ""},
-		{"(Duration).Milliseconds", Method, 13, ""},
-		{"(Duration).Minutes", Method, 0, ""},
-		{"(Duration).Nanoseconds", Method, 0, ""},
-		{"(Duration).Round", Method, 9, ""},
-		{"(Duration).Seconds", Method, 0, ""},
-		{"(Duration).String", Method, 0, ""},
-		{"(Duration).Truncate", Method, 9, ""},
-		{"(Month).String", Method, 0, ""},
-		{"(Time).Add", Method, 0, ""},
-		{"(Time).AddDate", Method, 0, ""},
-		{"(Time).After", Method, 0, ""},
-		{"(Time).AppendBinary", Method, 24, ""},
-		{"(Time).AppendFormat", Method, 5, ""},
-		{"(Time).AppendText", Method, 24, ""},
-		{"(Time).Before", Method, 0, ""},
-		{"(Time).Clock", Method, 0, ""},
-		{"(Time).Compare", Method, 20, ""},
-		{"(Time).Date", Method, 0, ""},
-		{"(Time).Day", Method, 0, ""},
-		{"(Time).Equal", Method, 0, ""},
-		{"(Time).Format", Method, 0, ""},
-		{"(Time).GoString", Method, 17, ""},
-		{"(Time).GobEncode", Method, 0, ""},
-		{"(Time).Hour", Method, 0, ""},
-		{"(Time).ISOWeek", Method, 0, ""},
-		{"(Time).In", Method, 0, ""},
-		{"(Time).IsDST", Method, 17, ""},
-		{"(Time).IsZero", Method, 0, ""},
-		{"(Time).Local", Method, 0, ""},
-		{"(Time).Location", Method, 0, ""},
-		{"(Time).MarshalBinary", Method, 2, ""},
-		{"(Time).MarshalJSON", Method, 0, ""},
-		{"(Time).MarshalText", Method, 2, ""},
-		{"(Time).Minute", Method, 0, ""},
-		{"(Time).Month", Method, 0, ""},
-		{"(Time).Nanosecond", Method, 0, ""},
-		{"(Time).Round", Method, 1, ""},
-		{"(Time).Second", Method, 0, ""},
-		{"(Time).String", Method, 0, ""},
-		{"(Time).Sub", Method, 0, ""},
-		{"(Time).Truncate", Method, 1, ""},
-		{"(Time).UTC", Method, 0, ""},
-		{"(Time).Unix", Method, 0, ""},
-		{"(Time).UnixMicro", Method, 17, ""},
-		{"(Time).UnixMilli", Method, 17, ""},
-		{"(Time).UnixNano", Method, 0, ""},
-		{"(Time).Weekday", Method, 0, ""},
-		{"(Time).Year", Method, 0, ""},
-		{"(Time).YearDay", Method, 1, ""},
-		{"(Time).Zone", Method, 0, ""},
-		{"(Time).ZoneBounds", Method, 19, ""},
-		{"(Weekday).String", Method, 0, ""},
-		{"ANSIC", Const, 0, ""},
-		{"After", Func, 0, "func(d Duration) <-chan Time"},
-		{"AfterFunc", Func, 0, "func(d Duration, f func()) *Timer"},
-		{"April", Const, 0, ""},
-		{"August", Const, 0, ""},
-		{"Date", Func, 0, "func(year int, month Month, day int, hour int, min int, sec int, nsec int, loc *Location) Time"},
-		{"DateOnly", Const, 20, ""},
-		{"DateTime", Const, 20, ""},
-		{"December", Const, 0, ""},
-		{"Duration", Type, 0, ""},
-		{"February", Const, 0, ""},
-		{"FixedZone", Func, 0, "func(name string, offset int) *Location"},
-		{"Friday", Const, 0, ""},
-		{"Hour", Const, 0, ""},
-		{"January", Const, 0, ""},
-		{"July", Const, 0, ""},
-		{"June", Const, 0, ""},
-		{"Kitchen", Const, 0, ""},
-		{"Layout", Const, 17, ""},
-		{"LoadLocation", Func, 0, "func(name string) (*Location, error)"},
-		{"LoadLocationFromTZData", Func, 10, "func(name string, data []byte) (*Location, error)"},
-		{"Local", Var, 0, ""},
-		{"Location", Type, 0, ""},
-		{"March", Const, 0, ""},
-		{"May", Const, 0, ""},
-		{"Microsecond", Const, 0, ""},
-		{"Millisecond", Const, 0, ""},
-		{"Minute", Const, 0, ""},
-		{"Monday", Const, 0, ""},
-		{"Month", Type, 0, ""},
-		{"Nanosecond", Const, 0, ""},
-		{"NewTicker", Func, 0, "func(d Duration) *Ticker"},
-		{"NewTimer", Func, 0, "func(d Duration) *Timer"},
-		{"November", Const, 0, ""},
-		{"Now", Func, 0, "func() Time"},
-		{"October", Const, 0, ""},
-		{"Parse", Func, 0, "func(layout string, value string) (Time, error)"},
-		{"ParseDuration", Func, 0, "func(s string) (Duration, error)"},
-		{"ParseError", Type, 0, ""},
-		{"ParseError.Layout", Field, 0, ""},
-		{"ParseError.LayoutElem", Field, 0, ""},
-		{"ParseError.Message", Field, 0, ""},
-		{"ParseError.Value", Field, 0, ""},
-		{"ParseError.ValueElem", Field, 0, ""},
-		{"ParseInLocation", Func, 1, "func(layout string, value string, loc *Location) (Time, error)"},
-		{"RFC1123", Const, 0, ""},
-		{"RFC1123Z", Const, 0, ""},
-		{"RFC3339", Const, 0, ""},
-		{"RFC3339Nano", Const, 0, ""},
-		{"RFC822", Const, 0, ""},
-		{"RFC822Z", Const, 0, ""},
-		{"RFC850", Const, 0, ""},
-		{"RubyDate", Const, 0, ""},
-		{"Saturday", Const, 0, ""},
-		{"Second", Const, 0, ""},
-		{"September", Const, 0, ""},
-		{"Since", Func, 0, "func(t Time) Duration"},
-		{"Sleep", Func, 0, "func(d Duration)"},
-		{"Stamp", Const, 0, ""},
-		{"StampMicro", Const, 0, ""},
-		{"StampMilli", Const, 0, ""},
-		{"StampNano", Const, 0, ""},
-		{"Sunday", Const, 0, ""},
-		{"Thursday", Const, 0, ""},
-		{"Tick", Func, 0, "func(d Duration) <-chan Time"},
-		{"Ticker", Type, 0, ""},
-		{"Ticker.C", Field, 0, ""},
-		{"Time", Type, 0, ""},
-		{"TimeOnly", Const, 20, ""},
-		{"Timer", Type, 0, ""},
-		{"Timer.C", Field, 0, ""},
-		{"Tuesday", Const, 0, ""},
-		{"UTC", Var, 0, ""},
-		{"Unix", Func, 0, "func(sec int64, nsec int64) Time"},
-		{"UnixDate", Const, 0, ""},
-		{"UnixMicro", Func, 17, "func(usec int64) Time"},
-		{"UnixMilli", Func, 17, "func(msec int64) Time"},
-		{"Until", Func, 8, "func(t Time) Duration"},
-		{"Wednesday", Const, 0, ""},
-		{"Weekday", Type, 0, ""},
+		{"(*Location).String", Method, 0},
+		{"(*ParseError).Error", Method, 0},
+		{"(*Ticker).Reset", Method, 15},
+		{"(*Ticker).Stop", Method, 0},
+		{"(*Time).GobDecode", Method, 0},
+		{"(*Time).UnmarshalBinary", Method, 2},
+		{"(*Time).UnmarshalJSON", Method, 0},
+		{"(*Time).UnmarshalText", Method, 2},
+		{"(*Timer).Reset", Method, 1},
+		{"(*Timer).Stop", Method, 0},
+		{"(Duration).Abs", Method, 19},
+		{"(Duration).Hours", Method, 0},
+		{"(Duration).Microseconds", Method, 13},
+		{"(Duration).Milliseconds", Method, 13},
+		{"(Duration).Minutes", Method, 0},
+		{"(Duration).Nanoseconds", Method, 0},
+		{"(Duration).Round", Method, 9},
+		{"(Duration).Seconds", Method, 0},
+		{"(Duration).String", Method, 0},
+		{"(Duration).Truncate", Method, 9},
+		{"(Month).String", Method, 0},
+		{"(Time).Add", Method, 0},
+		{"(Time).AddDate", Method, 0},
+		{"(Time).After", Method, 0},
+		{"(Time).AppendBinary", Method, 24},
+		{"(Time).AppendFormat", Method, 5},
+		{"(Time).AppendText", Method, 24},
+		{"(Time).Before", Method, 0},
+		{"(Time).Clock", Method, 0},
+		{"(Time).Compare", Method, 20},
+		{"(Time).Date", Method, 0},
+		{"(Time).Day", Method, 0},
+		{"(Time).Equal", Method, 0},
+		{"(Time).Format", Method, 0},
+		{"(Time).GoString", Method, 17},
+		{"(Time).GobEncode", Method, 0},
+		{"(Time).Hour", Method, 0},
+		{"(Time).ISOWeek", Method, 0},
+		{"(Time).In", Method, 0},
+		{"(Time).IsDST", Method, 17},
+		{"(Time).IsZero", Method, 0},
+		{"(Time).Local", Method, 0},
+		{"(Time).Location", Method, 0},
+		{"(Time).MarshalBinary", Method, 2},
+		{"(Time).MarshalJSON", Method, 0},
+		{"(Time).MarshalText", Method, 2},
+		{"(Time).Minute", Method, 0},
+		{"(Time).Month", Method, 0},
+		{"(Time).Nanosecond", Method, 0},
+		{"(Time).Round", Method, 1},
+		{"(Time).Second", Method, 0},
+		{"(Time).String", Method, 0},
+		{"(Time).Sub", Method, 0},
+		{"(Time).Truncate", Method, 1},
+		{"(Time).UTC", Method, 0},
+		{"(Time).Unix", Method, 0},
+		{"(Time).UnixMicro", Method, 17},
+		{"(Time).UnixMilli", Method, 17},
+		{"(Time).UnixNano", Method, 0},
+		{"(Time).Weekday", Method, 0},
+		{"(Time).Year", Method, 0},
+		{"(Time).YearDay", Method, 1},
+		{"(Time).Zone", Method, 0},
+		{"(Time).ZoneBounds", Method, 19},
+		{"(Weekday).String", Method, 0},
+		{"ANSIC", Const, 0},
+		{"After", Func, 0},
+		{"AfterFunc", Func, 0},
+		{"April", Const, 0},
+		{"August", Const, 0},
+		{"Date", Func, 0},
+		{"DateOnly", Const, 20},
+		{"DateTime", Const, 20},
+		{"December", Const, 0},
+		{"Duration", Type, 0},
+		{"February", Const, 0},
+		{"FixedZone", Func, 0},
+		{"Friday", Const, 0},
+		{"Hour", Const, 0},
+		{"January", Const, 0},
+		{"July", Const, 0},
+		{"June", Const, 0},
+		{"Kitchen", Const, 0},
+		{"Layout", Const, 17},
+		{"LoadLocation", Func, 0},
+		{"LoadLocationFromTZData", Func, 10},
+		{"Local", Var, 0},
+		{"Location", Type, 0},
+		{"March", Const, 0},
+		{"May", Const, 0},
+		{"Microsecond", Const, 0},
+		{"Millisecond", Const, 0},
+		{"Minute", Const, 0},
+		{"Monday", Const, 0},
+		{"Month", Type, 0},
+		{"Nanosecond", Const, 0},
+		{"NewTicker", Func, 0},
+		{"NewTimer", Func, 0},
+		{"November", Const, 0},
+		{"Now", Func, 0},
+		{"October", Const, 0},
+		{"Parse", Func, 0},
+		{"ParseDuration", Func, 0},
+		{"ParseError", Type, 0},
+		{"ParseError.Layout", Field, 0},
+		{"ParseError.LayoutElem", Field, 0},
+		{"ParseError.Message", Field, 0},
+		{"ParseError.Value", Field, 0},
+		{"ParseError.ValueElem", Field, 0},
+		{"ParseInLocation", Func, 1},
+		{"RFC1123", Const, 0},
+		{"RFC1123Z", Const, 0},
+		{"RFC3339", Const, 0},
+		{"RFC3339Nano", Const, 0},
+		{"RFC822", Const, 0},
+		{"RFC822Z", Const, 0},
+		{"RFC850", Const, 0},
+		{"RubyDate", Const, 0},
+		{"Saturday", Const, 0},
+		{"Second", Const, 0},
+		{"September", Const, 0},
+		{"Since", Func, 0},
+		{"Sleep", Func, 0},
+		{"Stamp", Const, 0},
+		{"StampMicro", Const, 0},
+		{"StampMilli", Const, 0},
+		{"StampNano", Const, 0},
+		{"Sunday", Const, 0},
+		{"Thursday", Const, 0},
+		{"Tick", Func, 0},
+		{"Ticker", Type, 0},
+		{"Ticker.C", Field, 0},
+		{"Time", Type, 0},
+		{"TimeOnly", Const, 20},
+		{"Timer", Type, 0},
+		{"Timer.C", Field, 0},
+		{"Tuesday", Const, 0},
+		{"UTC", Var, 0},
+		{"Unix", Func, 0},
+		{"UnixDate", Const, 0},
+		{"UnixMicro", Func, 17},
+		{"UnixMilli", Func, 17},
+		{"Until", Func, 8},
+		{"Wednesday", Const, 0},
+		{"Weekday", Type, 0},
 	},
 	"unicode": {
-		{"(SpecialCase).ToLower", Method, 0, ""},
-		{"(SpecialCase).ToTitle", Method, 0, ""},
-		{"(SpecialCase).ToUpper", Method, 0, ""},
-		{"ASCII_Hex_Digit", Var, 0, ""},
-		{"Adlam", Var, 7, ""},
-		{"Ahom", Var, 5, ""},
-		{"Anatolian_Hieroglyphs", Var, 5, ""},
-		{"Arabic", Var, 0, ""},
-		{"Armenian", Var, 0, ""},
-		{"Avestan", Var, 0, ""},
-		{"AzeriCase", Var, 0, ""},
-		{"Balinese", Var, 0, ""},
-		{"Bamum", Var, 0, ""},
-		{"Bassa_Vah", Var, 4, ""},
-		{"Batak", Var, 0, ""},
-		{"Bengali", Var, 0, ""},
-		{"Bhaiksuki", Var, 7, ""},
-		{"Bidi_Control", Var, 0, ""},
-		{"Bopomofo", Var, 0, ""},
-		{"Brahmi", Var, 0, ""},
-		{"Braille", Var, 0, ""},
-		{"Buginese", Var, 0, ""},
-		{"Buhid", Var, 0, ""},
-		{"C", Var, 0, ""},
-		{"Canadian_Aboriginal", Var, 0, ""},
-		{"Carian", Var, 0, ""},
-		{"CaseRange", Type, 0, ""},
-		{"CaseRange.Delta", Field, 0, ""},
-		{"CaseRange.Hi", Field, 0, ""},
-		{"CaseRange.Lo", Field, 0, ""},
-		{"CaseRanges", Var, 0, ""},
-		{"Categories", Var, 0, ""},
-		{"Caucasian_Albanian", Var, 4, ""},
-		{"Cc", Var, 0, ""},
-		{"Cf", Var, 0, ""},
-		{"Chakma", Var, 1, ""},
-		{"Cham", Var, 0, ""},
-		{"Cherokee", Var, 0, ""},
-		{"Chorasmian", Var, 16, ""},
-		{"Co", Var, 0, ""},
-		{"Common", Var, 0, ""},
-		{"Coptic", Var, 0, ""},
-		{"Cs", Var, 0, ""},
-		{"Cuneiform", Var, 0, ""},
-		{"Cypriot", Var, 0, ""},
-		{"Cypro_Minoan", Var, 21, ""},
-		{"Cyrillic", Var, 0, ""},
-		{"Dash", Var, 0, ""},
-		{"Deprecated", Var, 0, ""},
-		{"Deseret", Var, 0, ""},
-		{"Devanagari", Var, 0, ""},
-		{"Diacritic", Var, 0, ""},
-		{"Digit", Var, 0, ""},
-		{"Dives_Akuru", Var, 16, ""},
-		{"Dogra", Var, 13, ""},
-		{"Duployan", Var, 4, ""},
-		{"Egyptian_Hieroglyphs", Var, 0, ""},
-		{"Elbasan", Var, 4, ""},
-		{"Elymaic", Var, 14, ""},
-		{"Ethiopic", Var, 0, ""},
-		{"Extender", Var, 0, ""},
-		{"FoldCategory", Var, 0, ""},
-		{"FoldScript", Var, 0, ""},
-		{"Georgian", Var, 0, ""},
-		{"Glagolitic", Var, 0, ""},
-		{"Gothic", Var, 0, ""},
-		{"Grantha", Var, 4, ""},
-		{"GraphicRanges", Var, 0, ""},
-		{"Greek", Var, 0, ""},
-		{"Gujarati", Var, 0, ""},
-		{"Gunjala_Gondi", Var, 13, ""},
-		{"Gurmukhi", Var, 0, ""},
-		{"Han", Var, 0, ""},
-		{"Hangul", Var, 0, ""},
-		{"Hanifi_Rohingya", Var, 13, ""},
-		{"Hanunoo", Var, 0, ""},
-		{"Hatran", Var, 5, ""},
-		{"Hebrew", Var, 0, ""},
-		{"Hex_Digit", Var, 0, ""},
-		{"Hiragana", Var, 0, ""},
-		{"Hyphen", Var, 0, ""},
-		{"IDS_Binary_Operator", Var, 0, ""},
-		{"IDS_Trinary_Operator", Var, 0, ""},
-		{"Ideographic", Var, 0, ""},
-		{"Imperial_Aramaic", Var, 0, ""},
-		{"In", Func, 2, "func(r rune, ranges ...*RangeTable) bool"},
-		{"Inherited", Var, 0, ""},
-		{"Inscriptional_Pahlavi", Var, 0, ""},
-		{"Inscriptional_Parthian", Var, 0, ""},
-		{"Is", Func, 0, "func(rangeTab *RangeTable, r rune) bool"},
-		{"IsControl", Func, 0, "func(r rune) bool"},
-		{"IsDigit", Func, 0, "func(r rune) bool"},
-		{"IsGraphic", Func, 0, "func(r rune) bool"},
-		{"IsLetter", Func, 0, "func(r rune) bool"},
-		{"IsLower", Func, 0, "func(r rune) bool"},
-		{"IsMark", Func, 0, "func(r rune) bool"},
-		{"IsNumber", Func, 0, "func(r rune) bool"},
-		{"IsOneOf", Func, 0, "func(ranges []*RangeTable, r rune) bool"},
-		{"IsPrint", Func, 0, "func(r rune) bool"},
-		{"IsPunct", Func, 0, "func(r rune) bool"},
-		{"IsSpace", Func, 0, "func(r rune) bool"},
-		{"IsSymbol", Func, 0, "func(r rune) bool"},
-		{"IsTitle", Func, 0, "func(r rune) bool"},
-		{"IsUpper", Func, 0, "func(r rune) bool"},
-		{"Javanese", Var, 0, ""},
-		{"Join_Control", Var, 0, ""},
-		{"Kaithi", Var, 0, ""},
-		{"Kannada", Var, 0, ""},
-		{"Katakana", Var, 0, ""},
-		{"Kawi", Var, 21, ""},
-		{"Kayah_Li", Var, 0, ""},
-		{"Kharoshthi", Var, 0, ""},
-		{"Khitan_Small_Script", Var, 16, ""},
-		{"Khmer", Var, 0, ""},
-		{"Khojki", Var, 4, ""},
-		{"Khudawadi", Var, 4, ""},
-		{"L", Var, 0, ""},
-		{"Lao", Var, 0, ""},
-		{"Latin", Var, 0, ""},
-		{"Lepcha", Var, 0, ""},
-		{"Letter", Var, 0, ""},
-		{"Limbu", Var, 0, ""},
-		{"Linear_A", Var, 4, ""},
-		{"Linear_B", Var, 0, ""},
-		{"Lisu", Var, 0, ""},
-		{"Ll", Var, 0, ""},
-		{"Lm", Var, 0, ""},
-		{"Lo", Var, 0, ""},
-		{"Logical_Order_Exception", Var, 0, ""},
-		{"Lower", Var, 0, ""},
-		{"LowerCase", Const, 0, ""},
-		{"Lt", Var, 0, ""},
-		{"Lu", Var, 0, ""},
-		{"Lycian", Var, 0, ""},
-		{"Lydian", Var, 0, ""},
-		{"M", Var, 0, ""},
-		{"Mahajani", Var, 4, ""},
-		{"Makasar", Var, 13, ""},
-		{"Malayalam", Var, 0, ""},
-		{"Mandaic", Var, 0, ""},
-		{"Manichaean", Var, 4, ""},
-		{"Marchen", Var, 7, ""},
-		{"Mark", Var, 0, ""},
-		{"Masaram_Gondi", Var, 10, ""},
-		{"MaxASCII", Const, 0, ""},
-		{"MaxCase", Const, 0, ""},
-		{"MaxLatin1", Const, 0, ""},
-		{"MaxRune", Const, 0, ""},
-		{"Mc", Var, 0, ""},
-		{"Me", Var, 0, ""},
-		{"Medefaidrin", Var, 13, ""},
-		{"Meetei_Mayek", Var, 0, ""},
-		{"Mende_Kikakui", Var, 4, ""},
-		{"Meroitic_Cursive", Var, 1, ""},
-		{"Meroitic_Hieroglyphs", Var, 1, ""},
-		{"Miao", Var, 1, ""},
-		{"Mn", Var, 0, ""},
-		{"Modi", Var, 4, ""},
-		{"Mongolian", Var, 0, ""},
-		{"Mro", Var, 4, ""},
-		{"Multani", Var, 5, ""},
-		{"Myanmar", Var, 0, ""},
-		{"N", Var, 0, ""},
-		{"Nabataean", Var, 4, ""},
-		{"Nag_Mundari", Var, 21, ""},
-		{"Nandinagari", Var, 14, ""},
-		{"Nd", Var, 0, ""},
-		{"New_Tai_Lue", Var, 0, ""},
-		{"Newa", Var, 7, ""},
-		{"Nko", Var, 0, ""},
-		{"Nl", Var, 0, ""},
-		{"No", Var, 0, ""},
-		{"Noncharacter_Code_Point", Var, 0, ""},
-		{"Number", Var, 0, ""},
-		{"Nushu", Var, 10, ""},
-		{"Nyiakeng_Puachue_Hmong", Var, 14, ""},
-		{"Ogham", Var, 0, ""},
-		{"Ol_Chiki", Var, 0, ""},
-		{"Old_Hungarian", Var, 5, ""},
-		{"Old_Italic", Var, 0, ""},
-		{"Old_North_Arabian", Var, 4, ""},
-		{"Old_Permic", Var, 4, ""},
-		{"Old_Persian", Var, 0, ""},
-		{"Old_Sogdian", Var, 13, ""},
-		{"Old_South_Arabian", Var, 0, ""},
-		{"Old_Turkic", Var, 0, ""},
-		{"Old_Uyghur", Var, 21, ""},
-		{"Oriya", Var, 0, ""},
-		{"Osage", Var, 7, ""},
-		{"Osmanya", Var, 0, ""},
-		{"Other", Var, 0, ""},
-		{"Other_Alphabetic", Var, 0, ""},
-		{"Other_Default_Ignorable_Code_Point", Var, 0, ""},
-		{"Other_Grapheme_Extend", Var, 0, ""},
-		{"Other_ID_Continue", Var, 0, ""},
-		{"Other_ID_Start", Var, 0, ""},
-		{"Other_Lowercase", Var, 0, ""},
-		{"Other_Math", Var, 0, ""},
-		{"Other_Uppercase", Var, 0, ""},
-		{"P", Var, 0, ""},
-		{"Pahawh_Hmong", Var, 4, ""},
-		{"Palmyrene", Var, 4, ""},
-		{"Pattern_Syntax", Var, 0, ""},
-		{"Pattern_White_Space", Var, 0, ""},
-		{"Pau_Cin_Hau", Var, 4, ""},
-		{"Pc", Var, 0, ""},
-		{"Pd", Var, 0, ""},
-		{"Pe", Var, 0, ""},
-		{"Pf", Var, 0, ""},
-		{"Phags_Pa", Var, 0, ""},
-		{"Phoenician", Var, 0, ""},
-		{"Pi", Var, 0, ""},
-		{"Po", Var, 0, ""},
-		{"Prepended_Concatenation_Mark", Var, 7, ""},
-		{"PrintRanges", Var, 0, ""},
-		{"Properties", Var, 0, ""},
-		{"Ps", Var, 0, ""},
-		{"Psalter_Pahlavi", Var, 4, ""},
-		{"Punct", Var, 0, ""},
-		{"Quotation_Mark", Var, 0, ""},
-		{"Radical", Var, 0, ""},
-		{"Range16", Type, 0, ""},
-		{"Range16.Hi", Field, 0, ""},
-		{"Range16.Lo", Field, 0, ""},
-		{"Range16.Stride", Field, 0, ""},
-		{"Range32", Type, 0, ""},
-		{"Range32.Hi", Field, 0, ""},
-		{"Range32.Lo", Field, 0, ""},
-		{"Range32.Stride", Field, 0, ""},
-		{"RangeTable", Type, 0, ""},
-		{"RangeTable.LatinOffset", Field, 1, ""},
-		{"RangeTable.R16", Field, 0, ""},
-		{"RangeTable.R32", Field, 0, ""},
-		{"Regional_Indicator", Var, 10, ""},
-		{"Rejang", Var, 0, ""},
-		{"ReplacementChar", Const, 0, ""},
-		{"Runic", Var, 0, ""},
-		{"S", Var, 0, ""},
-		{"STerm", Var, 0, ""},
-		{"Samaritan", Var, 0, ""},
-		{"Saurashtra", Var, 0, ""},
-		{"Sc", Var, 0, ""},
-		{"Scripts", Var, 0, ""},
-		{"Sentence_Terminal", Var, 7, ""},
-		{"Sharada", Var, 1, ""},
-		{"Shavian", Var, 0, ""},
-		{"Siddham", Var, 4, ""},
-		{"SignWriting", Var, 5, ""},
-		{"SimpleFold", Func, 0, "func(r rune) rune"},
-		{"Sinhala", Var, 0, ""},
-		{"Sk", Var, 0, ""},
-		{"Sm", Var, 0, ""},
-		{"So", Var, 0, ""},
-		{"Soft_Dotted", Var, 0, ""},
-		{"Sogdian", Var, 13, ""},
-		{"Sora_Sompeng", Var, 1, ""},
-		{"Soyombo", Var, 10, ""},
-		{"Space", Var, 0, ""},
-		{"SpecialCase", Type, 0, ""},
-		{"Sundanese", Var, 0, ""},
-		{"Syloti_Nagri", Var, 0, ""},
-		{"Symbol", Var, 0, ""},
-		{"Syriac", Var, 0, ""},
-		{"Tagalog", Var, 0, ""},
-		{"Tagbanwa", Var, 0, ""},
-		{"Tai_Le", Var, 0, ""},
-		{"Tai_Tham", Var, 0, ""},
-		{"Tai_Viet", Var, 0, ""},
-		{"Takri", Var, 1, ""},
-		{"Tamil", Var, 0, ""},
-		{"Tangsa", Var, 21, ""},
-		{"Tangut", Var, 7, ""},
-		{"Telugu", Var, 0, ""},
-		{"Terminal_Punctuation", Var, 0, ""},
-		{"Thaana", Var, 0, ""},
-		{"Thai", Var, 0, ""},
-		{"Tibetan", Var, 0, ""},
-		{"Tifinagh", Var, 0, ""},
-		{"Tirhuta", Var, 4, ""},
-		{"Title", Var, 0, ""},
-		{"TitleCase", Const, 0, ""},
-		{"To", Func, 0, "func(_case int, r rune) rune"},
-		{"ToLower", Func, 0, "func(r rune) rune"},
-		{"ToTitle", Func, 0, "func(r rune) rune"},
-		{"ToUpper", Func, 0, "func(r rune) rune"},
-		{"Toto", Var, 21, ""},
-		{"TurkishCase", Var, 0, ""},
-		{"Ugaritic", Var, 0, ""},
-		{"Unified_Ideograph", Var, 0, ""},
-		{"Upper", Var, 0, ""},
-		{"UpperCase", Const, 0, ""},
-		{"UpperLower", Const, 0, ""},
-		{"Vai", Var, 0, ""},
-		{"Variation_Selector", Var, 0, ""},
-		{"Version", Const, 0, ""},
-		{"Vithkuqi", Var, 21, ""},
-		{"Wancho", Var, 14, ""},
-		{"Warang_Citi", Var, 4, ""},
-		{"White_Space", Var, 0, ""},
-		{"Yezidi", Var, 16, ""},
-		{"Yi", Var, 0, ""},
-		{"Z", Var, 0, ""},
-		{"Zanabazar_Square", Var, 10, ""},
-		{"Zl", Var, 0, ""},
-		{"Zp", Var, 0, ""},
-		{"Zs", Var, 0, ""},
+		{"(SpecialCase).ToLower", Method, 0},
+		{"(SpecialCase).ToTitle", Method, 0},
+		{"(SpecialCase).ToUpper", Method, 0},
+		{"ASCII_Hex_Digit", Var, 0},
+		{"Adlam", Var, 7},
+		{"Ahom", Var, 5},
+		{"Anatolian_Hieroglyphs", Var, 5},
+		{"Arabic", Var, 0},
+		{"Armenian", Var, 0},
+		{"Avestan", Var, 0},
+		{"AzeriCase", Var, 0},
+		{"Balinese", Var, 0},
+		{"Bamum", Var, 0},
+		{"Bassa_Vah", Var, 4},
+		{"Batak", Var, 0},
+		{"Bengali", Var, 0},
+		{"Bhaiksuki", Var, 7},
+		{"Bidi_Control", Var, 0},
+		{"Bopomofo", Var, 0},
+		{"Brahmi", Var, 0},
+		{"Braille", Var, 0},
+		{"Buginese", Var, 0},
+		{"Buhid", Var, 0},
+		{"C", Var, 0},
+		{"Canadian_Aboriginal", Var, 0},
+		{"Carian", Var, 0},
+		{"CaseRange", Type, 0},
+		{"CaseRange.Delta", Field, 0},
+		{"CaseRange.Hi", Field, 0},
+		{"CaseRange.Lo", Field, 0},
+		{"CaseRanges", Var, 0},
+		{"Categories", Var, 0},
+		{"Caucasian_Albanian", Var, 4},
+		{"Cc", Var, 0},
+		{"Cf", Var, 0},
+		{"Chakma", Var, 1},
+		{"Cham", Var, 0},
+		{"Cherokee", Var, 0},
+		{"Chorasmian", Var, 16},
+		{"Co", Var, 0},
+		{"Common", Var, 0},
+		{"Coptic", Var, 0},
+		{"Cs", Var, 0},
+		{"Cuneiform", Var, 0},
+		{"Cypriot", Var, 0},
+		{"Cypro_Minoan", Var, 21},
+		{"Cyrillic", Var, 0},
+		{"Dash", Var, 0},
+		{"Deprecated", Var, 0},
+		{"Deseret", Var, 0},
+		{"Devanagari", Var, 0},
+		{"Diacritic", Var, 0},
+		{"Digit", Var, 0},
+		{"Dives_Akuru", Var, 16},
+		{"Dogra", Var, 13},
+		{"Duployan", Var, 4},
+		{"Egyptian_Hieroglyphs", Var, 0},
+		{"Elbasan", Var, 4},
+		{"Elymaic", Var, 14},
+		{"Ethiopic", Var, 0},
+		{"Extender", Var, 0},
+		{"FoldCategory", Var, 0},
+		{"FoldScript", Var, 0},
+		{"Georgian", Var, 0},
+		{"Glagolitic", Var, 0},
+		{"Gothic", Var, 0},
+		{"Grantha", Var, 4},
+		{"GraphicRanges", Var, 0},
+		{"Greek", Var, 0},
+		{"Gujarati", Var, 0},
+		{"Gunjala_Gondi", Var, 13},
+		{"Gurmukhi", Var, 0},
+		{"Han", Var, 0},
+		{"Hangul", Var, 0},
+		{"Hanifi_Rohingya", Var, 13},
+		{"Hanunoo", Var, 0},
+		{"Hatran", Var, 5},
+		{"Hebrew", Var, 0},
+		{"Hex_Digit", Var, 0},
+		{"Hiragana", Var, 0},
+		{"Hyphen", Var, 0},
+		{"IDS_Binary_Operator", Var, 0},
+		{"IDS_Trinary_Operator", Var, 0},
+		{"Ideographic", Var, 0},
+		{"Imperial_Aramaic", Var, 0},
+		{"In", Func, 2},
+		{"Inherited", Var, 0},
+		{"Inscriptional_Pahlavi", Var, 0},
+		{"Inscriptional_Parthian", Var, 0},
+		{"Is", Func, 0},
+		{"IsControl", Func, 0},
+		{"IsDigit", Func, 0},
+		{"IsGraphic", Func, 0},
+		{"IsLetter", Func, 0},
+		{"IsLower", Func, 0},
+		{"IsMark", Func, 0},
+		{"IsNumber", Func, 0},
+		{"IsOneOf", Func, 0},
+		{"IsPrint", Func, 0},
+		{"IsPunct", Func, 0},
+		{"IsSpace", Func, 0},
+		{"IsSymbol", Func, 0},
+		{"IsTitle", Func, 0},
+		{"IsUpper", Func, 0},
+		{"Javanese", Var, 0},
+		{"Join_Control", Var, 0},
+		{"Kaithi", Var, 0},
+		{"Kannada", Var, 0},
+		{"Katakana", Var, 0},
+		{"Kawi", Var, 21},
+		{"Kayah_Li", Var, 0},
+		{"Kharoshthi", Var, 0},
+		{"Khitan_Small_Script", Var, 16},
+		{"Khmer", Var, 0},
+		{"Khojki", Var, 4},
+		{"Khudawadi", Var, 4},
+		{"L", Var, 0},
+		{"Lao", Var, 0},
+		{"Latin", Var, 0},
+		{"Lepcha", Var, 0},
+		{"Letter", Var, 0},
+		{"Limbu", Var, 0},
+		{"Linear_A", Var, 4},
+		{"Linear_B", Var, 0},
+		{"Lisu", Var, 0},
+		{"Ll", Var, 0},
+		{"Lm", Var, 0},
+		{"Lo", Var, 0},
+		{"Logical_Order_Exception", Var, 0},
+		{"Lower", Var, 0},
+		{"LowerCase", Const, 0},
+		{"Lt", Var, 0},
+		{"Lu", Var, 0},
+		{"Lycian", Var, 0},
+		{"Lydian", Var, 0},
+		{"M", Var, 0},
+		{"Mahajani", Var, 4},
+		{"Makasar", Var, 13},
+		{"Malayalam", Var, 0},
+		{"Mandaic", Var, 0},
+		{"Manichaean", Var, 4},
+		{"Marchen", Var, 7},
+		{"Mark", Var, 0},
+		{"Masaram_Gondi", Var, 10},
+		{"MaxASCII", Const, 0},
+		{"MaxCase", Const, 0},
+		{"MaxLatin1", Const, 0},
+		{"MaxRune", Const, 0},
+		{"Mc", Var, 0},
+		{"Me", Var, 0},
+		{"Medefaidrin", Var, 13},
+		{"Meetei_Mayek", Var, 0},
+		{"Mende_Kikakui", Var, 4},
+		{"Meroitic_Cursive", Var, 1},
+		{"Meroitic_Hieroglyphs", Var, 1},
+		{"Miao", Var, 1},
+		{"Mn", Var, 0},
+		{"Modi", Var, 4},
+		{"Mongolian", Var, 0},
+		{"Mro", Var, 4},
+		{"Multani", Var, 5},
+		{"Myanmar", Var, 0},
+		{"N", Var, 0},
+		{"Nabataean", Var, 4},
+		{"Nag_Mundari", Var, 21},
+		{"Nandinagari", Var, 14},
+		{"Nd", Var, 0},
+		{"New_Tai_Lue", Var, 0},
+		{"Newa", Var, 7},
+		{"Nko", Var, 0},
+		{"Nl", Var, 0},
+		{"No", Var, 0},
+		{"Noncharacter_Code_Point", Var, 0},
+		{"Number", Var, 0},
+		{"Nushu", Var, 10},
+		{"Nyiakeng_Puachue_Hmong", Var, 14},
+		{"Ogham", Var, 0},
+		{"Ol_Chiki", Var, 0},
+		{"Old_Hungarian", Var, 5},
+		{"Old_Italic", Var, 0},
+		{"Old_North_Arabian", Var, 4},
+		{"Old_Permic", Var, 4},
+		{"Old_Persian", Var, 0},
+		{"Old_Sogdian", Var, 13},
+		{"Old_South_Arabian", Var, 0},
+		{"Old_Turkic", Var, 0},
+		{"Old_Uyghur", Var, 21},
+		{"Oriya", Var, 0},
+		{"Osage", Var, 7},
+		{"Osmanya", Var, 0},
+		{"Other", Var, 0},
+		{"Other_Alphabetic", Var, 0},
+		{"Other_Default_Ignorable_Code_Point", Var, 0},
+		{"Other_Grapheme_Extend", Var, 0},
+		{"Other_ID_Continue", Var, 0},
+		{"Other_ID_Start", Var, 0},
+		{"Other_Lowercase", Var, 0},
+		{"Other_Math", Var, 0},
+		{"Other_Uppercase", Var, 0},
+		{"P", Var, 0},
+		{"Pahawh_Hmong", Var, 4},
+		{"Palmyrene", Var, 4},
+		{"Pattern_Syntax", Var, 0},
+		{"Pattern_White_Space", Var, 0},
+		{"Pau_Cin_Hau", Var, 4},
+		{"Pc", Var, 0},
+		{"Pd", Var, 0},
+		{"Pe", Var, 0},
+		{"Pf", Var, 0},
+		{"Phags_Pa", Var, 0},
+		{"Phoenician", Var, 0},
+		{"Pi", Var, 0},
+		{"Po", Var, 0},
+		{"Prepended_Concatenation_Mark", Var, 7},
+		{"PrintRanges", Var, 0},
+		{"Properties", Var, 0},
+		{"Ps", Var, 0},
+		{"Psalter_Pahlavi", Var, 4},
+		{"Punct", Var, 0},
+		{"Quotation_Mark", Var, 0},
+		{"Radical", Var, 0},
+		{"Range16", Type, 0},
+		{"Range16.Hi", Field, 0},
+		{"Range16.Lo", Field, 0},
+		{"Range16.Stride", Field, 0},
+		{"Range32", Type, 0},
+		{"Range32.Hi", Field, 0},
+		{"Range32.Lo", Field, 0},
+		{"Range32.Stride", Field, 0},
+		{"RangeTable", Type, 0},
+		{"RangeTable.LatinOffset", Field, 1},
+		{"RangeTable.R16", Field, 0},
+		{"RangeTable.R32", Field, 0},
+		{"Regional_Indicator", Var, 10},
+		{"Rejang", Var, 0},
+		{"ReplacementChar", Const, 0},
+		{"Runic", Var, 0},
+		{"S", Var, 0},
+		{"STerm", Var, 0},
+		{"Samaritan", Var, 0},
+		{"Saurashtra", Var, 0},
+		{"Sc", Var, 0},
+		{"Scripts", Var, 0},
+		{"Sentence_Terminal", Var, 7},
+		{"Sharada", Var, 1},
+		{"Shavian", Var, 0},
+		{"Siddham", Var, 4},
+		{"SignWriting", Var, 5},
+		{"SimpleFold", Func, 0},
+		{"Sinhala", Var, 0},
+		{"Sk", Var, 0},
+		{"Sm", Var, 0},
+		{"So", Var, 0},
+		{"Soft_Dotted", Var, 0},
+		{"Sogdian", Var, 13},
+		{"Sora_Sompeng", Var, 1},
+		{"Soyombo", Var, 10},
+		{"Space", Var, 0},
+		{"SpecialCase", Type, 0},
+		{"Sundanese", Var, 0},
+		{"Syloti_Nagri", Var, 0},
+		{"Symbol", Var, 0},
+		{"Syriac", Var, 0},
+		{"Tagalog", Var, 0},
+		{"Tagbanwa", Var, 0},
+		{"Tai_Le", Var, 0},
+		{"Tai_Tham", Var, 0},
+		{"Tai_Viet", Var, 0},
+		{"Takri", Var, 1},
+		{"Tamil", Var, 0},
+		{"Tangsa", Var, 21},
+		{"Tangut", Var, 7},
+		{"Telugu", Var, 0},
+		{"Terminal_Punctuation", Var, 0},
+		{"Thaana", Var, 0},
+		{"Thai", Var, 0},
+		{"Tibetan", Var, 0},
+		{"Tifinagh", Var, 0},
+		{"Tirhuta", Var, 4},
+		{"Title", Var, 0},
+		{"TitleCase", Const, 0},
+		{"To", Func, 0},
+		{"ToLower", Func, 0},
+		{"ToTitle", Func, 0},
+		{"ToUpper", Func, 0},
+		{"Toto", Var, 21},
+		{"TurkishCase", Var, 0},
+		{"Ugaritic", Var, 0},
+		{"Unified_Ideograph", Var, 0},
+		{"Upper", Var, 0},
+		{"UpperCase", Const, 0},
+		{"UpperLower", Const, 0},
+		{"Vai", Var, 0},
+		{"Variation_Selector", Var, 0},
+		{"Version", Const, 0},
+		{"Vithkuqi", Var, 21},
+		{"Wancho", Var, 14},
+		{"Warang_Citi", Var, 4},
+		{"White_Space", Var, 0},
+		{"Yezidi", Var, 16},
+		{"Yi", Var, 0},
+		{"Z", Var, 0},
+		{"Zanabazar_Square", Var, 10},
+		{"Zl", Var, 0},
+		{"Zp", Var, 0},
+		{"Zs", Var, 0},
 	},
 	"unicode/utf16": {
-		{"AppendRune", Func, 20, "func(a []uint16, r rune) []uint16"},
-		{"Decode", Func, 0, "func(s []uint16) []rune"},
-		{"DecodeRune", Func, 0, "func(r1 rune, r2 rune) rune"},
-		{"Encode", Func, 0, "func(s []rune) []uint16"},
-		{"EncodeRune", Func, 0, "func(r rune) (r1 rune, r2 rune)"},
-		{"IsSurrogate", Func, 0, "func(r rune) bool"},
-		{"RuneLen", Func, 23, "func(r rune) int"},
+		{"AppendRune", Func, 20},
+		{"Decode", Func, 0},
+		{"DecodeRune", Func, 0},
+		{"Encode", Func, 0},
+		{"EncodeRune", Func, 0},
+		{"IsSurrogate", Func, 0},
+		{"RuneLen", Func, 23},
 	},
 	"unicode/utf8": {
-		{"AppendRune", Func, 18, "func(p []byte, r rune) []byte"},
-		{"DecodeLastRune", Func, 0, "func(p []byte) (r rune, size int)"},
-		{"DecodeLastRuneInString", Func, 0, "func(s string) (r rune, size int)"},
-		{"DecodeRune", Func, 0, "func(p []byte) (r rune, size int)"},
-		{"DecodeRuneInString", Func, 0, "func(s string) (r rune, size int)"},
-		{"EncodeRune", Func, 0, "func(p []byte, r rune) int"},
-		{"FullRune", Func, 0, "func(p []byte) bool"},
-		{"FullRuneInString", Func, 0, "func(s string) bool"},
-		{"MaxRune", Const, 0, ""},
-		{"RuneCount", Func, 0, "func(p []byte) int"},
-		{"RuneCountInString", Func, 0, "func(s string) (n int)"},
-		{"RuneError", Const, 0, ""},
-		{"RuneLen", Func, 0, "func(r rune) int"},
-		{"RuneSelf", Const, 0, ""},
-		{"RuneStart", Func, 0, "func(b byte) bool"},
-		{"UTFMax", Const, 0, ""},
-		{"Valid", Func, 0, "func(p []byte) bool"},
-		{"ValidRune", Func, 1, "func(r rune) bool"},
-		{"ValidString", Func, 0, "func(s string) bool"},
+		{"AppendRune", Func, 18},
+		{"DecodeLastRune", Func, 0},
+		{"DecodeLastRuneInString", Func, 0},
+		{"DecodeRune", Func, 0},
+		{"DecodeRuneInString", Func, 0},
+		{"EncodeRune", Func, 0},
+		{"FullRune", Func, 0},
+		{"FullRuneInString", Func, 0},
+		{"MaxRune", Const, 0},
+		{"RuneCount", Func, 0},
+		{"RuneCountInString", Func, 0},
+		{"RuneError", Const, 0},
+		{"RuneLen", Func, 0},
+		{"RuneSelf", Const, 0},
+		{"RuneStart", Func, 0},
+		{"UTFMax", Const, 0},
+		{"Valid", Func, 0},
+		{"ValidRune", Func, 1},
+		{"ValidString", Func, 0},
 	},
 	"unique": {
-		{"(Handle).Value", Method, 23, ""},
-		{"Handle", Type, 23, ""},
-		{"Make", Func, 23, "func[T comparable](value T) Handle[T]"},
+		{"(Handle).Value", Method, 23},
+		{"Handle", Type, 23},
+		{"Make", Func, 23},
 	},
 	"unsafe": {
-		{"Add", Func, 0, ""},
-		{"Alignof", Func, 0, ""},
-		{"Offsetof", Func, 0, ""},
-		{"Pointer", Type, 0, ""},
-		{"Sizeof", Func, 0, ""},
-		{"Slice", Func, 0, ""},
-		{"SliceData", Func, 0, ""},
-		{"String", Func, 0, ""},
-		{"StringData", Func, 0, ""},
+		{"Add", Func, 0},
+		{"Alignof", Func, 0},
+		{"Offsetof", Func, 0},
+		{"Pointer", Type, 0},
+		{"Sizeof", Func, 0},
+		{"Slice", Func, 0},
+		{"SliceData", Func, 0},
+		{"String", Func, 0},
+		{"StringData", Func, 0},
 	},
 	"weak": {
-		{"(Pointer).Value", Method, 24, ""},
-		{"Make", Func, 24, "func[T any](ptr *T) Pointer[T]"},
-		{"Pointer", Type, 24, ""},
+		{"(Pointer).Value", Method, 24},
+		{"Make", Func, 24},
+		{"Pointer", Type, 24},
 	},
 }
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/stdlib.go b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
index e223e0f3405053..3d96d3bf686bbc 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
@@ -18,14 +18,6 @@ type Symbol struct {
 	Name    string
 	Kind    Kind
 	Version Version // Go version that first included the symbol
-	// Signature provides the type of a function (defined only for Kind=Func).
-	// Imported types are denoted as pkg.T; pkg is not fully qualified.
-	// TODO(adonovan): use an unambiguous encoding that is parseable.
-	//
-	// Example2:
-	//    func[M ~map[K]V, K comparable, V any](m M) M
-	//    func(fi fs.FileInfo, link string) (*Header, error)
-	Signature string // if Kind == stdlib.Func
 }
 
 // A Kind indicates the kind of a symbol:
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go
index 709d2fc1447432..0ade5c2949edad 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go
@@ -70,7 +70,7 @@ func (w *Free) Has(typ types.Type) (res bool) {
 
 	case *types.Tuple:
 		n := t.Len()
-		for i := range n {
+		for i := 0; i < n; i++ {
 			if w.Has(t.At(i).Type()) {
 				return true
 			}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/termlist.go
index 9bc29143f6ad6c..cbd12f801314b5 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/termlist.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/termlist.go
@@ -1,6 +1,3 @@
-// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
-// Source: ../../cmd/compile/internal/types2/termlist.go
-
 // Copyright 2021 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.
@@ -10,8 +7,8 @@
 package typeparams
 
 import (
+	"bytes"
 	"go/types"
-	"strings"
 )
 
 // A termlist represents the type set represented by the union
@@ -25,18 +22,15 @@ type termlist []*term
 // It is in normal form.
 var allTermlist = termlist{new(term)}
 
-// termSep is the separator used between individual terms.
-const termSep = " | "
-
 // String prints the termlist exactly (without normalization).
 func (xl termlist) String() string {
 	if len(xl) == 0 {
 		return "∅"
 	}
-	var buf strings.Builder
+	var buf bytes.Buffer
 	for i, x := range xl {
 		if i > 0 {
-			buf.WriteString(termSep)
+			buf.WriteString(" | ")
 		}
 		buf.WriteString(x.String())
 	}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
index fa758cdc9895d6..7350bb702a1737 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
@@ -1,6 +1,3 @@
-// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
-// Source: ../../cmd/compile/internal/types2/typeterm.go
-
 // Copyright 2021 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.
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
deleted file mode 100644
index 3db2a135b97dd2..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
+++ /dev/null
@@ -1,137 +0,0 @@
-// 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.
-
-package typesinternal
-
-import (
-	"fmt"
-	"go/ast"
-	"go/types"
-	_ "unsafe"
-)
-
-// CallKind describes the function position of an [*ast.CallExpr].
-type CallKind int
-
-const (
-	CallStatic     CallKind = iota // static call to known function
-	CallInterface                  // dynamic call through an interface method
-	CallDynamic                    // dynamic call of a func value
-	CallBuiltin                    // call to a builtin function
-	CallConversion                 // a conversion (not a call)
-)
-
-var callKindNames = []string{
-	"CallStatic",
-	"CallInterface",
-	"CallDynamic",
-	"CallBuiltin",
-	"CallConversion",
-}
-
-func (k CallKind) String() string {
-	if i := int(k); i >= 0 && i < len(callKindNames) {
-		return callKindNames[i]
-	}
-	return fmt.Sprintf("typeutil.CallKind(%d)", k)
-}
-
-// ClassifyCall classifies the function position of a call expression ([*ast.CallExpr]).
-// It distinguishes among true function calls, calls to builtins, and type conversions,
-// and further classifies function calls as static calls (where the function is known),
-// dynamic interface calls, and other dynamic calls.
-//
-// For the declarations:
-//
-//	func f() {}
-//	func g[T any]() {}
-//	var v func()
-//	var s []func()
-//	type I interface { M() }
-//	var i I
-//
-// ClassifyCall returns the following:
-//
-//	f()           CallStatic
-//	g[int]()      CallStatic
-//	i.M()         CallInterface
-//	min(1, 2)     CallBuiltin
-//	v()           CallDynamic
-//	s[0]()        CallDynamic
-//	int(x)        CallConversion
-//	[]byte("")    CallConversion
-func ClassifyCall(info *types.Info, call *ast.CallExpr) CallKind {
-	if info.Types == nil {
-		panic("ClassifyCall: info.Types is nil")
-	}
-	tv := info.Types[call.Fun]
-	if tv.IsType() {
-		return CallConversion
-	}
-	if tv.IsBuiltin() {
-		return CallBuiltin
-	}
-	obj := info.Uses[UsedIdent(info, call.Fun)]
-	// Classify the call by the type of the object, if any.
-	switch obj := obj.(type) {
-	case *types.Func:
-		if interfaceMethod(obj) {
-			return CallInterface
-		}
-		return CallStatic
-	default:
-		return CallDynamic
-	}
-}
-
-// UsedIdent returns the identifier such that info.Uses[UsedIdent(info, e)]
-// is the [types.Object] used by e, if any.
-//
-// If e is one of various forms of reference:
-//
-//	f, c, v, T           lexical reference
-//	pkg.X                qualified identifier
-//	f[T] or pkg.F[K,V]   instantiations of the above kinds
-//	expr.f               field or method value selector
-//	T.f                  method expression selector
-//
-// UsedIdent returns the identifier whose is associated value in [types.Info.Uses]
-// is the object to which it refers.
-//
-// For the declarations:
-//
-//	func F[T any] {...}
-//	type I interface { M() }
-//	var (
-//	  x int
-//	  s struct { f  int }
-//	  a []int
-//	  i I
-//	)
-//
-// UsedIdent returns the following:
-//
-//	Expr          UsedIdent
-//	x             x
-//	s.f           f
-//	F[int]        F
-//	i.M           M
-//	I.M           M
-//	min           min
-//	int           int
-//	1             nil
-//	a[0]          nil
-//	[]byte        nil
-//
-// Note: if e is an instantiated function or method, UsedIdent returns
-// the corresponding generic function or method on the generic type.
-func UsedIdent(info *types.Info, e ast.Expr) *ast.Ident {
-	return usedIdent(info, e)
-}
-
-//go:linkname usedIdent golang.org/x/tools/go/types/typeutil.usedIdent
-func usedIdent(info *types.Info, e ast.Expr) *ast.Ident
-
-//go:linkname interfaceMethod golang.org/x/tools/go/types/typeutil.interfaceMethod
-func interfaceMethod(f *types.Func) bool
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/typeindex/typeindex.go b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/typeindex/typeindex.go
deleted file mode 100644
index e03deef4409716..00000000000000
--- a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/typeindex/typeindex.go
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typeindex provides an [Index] of type information for a
-// package, allowing efficient lookup of, say, whether a given symbol
-// is referenced and, if so, where from; or of the [inspector.Cursor] for
-// the declaration of a particular [types.Object] symbol.
-package typeindex
-
-import (
-	"encoding/binary"
-	"go/ast"
-	"go/types"
-	"iter"
-
-	"golang.org/x/tools/go/ast/edge"
-	"golang.org/x/tools/go/ast/inspector"
-	"golang.org/x/tools/go/types/typeutil"
-	"golang.org/x/tools/internal/typesinternal"
-)
-
-// New constructs an Index for the package of type-annotated syntax
-//
-// TODO(adonovan): accept a FileSet too?
-// We regret not requiring one in inspector.New.
-func New(inspect *inspector.Inspector, pkg *types.Package, info *types.Info) *Index {
-	ix := &Index{
-		inspect:  inspect,
-		info:     info,
-		packages: make(map[string]*types.Package),
-		def:      make(map[types.Object]inspector.Cursor),
-		uses:     make(map[types.Object]*uses),
-	}
-
-	addPackage := func(pkg2 *types.Package) {
-		if pkg2 != nil && pkg2 != pkg {
-			ix.packages[pkg2.Path()] = pkg2
-		}
-	}
-
-	for cur := range inspect.Root().Preorder((*ast.ImportSpec)(nil), (*ast.Ident)(nil)) {
-		switch n := cur.Node().(type) {
-		case *ast.ImportSpec:
-			// Index direct imports, including blank ones.
-			if pkgname := info.PkgNameOf(n); pkgname != nil {
-				addPackage(pkgname.Imported())
-			}
-
-		case *ast.Ident:
-			// Index all defining and using identifiers.
-			if obj := info.Defs[n]; obj != nil {
-				ix.def[obj] = cur
-			}
-
-			if obj := info.Uses[n]; obj != nil {
-				// Index indirect dependencies (via fields and methods).
-				if !typesinternal.IsPackageLevel(obj) {
-					addPackage(obj.Pkg())
-				}
-
-				us, ok := ix.uses[obj]
-				if !ok {
-					us = &uses{}
-					us.code = us.initial[:0]
-					ix.uses[obj] = us
-				}
-				delta := cur.Index() - us.last
-				if delta < 0 {
-					panic("non-monotonic")
-				}
-				us.code = binary.AppendUvarint(us.code, uint64(delta))
-				us.last = cur.Index()
-			}
-		}
-	}
-	return ix
-}
-
-// An Index holds an index mapping [types.Object] symbols to their syntax.
-// In effect, it is the inverse of [types.Info].
-type Index struct {
-	inspect  *inspector.Inspector
-	info     *types.Info
-	packages map[string]*types.Package         // packages of all symbols referenced from this package
-	def      map[types.Object]inspector.Cursor // Cursor of *ast.Ident that defines the Object
-	uses     map[types.Object]*uses            // Cursors of *ast.Idents that use the Object
-}
-
-// A uses holds the list of Cursors of Idents that use a given symbol.
-//
-// The Uses map of [types.Info] is substantial, so it pays to compress
-// its inverse mapping here, both in space and in CPU due to reduced
-// allocation. A Cursor is 2 words; a Cursor.Index is 4 bytes; but
-// since Cursors are naturally delivered in ascending order, we can
-// use varint-encoded deltas at a cost of only ~1.7-2.2 bytes per use.
-//
-// Many variables have only one or two uses, so their encoded uses may
-// fit in the 4 bytes of initial, saving further CPU and space
-// essentially for free since the struct's size class is 4 words.
-type uses struct {
-	code    []byte  // varint-encoded deltas of successive Cursor.Index values
-	last    int32   // most recent Cursor.Index value; used during encoding
-	initial [4]byte // use slack in size class as initial space for code
-}
-
-// Uses returns the sequence of Cursors of [*ast.Ident]s in this package
-// that refer to obj. If obj is nil, the sequence is empty.
-func (ix *Index) Uses(obj types.Object) iter.Seq[inspector.Cursor] {
-	return func(yield func(inspector.Cursor) bool) {
-		if uses := ix.uses[obj]; uses != nil {
-			var last int32
-			for code := uses.code; len(code) > 0; {
-				delta, n := binary.Uvarint(code)
-				last += int32(delta)
-				if !yield(ix.inspect.At(last)) {
-					return
-				}
-				code = code[n:]
-			}
-		}
-	}
-}
-
-// Used reports whether any of the specified objects are used, in
-// other words, obj != nil && Uses(obj) is non-empty for some obj in objs.
-//
-// (This treatment of nil allows Used to be called directly on the
-// result of [Index.Object] so that analyzers can conveniently skip
-// packages that don't use a symbol of interest.)
-func (ix *Index) Used(objs ...types.Object) bool {
-	for _, obj := range objs {
-		if obj != nil && ix.uses[obj] != nil {
-			return true
-		}
-	}
-	return false
-}
-
-// Def returns the Cursor of the [*ast.Ident] in this package
-// that declares the specified object, if any.
-func (ix *Index) Def(obj types.Object) (inspector.Cursor, bool) {
-	cur, ok := ix.def[obj]
-	return cur, ok
-}
-
-// Package returns the package of the specified path,
-// or nil if it is not referenced from this package.
-func (ix *Index) Package(path string) *types.Package {
-	return ix.packages[path]
-}
-
-// Object returns the package-level symbol name within the package of
-// the specified path, or nil if the package or symbol does not exist
-// or is not visible from this package.
-func (ix *Index) Object(path, name string) types.Object {
-	if pkg := ix.Package(path); pkg != nil {
-		return pkg.Scope().Lookup(name)
-	}
-	return nil
-}
-
-// Selection returns the named method or field belonging to the
-// package-level type returned by Object(path, typename).
-func (ix *Index) Selection(path, typename, name string) types.Object {
-	if obj := ix.Object(path, typename); obj != nil {
-		if tname, ok := obj.(*types.TypeName); ok {
-			obj, _, _ := types.LookupFieldOrMethod(tname.Type(), true, obj.Pkg(), name)
-			return obj
-		}
-	}
-	return nil
-}
-
-// Calls returns the sequence of cursors for *ast.CallExpr nodes that
-// call the specified callee, as defined by [typeutil.Callee].
-// If callee is nil, the sequence is empty.
-func (ix *Index) Calls(callee types.Object) iter.Seq[inspector.Cursor] {
-	return func(yield func(inspector.Cursor) bool) {
-		for cur := range ix.Uses(callee) {
-			ek, _ := cur.ParentEdge()
-
-			// The call may be of the form f() or x.f(),
-			// optionally with parens; ascend from f to call.
-			//
-			// It is tempting but wrong to use the first
-			// CallExpr ancestor: we have to make sure the
-			// ident is in the CallExpr.Fun position, otherwise
-			// f(f, f) would have two spurious matches.
-			// Avoiding Enclosing is also significantly faster.
-
-			// inverse unparen: f -> (f)
-			for ek == edge.ParenExpr_X {
-				cur = cur.Parent()
-				ek, _ = cur.ParentEdge()
-			}
-
-			// ascend selector: f -> x.f
-			if ek == edge.SelectorExpr_Sel {
-				cur = cur.Parent()
-				ek, _ = cur.ParentEdge()
-			}
-
-			// inverse unparen again
-			for ek == edge.ParenExpr_X {
-				cur = cur.Parent()
-				ek, _ = cur.ParentEdge()
-			}
-
-			// ascend from f or x.f to call
-			if ek == edge.CallExpr_Fun {
-				curCall := cur.Parent()
-				call := curCall.Node().(*ast.CallExpr)
-				if typeutil.Callee(ix.info, call) == callee {
-					if !yield(curCall) {
-						return
-					}
-				}
-			}
-		}
-	}
-}
diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go
index a5cd7e8dbfcb9d..edf0347ec3b337 100644
--- a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go
+++ b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go
@@ -7,7 +7,6 @@
 package typesinternal
 
 import (
-	"go/ast"
 	"go/token"
 	"go/types"
 	"reflect"
@@ -69,34 +68,6 @@ func NameRelativeTo(pkg *types.Package) types.Qualifier {
 	}
 }
 
-// TypeNameFor returns the type name symbol for the specified type, if
-// it is a [*types.Alias], [*types.Named], [*types.TypeParam], or a
-// [*types.Basic] representing a type.
-//
-// For all other types, and for Basic types representing a builtin,
-// constant, or nil, it returns nil. Be careful not to convert the
-// resulting nil pointer to a [types.Object]!
-//
-// If t is the type of a constant, it may be an "untyped" type, which
-// has no TypeName. To access the name of such types (e.g. "untyped
-// int"), use [types.Basic.Name].
-func TypeNameFor(t types.Type) *types.TypeName {
-	switch t := t.(type) {
-	case *types.Alias:
-		return t.Obj()
-	case *types.Named:
-		return t.Obj()
-	case *types.TypeParam:
-		return t.Obj()
-	case *types.Basic:
-		// See issues #71886 and #66890 for some history.
-		if tname, ok := types.Universe.Lookup(t.Name()).(*types.TypeName); ok {
-			return tname
-		}
-	}
-	return nil
-}
-
 // A NamedOrAlias is a [types.Type] that is named (as
 // defined by the spec) and capable of bearing type parameters: it
 // abstracts aliases ([types.Alias]) and defined types
@@ -105,7 +76,7 @@ func TypeNameFor(t types.Type) *types.TypeName {
 // Every type declared by an explicit "type" declaration is a
 // NamedOrAlias. (Built-in type symbols may additionally
 // have type [types.Basic], which is not a NamedOrAlias,
-// though the spec regards them as "named"; see [TypeNameFor].)
+// though the spec regards them as "named".)
 //
 // NamedOrAlias cannot expose the Origin method, because
 // [types.Alias.Origin] and [types.Named.Origin] have different
@@ -113,15 +84,32 @@ func TypeNameFor(t types.Type) *types.TypeName {
 type NamedOrAlias interface {
 	types.Type
 	Obj() *types.TypeName
-	TypeArgs() *types.TypeList
-	TypeParams() *types.TypeParamList
-	SetTypeParams(tparams []*types.TypeParam)
+	// TODO(hxjiang): add method TypeArgs() *types.TypeList after stop supporting go1.22.
 }
 
-var (
-	_ NamedOrAlias = (*types.Alias)(nil)
-	_ NamedOrAlias = (*types.Named)(nil)
-)
+// TypeParams is a light shim around t.TypeParams().
+// (go/types.Alias).TypeParams requires >= 1.23.
+func TypeParams(t NamedOrAlias) *types.TypeParamList {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.TypeParams(t)
+	case *types.Named:
+		return t.TypeParams()
+	}
+	return nil
+}
+
+// TypeArgs is a light shim around t.TypeArgs().
+// (go/types.Alias).TypeArgs requires >= 1.23.
+func TypeArgs(t NamedOrAlias) *types.TypeList {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.TypeArgs(t)
+	case *types.Named:
+		return t.TypeArgs()
+	}
+	return nil
+}
 
 // Origin returns the generic type of the Named or Alias type t if it
 // is instantiated, otherwise it returns t.
@@ -139,17 +127,3 @@ func Origin(t NamedOrAlias) NamedOrAlias {
 func IsPackageLevel(obj types.Object) bool {
 	return obj.Pkg() != nil && obj.Parent() == obj.Pkg().Scope()
 }
-
-// NewTypesInfo returns a *types.Info with all maps populated.
-func NewTypesInfo() *types.Info {
-	return &types.Info{
-		Types:        map[ast.Expr]types.TypeAndValue{},
-		Instances:    map[*ast.Ident]types.Instance{},
-		Defs:         map[*ast.Ident]types.Object{},
-		Uses:         map[*ast.Ident]types.Object{},
-		Implicits:    map[ast.Node]types.Object{},
-		Selections:   map[*ast.SelectorExpr]*types.Selection{},
-		Scopes:       map[ast.Node]*types.Scope{},
-		FileVersions: map[*ast.File]string{},
-	}
-}
diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt
index 6e5783fdd4767a..d349d38c7e787b 100644
--- a/src/cmd/vendor/modules.txt
+++ b/src/cmd/vendor/modules.txt
@@ -16,8 +16,8 @@ github.com/google/pprof/third_party/svgpan
 # github.com/ianlancetaylor/demangle v0.0.0-20240912202439-0a2b6291aafd
 ## explicit; go 1.13
 github.com/ianlancetaylor/demangle
-# golang.org/x/arch v0.18.1-0.20250605182141-b2f4e2807dec
-## explicit; go 1.23.0
+# golang.org/x/arch v0.14.0
+## explicit; go 1.18
 golang.org/x/arch/arm/armasm
 golang.org/x/arch/arm64/arm64asm
 golang.org/x/arch/loong64/loong64asm
@@ -25,10 +25,10 @@ golang.org/x/arch/ppc64/ppc64asm
 golang.org/x/arch/riscv64/riscv64asm
 golang.org/x/arch/s390x/s390xasm
 golang.org/x/arch/x86/x86asm
-# golang.org/x/build v0.0.0-20250606033421-8c8ff6f34a83
-## explicit; go 1.23.0
+# golang.org/x/build v0.0.0-20250211223606-a5e3f75caa63
+## explicit; go 1.22.0
 golang.org/x/build/relnote
-# golang.org/x/mod v0.25.0
+# golang.org/x/mod v0.24.0
 ## explicit; go 1.23.0
 golang.org/x/mod/internal/lazyregexp
 golang.org/x/mod/modfile
@@ -39,17 +39,17 @@ golang.org/x/mod/sumdb/dirhash
 golang.org/x/mod/sumdb/note
 golang.org/x/mod/sumdb/tlog
 golang.org/x/mod/zip
-# golang.org/x/sync v0.15.0
+# golang.org/x/sync v0.12.0
 ## explicit; go 1.23.0
 golang.org/x/sync/errgroup
 golang.org/x/sync/semaphore
-# golang.org/x/sys v0.33.0
+# golang.org/x/sys v0.31.0
 ## explicit; go 1.23.0
 golang.org/x/sys/plan9
 golang.org/x/sys/unix
 golang.org/x/sys/windows
-# golang.org/x/telemetry v0.0.0-20250606142133-60998feb31a8
-## explicit; go 1.23.0
+# golang.org/x/telemetry v0.0.0-20250212145848-75305293b65a
+## explicit; go 1.22.0
 golang.org/x/telemetry
 golang.org/x/telemetry/counter
 golang.org/x/telemetry/counter/countertest
@@ -60,11 +60,11 @@ golang.org/x/telemetry/internal/crashmonitor
 golang.org/x/telemetry/internal/mmap
 golang.org/x/telemetry/internal/telemetry
 golang.org/x/telemetry/internal/upload
-# golang.org/x/term v0.32.0
-## explicit; go 1.23.0
+# golang.org/x/term v0.29.0
+## explicit; go 1.18
 golang.org/x/term
-# golang.org/x/text v0.26.0
-## explicit; go 1.23.0
+# golang.org/x/text v0.22.0
+## explicit; go 1.18
 golang.org/x/text/cases
 golang.org/x/text/internal
 golang.org/x/text/internal/language
@@ -73,7 +73,7 @@ golang.org/x/text/internal/tag
 golang.org/x/text/language
 golang.org/x/text/transform
 golang.org/x/text/unicode/norm
-# golang.org/x/tools v0.34.0
+# golang.org/x/tools v0.31.1-0.20250328151535-a857356d5cc5
 ## explicit; go 1.23.0
 golang.org/x/tools/cmd/bisect
 golang.org/x/tools/cover
@@ -93,7 +93,6 @@ golang.org/x/tools/go/analysis/passes/defers
 golang.org/x/tools/go/analysis/passes/directive
 golang.org/x/tools/go/analysis/passes/errorsas
 golang.org/x/tools/go/analysis/passes/framepointer
-golang.org/x/tools/go/analysis/passes/hostport
 golang.org/x/tools/go/analysis/passes/httpresponse
 golang.org/x/tools/go/analysis/passes/ifaceassert
 golang.org/x/tools/go/analysis/passes/inspect
@@ -118,22 +117,20 @@ golang.org/x/tools/go/analysis/passes/unsafeptr
 golang.org/x/tools/go/analysis/passes/unusedresult
 golang.org/x/tools/go/analysis/passes/waitgroup
 golang.org/x/tools/go/analysis/unitchecker
-golang.org/x/tools/go/ast/edge
 golang.org/x/tools/go/ast/inspector
 golang.org/x/tools/go/cfg
 golang.org/x/tools/go/types/objectpath
 golang.org/x/tools/go/types/typeutil
 golang.org/x/tools/internal/aliases
 golang.org/x/tools/internal/analysisinternal
-golang.org/x/tools/internal/analysisinternal/typeindex
-golang.org/x/tools/internal/astutil
+golang.org/x/tools/internal/astutil/cursor
+golang.org/x/tools/internal/astutil/edge
 golang.org/x/tools/internal/bisect
 golang.org/x/tools/internal/facts
 golang.org/x/tools/internal/fmtstr
 golang.org/x/tools/internal/stdlib
 golang.org/x/tools/internal/typeparams
 golang.org/x/tools/internal/typesinternal
-golang.org/x/tools/internal/typesinternal/typeindex
 golang.org/x/tools/internal/versions
 # rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef
 ## explicit; go 1.20
diff --git a/src/cmd/vet/main.go b/src/cmd/vet/main.go
index 49f4e2f3425694..c9d611f927f494 100644
--- a/src/cmd/vet/main.go
+++ b/src/cmd/vet/main.go
@@ -24,7 +24,6 @@ import (
 	"golang.org/x/tools/go/analysis/passes/directive"
 	"golang.org/x/tools/go/analysis/passes/errorsas"
 	"golang.org/x/tools/go/analysis/passes/framepointer"
-	"golang.org/x/tools/go/analysis/passes/hostport"
 	"golang.org/x/tools/go/analysis/passes/httpresponse"
 	"golang.org/x/tools/go/analysis/passes/ifaceassert"
 	"golang.org/x/tools/go/analysis/passes/loopclosure"
@@ -68,7 +67,6 @@ func main() {
 		errorsas.Analyzer,
 		framepointer.Analyzer,
 		httpresponse.Analyzer,
-		hostport.Analyzer,
 		ifaceassert.Analyzer,
 		loopclosure.Analyzer,
 		lostcancel.Analyzer,
diff --git a/src/cmd/vet/testdata/hostport/hostport.go b/src/cmd/vet/testdata/hostport/hostport.go
deleted file mode 100644
index eb263a82c98637..00000000000000
--- a/src/cmd/vet/testdata/hostport/hostport.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file contains tests for the hostport checker.
-
-package hostport
-
-import (
-	"fmt"
-	"net"
-)
-
-func _(host string, port int) {
-	addr := fmt.Sprintf("%s:%d", host, port) // ERROR "address format .%s:%d. does not work with IPv6"
-	net.Dial("tcp", addr)
-}
diff --git a/src/cmd/vet/vet_test.go b/src/cmd/vet/vet_test.go
index 54eabca938c3a9..2f89784dfcc8b1 100644
--- a/src/cmd/vet/vet_test.go
+++ b/src/cmd/vet/vet_test.go
@@ -57,7 +57,6 @@ func TestVet(t *testing.T) {
 		"copylock",
 		"deadcode",
 		"directive",
-		"hostport",
 		"httpresponse",
 		"lostcancel",
 		"method",
diff --git a/src/compress/flate/inflate_test.go b/src/compress/flate/inflate_test.go
index 064c832d3df654..28a0122ac68cc3 100644
--- a/src/compress/flate/inflate_test.go
+++ b/src/compress/flate/inflate_test.go
@@ -35,7 +35,7 @@ func TestReset(t *testing.T) {
 
 	for i, s := range ss {
 		if s != inflated[i].String() {
-			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, &inflated[i], s)
+			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, inflated[i], s)
 		}
 	}
 }
@@ -92,7 +92,7 @@ func TestResetDict(t *testing.T) {
 
 	for i, s := range ss {
 		if s != inflated[i].String() {
-			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, &inflated[i], s)
+			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, inflated[i], s)
 		}
 	}
 }
diff --git a/src/crypto/cipher/gcm.go b/src/crypto/cipher/gcm.go
index 73493f6cd2311b..5580f96d55a0fb 100644
--- a/src/crypto/cipher/gcm.go
+++ b/src/crypto/cipher/gcm.go
@@ -82,7 +82,7 @@ func newGCM(cipher Block, nonceSize, tagSize int) (AEAD, error) {
 
 // NewGCMWithRandomNonce returns the given cipher wrapped in Galois Counter
 // Mode, with randomly-generated nonces. The cipher must have been created by
-// [crypto/aes.NewCipher].
+// [aes.NewCipher].
 //
 // It generates a random 96-bit nonce, which is prepended to the ciphertext by Seal,
 // and is extracted from the ciphertext by Open. The NonceSize of the AEAD is zero,
diff --git a/src/crypto/crypto.go b/src/crypto/crypto.go
index f79bedf58156c9..2774a6b6815fdf 100644
--- a/src/crypto/crypto.go
+++ b/src/crypto/crypto.go
@@ -198,23 +198,6 @@ type Signer interface {
 	Sign(rand io.Reader, digest []byte, opts SignerOpts) (signature []byte, err error)
 }
 
-// MessageSigner is an interface for an opaque private key that can be used for
-// signing operations where the message is not pre-hashed by the caller.
-// It is a superset of the Signer interface so that it can be passed to APIs
-// which accept Signer, which may try to do an interface upgrade.
-//
-// MessageSigner.SignMessage and MessageSigner.Sign should produce the same
-// result given the same opts. In particular, MessageSigner.SignMessage should
-// only accept a zero opts.HashFunc if the Signer would also accept messages
-// which are not pre-hashed.
-//
-// Implementations which do not provide the pre-hashed Sign API should implement
-// Signer.Sign by always returning an error.
-type MessageSigner interface {
-	Signer
-	SignMessage(rand io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error)
-}
-
 // SignerOpts contains options for signing with a [Signer].
 type SignerOpts interface {
 	// HashFunc returns an identifier for the hash function used to produce
@@ -238,18 +221,3 @@ type Decrypter interface {
 }
 
 type DecrypterOpts any
-
-// SignMessage signs msg with signer. If signer implements [MessageSigner],
-// [MessageSigner.SignMessage] is called directly. Otherwise, msg is hashed
-// with opts.HashFunc() and signed with [Signer.Sign].
-func SignMessage(signer Signer, rand io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error) {
-	if ms, ok := signer.(MessageSigner); ok {
-		return ms.SignMessage(rand, msg, opts)
-	}
-	if opts.HashFunc() != 0 {
-		h := opts.HashFunc().New()
-		h.Write(msg)
-		msg = h.Sum(nil)
-	}
-	return signer.Sign(rand, msg, opts)
-}
diff --git a/src/crypto/crypto_test.go b/src/crypto/crypto_test.go
deleted file mode 100644
index 66babcc2fb0d05..00000000000000
--- a/src/crypto/crypto_test.go
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package crypto_test
-
-import (
-	"bytes"
-	"crypto"
-	"crypto/rand"
-	"crypto/rsa"
-	"crypto/x509"
-	"encoding/pem"
-	"errors"
-	"internal/testenv"
-	"io"
-	"io/fs"
-	"os"
-	"path/filepath"
-	"regexp"
-	"strings"
-	"testing"
-)
-
-type messageSignerOnly struct {
-	k *rsa.PrivateKey
-}
-
-func (s *messageSignerOnly) Public() crypto.PublicKey {
-	return s.k.Public()
-}
-
-func (s *messageSignerOnly) Sign(_ io.Reader, _ []byte, _ crypto.SignerOpts) ([]byte, error) {
-	return nil, errors.New("unimplemented")
-}
-
-func (s *messageSignerOnly) SignMessage(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) {
-	h := opts.HashFunc().New()
-	h.Write(msg)
-	digest := h.Sum(nil)
-	return s.k.Sign(rand, digest, opts)
-}
-
-func TestSignMessage(t *testing.T) {
-	block, _ := pem.Decode([]byte(strings.ReplaceAll(
-		`-----BEGIN RSA TESTING KEY-----
-MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso
-tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE
-89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU
-l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s
-B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59
-3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+
-dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI
-FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J
-aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2
-BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx
-IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/
-fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u
-pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT
-Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl
-u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD
-fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X
-Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE
-k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo
-qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS
-CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ
-XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw
-AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r
-UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0
-2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5
-7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3
------END RSA TESTING KEY-----`, "TESTING KEY", "PRIVATE KEY")))
-	k, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
-
-	msg := []byte("hello :)")
-
-	h := crypto.SHA256.New()
-	h.Write(msg)
-	digest := h.Sum(nil)
-
-	sig, err := crypto.SignMessage(k, rand.Reader, msg, &rsa.PSSOptions{Hash: crypto.SHA256})
-	if err != nil {
-		t.Fatalf("SignMessage failed with Signer: %s", err)
-	}
-	if err := rsa.VerifyPSS(&k.PublicKey, crypto.SHA256, digest, sig, nil); err != nil {
-		t.Errorf("VerifyPSS failed for Signer signature: %s", err)
-	}
-
-	sig, err = crypto.SignMessage(&messageSignerOnly{k}, rand.Reader, msg, &rsa.PSSOptions{Hash: crypto.SHA256})
-	if err != nil {
-		t.Fatalf("SignMessage failed with MessageSigner: %s", err)
-	}
-	if err := rsa.VerifyPSS(&k.PublicKey, crypto.SHA256, digest, sig, nil); err != nil {
-		t.Errorf("VerifyPSS failed for MessageSigner signature: %s", err)
-	}
-}
-
-func TestDisallowedAssemblyInstructions(t *testing.T) {
-	// This test enforces the cryptography assembly policy rule that we do not
-	// use BYTE or WORD instructions, since these instructions can obscure what
-	// the assembly is actually doing. If we do not support specific
-	// instructions in the assembler, we should not be using them until we do.
-	//
-	// Instead of using the output of the 'go tool asm' tool, we take the simple
-	// approach and just search the text of .s files for usage of BYTE and WORD.
-	// We do this because the assembler itself will sometimes insert WORD
-	// instructions for things like function preambles etc.
-
-	boringSigPath := filepath.Join("internal", "boring", "sig")
-
-	matcher, err := regexp.Compile(`(^|;)\s(BYTE|WORD)\s`)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := filepath.WalkDir(filepath.Join(testenv.GOROOT(t), "src/crypto"), func(path string, d fs.DirEntry, err error) error {
-		if err != nil {
-			t.Fatal(err)
-		}
-		if d.IsDir() || !strings.HasSuffix(path, ".s") {
-			return nil
-		}
-		if strings.Contains(path, boringSigPath) {
-			return nil
-		}
-
-		f, err := os.ReadFile(path)
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		i := 1
-		for line := range bytes.Lines(f) {
-			if matcher.Match(line) {
-				t.Errorf("%s:%d assembly contains BYTE or WORD instruction (%q)", path, i, string(line))
-			}
-			i++
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
diff --git a/src/crypto/ecdsa/ecdsa.go b/src/crypto/ecdsa/ecdsa.go
index 9affc1ff786125..cb308b41e9df86 100644
--- a/src/crypto/ecdsa/ecdsa.go
+++ b/src/crypto/ecdsa/ecdsa.go
@@ -23,8 +23,6 @@ import (
 	"crypto/internal/boring"
 	"crypto/internal/boring/bbig"
 	"crypto/internal/fips140/ecdsa"
-	"crypto/internal/fips140/nistec"
-	"crypto/internal/fips140cache"
 	"crypto/internal/fips140hash"
 	"crypto/internal/fips140only"
 	"crypto/internal/randutil"
@@ -41,18 +39,6 @@ import (
 // PublicKey represents an ECDSA public key.
 type PublicKey struct {
 	elliptic.Curve
-
-	// X, Y are the coordinates of the public key point.
-	//
-	// Modifying the raw coordinates can produce invalid keys, and may
-	// invalidate internal optimizations; moreover, [big.Int] methods are not
-	// suitable for operating on cryptographic values. To encode and decode
-	// PublicKey values, use [PublicKey.Bytes] and [ParseUncompressedPublicKey]
-	// or [x509.MarshalPKIXPublicKey] and [x509.ParsePKIXPublicKey]. For ECDH,
-	// use [crypto/ecdh]. For lower-level elliptic curve operations, use a
-	// third-party module like filippo.io/nistec.
-	//
-	// These fields will be deprecated in Go 1.26.
 	X, Y *big.Int
 }
 
@@ -91,94 +77,9 @@ func (pub *PublicKey) Equal(x crypto.PublicKey) bool {
 		pub.Curve == xx.Curve
 }
 
-// ParseUncompressedPublicKey parses a public key encoded as an uncompressed
-// point according to SEC 1, Version 2.0, Section 2.3.3 (also known as the X9.62
-// uncompressed format). It returns an error if the point is not in uncompressed
-// form, is not on the curve, or is the point at infinity.
-//
-// curve must be one of [elliptic.P224], [elliptic.P256], [elliptic.P384], or
-// [elliptic.P521], or ParseUncompressedPublicKey returns an error.
-//
-// ParseUncompressedPublicKey accepts the same format as
-// [ecdh.Curve.NewPublicKey] does for NIST curves, but returns a [PublicKey]
-// instead of an [ecdh.PublicKey].
-//
-// Note that public keys are more commonly encoded in DER (or PEM) format, which
-// can be parsed with [x509.ParsePKIXPublicKey] (and [encoding/pem]).
-func ParseUncompressedPublicKey(curve elliptic.Curve, data []byte) (*PublicKey, error) {
-	if len(data) < 1 || data[0] != 4 {
-		return nil, errors.New("ecdsa: invalid uncompressed public key")
-	}
-	switch curve {
-	case elliptic.P224():
-		return parseUncompressedPublicKey(ecdsa.P224(), curve, data)
-	case elliptic.P256():
-		return parseUncompressedPublicKey(ecdsa.P256(), curve, data)
-	case elliptic.P384():
-		return parseUncompressedPublicKey(ecdsa.P384(), curve, data)
-	case elliptic.P521():
-		return parseUncompressedPublicKey(ecdsa.P521(), curve, data)
-	default:
-		return nil, errors.New("ecdsa: curve not supported by ParseUncompressedPublicKey")
-	}
-}
-
-func parseUncompressedPublicKey[P ecdsa.Point[P]](c *ecdsa.Curve[P], curve elliptic.Curve, data []byte) (*PublicKey, error) {
-	k, err := ecdsa.NewPublicKey(c, data)
-	if err != nil {
-		return nil, err
-	}
-	return publicKeyFromFIPS(curve, k)
-}
-
-// Bytes encodes the public key as an uncompressed point according to SEC 1,
-// Version 2.0, Section 2.3.3 (also known as the X9.62 uncompressed format).
-// It returns an error if the public key is invalid.
-//
-// PublicKey.Curve must be one of [elliptic.P224], [elliptic.P256],
-// [elliptic.P384], or [elliptic.P521], or Bytes returns an error.
-//
-// Bytes returns the same format as [ecdh.PublicKey.Bytes] does for NIST curves.
-//
-// Note that public keys are more commonly encoded in DER (or PEM) format, which
-// can be generated with [x509.MarshalPKIXPublicKey] (and [encoding/pem]).
-func (pub *PublicKey) Bytes() ([]byte, error) {
-	switch pub.Curve {
-	case elliptic.P224():
-		return publicKeyBytes(ecdsa.P224(), pub)
-	case elliptic.P256():
-		return publicKeyBytes(ecdsa.P256(), pub)
-	case elliptic.P384():
-		return publicKeyBytes(ecdsa.P384(), pub)
-	case elliptic.P521():
-		return publicKeyBytes(ecdsa.P521(), pub)
-	default:
-		return nil, errors.New("ecdsa: curve not supported by PublicKey.Bytes")
-	}
-}
-
-func publicKeyBytes[P ecdsa.Point[P]](c *ecdsa.Curve[P], pub *PublicKey) ([]byte, error) {
-	k, err := publicKeyToFIPS(c, pub)
-	if err != nil {
-		return nil, err
-	}
-	return k.Bytes(), nil
-}
-
 // PrivateKey represents an ECDSA private key.
 type PrivateKey struct {
 	PublicKey
-
-	// D is the private scalar value.
-	//
-	// Modifying the raw value can produce invalid keys, and may
-	// invalidate internal optimizations; moreover, [big.Int] methods are not
-	// suitable for operating on cryptographic values. To encode and decode
-	// PrivateKey values, use [PrivateKey.Bytes] and [ParseRawPrivateKey]
-	// or [x509.MarshalPKCS8PrivateKey] and [x509.ParsePKCS8PrivateKey].
-	// For ECDH, use [crypto/ecdh].
-	//
-	// This field will be deprecated in Go 1.26.
 	D *big.Int
 }
 
@@ -232,82 +133,6 @@ func bigIntEqual(a, b *big.Int) bool {
 	return subtle.ConstantTimeCompare(a.Bytes(), b.Bytes()) == 1
 }
 
-// ParseRawPrivateKey parses a private key encoded as a fixed-length big-endian
-// integer, according to SEC 1, Version 2.0, Section 2.3.6 (sometimes referred
-// to as the raw format). It returns an error if the value is not reduced modulo
-// the curve's order, or if it's zero.
-//
-// curve must be one of [elliptic.P224], [elliptic.P256], [elliptic.P384], or
-// [elliptic.P521], or ParseRawPrivateKey returns an error.
-//
-// ParseRawPrivateKey accepts the same format as [ecdh.Curve.NewPrivateKey] does
-// for NIST curves, but returns a [PrivateKey] instead of an [ecdh.PrivateKey].
-//
-// Note that private keys are more commonly encoded in ASN.1 or PKCS#8 format,
-// which can be parsed with [x509.ParseECPrivateKey] or
-// [x509.ParsePKCS8PrivateKey] (and [encoding/pem]).
-func ParseRawPrivateKey(curve elliptic.Curve, data []byte) (*PrivateKey, error) {
-	switch curve {
-	case elliptic.P224():
-		return parseRawPrivateKey(ecdsa.P224(), nistec.NewP224Point, curve, data)
-	case elliptic.P256():
-		return parseRawPrivateKey(ecdsa.P256(), nistec.NewP256Point, curve, data)
-	case elliptic.P384():
-		return parseRawPrivateKey(ecdsa.P384(), nistec.NewP384Point, curve, data)
-	case elliptic.P521():
-		return parseRawPrivateKey(ecdsa.P521(), nistec.NewP521Point, curve, data)
-	default:
-		return nil, errors.New("ecdsa: curve not supported by ParseRawPrivateKey")
-	}
-}
-
-func parseRawPrivateKey[P ecdsa.Point[P]](c *ecdsa.Curve[P], newPoint func() P, curve elliptic.Curve, data []byte) (*PrivateKey, error) {
-	q, err := newPoint().ScalarBaseMult(data)
-	if err != nil {
-		return nil, err
-	}
-	k, err := ecdsa.NewPrivateKey(c, data, q.Bytes())
-	if err != nil {
-		return nil, err
-	}
-	return privateKeyFromFIPS(curve, k)
-}
-
-// Bytes encodes the private key as a fixed-length big-endian integer according
-// to SEC 1, Version 2.0, Section 2.3.6 (sometimes referred to as the raw
-// format). It returns an error if the private key is invalid.
-//
-// PrivateKey.Curve must be one of [elliptic.P224], [elliptic.P256],
-// [elliptic.P384], or [elliptic.P521], or Bytes returns an error.
-//
-// Bytes returns the same format as [ecdh.PrivateKey.Bytes] does for NIST curves.
-//
-// Note that private keys are more commonly encoded in ASN.1 or PKCS#8 format,
-// which can be generated with [x509.MarshalECPrivateKey] or
-// [x509.MarshalPKCS8PrivateKey] (and [encoding/pem]).
-func (priv *PrivateKey) Bytes() ([]byte, error) {
-	switch priv.Curve {
-	case elliptic.P224():
-		return privateKeyBytes(ecdsa.P224(), priv)
-	case elliptic.P256():
-		return privateKeyBytes(ecdsa.P256(), priv)
-	case elliptic.P384():
-		return privateKeyBytes(ecdsa.P384(), priv)
-	case elliptic.P521():
-		return privateKeyBytes(ecdsa.P521(), priv)
-	default:
-		return nil, errors.New("ecdsa: curve not supported by PrivateKey.Bytes")
-	}
-}
-
-func privateKeyBytes[P ecdsa.Point[P]](c *ecdsa.Curve[P], priv *PrivateKey) ([]byte, error) {
-	k, err := privateKeyToFIPS(c, priv)
-	if err != nil {
-		return nil, err
-	}
-	return k.Bytes(), nil
-}
-
 // Sign signs a hash (which should be the result of hashing a larger message
 // with opts.HashFunc()) using the private key, priv. If the hash is longer than
 // the bit-length of the private key's curve order, the hash will be truncated
@@ -413,6 +238,9 @@ func signFIPS[P ecdsa.Point[P]](c *ecdsa.Curve[P], priv *PrivateKey, rand io.Rea
 	if fips140only.Enabled && !fips140only.ApprovedRandomReader(rand) {
 		return nil, errors.New("crypto/ecdsa: only crypto/rand.Reader is allowed in FIPS 140-only mode")
 	}
+	// privateKeyToFIPS is very slow in FIPS mode because it performs a
+	// Sign+Verify cycle per FIPS 140-3 IG 10.3.A. We should find a way to cache
+	// it or attach it to the PrivateKey.
 	k, err := privateKeyToFIPS(c, priv)
 	if err != nil {
 		return nil, err
@@ -573,32 +401,12 @@ func publicKeyToFIPS[P ecdsa.Point[P]](c *ecdsa.Curve[P], pub *PublicKey) (*ecds
 	return ecdsa.NewPublicKey(c, Q)
 }
 
-var privateKeyCache fips140cache.Cache[PrivateKey, ecdsa.PrivateKey]
-
 func privateKeyToFIPS[P ecdsa.Point[P]](c *ecdsa.Curve[P], priv *PrivateKey) (*ecdsa.PrivateKey, error) {
 	Q, err := pointFromAffine(priv.Curve, priv.X, priv.Y)
 	if err != nil {
 		return nil, err
 	}
-	return privateKeyCache.Get(priv, func() (*ecdsa.PrivateKey, error) {
-		return ecdsa.NewPrivateKey(c, priv.D.Bytes(), Q)
-	}, func(k *ecdsa.PrivateKey) bool {
-		return subtle.ConstantTimeCompare(k.PublicKey().Bytes(), Q) == 1 &&
-			leftPadBytesEqual(k.Bytes(), priv.D.Bytes())
-	})
-}
-
-func leftPadBytesEqual(a, b []byte) bool {
-	if len(a) < len(b) {
-		a, b = b, a
-	}
-	if len(a) > len(b) {
-		x := make([]byte, 0, 66 /* enough for a P-521 private key */)
-		x = append(x, make([]byte, len(a)-len(b))...)
-		x = append(x, b...)
-		b = x
-	}
-	return subtle.ConstantTimeCompare(a, b) == 1
+	return ecdsa.NewPrivateKey(c, priv.D.Bytes(), Q)
 }
 
 // pointFromAffine is used to convert the PublicKey to a nistec SetBytes input.
diff --git a/src/crypto/ecdsa/ecdsa_test.go b/src/crypto/ecdsa/ecdsa_test.go
index 87e74f2a0e9d6a..84b127dc0ff962 100644
--- a/src/crypto/ecdsa/ecdsa_test.go
+++ b/src/crypto/ecdsa/ecdsa_test.go
@@ -546,161 +546,6 @@ func testRFC6979(t *testing.T, curve elliptic.Curve, D, X, Y, msg, r, s string)
 	}
 }
 
-func TestParseAndBytesRoundTrip(t *testing.T) {
-	testAllCurves(t, testParseAndBytesRoundTrip)
-}
-
-func testParseAndBytesRoundTrip(t *testing.T, curve elliptic.Curve) {
-	if strings.HasSuffix(t.Name(), "/Generic") {
-		t.Skip("these methods don't support generic curves")
-	}
-	priv, _ := GenerateKey(curve, rand.Reader)
-
-	b, err := priv.PublicKey.Bytes()
-	if err != nil {
-		t.Fatalf("failed to serialize private key's public key: %v", err)
-	}
-	if b[0] != 4 {
-		t.Fatalf("public key bytes doesn't start with 0x04 (uncompressed format)")
-	}
-	p, err := ParseUncompressedPublicKey(curve, b)
-	if err != nil {
-		t.Fatalf("failed to parse private key's public key: %v", err)
-	}
-	if !priv.PublicKey.Equal(p) {
-		t.Errorf("parsed private key's public key doesn't match original")
-	}
-
-	bk, err := priv.Bytes()
-	if err != nil {
-		t.Fatalf("failed to serialize private key: %v", err)
-	}
-	k, err := ParseRawPrivateKey(curve, bk)
-	if err != nil {
-		t.Fatalf("failed to parse private key: %v", err)
-	}
-	if !priv.Equal(k) {
-		t.Errorf("parsed private key doesn't match original")
-	}
-
-	if curve != elliptic.P224() {
-		privECDH, err := priv.ECDH()
-		if err != nil {
-			t.Fatalf("failed to convert private key to ECDH: %v", err)
-		}
-
-		pp, err := privECDH.Curve().NewPublicKey(b)
-		if err != nil {
-			t.Fatalf("failed to parse with ECDH: %v", err)
-		}
-		if !privECDH.PublicKey().Equal(pp) {
-			t.Errorf("parsed ECDH public key doesn't match original")
-		}
-		if !bytes.Equal(b, pp.Bytes()) {
-			t.Errorf("encoded ECDH public key doesn't match Bytes")
-		}
-
-		kk, err := privECDH.Curve().NewPrivateKey(bk)
-		if err != nil {
-			t.Fatalf("failed to parse with ECDH: %v", err)
-		}
-		if !privECDH.Equal(kk) {
-			t.Errorf("parsed ECDH private key doesn't match original")
-		}
-		if !bytes.Equal(bk, kk.Bytes()) {
-			t.Errorf("encoded ECDH private key doesn't match Bytes")
-		}
-	}
-}
-
-func TestInvalidPublicKeys(t *testing.T) {
-	testAllCurves(t, testInvalidPublicKeys)
-}
-
-func testInvalidPublicKeys(t *testing.T, curve elliptic.Curve) {
-	t.Run("Infinity", func(t *testing.T) {
-		k := &PublicKey{Curve: curve, X: big.NewInt(0), Y: big.NewInt(0)}
-		if _, err := k.Bytes(); err == nil {
-			t.Errorf("PublicKey.Bytes accepted infinity")
-		}
-
-		b := []byte{0}
-		if _, err := ParseUncompressedPublicKey(curve, b); err == nil {
-			t.Errorf("ParseUncompressedPublicKey accepted infinity")
-		}
-		b = make([]byte, 1+2*(curve.Params().BitSize+7)/8)
-		b[0] = 4
-		if _, err := ParseUncompressedPublicKey(curve, b); err == nil {
-			t.Errorf("ParseUncompressedPublicKey accepted infinity")
-		}
-	})
-	t.Run("NotOnCurve", func(t *testing.T) {
-		k, _ := GenerateKey(curve, rand.Reader)
-		k.X = k.X.Add(k.X, big.NewInt(1))
-		if _, err := k.Bytes(); err == nil {
-			t.Errorf("PublicKey.Bytes accepted not on curve")
-		}
-
-		b := make([]byte, 1+2*(curve.Params().BitSize+7)/8)
-		b[0] = 4
-		k.X.FillBytes(b[1 : 1+len(b)/2])
-		k.Y.FillBytes(b[1+len(b)/2:])
-		if _, err := ParseUncompressedPublicKey(curve, b); err == nil {
-			t.Errorf("ParseUncompressedPublicKey accepted not on curve")
-		}
-	})
-	t.Run("Compressed", func(t *testing.T) {
-		k, _ := GenerateKey(curve, rand.Reader)
-		b := elliptic.MarshalCompressed(curve, k.X, k.Y)
-		if _, err := ParseUncompressedPublicKey(curve, b); err == nil {
-			t.Errorf("ParseUncompressedPublicKey accepted compressed key")
-		}
-	})
-}
-
-func TestInvalidPrivateKeys(t *testing.T) {
-	testAllCurves(t, testInvalidPrivateKeys)
-}
-
-func testInvalidPrivateKeys(t *testing.T, curve elliptic.Curve) {
-	t.Run("Zero", func(t *testing.T) {
-		k := &PrivateKey{PublicKey{curve, big.NewInt(0), big.NewInt(0)}, big.NewInt(0)}
-		if _, err := k.Bytes(); err == nil {
-			t.Errorf("PrivateKey.Bytes accepted zero key")
-		}
-
-		b := make([]byte, (curve.Params().BitSize+7)/8)
-		if _, err := ParseRawPrivateKey(curve, b); err == nil {
-			t.Errorf("ParseRawPrivateKey accepted zero key")
-		}
-	})
-	t.Run("Overflow", func(t *testing.T) {
-		d := new(big.Int).Add(curve.Params().N, big.NewInt(5))
-		x, y := curve.ScalarBaseMult(d.Bytes())
-		k := &PrivateKey{PublicKey{curve, x, y}, d}
-		if _, err := k.Bytes(); err == nil {
-			t.Errorf("PrivateKey.Bytes accepted overflow key")
-		}
-
-		b := make([]byte, (curve.Params().BitSize+7)/8)
-		k.D.FillBytes(b)
-		if _, err := ParseRawPrivateKey(curve, b); err == nil {
-			t.Errorf("ParseRawPrivateKey accepted overflow key")
-		}
-	})
-	t.Run("Length", func(t *testing.T) {
-		b := []byte{1, 2, 3}
-		if _, err := ParseRawPrivateKey(curve, b); err == nil {
-			t.Errorf("ParseRawPrivateKey accepted short key")
-		}
-
-		b = append(b, make([]byte, (curve.Params().BitSize+7)/8)...)
-		if _, err := ParseRawPrivateKey(curve, b); err == nil {
-			t.Errorf("ParseRawPrivateKey accepted long key")
-		}
-	})
-}
-
 func benchmarkAllCurves(b *testing.B, f func(*testing.B, elliptic.Curve)) {
 	tests := []struct {
 		name  string
diff --git a/src/crypto/ed25519/ed25519.go b/src/crypto/ed25519/ed25519.go
index 0e268139587075..c1f8ff784e4a5c 100644
--- a/src/crypto/ed25519/ed25519.go
+++ b/src/crypto/ed25519/ed25519.go
@@ -18,7 +18,6 @@ package ed25519
 import (
 	"crypto"
 	"crypto/internal/fips140/ed25519"
-	"crypto/internal/fips140cache"
 	"crypto/internal/fips140only"
 	cryptorand "crypto/rand"
 	"crypto/subtle"
@@ -79,10 +78,6 @@ func (priv PrivateKey) Seed() []byte {
 	return append(make([]byte, 0, SeedSize), priv[:SeedSize]...)
 }
 
-// privateKeyCache uses a pointer to the first byte of underlying storage as a
-// key, because [PrivateKey] is a slice header passed around by value.
-var privateKeyCache fips140cache.Cache[byte, ed25519.PrivateKey]
-
 // Sign signs the given message with priv. rand is ignored and can be nil.
 //
 // If opts.HashFunc() is [crypto.SHA512], the pre-hashed variant Ed25519ph is used
@@ -93,11 +88,10 @@ var privateKeyCache fips140cache.Cache[byte, ed25519.PrivateKey]
 // A value of type [Options] can be used as opts, or crypto.Hash(0) or
 // crypto.SHA512 directly to select plain Ed25519 or Ed25519ph, respectively.
 func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) {
-	k, err := privateKeyCache.Get(&priv[0], func() (*ed25519.PrivateKey, error) {
-		return ed25519.NewPrivateKey(priv)
-	}, func(k *ed25519.PrivateKey) bool {
-		return subtle.ConstantTimeCompare(priv, k.Bytes()) == 1
-	})
+	// NewPrivateKey is very slow in FIPS mode because it performs a
+	// Sign+Verify cycle per FIPS 140-3 IG 10.3.A. We should find a way to cache
+	// it or attach it to the PrivateKey.
+	k, err := ed25519.NewPrivateKey(priv)
 	if err != nil {
 		return nil, err
 	}
@@ -186,11 +180,10 @@ func Sign(privateKey PrivateKey, message []byte) []byte {
 }
 
 func sign(signature []byte, privateKey PrivateKey, message []byte) {
-	k, err := privateKeyCache.Get(&privateKey[0], func() (*ed25519.PrivateKey, error) {
-		return ed25519.NewPrivateKey(privateKey)
-	}, func(k *ed25519.PrivateKey) bool {
-		return subtle.ConstantTimeCompare(privateKey, k.Bytes()) == 1
-	})
+	// NewPrivateKey is very slow in FIPS mode because it performs a
+	// Sign+Verify cycle per FIPS 140-3 IG 10.3.A. We should find a way to cache
+	// it or attach it to the PrivateKey.
+	k, err := ed25519.NewPrivateKey(privateKey)
 	if err != nil {
 		panic("ed25519: bad private key: " + err.Error())
 	}
diff --git a/src/crypto/ed25519/ed25519_test.go b/src/crypto/ed25519/ed25519_test.go
index c8a23e3246a949..87d0132df11d8b 100644
--- a/src/crypto/ed25519/ed25519_test.go
+++ b/src/crypto/ed25519/ed25519_test.go
@@ -369,10 +369,10 @@ func TestMalleability(t *testing.T) {
 
 func TestAllocations(t *testing.T) {
 	cryptotest.SkipTestAllocations(t)
-	seed := make([]byte, SeedSize)
-	priv := NewKeyFromSeed(seed)
 	if allocs := testing.AllocsPerRun(100, func() {
+		seed := make([]byte, SeedSize)
 		message := []byte("Hello, world!")
+		priv := NewKeyFromSeed(seed)
 		pub := priv.Public().(PublicKey)
 		signature := Sign(priv, message)
 		if !Verify(pub, message, signature) {
diff --git a/src/crypto/fips140/fips140.go b/src/crypto/fips140/fips140.go
index 830b6f80af5f22..1c4036d5e74735 100644
--- a/src/crypto/fips140/fips140.go
+++ b/src/crypto/fips140/fips140.go
@@ -7,8 +7,11 @@ package fips140
 import (
 	"crypto/internal/fips140"
 	"crypto/internal/fips140/check"
+	"internal/godebug"
 )
 
+var fips140GODEBUG = godebug.New("fips140")
+
 // Enabled reports whether the cryptography libraries are operating in FIPS
 // 140-3 mode.
 //
@@ -18,6 +21,11 @@ import (
 //
 // This can't be changed after the program has started.
 func Enabled() bool {
+	godebug := fips140GODEBUG.Value()
+	currentlyEnabled := godebug == "on" || godebug == "only" || godebug == "debug"
+	if currentlyEnabled != fips140.Enabled {
+		panic("crypto/fips140: GODEBUG setting changed after program start")
+	}
 	if fips140.Enabled && !check.Verified {
 		panic("crypto/fips140: FIPS 140-3 mode enabled, but integrity check didn't pass")
 	}
diff --git a/src/crypto/fips140/fips140_test.go b/src/crypto/fips140/fips140_test.go
deleted file mode 100644
index c038add94762d7..00000000000000
--- a/src/crypto/fips140/fips140_test.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package fips140
-
-import (
-	"internal/godebug"
-	"os"
-	"testing"
-)
-
-func TestImmutableGODEBUG(t *testing.T) {
-	defer func(v string) { os.Setenv("GODEBUG", v) }(os.Getenv("GODEBUG"))
-
-	fips140Enabled := Enabled()
-	fips140Setting := godebug.New("fips140")
-	fips140SettingValue := fips140Setting.Value()
-
-	os.Setenv("GODEBUG", "fips140=off")
-	if Enabled() != fips140Enabled {
-		t.Errorf("Enabled() changed after setting GODEBUG=fips140=off")
-	}
-	if fips140Setting.Value() != fips140SettingValue {
-		t.Errorf("fips140Setting.Value() changed after setting GODEBUG=fips140=off")
-	}
-
-	os.Setenv("GODEBUG", "fips140=on")
-	if Enabled() != fips140Enabled {
-		t.Errorf("Enabled() changed after setting GODEBUG=fips140=on")
-	}
-	if fips140Setting.Value() != fips140SettingValue {
-		t.Errorf("fips140Setting.Value() changed after setting GODEBUG=fips140=on")
-	}
-
-	os.Setenv("GODEBUG", "fips140=")
-	if Enabled() != fips140Enabled {
-		t.Errorf("Enabled() changed after setting GODEBUG=fips140=")
-	}
-	if fips140Setting.Value() != fips140SettingValue {
-		t.Errorf("fips140Setting.Value() changed after setting GODEBUG=fips140=")
-	}
-
-	os.Setenv("GODEBUG", "")
-	if Enabled() != fips140Enabled {
-		t.Errorf("Enabled() changed after setting GODEBUG=")
-	}
-	if fips140Setting.Value() != fips140SettingValue {
-		t.Errorf("fips140Setting.Value() changed after setting GODEBUG=")
-	}
-}
diff --git a/src/crypto/hmac/hmac_test.go b/src/crypto/hmac/hmac_test.go
index 9b7eee7bf7873e..7accad763244a1 100644
--- a/src/crypto/hmac/hmac_test.go
+++ b/src/crypto/hmac/hmac_test.go
@@ -632,18 +632,6 @@ func TestHMACHash(t *testing.T) {
 	}
 }
 
-func TestExtraMethods(t *testing.T) {
-	h := New(sha256.New, []byte("key"))
-	cryptotest.NoExtraMethods(t, maybeCloner(h))
-}
-
-func maybeCloner(h hash.Hash) any {
-	if c, ok := h.(hash.Cloner); ok {
-		return &c
-	}
-	return &h
-}
-
 func BenchmarkHMACSHA256_1K(b *testing.B) {
 	key := make([]byte, 32)
 	buf := make([]byte, 1024)
diff --git a/src/crypto/internal/cryptotest/hash.go b/src/crypto/internal/cryptotest/hash.go
index f00e9c80d3c86a..f03623dfa268dd 100644
--- a/src/crypto/internal/cryptotest/hash.go
+++ b/src/crypto/internal/cryptotest/hash.go
@@ -1,14 +1,12 @@
-// Copyright 2025 The Go Authors. All rights reserved.
+// Copyright 2024 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
 package cryptotest
 
 import (
-	"crypto/internal/boring"
-	"crypto/internal/fips140"
+	"bytes"
 	"hash"
-	"internal/testhash"
 	"io"
 	"math/rand"
 	"testing"
@@ -20,11 +18,168 @@ type MakeHash func() hash.Hash
 // TestHash performs a set of tests on hash.Hash implementations, checking the
 // documented requirements of Write, Sum, Reset, Size, and BlockSize.
 func TestHash(t *testing.T, mh MakeHash) {
-	if boring.Enabled || fips140.Version() == "v1.0" {
-		testhash.TestHashWithoutClone(t, testhash.MakeHash(mh))
-		return
+
+	// Test that Sum returns an appended digest matching output of Size
+	t.Run("SumAppend", func(t *testing.T) {
+		h := mh()
+		rng := newRandReader(t)
+
+		emptyBuff := []byte("")
+		shortBuff := []byte("a")
+		longBuff := make([]byte, h.BlockSize()+1)
+		rng.Read(longBuff)
+
+		// Set of example strings to append digest to
+		prefixes := [][]byte{nil, emptyBuff, shortBuff, longBuff}
+
+		// Go to each string and check digest gets appended to and is correct size.
+		for _, prefix := range prefixes {
+			h.Reset()
+
+			sum := getSum(t, h, prefix) // Append new digest to prefix
+
+			// Check that Sum didn't alter the prefix
+			if !bytes.Equal(sum[:len(prefix)], prefix) {
+				t.Errorf("Sum alters passed buffer instead of appending; got %x, want %x", sum[:len(prefix)], prefix)
+			}
+
+			// Check that the appended sum wasn't affected by the prefix
+			if expectedSum := getSum(t, h, nil); !bytes.Equal(sum[len(prefix):], expectedSum) {
+				t.Errorf("Sum behavior affected by data in the input buffer; got %x, want %x", sum[len(prefix):], expectedSum)
+			}
+
+			// Check size of append
+			if got, want := len(sum)-len(prefix), h.Size(); got != want {
+				t.Errorf("Sum appends number of bytes != Size; got %v , want %v", got, want)
+			}
+		}
+	})
+
+	// Test that Hash.Write never returns error.
+	t.Run("WriteWithoutError", func(t *testing.T) {
+		h := mh()
+		rng := newRandReader(t)
+
+		emptySlice := []byte("")
+		shortSlice := []byte("a")
+		longSlice := make([]byte, h.BlockSize()+1)
+		rng.Read(longSlice)
+
+		// Set of example strings to append digest to
+		slices := [][]byte{emptySlice, shortSlice, longSlice}
+
+		for _, slice := range slices {
+			writeToHash(t, h, slice) // Writes and checks Write doesn't error
+		}
+	})
+
+	t.Run("ResetState", func(t *testing.T) {
+		h := mh()
+		rng := newRandReader(t)
+
+		emptySum := getSum(t, h, nil)
+
+		// Write to hash and then Reset it and see if Sum is same as emptySum
+		writeEx := make([]byte, h.BlockSize())
+		rng.Read(writeEx)
+		writeToHash(t, h, writeEx)
+		h.Reset()
+		resetSum := getSum(t, h, nil)
+
+		if !bytes.Equal(emptySum, resetSum) {
+			t.Errorf("Reset hash yields different Sum than new hash; got %x, want %x", emptySum, resetSum)
+		}
+	})
+
+	// Check that Write isn't reading from beyond input slice's bounds
+	t.Run("OutOfBoundsRead", func(t *testing.T) {
+		h := mh()
+		blockSize := h.BlockSize()
+		rng := newRandReader(t)
+
+		msg := make([]byte, blockSize)
+		rng.Read(msg)
+		writeToHash(t, h, msg)
+		expectedDigest := getSum(t, h, nil) // Record control digest
+
+		h.Reset()
+
+		// Make a buffer with msg in the middle and data on either end
+		buff := make([]byte, blockSize*3)
+		endOfPrefix, startOfSuffix := blockSize, blockSize*2
+
+		copy(buff[endOfPrefix:startOfSuffix], msg)
+		rng.Read(buff[:endOfPrefix])
+		rng.Read(buff[startOfSuffix:])
+
+		writeToHash(t, h, buff[endOfPrefix:startOfSuffix])
+		testDigest := getSum(t, h, nil)
+
+		if !bytes.Equal(testDigest, expectedDigest) {
+			t.Errorf("Write affected by data outside of input slice bounds; got %x, want %x", testDigest, expectedDigest)
+		}
+	})
+
+	// Test that multiple calls to Write is stateful
+	t.Run("StatefulWrite", func(t *testing.T) {
+		h := mh()
+		rng := newRandReader(t)
+
+		prefix, suffix := make([]byte, h.BlockSize()), make([]byte, h.BlockSize())
+		rng.Read(prefix)
+		rng.Read(suffix)
+
+		// Write prefix then suffix sequentially and record resulting hash
+		writeToHash(t, h, prefix)
+		writeToHash(t, h, suffix)
+		serialSum := getSum(t, h, nil)
+
+		h.Reset()
+
+		// Write prefix and suffix at the same time and record resulting hash
+		writeToHash(t, h, append(prefix, suffix...))
+		compositeSum := getSum(t, h, nil)
+
+		// Check that sequential writing results in the same as writing all at once
+		if !bytes.Equal(compositeSum, serialSum) {
+			t.Errorf("two successive Write calls resulted in a different Sum than a single one; got %x, want %x", compositeSum, serialSum)
+		}
+	})
+}
+
+// Helper function for writing. Verifies that Write does not error.
+func writeToHash(t *testing.T, h hash.Hash, p []byte) {
+	t.Helper()
+
+	before := make([]byte, len(p))
+	copy(before, p)
+
+	n, err := h.Write(p)
+	if err != nil || n != len(p) {
+		t.Errorf("Write returned error; got (%v, %v), want (nil, %v)", err, n, len(p))
+	}
+
+	if !bytes.Equal(p, before) {
+		t.Errorf("Write modified input slice; got %x, want %x", p, before)
+	}
+}
+
+// Helper function for getting Sum. Checks that Sum doesn't change hash state.
+func getSum(t *testing.T, h hash.Hash, buff []byte) []byte {
+	t.Helper()
+
+	testBuff := make([]byte, len(buff))
+	copy(testBuff, buff)
+
+	sum := h.Sum(buff)
+	testSum := h.Sum(testBuff)
+
+	// Check that Sum doesn't change underlying hash state
+	if !bytes.Equal(sum, testSum) {
+		t.Errorf("successive calls to Sum yield different results; got %x, want %x", sum, testSum)
 	}
-	testhash.TestHash(t, testhash.MakeHash(mh))
+
+	return sum
 }
 
 func newRandReader(t *testing.T) io.Reader {
diff --git a/src/crypto/internal/cryptotest/implementations.go b/src/crypto/internal/cryptotest/implementations.go
index f0ba665403e4e2..3fa730459050f6 100644
--- a/src/crypto/internal/cryptotest/implementations.go
+++ b/src/crypto/internal/cryptotest/implementations.go
@@ -7,7 +7,6 @@ package cryptotest
 import (
 	"crypto/internal/boring"
 	"crypto/internal/impl"
-	"internal/goarch"
 	"internal/goos"
 	"internal/testenv"
 	"testing"
@@ -36,14 +35,15 @@ func TestAllImplementations(t *testing.T, pkg string, f func(t *testing.T)) {
 			t.Run(name, f)
 		} else {
 			t.Run(name, func(t *testing.T) {
-				// Report an error if we're on the most capable builder for the
-				// architecture and the builder can't test this implementation.
-				flagship := goos.GOOS == "linux" && goarch.GOARCH != "arm64" ||
-					goos.GOOS == "darwin" && goarch.GOARCH == "arm64"
-				if testenv.Builder() != "" && flagship {
+				// Report an error if we're on Linux CI (assumed to be the most
+				// consistent) and the builder can't test this implementation.
+				if testenv.Builder() != "" && goos.GOOS == "linux" {
 					if name == "SHA-NI" {
 						t.Skip("known issue, see golang.org/issue/69592")
 					}
+					if name == "Armv8.2" {
+						t.Skip("known issue, see golang.org/issue/69593")
+					}
 					t.Error("builder doesn't support CPU features needed to test this implementation")
 				} else {
 					t.Skip("implementation not supported")
diff --git a/src/crypto/internal/fips140/aes/aes_arm64.s b/src/crypto/internal/fips140/aes/aes_arm64.s
index 1e885595404ed3..192d0df8965ba9 100644
--- a/src/crypto/internal/fips140/aes/aes_arm64.s
+++ b/src/crypto/internal/fips140/aes/aes_arm64.s
@@ -134,7 +134,7 @@ TEXT ·expandKeyAsm(SB),NOSPLIT,$0
 	MOVW	$0x1b, R14
 ks128Loop:
 		VMOV	R7, V2.S[0]
-		VTBL	V3.B16, [V2.B16], V2.B16
+		WORD	$0x4E030042       // TBL V3.B16, [V2.B16], V2.B16
 		AESE	V0.B16, V2.B16    // Use AES to compute the SBOX
 		EORW	R13, R4
 		LSLW	$1, R13           // Compute next Rcon
@@ -180,7 +180,7 @@ ks192:
 ks192Loop:
 		STPW.P	(R6, R7), 8(R10)
 		VMOV	R7, V2.S[0]
-		VTBL	V3.B16, [V2.B16], V2.B16
+		WORD	$0x4E030042 //TBL	V3.B16, [V2.B16], V2.B16
 		AESE	V0.B16, V2.B16
 		EORW	R13, R2
 		LSLW	$1, R13
@@ -233,7 +233,7 @@ ks256Loop:
 		STPW.P	(R4, R5), 8(R10)
 		STPW.P	(R6, R7), 8(R10)
 		VMOV	R7, V2.S[0]
-		VTBL	V3.B16, [V2.B16], V2.B16
+		WORD	$0x4E030042 //TBL	V3.B16, [V2.B16], V2.B16
 		AESE	V0.B16, V2.B16
 		EORW	R13, R0
 		LSLW	$1, R13
@@ -244,7 +244,7 @@ ks256Loop:
 		EORW	R1, R2
 		EORW	R2, R3
 		VMOV	R3, V2.S[0]
-		VTBL	V4.B16, [V2.B16], V2.B16
+		WORD	$0x4E040042 //TBL	V3.B16, [V2.B16], V2.B16
 		AESE	V0.B16, V2.B16
 		VMOV	V2.S[0], R9
 		EORW	R9, R4
diff --git a/src/crypto/internal/fips140/ecdsa/ecdsa.go b/src/crypto/internal/fips140/ecdsa/ecdsa.go
index 47c1b2442144e4..11389e8210bc68 100644
--- a/src/crypto/internal/fips140/ecdsa/ecdsa.go
+++ b/src/crypto/internal/fips140/ecdsa/ecdsa.go
@@ -11,7 +11,6 @@ import (
 	"crypto/internal/fips140/drbg"
 	"crypto/internal/fips140/nistec"
 	"errors"
-	"hash"
 	"io"
 	"sync"
 )
@@ -272,7 +271,7 @@ type Signature struct {
 // the hash function H) using the private key, priv. If the hash is longer than
 // the bit-length of the private key's curve order, the hash will be truncated
 // to that length.
-func Sign[P Point[P], H hash.Hash](c *Curve[P], h func() H, priv *PrivateKey, rand io.Reader, hash []byte) (*Signature, error) {
+func Sign[P Point[P], H fips140.Hash](c *Curve[P], h func() H, priv *PrivateKey, rand io.Reader, hash []byte) (*Signature, error) {
 	if priv.pub.curve != c.curve {
 		return nil, errors.New("ecdsa: private key does not match curve")
 	}
@@ -305,7 +304,7 @@ func Sign[P Point[P], H hash.Hash](c *Curve[P], h func() H, priv *PrivateKey, ra
 // hash is longer than the bit-length of the private key's curve order, the hash
 // will be truncated to that length. This applies Deterministic ECDSA as
 // specified in FIPS 186-5 and RFC 6979.
-func SignDeterministic[P Point[P], H hash.Hash](c *Curve[P], h func() H, priv *PrivateKey, hash []byte) (*Signature, error) {
+func SignDeterministic[P Point[P], H fips140.Hash](c *Curve[P], h func() H, priv *PrivateKey, hash []byte) (*Signature, error) {
 	if priv.pub.curve != c.curve {
 		return nil, errors.New("ecdsa: private key does not match curve")
 	}
diff --git a/src/crypto/internal/fips140/ecdsa/hmacdrbg.go b/src/crypto/internal/fips140/ecdsa/hmacdrbg.go
index fa82ce39f90c81..8f520911702492 100644
--- a/src/crypto/internal/fips140/ecdsa/hmacdrbg.go
+++ b/src/crypto/internal/fips140/ecdsa/hmacdrbg.go
@@ -8,7 +8,6 @@ import (
 	"bytes"
 	"crypto/internal/fips140"
 	"crypto/internal/fips140/hmac"
-	"hash"
 )
 
 // hmacDRBG is an SP 800-90A Rev. 1 HMAC_DRBG.
@@ -49,7 +48,7 @@ type personalizationString interface {
 	isPersonalizationString()
 }
 
-func newDRBG[H hash.Hash](hash func() H, entropy, nonce []byte, s personalizationString) *hmacDRBG {
+func newDRBG[H fips140.Hash](hash func() H, entropy, nonce []byte, s personalizationString) *hmacDRBG {
 	// HMAC_DRBG_Instantiate_algorithm, per Section 10.1.2.3.
 	fips140.RecordApproved()
 
@@ -122,7 +121,7 @@ func newDRBG[H hash.Hash](hash func() H, entropy, nonce []byte, s personalizatio
 //
 // This should only be used for ACVP testing. hmacDRBG is not intended to be
 // used directly.
-func TestingOnlyNewDRBG(hash func() hash.Hash, entropy, nonce []byte, s []byte) *hmacDRBG {
+func TestingOnlyNewDRBG(hash func() fips140.Hash, entropy, nonce []byte, s []byte) *hmacDRBG {
 	return newDRBG(hash, entropy, nonce, plainPersonalizationString(s))
 }
 
diff --git a/src/crypto/internal/fips140/fips140.go b/src/crypto/internal/fips140/fips140.go
index 050967f4808ad6..e05ad663749b1c 100644
--- a/src/crypto/internal/fips140/fips140.go
+++ b/src/crypto/internal/fips140/fips140.go
@@ -7,7 +7,6 @@ package fips140
 import (
 	"crypto/internal/fips140deps/godebug"
 	"errors"
-	"hash"
 	"runtime"
 )
 
@@ -70,9 +69,3 @@ func Version() string {
 	// moved to a different file.
 	return "latest" //mkzip:version
 }
-
-// Hash is a legacy compatibility alias for hash.Hash.
-//
-// It's only here because [crypto/internal/fips140/ecdsa.TestingOnlyNewDRBG]
-// takes a "func() fips140.Hash" in v1.0.0, instead of being generic.
-type Hash = hash.Hash
diff --git a/src/crypto/internal/fips140/hash.go b/src/crypto/internal/fips140/hash.go
new file mode 100644
index 00000000000000..bc6c7ca2f5ffc4
--- /dev/null
+++ b/src/crypto/internal/fips140/hash.go
@@ -0,0 +1,32 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fips140
+
+import "io"
+
+// Hash is the common interface implemented by all hash functions. It is a copy
+// of [hash.Hash] from the standard library, to avoid depending on security
+// definitions from outside of the module.
+type Hash interface {
+	// Write (via the embedded io.Writer interface) adds more data to the
+	// running hash. It never returns an error.
+	io.Writer
+
+	// Sum appends the current hash to b and returns the resulting slice.
+	// It does not change the underlying hash state.
+	Sum(b []byte) []byte
+
+	// Reset resets the Hash to its initial state.
+	Reset()
+
+	// Size returns the number of bytes Sum will return.
+	Size() int
+
+	// BlockSize returns the hash's underlying block size.
+	// The Write method must be able to accept any amount
+	// of data, but it may operate more efficiently if all writes
+	// are a multiple of the block size.
+	BlockSize() int
+}
diff --git a/src/crypto/internal/fips140/hkdf/hkdf.go b/src/crypto/internal/fips140/hkdf/hkdf.go
index 2e8b83d41d511e..e612fbbc21c87f 100644
--- a/src/crypto/internal/fips140/hkdf/hkdf.go
+++ b/src/crypto/internal/fips140/hkdf/hkdf.go
@@ -7,10 +7,9 @@ package hkdf
 import (
 	"crypto/internal/fips140"
 	"crypto/internal/fips140/hmac"
-	"hash"
 )
 
-func Extract[H hash.Hash](h func() H, secret, salt []byte) []byte {
+func Extract[H fips140.Hash](h func() H, secret, salt []byte) []byte {
 	if len(secret) < 112/8 {
 		fips140.RecordNonApproved()
 	}
@@ -24,7 +23,7 @@ func Extract[H hash.Hash](h func() H, secret, salt []byte) []byte {
 	return extractor.Sum(nil)
 }
 
-func Expand[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLen int) []byte {
+func Expand[H fips140.Hash](h func() H, pseudorandomKey []byte, info string, keyLen int) []byte {
 	out := make([]byte, 0, keyLen)
 	expander := hmac.New(h, pseudorandomKey)
 	hmac.MarkAsUsedInKDF(expander)
@@ -51,7 +50,7 @@ func Expand[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLen
 	return out
 }
 
-func Key[H hash.Hash](h func() H, secret, salt []byte, info string, keyLen int) []byte {
+func Key[H fips140.Hash](h func() H, secret, salt []byte, info string, keyLen int) []byte {
 	prk := Extract(h, secret, salt)
 	return Expand(h, prk, info, keyLen)
 }
diff --git a/src/crypto/internal/fips140/hmac/hmac.go b/src/crypto/internal/fips140/hmac/hmac.go
index 9b28017662564b..5a588d7c260197 100644
--- a/src/crypto/internal/fips140/hmac/hmac.go
+++ b/src/crypto/internal/fips140/hmac/hmac.go
@@ -12,8 +12,6 @@ import (
 	"crypto/internal/fips140/sha256"
 	"crypto/internal/fips140/sha3"
 	"crypto/internal/fips140/sha512"
-	"errors"
-	"hash"
 )
 
 // key is zero padded to the block size of the hash function
@@ -30,9 +28,8 @@ type marshalable interface {
 }
 
 type HMAC struct {
-	// opad and ipad may share underlying storage with HMAC clones.
 	opad, ipad   []byte
-	outer, inner hash.Hash
+	outer, inner fips140.Hash
 
 	// If marshaled is true, then opad and ipad do not contain a padded
 	// copy of the key, but rather the marshaled state of outer/inner after
@@ -130,32 +127,8 @@ func (h *HMAC) Reset() {
 	h.marshaled = true
 }
 
-// Clone implements [hash.Cloner] if the underlying hash does.
-// Otherwise, it returns [errors.ErrUnsupported].
-func (h *HMAC) Clone() (hash.Cloner, error) {
-	r := *h
-	ic, ok := h.inner.(hash.Cloner)
-	if !ok {
-		return nil, errors.ErrUnsupported
-	}
-	oc, ok := h.outer.(hash.Cloner)
-	if !ok {
-		return nil, errors.ErrUnsupported
-	}
-	var err error
-	r.inner, err = ic.Clone()
-	if err != nil {
-		return nil, errors.ErrUnsupported
-	}
-	r.outer, err = oc.Clone()
-	if err != nil {
-		return nil, errors.ErrUnsupported
-	}
-	return &r, nil
-}
-
-// New returns a new HMAC hash using the given [hash.Hash] type and key.
-func New[H hash.Hash](h func() H, key []byte) *HMAC {
+// New returns a new HMAC hash using the given [fips140.Hash] type and key.
+func New[H fips140.Hash](h func() H, key []byte) *HMAC {
 	hm := &HMAC{keyLen: len(key)}
 	hm.outer = h()
 	hm.inner = h()
diff --git a/src/crypto/internal/fips140/nistec/p256_asm_s390x.s b/src/crypto/internal/fips140/nistec/p256_asm_s390x.s
index 190147ebb18505..4ca25cfc414eb0 100644
--- a/src/crypto/internal/fips140/nistec/p256_asm_s390x.s
+++ b/src/crypto/internal/fips140/nistec/p256_asm_s390x.s
@@ -7,6 +7,11 @@
 #include "textflag.h"
 #include "go_asm.h"
 
+DATA p256ordK0<>+0x00(SB)/4, $0xee00bc4f
+DATA p256ord<>+0x00(SB)/8, $0xffffffff00000000
+DATA p256ord<>+0x08(SB)/8, $0xffffffffffffffff
+DATA p256ord<>+0x10(SB)/8, $0xbce6faada7179e84
+DATA p256ord<>+0x18(SB)/8, $0xf3b9cac2fc632551
 DATA p256<>+0x00(SB)/8, $0xffffffff00000001 // P256
 DATA p256<>+0x08(SB)/8, $0x0000000000000000 // P256
 DATA p256<>+0x10(SB)/8, $0x00000000ffffffff // P256
@@ -39,6 +44,8 @@ DATA p256mul<>+0x80(SB)/8, $0x00000000fffffffe // (1*2^256)%P256
 DATA p256mul<>+0x88(SB)/8, $0xffffffffffffffff // (1*2^256)%P256
 DATA p256mul<>+0x90(SB)/8, $0xffffffff00000000 // (1*2^256)%P256
 DATA p256mul<>+0x98(SB)/8, $0x0000000000000001 // (1*2^256)%P256
+GLOBL p256ordK0<>(SB), 8, $4
+GLOBL p256ord<>(SB), 8, $32
 GLOBL p256<>(SB), 8, $96
 GLOBL p256mul<>(SB), 8, $160
 
@@ -493,6 +500,392 @@ loop_select:
 #undef SEL2
 #undef CPOOL
 
+// ---------------------------------------
+
+// func p256OrdMul(res, in1, in2 *p256OrdElement)
+#define res_ptr R1
+#define x_ptr R2
+#define y_ptr R3
+#define X0    V0
+#define X1    V1
+#define Y0    V2
+#define Y1    V3
+#define M0    V4
+#define M1    V5
+#define T0    V6
+#define T1    V7
+#define T2    V8
+#define YDIG  V9
+
+#define ADD1  V16
+#define ADD1H V17
+#define ADD2  V18
+#define ADD2H V19
+#define RED1  V20
+#define RED1H V21
+#define RED2  V22
+#define RED2H V23
+#define CAR1  V24
+#define CAR1M V25
+
+#define MK0   V30
+#define K0    V31
+TEXT ·p256OrdMul<>(SB), NOSPLIT, $0
+	MOVD res+0(FP), res_ptr
+	MOVD in1+8(FP), x_ptr
+	MOVD in2+16(FP), y_ptr
+
+	VZERO T2
+	MOVD  $p256ordK0<>+0x00(SB), R4
+
+	// VLEF    $3, 0(R4), K0
+	WORD $0xE7F40000
+	BYTE $0x38
+	BYTE $0x03
+	MOVD $p256ord<>+0x00(SB), R4
+	VL   16(R4), M0
+	VL   0(R4), M1
+
+	VL   (0*16)(x_ptr), X0
+	VPDI $0x4, X0, X0, X0
+	VL   (1*16)(x_ptr), X1
+	VPDI $0x4, X1, X1, X1
+	VL   (0*16)(y_ptr), Y0
+	VPDI $0x4, Y0, Y0, Y0
+	VL   (1*16)(y_ptr), Y1
+	VPDI $0x4, Y1, Y1, Y1
+
+	// ---------------------------------------------------------------------------/
+	VREPF $3, Y0, YDIG
+	VMLF  X0, YDIG, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMLF  X1, YDIG, ADD2
+	VMLHF X0, YDIG, ADD1H
+	VMLHF X1, YDIG, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+/* *
+ * ---+--------+--------+
+ *  T2|   T1   |   T0   |
+ * ---+--------+--------+
+ *           *(add)*
+ *    +--------+--------+
+ *    |   X1   |   X0   |
+ *    +--------+--------+
+ *           *(mul)*
+ *    +--------+--------+
+ *    |  YDIG  |  YDIG  |
+ *    +--------+--------+
+ *           *(add)*
+ *    +--------+--------+
+ *    |   M1   |   M0   |
+ *    +--------+--------+
+ *           *(mul)*
+ *    +--------+--------+
+ *    |   MK0  |   MK0  |
+ *    +--------+--------+
+ *
+ *   ---------------------
+ *
+ *    +--------+--------+
+ *    |  ADD2  |  ADD1  |
+ *    +--------+--------+
+ *  +--------+--------+
+ *  | ADD2H  | ADD1H  |
+ *  +--------+--------+
+ *    +--------+--------+
+ *    |  RED2  |  RED1  |
+ *    +--------+--------+
+ *  +--------+--------+
+ *  | RED2H  | RED1H  |
+ *  +--------+--------+
+ */
+	VREPF $2, Y0, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $1, Y0, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $0, Y0, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $3, Y1, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $2, Y1, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $1, Y1, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+	VREPF $0, Y1, YDIG
+	VMALF X0, YDIG, T0, ADD1
+	VMLF  ADD1, K0, MK0
+	VREPF $3, MK0, MK0
+
+	VMALF  X1, YDIG, T1, ADD2
+	VMALHF X0, YDIG, T0, ADD1H
+	VMALHF X1, YDIG, T1, ADD2H
+
+	VMALF  M0, MK0, ADD1, RED1
+	VMALHF M0, MK0, ADD1, RED1H
+	VMALF  M1, MK0, ADD2, RED2
+	VMALHF M1, MK0, ADD2, RED2H
+
+	VSLDB $12, RED2, RED1, RED1
+	VSLDB $12, T2, RED2, RED2
+
+	VACCQ RED1, ADD1H, CAR1
+	VAQ   RED1, ADD1H, T0
+	VACCQ RED1H, T0, CAR1M
+	VAQ   RED1H, T0, T0
+
+	// << ready for next MK0
+
+	VACQ   RED2, ADD2H, CAR1, T1
+	VACCCQ RED2, ADD2H, CAR1, CAR1
+	VACCCQ RED2H, T1, CAR1M, T2
+	VACQ   RED2H, T1, CAR1M, T1
+	VAQ    CAR1, T2, T2
+
+	// ---------------------------------------------------
+
+	VZERO   RED1
+	VSCBIQ  M0, T0, CAR1
+	VSQ     M0, T0, ADD1
+	VSBCBIQ T1, M1, CAR1, CAR1M
+	VSBIQ   T1, M1, CAR1, ADD2
+	VSBIQ   T2, RED1, CAR1M, T2
+
+	// what output to use, ADD2||ADD1 or T1||T0?
+	VSEL T0, ADD1, T2, T0
+	VSEL T1, ADD2, T2, T1
+
+	VPDI $0x4, T0, T0, T0
+	VST  T0, (0*16)(res_ptr)
+	VPDI $0x4, T1, T1, T1
+	VST  T1, (1*16)(res_ptr)
+	RET
+
+#undef res_ptr
+#undef x_ptr
+#undef y_ptr
+#undef X0
+#undef X1
+#undef Y0
+#undef Y1
+#undef M0
+#undef M1
+#undef T0
+#undef T1
+#undef T2
+#undef YDIG
+
+#undef ADD1
+#undef ADD1H
+#undef ADD2
+#undef ADD2H
+#undef RED1
+#undef RED1H
+#undef RED2
+#undef RED2H
+#undef CAR1
+#undef CAR1M
+
+#undef MK0
+#undef K0
+
 // ---------------------------------------
 // p256MulInternal
 // V0-V3,V30,V31 - Not Modified
diff --git a/src/crypto/internal/fips140/pbkdf2/pbkdf2.go b/src/crypto/internal/fips140/pbkdf2/pbkdf2.go
index 2cd9b00241910d..05923f68262ac6 100644
--- a/src/crypto/internal/fips140/pbkdf2/pbkdf2.go
+++ b/src/crypto/internal/fips140/pbkdf2/pbkdf2.go
@@ -8,7 +8,6 @@ import (
 	"crypto/internal/fips140"
 	"crypto/internal/fips140/hmac"
 	"errors"
-	"hash"
 )
 
 // divRoundUp divides x+y-1 by y, rounding up if the result is not whole.
@@ -20,7 +19,7 @@ func divRoundUp(x, y int) int {
 	return int((int64(x) + int64(y) - 1) / int64(y))
 }
 
-func Key[Hash hash.Hash](h func() Hash, password string, salt []byte, iter, keyLength int) ([]byte, error) {
+func Key[Hash fips140.Hash](h func() Hash, password string, salt []byte, iter, keyLength int) ([]byte, error) {
 	setServiceIndicator(salt, keyLength)
 
 	if keyLength <= 0 {
diff --git a/src/crypto/internal/fips140/rsa/pkcs1v22.go b/src/crypto/internal/fips140/rsa/pkcs1v22.go
index 9ec28da7940b1f..a5bc56dafcd9ff 100644
--- a/src/crypto/internal/fips140/rsa/pkcs1v22.go
+++ b/src/crypto/internal/fips140/rsa/pkcs1v22.go
@@ -16,7 +16,6 @@ import (
 	"crypto/internal/fips140/sha512"
 	"crypto/internal/fips140/subtle"
 	"errors"
-	"hash"
 	"io"
 )
 
@@ -49,7 +48,7 @@ func incCounter(c *[4]byte) {
 
 // mgf1XOR XORs the bytes in out with a mask generated using the MGF1 function
 // specified in PKCS #1 v2.1.
-func mgf1XOR(out []byte, hash hash.Hash, seed []byte) {
+func mgf1XOR(out []byte, hash fips140.Hash, seed []byte) {
 	var counter [4]byte
 	var digest []byte
 
@@ -68,7 +67,7 @@ func mgf1XOR(out []byte, hash hash.Hash, seed []byte) {
 	}
 }
 
-func emsaPSSEncode(mHash []byte, emBits int, salt []byte, hash hash.Hash) ([]byte, error) {
+func emsaPSSEncode(mHash []byte, emBits int, salt []byte, hash fips140.Hash) ([]byte, error) {
 	// See RFC 8017, Section 9.1.1.
 
 	hLen := hash.Size()
@@ -145,7 +144,7 @@ func emsaPSSEncode(mHash []byte, emBits int, salt []byte, hash hash.Hash) ([]byt
 
 const pssSaltLengthAutodetect = -1
 
-func emsaPSSVerify(mHash, em []byte, emBits, sLen int, hash hash.Hash) error {
+func emsaPSSVerify(mHash, em []byte, emBits, sLen int, hash fips140.Hash) error {
 	// See RFC 8017, Section 9.1.2.
 
 	hLen := hash.Size()
@@ -251,7 +250,7 @@ func emsaPSSVerify(mHash, em []byte, emBits, sLen int, hash hash.Hash) error {
 
 // PSSMaxSaltLength returns the maximum salt length for a given public key and
 // hash function.
-func PSSMaxSaltLength(pub *PublicKey, hash hash.Hash) (int, error) {
+func PSSMaxSaltLength(pub *PublicKey, hash fips140.Hash) (int, error) {
 	saltLength := (pub.N.BitLen()-1+7)/8 - 2 - hash.Size()
 	if saltLength < 0 {
 		return 0, ErrMessageTooLong
@@ -265,7 +264,7 @@ func PSSMaxSaltLength(pub *PublicKey, hash hash.Hash) (int, error) {
 }
 
 // SignPSS calculates the signature of hashed using RSASSA-PSS.
-func SignPSS(rand io.Reader, priv *PrivateKey, hash hash.Hash, hashed []byte, saltLength int) ([]byte, error) {
+func SignPSS(rand io.Reader, priv *PrivateKey, hash fips140.Hash, hashed []byte, saltLength int) ([]byte, error) {
 	fipsSelfTest()
 	fips140.RecordApproved()
 	checkApprovedHash(hash)
@@ -312,19 +311,19 @@ func SignPSS(rand io.Reader, priv *PrivateKey, hash hash.Hash, hashed []byte, sa
 }
 
 // VerifyPSS verifies sig with RSASSA-PSS automatically detecting the salt length.
-func VerifyPSS(pub *PublicKey, hash hash.Hash, digest []byte, sig []byte) error {
+func VerifyPSS(pub *PublicKey, hash fips140.Hash, digest []byte, sig []byte) error {
 	return verifyPSS(pub, hash, digest, sig, pssSaltLengthAutodetect)
 }
 
 // VerifyPSS verifies sig with RSASSA-PSS and an expected salt length.
-func VerifyPSSWithSaltLength(pub *PublicKey, hash hash.Hash, digest []byte, sig []byte, saltLength int) error {
+func VerifyPSSWithSaltLength(pub *PublicKey, hash fips140.Hash, digest []byte, sig []byte, saltLength int) error {
 	if saltLength < 0 {
 		return errors.New("crypto/rsa: salt length cannot be negative")
 	}
 	return verifyPSS(pub, hash, digest, sig, saltLength)
 }
 
-func verifyPSS(pub *PublicKey, hash hash.Hash, digest []byte, sig []byte, saltLength int) error {
+func verifyPSS(pub *PublicKey, hash fips140.Hash, digest []byte, sig []byte, saltLength int) error {
 	fipsSelfTest()
 	fips140.RecordApproved()
 	checkApprovedHash(hash)
@@ -360,7 +359,7 @@ func verifyPSS(pub *PublicKey, hash hash.Hash, digest []byte, sig []byte, saltLe
 	return emsaPSSVerify(digest, em, emBits, saltLength, hash)
 }
 
-func checkApprovedHash(hash hash.Hash) {
+func checkApprovedHash(hash fips140.Hash) {
 	switch hash.(type) {
 	case *sha256.Digest, *sha512.Digest, *sha3.Digest:
 	default:
@@ -369,7 +368,7 @@ func checkApprovedHash(hash hash.Hash) {
 }
 
 // EncryptOAEP encrypts the given message with RSAES-OAEP.
-func EncryptOAEP(hash, mgfHash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error) {
+func EncryptOAEP(hash, mgfHash fips140.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error) {
 	// Note that while we don't commit to deterministic execution with respect
 	// to the random stream, we also don't apply MaybeReadByte, so per Hyrum's
 	// Law it's probably relied upon by some. It's a tolerable promise because a
@@ -412,7 +411,7 @@ func EncryptOAEP(hash, mgfHash hash.Hash, random io.Reader, pub *PublicKey, msg
 }
 
 // DecryptOAEP decrypts ciphertext using RSAES-OAEP.
-func DecryptOAEP(hash, mgfHash hash.Hash, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error) {
+func DecryptOAEP(hash, mgfHash fips140.Hash, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error) {
 	fipsSelfTest()
 	fips140.RecordApproved()
 	checkApprovedHash(hash)
diff --git a/src/crypto/internal/fips140/sha256/_asm/sha256block_amd64_asm.go b/src/crypto/internal/fips140/sha256/_asm/sha256block_amd64_asm.go
index a3324673fdd3b6..b26c2418e51ea0 100644
--- a/src/crypto/internal/fips140/sha256/_asm/sha256block_amd64_asm.go
+++ b/src/crypto/internal/fips140/sha256/_asm/sha256block_amd64_asm.go
@@ -8,6 +8,8 @@ import (
 	"os"
 
 	. "github.com/mmcloughlin/avo/build"
+	. "github.com/mmcloughlin/avo/operand"
+	. "github.com/mmcloughlin/avo/reg"
 )
 
 //go:generate go run . -out ../sha256block_amd64.s
@@ -59,11 +61,203 @@ func main() {
 
 	Package("crypto/internal/fips140/sha256")
 	ConstraintExpr("!purego")
+	blockAMD64()
 	blockAVX2()
 	blockSHANI()
 	Generate()
 }
 
+// Wt = Mt; for 0 <= t <= 15
+func msgSchedule0(index int) {
+	MOVL(Mem{Base: SI}.Offset(index*4), EAX)
+	BSWAPL(EAX)
+	MOVL(EAX, Mem{Base: BP}.Offset(index*4))
+}
+
+// Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
+//
+//	SIGMA0(x) = ROTR(7,x) XOR ROTR(18,x) XOR SHR(3,x)
+//	SIGMA1(x) = ROTR(17,x) XOR ROTR(19,x) XOR SHR(10,x)
+func msgSchedule1(index int) {
+	MOVL(Mem{Base: BP}.Offset((index-2)*4), EAX)
+	MOVL(EAX, ECX)
+	RORL(Imm(17), EAX)
+	MOVL(ECX, EDX)
+	RORL(Imm(19), ECX)
+	SHRL(Imm(10), EDX)
+	MOVL(Mem{Base: BP}.Offset((index-15)*4), EBX)
+	XORL(ECX, EAX)
+	MOVL(EBX, ECX)
+	XORL(EDX, EAX)
+	RORL(Imm(7), EBX)
+	MOVL(ECX, EDX)
+	SHRL(Imm(3), EDX)
+	RORL(Imm(18), ECX)
+	ADDL(Mem{Base: BP}.Offset((index-7)*4), EAX)
+	XORL(ECX, EBX)
+	XORL(EDX, EBX)
+	ADDL(Mem{Base: BP}.Offset((index-16)*4), EBX)
+	ADDL(EBX, EAX)
+	MOVL(EAX, Mem{Base: BP}.Offset((index)*4))
+}
+
+// Calculate T1 in AX - uses AX, CX and DX registers.
+// h is also used as an accumulator. Wt is passed in AX.
+//
+//	T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
+//	  BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
+//	  Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
+func sha256T1(konst uint32, e, f, g, h GPPhysical) {
+	ADDL(EAX, h)
+	MOVL(e, EAX)
+	ADDL(U32(konst), h)
+	MOVL(e, ECX)
+	RORL(U8(6), EAX)
+	MOVL(e, EDX)
+	RORL(U8(11), ECX)
+	XORL(ECX, EAX)
+	MOVL(e, ECX)
+	RORL(U8(25), EDX)
+	ANDL(f, ECX)
+	XORL(EAX, EDX)
+	MOVL(e, EAX)
+	NOTL(EAX)
+	ADDL(EDX, h)
+	ANDL(g, EAX)
+	XORL(ECX, EAX)
+	ADDL(h, EAX)
+}
+
+// Calculate T2 in BX - uses BX, CX, DX and DI registers.
+//
+//	T2 = BIGSIGMA0(a) + Maj(a, b, c)
+//	  BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
+//	  Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
+func sha256T2(a, b, c GPPhysical) {
+	MOVL(a, EDI)
+	MOVL(c, EBX)
+	RORL(U8(2), EDI)
+	MOVL(a, EDX)
+	ANDL(b, EBX)
+	RORL(U8(13), EDX)
+	MOVL(a, ECX)
+	ANDL(c, ECX)
+	XORL(EDX, EDI)
+	XORL(ECX, EBX)
+	MOVL(a, EDX)
+	MOVL(b, ECX)
+	RORL(U8(22), EDX)
+	ANDL(a, ECX)
+	XORL(ECX, EBX)
+	XORL(EDX, EDI)
+	ADDL(EDI, EBX)
+}
+
+// Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
+// The values for e and a are stored in d and h, ready for rotation.
+func sha256Round(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) {
+	sha256T1(konst, e, f, g, h)
+	sha256T2(a, b, c)
+	MOVL(EBX, h)
+	ADDL(EAX, d)
+	ADDL(EAX, h)
+}
+
+func sha256Round0(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) {
+	msgSchedule0(index)
+	sha256Round(index, konst, a, b, c, d, e, f, g, h)
+}
+
+func sha256Round1(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) {
+	msgSchedule1(index)
+	sha256Round(index, konst, a, b, c, d, e, f, g, h)
+}
+
+func blockAMD64() {
+	Implement("blockAMD64")
+	AllocLocal(256 + 8)
+
+	Load(Param("p").Base(), RSI)
+	Load(Param("p").Len(), RDX)
+	SHRQ(Imm(6), RDX)
+	SHLQ(Imm(6), RDX)
+
+	// Return if p is empty
+	LEAQ(Mem{Base: RSI, Index: RDX, Scale: 1}, RDI)
+	MOVQ(RDI, Mem{Base: SP}.Offset(256))
+	CMPQ(RSI, RDI)
+	JEQ(LabelRef("end"))
+
+	BP := Mem{Base: BP}
+	Load(Param("dig"), RBP)
+	MOVL(BP.Offset(0*4), R8L)  // a = H0
+	MOVL(BP.Offset(1*4), R9L)  // b = H1
+	MOVL(BP.Offset(2*4), R10L) // c = H2
+	MOVL(BP.Offset(3*4), R11L) // d = H3
+	MOVL(BP.Offset(4*4), R12L) // e = H4
+	MOVL(BP.Offset(5*4), R13L) // f = H5
+	MOVL(BP.Offset(6*4), R14L) // g = H6
+	MOVL(BP.Offset(7*4), R15L) // h = H7
+
+	loop()
+	end()
+}
+
+func rotateRight(slice *[]GPPhysical) []GPPhysical {
+	n := len(*slice)
+	new := make([]GPPhysical, n)
+	for i, reg := range *slice {
+		new[(i+1)%n] = reg
+	}
+	return new
+}
+
+func loop() {
+	Label("loop")
+	MOVQ(RSP, RBP)
+
+	regs := []GPPhysical{R8L, R9L, R10L, R11L, R12L, R13L, R14L, R15L}
+	n := len(_K)
+
+	for i := 0; i < 16; i++ {
+		sha256Round0(i, _K[i], regs[0], regs[1], regs[2], regs[3], regs[4], regs[5], regs[6], regs[7])
+		regs = rotateRight(®s)
+	}
+
+	for i := 16; i < n; i++ {
+		sha256Round1(i, _K[i], regs[0], regs[1], regs[2], regs[3], regs[4], regs[5], regs[6], regs[7])
+		regs = rotateRight(®s)
+	}
+
+	Load(Param("dig"), RBP)
+	BP := Mem{Base: BP}
+	ADDL(BP.Offset(0*4), R8L) //  H0 = a + H0
+	MOVL(R8L, BP.Offset(0*4))
+	ADDL(BP.Offset(1*4), R9L) //  H1 = b + H1
+	MOVL(R9L, BP.Offset(1*4))
+	ADDL(BP.Offset(2*4), R10L) // H2 = c + H2
+	MOVL(R10L, BP.Offset(2*4))
+	ADDL(BP.Offset(3*4), R11L) // H3 = d + H3
+	MOVL(R11L, BP.Offset(3*4))
+	ADDL(BP.Offset(4*4), R12L) // H4 = e + H4
+	MOVL(R12L, BP.Offset(4*4))
+	ADDL(BP.Offset(5*4), R13L) // H5 = f + H5
+	MOVL(R13L, BP.Offset(5*4))
+	ADDL(BP.Offset(6*4), R14L) // H6 = g + H6
+	MOVL(R14L, BP.Offset(6*4))
+	ADDL(BP.Offset(7*4), R15L) // H7 = h + H7
+	MOVL(R15L, BP.Offset(7*4))
+
+	ADDQ(Imm(64), RSI)
+	CMPQ(RSI, Mem{Base: SP}.Offset(256))
+	JB(LabelRef("loop"))
+}
+
+func end() {
+	Label("end")
+	RET()
+}
+
 var _K = []uint32{
 	0x428a2f98,
 	0x71374491,
diff --git a/src/crypto/internal/fips140/sha256/sha256.go b/src/crypto/internal/fips140/sha256/sha256.go
index a51ad2be24d3a9..e8c7c25f06294f 100644
--- a/src/crypto/internal/fips140/sha256/sha256.go
+++ b/src/crypto/internal/fips140/sha256/sha256.go
@@ -10,7 +10,6 @@ import (
 	"crypto/internal/fips140"
 	"crypto/internal/fips140deps/byteorder"
 	"errors"
-	"hash"
 )
 
 // The size of a SHA-256 checksum in bytes.
@@ -22,11 +21,6 @@ const size224 = 28
 // The block size of SHA-256 and SHA-224 in bytes.
 const blockSize = 64
 
-// The maximum number of bytes that can be passed to block(). The limit exists
-// because implementations that rely on assembly routines are not preemptible.
-const maxAsmIters = 1024
-const maxAsmSize = blockSize * maxAsmIters // 64KiB
-
 const (
 	chunk     = 64
 	init0     = 0x6A09E667
@@ -116,11 +110,6 @@ func consumeUint32(b []byte) ([]byte, uint32) {
 	return b[4:], byteorder.BEUint32(b)
 }
 
-func (d *Digest) Clone() (hash.Cloner, error) {
-	r := *d
-	return &r, nil
-}
-
 func (d *Digest) Reset() {
 	if !d.is224 {
 		d.h[0] = init0
@@ -183,11 +172,6 @@ func (d *Digest) Write(p []byte) (nn int, err error) {
 	}
 	if len(p) >= chunk {
 		n := len(p) &^ (chunk - 1)
-		for n > maxAsmSize {
-			block(d, p[:maxAsmSize])
-			p = p[maxAsmSize:]
-			n -= maxAsmSize
-		}
 		block(d, p[:n])
 		p = p[n:]
 	}
diff --git a/src/crypto/internal/fips140/sha256/sha256block_amd64.go b/src/crypto/internal/fips140/sha256/sha256block_amd64.go
index 0aabcd07922689..291a565b1cc0b1 100644
--- a/src/crypto/internal/fips140/sha256/sha256block_amd64.go
+++ b/src/crypto/internal/fips140/sha256/sha256block_amd64.go
@@ -19,6 +19,9 @@ func init() {
 	impl.Register("sha256", "SHA-NI", &useSHANI)
 }
 
+//go:noescape
+func blockAMD64(dig *Digest, p []byte)
+
 //go:noescape
 func blockAVX2(dig *Digest, p []byte)
 
@@ -31,6 +34,6 @@ func block(dig *Digest, p []byte) {
 	} else if useAVX2 {
 		blockAVX2(dig, p)
 	} else {
-		blockGeneric(dig, p)
+		blockAMD64(dig, p)
 	}
 }
diff --git a/src/crypto/internal/fips140/sha256/sha256block_amd64.s b/src/crypto/internal/fips140/sha256/sha256block_amd64.s
index d5ab42c819ec54..ce0ad4f8877c56 100644
--- a/src/crypto/internal/fips140/sha256/sha256block_amd64.s
+++ b/src/crypto/internal/fips140/sha256/sha256block_amd64.s
@@ -4,6 +4,3492 @@
 
 #include "textflag.h"
 
+// func blockAMD64(dig *Digest, p []byte)
+TEXT ·blockAMD64(SB), $264-32
+	MOVQ p_base+8(FP), SI
+	MOVQ p_len+16(FP), DX
+	SHRQ $0x06, DX
+	SHLQ $0x06, DX
+	LEAQ (SI)(DX*1), DI
+	MOVQ DI, 256(SP)
+	CMPQ SI, DI
+	JEQ  end
+	MOVQ dig+0(FP), BP
+	MOVL (BP), R8
+	MOVL 4(BP), R9
+	MOVL 8(BP), R10
+	MOVL 12(BP), R11
+	MOVL 16(BP), R12
+	MOVL 20(BP), R13
+	MOVL 24(BP), R14
+	MOVL 28(BP), R15
+
+loop:
+	MOVQ   SP, BP
+	MOVL   (SI), AX
+	BSWAPL AX
+	MOVL   AX, (BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0x428a2f98, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   4(SI), AX
+	BSWAPL AX
+	MOVL   AX, 4(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0x71374491, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   8(SI), AX
+	BSWAPL AX
+	MOVL   AX, 8(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0xb5c0fbcf, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   12(SI), AX
+	BSWAPL AX
+	MOVL   AX, 12(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0xe9b5dba5, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   16(SI), AX
+	BSWAPL AX
+	MOVL   AX, 16(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x3956c25b, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   20(SI), AX
+	BSWAPL AX
+	MOVL   AX, 20(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0x59f111f1, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   24(SI), AX
+	BSWAPL AX
+	MOVL   AX, 24(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x923f82a4, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   28(SI), AX
+	BSWAPL AX
+	MOVL   AX, 28(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0xab1c5ed5, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   32(SI), AX
+	BSWAPL AX
+	MOVL   AX, 32(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0xd807aa98, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   36(SI), AX
+	BSWAPL AX
+	MOVL   AX, 36(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0x12835b01, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   40(SI), AX
+	BSWAPL AX
+	MOVL   AX, 40(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0x243185be, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   44(SI), AX
+	BSWAPL AX
+	MOVL   AX, 44(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0x550c7dc3, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   48(SI), AX
+	BSWAPL AX
+	MOVL   AX, 48(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x72be5d74, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   52(SI), AX
+	BSWAPL AX
+	MOVL   AX, 52(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0x80deb1fe, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   56(SI), AX
+	BSWAPL AX
+	MOVL   AX, 56(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x9bdc06a7, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   60(SI), AX
+	BSWAPL AX
+	MOVL   AX, 60(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0xc19bf174, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   56(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   4(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   36(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   (BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 64(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0xe49b69c1, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   60(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   8(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   40(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   4(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 68(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0xefbe4786, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   64(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   12(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   44(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   8(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 72(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0x0fc19dc6, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   68(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   16(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   48(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   12(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 76(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0x240ca1cc, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   72(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   20(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   52(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   16(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 80(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x2de92c6f, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   76(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   24(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   56(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   20(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 84(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0x4a7484aa, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   80(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   28(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   60(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   24(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 88(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x5cb0a9dc, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   84(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   32(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   64(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   28(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 92(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0x76f988da, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   88(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   36(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   68(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   32(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 96(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0x983e5152, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   92(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   40(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   72(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   36(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 100(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0xa831c66d, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   96(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   44(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   76(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   40(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 104(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0xb00327c8, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   100(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   48(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   80(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   44(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 108(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0xbf597fc7, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   104(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   52(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   84(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   48(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 112(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0xc6e00bf3, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   108(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   56(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   88(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   52(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 116(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0xd5a79147, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   112(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   60(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   92(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   56(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 120(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x06ca6351, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   116(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   64(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   96(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   60(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 124(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0x14292967, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   120(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   68(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   100(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   64(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 128(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0x27b70a85, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   124(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   72(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   104(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   68(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 132(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0x2e1b2138, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   128(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   76(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   108(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   72(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 136(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0x4d2c6dfc, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   132(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   80(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   112(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   76(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 140(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0x53380d13, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   136(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   84(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   116(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   80(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 144(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x650a7354, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   140(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   88(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   120(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   84(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 148(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0x766a0abb, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   144(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   92(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   124(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   88(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 152(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x81c2c92e, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   148(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   96(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   128(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   92(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 156(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0x92722c85, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   152(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   100(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   132(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   96(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 160(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0xa2bfe8a1, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   156(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   104(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   136(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   100(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 164(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0xa81a664b, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   160(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   108(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   140(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   104(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 168(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0xc24b8b70, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   164(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   112(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   144(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   108(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 172(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0xc76c51a3, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   168(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   116(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   148(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   112(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 176(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0xd192e819, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   172(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   120(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   152(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   116(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 180(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0xd6990624, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   176(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   124(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   156(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   120(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 184(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0xf40e3585, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   180(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   128(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   160(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   124(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 188(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0x106aa070, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   184(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   132(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   164(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   128(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 192(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0x19a4c116, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   188(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   136(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   168(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   132(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 196(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0x1e376c08, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   192(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   140(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   172(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   136(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 200(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0x2748774c, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   196(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   144(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   176(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   140(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 204(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0x34b0bcb5, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   200(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   148(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   180(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   144(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 208(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x391c0cb3, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   204(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   152(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   184(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   148(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 212(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0x4ed8aa4a, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   208(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   156(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   188(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   152(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 216(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0x5b9cca4f, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   212(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   160(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   192(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   156(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 220(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0x682e6ff3, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVL   216(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   164(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   196(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   160(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 224(BP)
+	ADDL   AX, R15
+	MOVL   R12, AX
+	ADDL   $0x748f82ee, R15
+	MOVL   R12, CX
+	RORL   $0x06, AX
+	MOVL   R12, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R12, CX
+	RORL   $0x19, DX
+	ANDL   R13, CX
+	XORL   AX, DX
+	MOVL   R12, AX
+	NOTL   AX
+	ADDL   DX, R15
+	ANDL   R14, AX
+	XORL   CX, AX
+	ADDL   R15, AX
+	MOVL   R8, DI
+	MOVL   R10, BX
+	RORL   $0x02, DI
+	MOVL   R8, DX
+	ANDL   R9, BX
+	RORL   $0x0d, DX
+	MOVL   R8, CX
+	ANDL   R10, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R8, DX
+	MOVL   R9, CX
+	RORL   $0x16, DX
+	ANDL   R8, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R15
+	ADDL   AX, R11
+	ADDL   AX, R15
+	MOVL   220(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   168(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   200(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   164(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 228(BP)
+	ADDL   AX, R14
+	MOVL   R11, AX
+	ADDL   $0x78a5636f, R14
+	MOVL   R11, CX
+	RORL   $0x06, AX
+	MOVL   R11, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R11, CX
+	RORL   $0x19, DX
+	ANDL   R12, CX
+	XORL   AX, DX
+	MOVL   R11, AX
+	NOTL   AX
+	ADDL   DX, R14
+	ANDL   R13, AX
+	XORL   CX, AX
+	ADDL   R14, AX
+	MOVL   R15, DI
+	MOVL   R9, BX
+	RORL   $0x02, DI
+	MOVL   R15, DX
+	ANDL   R8, BX
+	RORL   $0x0d, DX
+	MOVL   R15, CX
+	ANDL   R9, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R15, DX
+	MOVL   R8, CX
+	RORL   $0x16, DX
+	ANDL   R15, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R14
+	ADDL   AX, R10
+	ADDL   AX, R14
+	MOVL   224(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   172(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   204(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   168(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 232(BP)
+	ADDL   AX, R13
+	MOVL   R10, AX
+	ADDL   $0x84c87814, R13
+	MOVL   R10, CX
+	RORL   $0x06, AX
+	MOVL   R10, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R10, CX
+	RORL   $0x19, DX
+	ANDL   R11, CX
+	XORL   AX, DX
+	MOVL   R10, AX
+	NOTL   AX
+	ADDL   DX, R13
+	ANDL   R12, AX
+	XORL   CX, AX
+	ADDL   R13, AX
+	MOVL   R14, DI
+	MOVL   R8, BX
+	RORL   $0x02, DI
+	MOVL   R14, DX
+	ANDL   R15, BX
+	RORL   $0x0d, DX
+	MOVL   R14, CX
+	ANDL   R8, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R14, DX
+	MOVL   R15, CX
+	RORL   $0x16, DX
+	ANDL   R14, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R13
+	ADDL   AX, R9
+	ADDL   AX, R13
+	MOVL   228(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   176(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   208(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   172(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 236(BP)
+	ADDL   AX, R12
+	MOVL   R9, AX
+	ADDL   $0x8cc70208, R12
+	MOVL   R9, CX
+	RORL   $0x06, AX
+	MOVL   R9, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R9, CX
+	RORL   $0x19, DX
+	ANDL   R10, CX
+	XORL   AX, DX
+	MOVL   R9, AX
+	NOTL   AX
+	ADDL   DX, R12
+	ANDL   R11, AX
+	XORL   CX, AX
+	ADDL   R12, AX
+	MOVL   R13, DI
+	MOVL   R15, BX
+	RORL   $0x02, DI
+	MOVL   R13, DX
+	ANDL   R14, BX
+	RORL   $0x0d, DX
+	MOVL   R13, CX
+	ANDL   R15, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R13, DX
+	MOVL   R14, CX
+	RORL   $0x16, DX
+	ANDL   R13, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R12
+	ADDL   AX, R8
+	ADDL   AX, R12
+	MOVL   232(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   180(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   212(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   176(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 240(BP)
+	ADDL   AX, R11
+	MOVL   R8, AX
+	ADDL   $0x90befffa, R11
+	MOVL   R8, CX
+	RORL   $0x06, AX
+	MOVL   R8, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R8, CX
+	RORL   $0x19, DX
+	ANDL   R9, CX
+	XORL   AX, DX
+	MOVL   R8, AX
+	NOTL   AX
+	ADDL   DX, R11
+	ANDL   R10, AX
+	XORL   CX, AX
+	ADDL   R11, AX
+	MOVL   R12, DI
+	MOVL   R14, BX
+	RORL   $0x02, DI
+	MOVL   R12, DX
+	ANDL   R13, BX
+	RORL   $0x0d, DX
+	MOVL   R12, CX
+	ANDL   R14, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R12, DX
+	MOVL   R13, CX
+	RORL   $0x16, DX
+	ANDL   R12, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R11
+	ADDL   AX, R15
+	ADDL   AX, R11
+	MOVL   236(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   184(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   216(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   180(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 244(BP)
+	ADDL   AX, R10
+	MOVL   R15, AX
+	ADDL   $0xa4506ceb, R10
+	MOVL   R15, CX
+	RORL   $0x06, AX
+	MOVL   R15, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R15, CX
+	RORL   $0x19, DX
+	ANDL   R8, CX
+	XORL   AX, DX
+	MOVL   R15, AX
+	NOTL   AX
+	ADDL   DX, R10
+	ANDL   R9, AX
+	XORL   CX, AX
+	ADDL   R10, AX
+	MOVL   R11, DI
+	MOVL   R13, BX
+	RORL   $0x02, DI
+	MOVL   R11, DX
+	ANDL   R12, BX
+	RORL   $0x0d, DX
+	MOVL   R11, CX
+	ANDL   R13, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R11, DX
+	MOVL   R12, CX
+	RORL   $0x16, DX
+	ANDL   R11, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R10
+	ADDL   AX, R14
+	ADDL   AX, R10
+	MOVL   240(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   188(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   220(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   184(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 248(BP)
+	ADDL   AX, R9
+	MOVL   R14, AX
+	ADDL   $0xbef9a3f7, R9
+	MOVL   R14, CX
+	RORL   $0x06, AX
+	MOVL   R14, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R14, CX
+	RORL   $0x19, DX
+	ANDL   R15, CX
+	XORL   AX, DX
+	MOVL   R14, AX
+	NOTL   AX
+	ADDL   DX, R9
+	ANDL   R8, AX
+	XORL   CX, AX
+	ADDL   R9, AX
+	MOVL   R10, DI
+	MOVL   R12, BX
+	RORL   $0x02, DI
+	MOVL   R10, DX
+	ANDL   R11, BX
+	RORL   $0x0d, DX
+	MOVL   R10, CX
+	ANDL   R12, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R10, DX
+	MOVL   R11, CX
+	RORL   $0x16, DX
+	ANDL   R10, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R9
+	ADDL   AX, R13
+	ADDL   AX, R9
+	MOVL   244(BP), AX
+	MOVL   AX, CX
+	RORL   $0x11, AX
+	MOVL   CX, DX
+	RORL   $0x13, CX
+	SHRL   $0x0a, DX
+	MOVL   192(BP), BX
+	XORL   CX, AX
+	MOVL   BX, CX
+	XORL   DX, AX
+	RORL   $0x07, BX
+	MOVL   CX, DX
+	SHRL   $0x03, DX
+	RORL   $0x12, CX
+	ADDL   224(BP), AX
+	XORL   CX, BX
+	XORL   DX, BX
+	ADDL   188(BP), BX
+	ADDL   BX, AX
+	MOVL   AX, 252(BP)
+	ADDL   AX, R8
+	MOVL   R13, AX
+	ADDL   $0xc67178f2, R8
+	MOVL   R13, CX
+	RORL   $0x06, AX
+	MOVL   R13, DX
+	RORL   $0x0b, CX
+	XORL   CX, AX
+	MOVL   R13, CX
+	RORL   $0x19, DX
+	ANDL   R14, CX
+	XORL   AX, DX
+	MOVL   R13, AX
+	NOTL   AX
+	ADDL   DX, R8
+	ANDL   R15, AX
+	XORL   CX, AX
+	ADDL   R8, AX
+	MOVL   R9, DI
+	MOVL   R11, BX
+	RORL   $0x02, DI
+	MOVL   R9, DX
+	ANDL   R10, BX
+	RORL   $0x0d, DX
+	MOVL   R9, CX
+	ANDL   R11, CX
+	XORL   DX, DI
+	XORL   CX, BX
+	MOVL   R9, DX
+	MOVL   R10, CX
+	RORL   $0x16, DX
+	ANDL   R9, CX
+	XORL   CX, BX
+	XORL   DX, DI
+	ADDL   DI, BX
+	MOVL   BX, R8
+	ADDL   AX, R12
+	ADDL   AX, R8
+	MOVQ   dig+0(FP), BP
+	ADDL   (BP), R8
+	MOVL   R8, (BP)
+	ADDL   4(BP), R9
+	MOVL   R9, 4(BP)
+	ADDL   8(BP), R10
+	MOVL   R10, 8(BP)
+	ADDL   12(BP), R11
+	MOVL   R11, 12(BP)
+	ADDL   16(BP), R12
+	MOVL   R12, 16(BP)
+	ADDL   20(BP), R13
+	MOVL   R13, 20(BP)
+	ADDL   24(BP), R14
+	MOVL   R14, 24(BP)
+	ADDL   28(BP), R15
+	MOVL   R15, 28(BP)
+	ADDQ   $0x40, SI
+	CMPQ   SI, 256(SP)
+	JB     loop
+
+end:
+	RET
+
 // func blockAVX2(dig *Digest, p []byte)
 // Requires: AVX, AVX2, BMI2
 TEXT ·blockAVX2(SB), $536-32
diff --git a/src/crypto/internal/fips140/sha256/sha256block_loong64.s b/src/crypto/internal/fips140/sha256/sha256block_loong64.s
index e171d93e0ba5f0..971ad97ab82798 100644
--- a/src/crypto/internal/fips140/sha256/sha256block_loong64.s
+++ b/src/crypto/internal/fips140/sha256/sha256block_loong64.s
@@ -56,7 +56,7 @@
 // W[i] = M[i]; for 0 <= i <= 15
 #define LOAD0(index) \
 	MOVW	(index*4)(R5), REGTMP4; \
-	REVB2W	REGTMP4, REGTMP4; \
+	WORD	$0x38e7; \	// REVB2W REGTMP4, REGTMP4 to big-endian
 	MOVW	REGTMP4, (index*4)(R3)
 
 // W[i] = SIGMA1(W[i-2]) + W[i-7] + SIGMA0(W[i-15]) + W[i-16]; for 16 <= i <= 63
@@ -87,37 +87,38 @@
 // T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + K[i] + W[i]
 // BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
 // Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
-//             = ((y XOR z) AND x) XOR z
 // Calculate T1 in REGTMP4
 #define SHA256T1(const, e, f, g, h) \
 	ADDV	$const, h; \
 	ADD	REGTMP4, h; \
-	ROTR	$6, e, REGTMP5; \
+	ROTR	$6, e, REGTMP4; \
 	ROTR	$11, e, REGTMP; \
 	ROTR	$25, e, REGTMP3; \
-	XOR	f, g, REGTMP2; \
-	XOR	REGTMP, REGTMP5; \
-	AND	e, REGTMP2; \
-	XOR	REGTMP5, REGTMP3; \
-	XOR	g, REGTMP2; \
+	AND	f, e, REGTMP2; \
+	XOR	REGTMP, REGTMP4; \
+	MOVV	$0xffffffff, REGTMP; \
+	XOR	REGTMP4, REGTMP3; \
+	XOR	REGTMP, e, REGTMP5; \
 	ADD	REGTMP3, h; \
-	ADD	h, REGTMP2, REGTMP4
+	AND	g, REGTMP5; \
+	XOR	REGTMP2, REGTMP5; \
+	ADD	h, REGTMP5, REGTMP4
 
 // T2 = BIGSIGMA0(a) + Maj(a, b, c)
 // BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
 // Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
-//              = ((y XOR z) AND x) XOR (y AND z)
 // Calculate T2 in REGTMP1
 #define SHA256T2(a, b, c) \
 	ROTR	$2, a, REGTMP5; \
-	ROTR	$13, a, REGTMP3; \
-	ROTR	$22, a, REGTMP2; \
-	XOR	b, c, REGTMP; \
 	AND	b, c, REGTMP1; \
+	ROTR	$13, a, REGTMP3; \
+	AND	c, a, REGTMP; \
 	XOR	REGTMP3, REGTMP5; \
-	AND	REGTMP, a, REGTMP; \
-	XOR	REGTMP2, REGTMP5; \
 	XOR	REGTMP, REGTMP1; \
+	ROTR	$22, a, REGTMP2; \
+	AND	a, b, REGTMP3; \
+	XOR	REGTMP2, REGTMP5; \
+	XOR	REGTMP3, REGTMP1; \
 	ADD	REGTMP5, REGTMP1
 
 // Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
diff --git a/src/crypto/internal/fips140/sha256/sha256block_riscv64.s b/src/crypto/internal/fips140/sha256/sha256block_riscv64.s
index 567d44781cb7f1..847b9699a62986 100644
--- a/src/crypto/internal/fips140/sha256/sha256block_riscv64.s
+++ b/src/crypto/internal/fips140/sha256/sha256block_riscv64.s
@@ -88,46 +88,47 @@
 //   T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
 //     BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
 //     Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
-//                 = ((y XOR z) AND x) XOR z
 #define SHA256T1(index, e, f, g, h) \
 	MOVWU	(index*4)(X18), X8; \
 	ADD	X5, h; \
 	RORW	$6, e, X6; \
 	ADD	X8, h; \
 	RORW	$11, e, X7; \
-	RORW	$25, e, X8; \
 	XOR	X7, X6; \
-	XOR	f, g, X5; \
+	RORW	$25, e, X8; \
 	XOR	X8, X6; \
-	AND	e, X5; \
 	ADD	X6, h; \
-	XOR	g, X5; \
+	AND	e, f, X5; \
+	NOT	e, X7; \
+	AND	g, X7; \
+	XOR	X7, X5; \
 	ADD	h, X5
 
 // Calculate T2 in X6.
 //   T2 = BIGSIGMA0(a) + Maj(a, b, c)
 //     BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
 //     Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
-//                  = ((y XOR z) AND x) XOR (y AND z)
 #define SHA256T2(a, b, c) \
 	RORW	$2, a, X6; \
 	RORW	$13, a, X7; \
-	RORW	$22, a, X8; \
 	XOR	X7, X6; \
-	XOR	b, c, X9; \
-	AND	b, c, X7; \
-	AND	a, X9; \
+	RORW	$22, a, X8; \
 	XOR	X8, X6; \
-	XOR	X7, X9; \
-	ADD	X9, X6
+	AND	a, b, X7; \
+	AND	a, c, X8; \
+	XOR	X8, X7; \
+	AND	b, c, X9; \
+	XOR	X9, X7; \
+	ADD	X7, X6
 
 // Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
 // The values for e and a are stored in d and h, ready for rotation.
 #define SHA256ROUND(index, a, b, c, d, e, f, g, h) \
 	SHA256T1(index, e, f, g, h); \
 	SHA256T2(a, b, c); \
+	MOV	X6, h; \
 	ADD	X5, d; \
-	ADD	X6, X5, h
+	ADD	X5, h
 
 #define SHA256ROUND0(index, a, b, c, d, e, f, g, h) \
 	MSGSCHEDULE0(index); \
diff --git a/src/crypto/internal/fips140/sha3/sha3_arm64.go b/src/crypto/internal/fips140/sha3/sha3_arm64.go
deleted file mode 100644
index fab91c02bb7e55..00000000000000
--- a/src/crypto/internal/fips140/sha3/sha3_arm64.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2025 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.
-
-//go:build !purego
-
-package sha3
-
-import (
-	"crypto/internal/fips140deps/cpu"
-	"crypto/internal/impl"
-	"runtime"
-)
-
-// On non-Apple ARM64, the SHA-3 instructions are apparently slower than the
-// pure Go implementation. Checking GOOS is a bit blunt, as it also excludes
-// Asahi Linux; we might consider checking the MIDR model in the future.
-var useSHA3 = cpu.ARM64HasSHA3 && runtime.GOOS == "darwin"
-
-func init() {
-	impl.Register("sha3", "Armv8.2", &useSHA3)
-}
-
-//go:noescape
-func keccakF1600NEON(a *[200]byte)
-
-func keccakF1600(a *[200]byte) {
-	if useSHA3 {
-		keccakF1600NEON(a)
-	} else {
-		keccakF1600Generic(a)
-	}
-}
-
-func (d *Digest) write(p []byte) (n int, err error) {
-	return d.writeGeneric(p)
-}
-func (d *Digest) read(out []byte) (n int, err error) {
-	return d.readGeneric(out)
-}
-func (d *Digest) sum(b []byte) []byte {
-	return d.sumGeneric(b)
-}
diff --git a/src/crypto/internal/fips140/sha3/sha3_arm64.s b/src/crypto/internal/fips140/sha3/sha3_arm64.s
deleted file mode 100644
index 7688d178d51c4c..00000000000000
--- a/src/crypto/internal/fips140/sha3/sha3_arm64.s
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2022 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.
-
-//go:build !purego
-
-#include "textflag.h"
-
-// func keccakF1600NEON(a *[200]byte)
-TEXT ·keccakF1600NEON(SB), $200-8
-	MOVD	a+0(FP), R0
-	MOVD	$round_consts<>(SB), R1
-	MOVD	$24, R2 // counter for loop
-
-	VLD1.P	16(R0), [V0.D1, V1.D1]
-	VLD1.P	16(R0), [V2.D1, V3.D1]
-	VLD1.P	16(R0), [V4.D1, V5.D1]
-	VLD1.P	16(R0), [V6.D1, V7.D1]
-	VLD1.P	16(R0), [V8.D1, V9.D1]
-	VLD1.P	16(R0), [V10.D1, V11.D1]
-	VLD1.P	16(R0), [V12.D1, V13.D1]
-	VLD1.P	16(R0), [V14.D1, V15.D1]
-	VLD1.P	16(R0), [V16.D1, V17.D1]
-	VLD1.P	16(R0), [V18.D1, V19.D1]
-	VLD1.P	16(R0), [V20.D1, V21.D1]
-	VLD1.P	16(R0), [V22.D1, V23.D1]
-	VLD1	(R0), [V24.D1]
-
-	SUB	$192, R0, R0
-
-loop:
-	// theta
-	VEOR3	 V20.B16, V15.B16, V10.B16, V25.B16
-	VEOR3	 V21.B16, V16.B16, V11.B16, V26.B16
-	VEOR3	 V22.B16, V17.B16, V12.B16, V27.B16
-	VEOR3	 V23.B16, V18.B16, V13.B16, V28.B16
-	VEOR3	 V24.B16, V19.B16, V14.B16, V29.B16
-	VEOR3	 V25.B16, V5.B16, V0.B16, V25.B16
-	VEOR3	 V26.B16, V6.B16, V1.B16, V26.B16
-	VEOR3	 V27.B16, V7.B16, V2.B16, V27.B16
-	VEOR3	 V28.B16, V8.B16, V3.B16, V28.B16
-	VEOR3	 V29.B16, V9.B16, V4.B16, V29.B16
-
-	VRAX1	V27.D2, V25.D2, V30.D2
-	VRAX1	V28.D2, V26.D2, V31.D2
-	VRAX1	V29.D2, V27.D2, V27.D2
-	VRAX1	V25.D2, V28.D2, V28.D2
-	VRAX1	V26.D2, V29.D2, V29.D2
-
-	// theta and rho and Pi
-	VEOR	V29.B16, V0.B16, V0.B16
-
-	VXAR	$63, V30.D2, V1.D2, V25.D2
-
-	VXAR	$20, V30.D2, V6.D2, V1.D2
-	VXAR	$44, V28.D2, V9.D2, V6.D2
-	VXAR	$3, V31.D2, V22.D2, V9.D2
-	VXAR	$25, V28.D2, V14.D2, V22.D2
-	VXAR	$46, V29.D2, V20.D2, V14.D2
-
-	VXAR	$2, V31.D2, V2.D2, V26.D2
-
-	VXAR	$21, V31.D2, V12.D2, V2.D2
-	VXAR	$39, V27.D2, V13.D2, V12.D2
-	VXAR	$56, V28.D2, V19.D2, V13.D2
-	VXAR	$8, V27.D2, V23.D2, V19.D2
-	VXAR	$23, V29.D2, V15.D2, V23.D2
-
-	VXAR	$37, V28.D2, V4.D2, V15.D2
-
-	VXAR	$50, V28.D2, V24.D2, V28.D2
-	VXAR	$62, V30.D2, V21.D2, V24.D2
-	VXAR	$9, V27.D2, V8.D2, V8.D2
-	VXAR	$19, V30.D2, V16.D2, V4.D2
-	VXAR	$28, V29.D2, V5.D2, V16.D2
-
-	VXAR	$36, V27.D2, V3.D2, V5.D2
-
-	VXAR	$43, V27.D2, V18.D2, V27.D2
-	VXAR	$49, V31.D2, V17.D2, V3.D2
-	VXAR	$54, V30.D2, V11.D2, V30.D2
-	VXAR	$58, V31.D2, V7.D2, V31.D2
-	VXAR	$61, V29.D2, V10.D2, V29.D2
-
-	// chi and iota
-	VBCAX	V8.B16, V22.B16, V26.B16, V20.B16
-	VBCAX	V22.B16, V23.B16, V8.B16, V21.B16
-	VBCAX	V23.B16, V24.B16, V22.B16, V22.B16
-	VBCAX	V24.B16, V26.B16, V23.B16, V23.B16
-	VBCAX	V26.B16, V8.B16, V24.B16, V24.B16
-
-	VLD1R.P	8(R1), [V26.D2]
-
-	VBCAX	V3.B16, V19.B16, V30.B16, V17.B16
-	VBCAX	V19.B16, V15.B16, V3.B16, V18.B16
-	VBCAX	V15.B16, V16.B16, V19.B16, V19.B16
-	VBCAX	V16.B16, V30.B16, V15.B16, V15.B16
-	VBCAX	V30.B16, V3.B16, V16.B16, V16.B16
-
-	VBCAX	V31.B16, V12.B16, V25.B16, V10.B16
-	VBCAX	V12.B16, V13.B16, V31.B16, V11.B16
-	VBCAX	V13.B16, V14.B16, V12.B16, V12.B16
-	VBCAX	V14.B16, V25.B16, V13.B16, V13.B16
-	VBCAX	V25.B16, V31.B16, V14.B16, V14.B16
-
-	VBCAX	V4.B16, V9.B16, V29.B16, V7.B16
-	VBCAX	V9.B16, V5.B16, V4.B16, V8.B16
-	VBCAX	V5.B16, V6.B16, V9.B16, V9.B16
-	VBCAX	V6.B16, V29.B16, V5.B16, V5.B16
-	VBCAX	V29.B16, V4.B16, V6.B16, V6.B16
-
-	VBCAX	V28.B16, V0.B16, V27.B16, V3.B16
-	VBCAX	V0.B16, V1.B16, V28.B16, V4.B16
-
-	VBCAX	V1.B16, V2.B16, V0.B16, V0.B16  // iota (chi part)
-
-	VBCAX	V2.B16, V27.B16, V1.B16, V1.B16
-	VBCAX	V27.B16, V28.B16, V2.B16, V2.B16
-
-	VEOR	V26.B16, V0.B16, V0.B16 // iota
-
-	SUB		$1, R2, R2
-	CBNZ	R2, loop
-
-	VST1.P	[V0.D1, V1.D1], 16(R0)
-	VST1.P	[V2.D1, V3.D1], 16(R0)
-	VST1.P	[V4.D1, V5.D1], 16(R0)
-	VST1.P	[V6.D1, V7.D1], 16(R0)
-	VST1.P	[V8.D1, V9.D1], 16(R0)
-	VST1.P	[V10.D1, V11.D1], 16(R0)
-	VST1.P	[V12.D1, V13.D1], 16(R0)
-	VST1.P	[V14.D1, V15.D1], 16(R0)
-	VST1.P	[V16.D1, V17.D1], 16(R0)
-	VST1.P	[V18.D1, V19.D1], 16(R0)
-	VST1.P	[V20.D1, V21.D1], 16(R0)
-	VST1.P	[V22.D1, V23.D1], 16(R0)
-	VST1	[V24.D1], (R0)
-
-	RET
-
-DATA	round_consts<>+0x00(SB)/8, $0x0000000000000001
-DATA	round_consts<>+0x08(SB)/8, $0x0000000000008082
-DATA	round_consts<>+0x10(SB)/8, $0x800000000000808a
-DATA	round_consts<>+0x18(SB)/8, $0x8000000080008000
-DATA	round_consts<>+0x20(SB)/8, $0x000000000000808b
-DATA	round_consts<>+0x28(SB)/8, $0x0000000080000001
-DATA	round_consts<>+0x30(SB)/8, $0x8000000080008081
-DATA	round_consts<>+0x38(SB)/8, $0x8000000000008009
-DATA	round_consts<>+0x40(SB)/8, $0x000000000000008a
-DATA	round_consts<>+0x48(SB)/8, $0x0000000000000088
-DATA	round_consts<>+0x50(SB)/8, $0x0000000080008009
-DATA	round_consts<>+0x58(SB)/8, $0x000000008000000a
-DATA	round_consts<>+0x60(SB)/8, $0x000000008000808b
-DATA	round_consts<>+0x68(SB)/8, $0x800000000000008b
-DATA	round_consts<>+0x70(SB)/8, $0x8000000000008089
-DATA	round_consts<>+0x78(SB)/8, $0x8000000000008003
-DATA	round_consts<>+0x80(SB)/8, $0x8000000000008002
-DATA	round_consts<>+0x88(SB)/8, $0x8000000000000080
-DATA	round_consts<>+0x90(SB)/8, $0x000000000000800a
-DATA	round_consts<>+0x98(SB)/8, $0x800000008000000a
-DATA	round_consts<>+0xA0(SB)/8, $0x8000000080008081
-DATA	round_consts<>+0xA8(SB)/8, $0x8000000000008080
-DATA	round_consts<>+0xB0(SB)/8, $0x0000000080000001
-DATA	round_consts<>+0xB8(SB)/8, $0x8000000080008008
-GLOBL	round_consts<>(SB), NOPTR|RODATA, $192
diff --git a/src/crypto/internal/fips140/sha3/sha3_noasm.go b/src/crypto/internal/fips140/sha3/sha3_noasm.go
index 1ce3edfb6fe5de..0bcfc73d02048d 100644
--- a/src/crypto/internal/fips140/sha3/sha3_noasm.go
+++ b/src/crypto/internal/fips140/sha3/sha3_noasm.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (!amd64 && !arm64 && !s390x) || purego
+//go:build (!amd64 && !s390x) || purego
 
 package sha3
 
diff --git a/src/crypto/internal/fips140/sha3/sha3_s390x.s b/src/crypto/internal/fips140/sha3/sha3_s390x.s
index 0ce277160e76da..c3944da628eda1 100644
--- a/src/crypto/internal/fips140/sha3/sha3_s390x.s
+++ b/src/crypto/internal/fips140/sha3/sha3_s390x.s
@@ -13,7 +13,7 @@ TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40
 	LMG  src+16(FP), R2, R3 // R2=base, R3=len
 
 continue:
-	KIMD R0, R2
+	WORD $0xB93E0002 // KIMD --, R2
 	BVS  continue    // continue if interrupted
 	MOVD $0, R0      // reset R0 for pre-go1.8 compilers
 	RET
@@ -26,7 +26,7 @@ TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64
 	LMG  src+40(FP), R4, R5 // R4=base, R5=len
 
 continue:
-	KLMD R2, R4
+	WORD $0xB93F0024 // KLMD R2, R4
 	BVS  continue    // continue if interrupted
 	MOVD $0, R0      // reset R0 for pre-go1.8 compilers
 	RET
diff --git a/src/crypto/internal/fips140/sha512/_asm/sha512block_amd64_asm.go b/src/crypto/internal/fips140/sha512/_asm/sha512block_amd64_asm.go
index 7e7572cb1eea4e..ed7b1766bf4fda 100644
--- a/src/crypto/internal/fips140/sha512/_asm/sha512block_amd64_asm.go
+++ b/src/crypto/internal/fips140/sha512/_asm/sha512block_amd64_asm.go
@@ -146,10 +146,217 @@ func main() {
 
 	Package("crypto/internal/fips140/sha512")
 	ConstraintExpr("!purego")
+	blockAMD64()
 	blockAVX2()
 	Generate()
 }
 
+// Wt = Mt; for 0 <= t <= 15
+//
+// Line 50
+func MSGSCHEDULE0(index int) {
+	MOVQ(Mem{Base: SI}.Offset(index*8), RAX)
+	BSWAPQ(RAX)
+	MOVQ(RAX, Mem{Base: BP}.Offset(index*8))
+}
+
+// Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 79
+//
+//	SIGMA0(x) = ROTR(1,x) XOR ROTR(8,x) XOR SHR(7,x)
+//	SIGMA1(x) = ROTR(19,x) XOR ROTR(61,x) XOR SHR(6,x)
+//
+// Line 58
+func MSGSCHEDULE1(index int) {
+	MOVQ(Mem{Base: BP}.Offset((index-2)*8), RAX)
+	MOVQ(RAX, RCX)
+	RORQ(Imm(19), RAX)
+	MOVQ(RCX, RDX)
+	RORQ(Imm(61), RCX)
+	SHRQ(Imm(6), RDX)
+	MOVQ(Mem{Base: BP}.Offset((index-15)*8), RBX)
+	XORQ(RCX, RAX)
+	MOVQ(RBX, RCX)
+	XORQ(RDX, RAX)
+	RORQ(Imm(1), RBX)
+	MOVQ(RCX, RDX)
+	SHRQ(Imm(7), RDX)
+	RORQ(Imm(8), RCX)
+	ADDQ(Mem{Base: BP}.Offset((index-7)*8), RAX)
+	XORQ(RCX, RBX)
+	XORQ(RDX, RBX)
+	ADDQ(Mem{Base: BP}.Offset((index-16)*8), RBX)
+	ADDQ(RBX, RAX)
+	MOVQ(RAX, Mem{Base: BP}.Offset((index)*8))
+}
+
+// Calculate T1 in AX - uses AX, CX and DX registers.
+// h is also used as an accumulator. Wt is passed in AX.
+//
+//	T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
+//	  BIGSIGMA1(x) = ROTR(14,x) XOR ROTR(18,x) XOR ROTR(41,x)
+//	  Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
+//
+// Line 85
+func SHA512T1(konst uint64, e, f, g, h GPPhysical) {
+	MOVQ(U64(konst), RDX)
+	ADDQ(RAX, h)
+	MOVQ(e, RAX)
+	ADDQ(RDX, h)
+	MOVQ(e, RCX)
+	RORQ(U8(14), RAX)
+	MOVQ(e, RDX)
+	RORQ(U8(18), RCX)
+	XORQ(RCX, RAX)
+	MOVQ(e, RCX)
+	RORQ(U8(41), RDX)
+	ANDQ(f, RCX)
+	XORQ(RAX, RDX)
+	MOVQ(e, RAX)
+	NOTQ(RAX)
+	ADDQ(RDX, h)
+	ANDQ(g, RAX)
+	XORQ(RCX, RAX)
+	ADDQ(h, RAX)
+}
+
+// Calculate T2 in BX - uses BX, CX, DX and DI registers.
+//
+//	T2 = BIGSIGMA0(a) + Maj(a, b, c)
+//	  BIGSIGMA0(x) = ROTR(28,x) XOR ROTR(34,x) XOR ROTR(39,x)
+//	  Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
+//
+// Line 110
+func SHA512T2(a, b, c GPPhysical) {
+	MOVQ(a, RDI)
+	MOVQ(c, RBX)
+	RORQ(Imm(28), RDI)
+	MOVQ(a, RDX)
+	ANDQ(b, RBX)
+	RORQ(Imm(34), RDX)
+	MOVQ(a, RCX)
+	ANDQ(c, RCX)
+	XORQ(RDX, RDI)
+	XORQ(RCX, RBX)
+	MOVQ(a, RDX)
+	MOVQ(b, RCX)
+	RORQ(Imm(39), RDX)
+	ANDQ(a, RCX)
+	XORQ(RCX, RBX)
+	XORQ(RDX, RDI)
+	ADDQ(RDI, RBX)
+}
+
+// Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
+// The values for e and a are stored in d and h, ready for rotation.
+//
+// Line 131
+func SHA512ROUND(index int, konst uint64, a, b, c, d, e, f, g, h GPPhysical) {
+	SHA512T1(konst, e, f, g, h)
+	SHA512T2(a, b, c)
+	MOVQ(RBX, h)
+	ADDQ(RAX, d)
+	ADDQ(RAX, h)
+}
+
+// Line 169
+func SHA512ROUND0(index int, konst uint64, a, b, c, d, e, f, g, h GPPhysical) {
+	MSGSCHEDULE0(index)
+	SHA512ROUND(index, konst, a, b, c, d, e, f, g, h)
+}
+
+// Line 142
+func SHA512ROUND1(index int, konst uint64, a, b, c, d, e, f, g, h GPPhysical) {
+	MSGSCHEDULE1(index)
+	SHA512ROUND(index, konst, a, b, c, d, e, f, g, h)
+}
+
+// Line 146
+func blockAMD64() {
+	Implement("blockAMD64")
+	AllocLocal(648)
+
+	Load(Param("p").Base(), RSI)
+	Load(Param("p").Len(), RDX)
+	SHRQ(Imm(7), RDX)
+	SHLQ(Imm(7), RDX)
+
+	LEAQ(Mem{Base: SI, Index: DX, Scale: 1}, RDI)
+	MOVQ(RDI, Mem{Base: SP}.Offset(640))
+	CMPQ(RSI, RDI)
+	JEQ(LabelRef("end"))
+
+	Load(Param("dig"), RBP)
+	MOVQ(Mem{Base: BP}.Offset(0*8), R8)  // a = H0
+	MOVQ(Mem{Base: BP}.Offset(1*8), R9)  // b = H1
+	MOVQ(Mem{Base: BP}.Offset(2*8), R10) // c = H2
+	MOVQ(Mem{Base: BP}.Offset(3*8), R11) // d = H3
+	MOVQ(Mem{Base: BP}.Offset(4*8), R12) // e = H4
+	MOVQ(Mem{Base: BP}.Offset(5*8), R13) // f = H5
+	MOVQ(Mem{Base: BP}.Offset(6*8), R14) // g = H6
+	MOVQ(Mem{Base: BP}.Offset(7*8), R15) // h = H7
+	PSHUFFLE_BYTE_FLIP_MASK_DATA()
+	loop()
+	end()
+}
+
+func rotateRight(slice *[]GPPhysical) []GPPhysical {
+	n := len(*slice)
+	new := make([]GPPhysical, n)
+	for i, reg := range *slice {
+		new[(i+1)%n] = reg
+	}
+	return new
+}
+
+// Line 167
+func loop() {
+	Label("loop")
+	MOVQ(RSP, RBP) // message schedule
+
+	n := len(_K)
+	regs := []GPPhysical{R8, R9, R10, R11, R12, R13, R14, R15}
+
+	for i := 0; i < 16; i++ {
+		SHA512ROUND0(i, _K[i], regs[0], regs[1], regs[2], regs[3], regs[4], regs[5], regs[6], regs[7])
+		regs = rotateRight(®s)
+	}
+
+	for i := 16; i < n; i++ {
+		SHA512ROUND1(i, _K[i], regs[0], regs[1], regs[2], regs[3], regs[4], regs[5], regs[6], regs[7])
+		regs = rotateRight(®s)
+	}
+
+	Load(Param("dig"), RBP)
+
+	BP_Mem := Mem{Base: BP}
+	ADDQ(BP_Mem.Offset(0*8), R8) // H0 = a + H0
+	MOVQ(R8, BP_Mem.Offset(0*8))
+	ADDQ(BP_Mem.Offset(1*8), R9) // H1 = b + H1
+	MOVQ(R9, BP_Mem.Offset(1*8))
+	ADDQ(BP_Mem.Offset(2*8), R10) // H2 = c + H2
+	MOVQ(R10, BP_Mem.Offset(2*8))
+	ADDQ(BP_Mem.Offset(3*8), R11) // H3 = d + H3
+	MOVQ(R11, BP_Mem.Offset(3*8))
+	ADDQ(BP_Mem.Offset(4*8), R12) // H4 = e + H4
+	MOVQ(R12, BP_Mem.Offset(4*8))
+	ADDQ(BP_Mem.Offset(5*8), R13) // H5 = f + H5
+	MOVQ(R13, BP_Mem.Offset(5*8))
+	ADDQ(BP_Mem.Offset(6*8), R14) // H6 = g + H6
+	MOVQ(R14, BP_Mem.Offset(6*8))
+	ADDQ(BP_Mem.Offset(7*8), R15) // H7 = h + H7
+	MOVQ(R15, BP_Mem.Offset(7*8))
+
+	ADDQ(Imm(128), RSI)
+	CMPQ(RSI, Mem{Base: SP}.Offset(640))
+	JB(LabelRef("loop"))
+}
+
+// Line 274
+func end() {
+	Label("end")
+	RET()
+}
+
 // Version below is based on "Fast SHA512 Implementations on Intel
 // Architecture Processors" White-paper
 // https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-sha512-implementations-ia-processors-paper.pdf
diff --git a/src/crypto/internal/fips140/sha512/sha512.go b/src/crypto/internal/fips140/sha512/sha512.go
index 3e7a5e11f15198..55c90a8cd68cdf 100644
--- a/src/crypto/internal/fips140/sha512/sha512.go
+++ b/src/crypto/internal/fips140/sha512/sha512.go
@@ -10,7 +10,6 @@ import (
 	"crypto/internal/fips140"
 	"crypto/internal/fips140deps/byteorder"
 	"errors"
-	"hash"
 )
 
 const (
@@ -195,11 +194,6 @@ func consumeUint64(b []byte) ([]byte, uint64) {
 	return b[8:], byteorder.BEUint64(b)
 }
 
-func (d *Digest) Clone() (hash.Cloner, error) {
-	r := *d
-	return &r, nil
-}
-
 // New returns a new Digest computing the SHA-512 hash.
 func New() *Digest {
 	d := &Digest{size: size512}
diff --git a/src/crypto/internal/fips140/sha512/sha512block_amd64.go b/src/crypto/internal/fips140/sha512/sha512block_amd64.go
index 7059b88716ab82..185909ec5d4a13 100644
--- a/src/crypto/internal/fips140/sha512/sha512block_amd64.go
+++ b/src/crypto/internal/fips140/sha512/sha512block_amd64.go
@@ -20,10 +20,13 @@ func init() {
 //go:noescape
 func blockAVX2(dig *Digest, p []byte)
 
+//go:noescape
+func blockAMD64(dig *Digest, p []byte)
+
 func block(dig *Digest, p []byte) {
 	if useAVX2 {
 		blockAVX2(dig, p)
 	} else {
-		blockGeneric(dig, p)
+		blockAMD64(dig, p)
 	}
 }
diff --git a/src/crypto/internal/fips140/sha512/sha512block_amd64.s b/src/crypto/internal/fips140/sha512/sha512block_amd64.s
index e11d509ab4b97a..ce77d20c0481a9 100644
--- a/src/crypto/internal/fips140/sha512/sha512block_amd64.s
+++ b/src/crypto/internal/fips140/sha512/sha512block_amd64.s
@@ -4,6 +4,4506 @@
 
 #include "textflag.h"
 
+// func blockAMD64(dig *Digest, p []byte)
+TEXT ·blockAMD64(SB), $648-32
+	MOVQ p_base+8(FP), SI
+	MOVQ p_len+16(FP), DX
+	SHRQ $0x07, DX
+	SHLQ $0x07, DX
+	LEAQ (SI)(DX*1), DI
+	MOVQ DI, 640(SP)
+	CMPQ SI, DI
+	JEQ  end
+	MOVQ dig+0(FP), BP
+	MOVQ (BP), R8
+	MOVQ 8(BP), R9
+	MOVQ 16(BP), R10
+	MOVQ 24(BP), R11
+	MOVQ 32(BP), R12
+	MOVQ 40(BP), R13
+	MOVQ 48(BP), R14
+	MOVQ 56(BP), R15
+
+loop:
+	MOVQ   SP, BP
+	MOVQ   (SI), AX
+	BSWAPQ AX
+	MOVQ   AX, (BP)
+	MOVQ   $0x428a2f98d728ae22, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   8(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 8(BP)
+	MOVQ   $0x7137449123ef65cd, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   16(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 16(BP)
+	MOVQ   $0xb5c0fbcfec4d3b2f, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   24(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 24(BP)
+	MOVQ   $0xe9b5dba58189dbbc, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   32(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 32(BP)
+	MOVQ   $0x3956c25bf348b538, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   40(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 40(BP)
+	MOVQ   $0x59f111f1b605d019, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   48(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 48(BP)
+	MOVQ   $0x923f82a4af194f9b, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   56(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 56(BP)
+	MOVQ   $0xab1c5ed5da6d8118, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   64(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 64(BP)
+	MOVQ   $0xd807aa98a3030242, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   72(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 72(BP)
+	MOVQ   $0x12835b0145706fbe, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   80(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 80(BP)
+	MOVQ   $0x243185be4ee4b28c, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   88(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 88(BP)
+	MOVQ   $0x550c7dc3d5ffb4e2, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   96(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 96(BP)
+	MOVQ   $0x72be5d74f27b896f, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   104(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 104(BP)
+	MOVQ   $0x80deb1fe3b1696b1, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   112(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 112(BP)
+	MOVQ   $0x9bdc06a725c71235, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   120(SI), AX
+	BSWAPQ AX
+	MOVQ   AX, 120(BP)
+	MOVQ   $0xc19bf174cf692694, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   112(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   8(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   72(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   (BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 128(BP)
+	MOVQ   $0xe49b69c19ef14ad2, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   120(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   16(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   80(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   8(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 136(BP)
+	MOVQ   $0xefbe4786384f25e3, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   128(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   24(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   88(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   16(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 144(BP)
+	MOVQ   $0x0fc19dc68b8cd5b5, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   136(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   32(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   96(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   24(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 152(BP)
+	MOVQ   $0x240ca1cc77ac9c65, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   144(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   40(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   104(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   32(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 160(BP)
+	MOVQ   $0x2de92c6f592b0275, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   152(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   48(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   112(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   40(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 168(BP)
+	MOVQ   $0x4a7484aa6ea6e483, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   160(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   56(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   120(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   48(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 176(BP)
+	MOVQ   $0x5cb0a9dcbd41fbd4, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   168(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   64(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   128(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   56(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 184(BP)
+	MOVQ   $0x76f988da831153b5, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   176(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   72(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   136(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   64(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 192(BP)
+	MOVQ   $0x983e5152ee66dfab, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   184(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   80(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   144(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   72(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 200(BP)
+	MOVQ   $0xa831c66d2db43210, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   192(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   88(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   152(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   80(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 208(BP)
+	MOVQ   $0xb00327c898fb213f, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   200(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   96(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   160(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   88(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 216(BP)
+	MOVQ   $0xbf597fc7beef0ee4, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   208(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   104(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   168(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   96(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 224(BP)
+	MOVQ   $0xc6e00bf33da88fc2, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   216(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   112(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   176(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   104(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 232(BP)
+	MOVQ   $0xd5a79147930aa725, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   224(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   120(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   184(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   112(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 240(BP)
+	MOVQ   $0x06ca6351e003826f, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   232(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   128(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   192(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   120(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 248(BP)
+	MOVQ   $0x142929670a0e6e70, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   240(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   136(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   200(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   128(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 256(BP)
+	MOVQ   $0x27b70a8546d22ffc, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   248(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   144(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   208(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   136(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 264(BP)
+	MOVQ   $0x2e1b21385c26c926, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   256(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   152(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   216(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   144(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 272(BP)
+	MOVQ   $0x4d2c6dfc5ac42aed, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   264(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   160(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   224(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   152(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 280(BP)
+	MOVQ   $0x53380d139d95b3df, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   272(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   168(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   232(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   160(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 288(BP)
+	MOVQ   $0x650a73548baf63de, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   280(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   176(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   240(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   168(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 296(BP)
+	MOVQ   $0x766a0abb3c77b2a8, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   288(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   184(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   248(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   176(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 304(BP)
+	MOVQ   $0x81c2c92e47edaee6, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   296(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   192(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   256(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   184(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 312(BP)
+	MOVQ   $0x92722c851482353b, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   304(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   200(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   264(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   192(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 320(BP)
+	MOVQ   $0xa2bfe8a14cf10364, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   312(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   208(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   272(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   200(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 328(BP)
+	MOVQ   $0xa81a664bbc423001, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   320(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   216(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   280(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   208(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 336(BP)
+	MOVQ   $0xc24b8b70d0f89791, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   328(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   224(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   288(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   216(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 344(BP)
+	MOVQ   $0xc76c51a30654be30, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   336(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   232(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   296(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   224(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 352(BP)
+	MOVQ   $0xd192e819d6ef5218, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   344(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   240(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   304(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   232(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 360(BP)
+	MOVQ   $0xd69906245565a910, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   352(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   248(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   312(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   240(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 368(BP)
+	MOVQ   $0xf40e35855771202a, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   360(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   256(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   320(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   248(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 376(BP)
+	MOVQ   $0x106aa07032bbd1b8, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   368(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   264(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   328(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   256(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 384(BP)
+	MOVQ   $0x19a4c116b8d2d0c8, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   376(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   272(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   336(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   264(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 392(BP)
+	MOVQ   $0x1e376c085141ab53, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   384(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   280(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   344(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   272(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 400(BP)
+	MOVQ   $0x2748774cdf8eeb99, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   392(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   288(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   352(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   280(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 408(BP)
+	MOVQ   $0x34b0bcb5e19b48a8, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   400(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   296(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   360(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   288(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 416(BP)
+	MOVQ   $0x391c0cb3c5c95a63, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   408(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   304(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   368(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   296(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 424(BP)
+	MOVQ   $0x4ed8aa4ae3418acb, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   416(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   312(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   376(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   304(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 432(BP)
+	MOVQ   $0x5b9cca4f7763e373, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   424(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   320(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   384(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   312(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 440(BP)
+	MOVQ   $0x682e6ff3d6b2b8a3, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   432(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   328(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   392(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   320(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 448(BP)
+	MOVQ   $0x748f82ee5defb2fc, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   440(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   336(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   400(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   328(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 456(BP)
+	MOVQ   $0x78a5636f43172f60, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   448(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   344(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   408(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   336(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 464(BP)
+	MOVQ   $0x84c87814a1f0ab72, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   456(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   352(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   416(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   344(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 472(BP)
+	MOVQ   $0x8cc702081a6439ec, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   464(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   360(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   424(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   352(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 480(BP)
+	MOVQ   $0x90befffa23631e28, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   472(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   368(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   432(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   360(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 488(BP)
+	MOVQ   $0xa4506cebde82bde9, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   480(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   376(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   440(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   368(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 496(BP)
+	MOVQ   $0xbef9a3f7b2c67915, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   488(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   384(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   448(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   376(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 504(BP)
+	MOVQ   $0xc67178f2e372532b, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   496(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   392(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   456(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   384(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 512(BP)
+	MOVQ   $0xca273eceea26619c, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   504(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   400(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   464(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   392(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 520(BP)
+	MOVQ   $0xd186b8c721c0c207, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   512(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   408(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   472(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   400(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 528(BP)
+	MOVQ   $0xeada7dd6cde0eb1e, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   520(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   416(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   480(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   408(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 536(BP)
+	MOVQ   $0xf57d4f7fee6ed178, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   528(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   424(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   488(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   416(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 544(BP)
+	MOVQ   $0x06f067aa72176fba, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   536(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   432(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   496(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   424(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 552(BP)
+	MOVQ   $0x0a637dc5a2c898a6, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   544(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   440(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   504(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   432(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 560(BP)
+	MOVQ   $0x113f9804bef90dae, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   552(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   448(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   512(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   440(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 568(BP)
+	MOVQ   $0x1b710b35131c471b, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   560(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   456(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   520(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   448(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 576(BP)
+	MOVQ   $0x28db77f523047d84, DX
+	ADDQ   AX, R15
+	MOVQ   R12, AX
+	ADDQ   DX, R15
+	MOVQ   R12, CX
+	RORQ   $0x0e, AX
+	MOVQ   R12, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R12, CX
+	RORQ   $0x29, DX
+	ANDQ   R13, CX
+	XORQ   AX, DX
+	MOVQ   R12, AX
+	NOTQ   AX
+	ADDQ   DX, R15
+	ANDQ   R14, AX
+	XORQ   CX, AX
+	ADDQ   R15, AX
+	MOVQ   R8, DI
+	MOVQ   R10, BX
+	RORQ   $0x1c, DI
+	MOVQ   R8, DX
+	ANDQ   R9, BX
+	RORQ   $0x22, DX
+	MOVQ   R8, CX
+	ANDQ   R10, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R8, DX
+	MOVQ   R9, CX
+	RORQ   $0x27, DX
+	ANDQ   R8, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R15
+	ADDQ   AX, R11
+	ADDQ   AX, R15
+	MOVQ   568(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   464(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   528(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   456(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 584(BP)
+	MOVQ   $0x32caab7b40c72493, DX
+	ADDQ   AX, R14
+	MOVQ   R11, AX
+	ADDQ   DX, R14
+	MOVQ   R11, CX
+	RORQ   $0x0e, AX
+	MOVQ   R11, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R11, CX
+	RORQ   $0x29, DX
+	ANDQ   R12, CX
+	XORQ   AX, DX
+	MOVQ   R11, AX
+	NOTQ   AX
+	ADDQ   DX, R14
+	ANDQ   R13, AX
+	XORQ   CX, AX
+	ADDQ   R14, AX
+	MOVQ   R15, DI
+	MOVQ   R9, BX
+	RORQ   $0x1c, DI
+	MOVQ   R15, DX
+	ANDQ   R8, BX
+	RORQ   $0x22, DX
+	MOVQ   R15, CX
+	ANDQ   R9, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R15, DX
+	MOVQ   R8, CX
+	RORQ   $0x27, DX
+	ANDQ   R15, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R14
+	ADDQ   AX, R10
+	ADDQ   AX, R14
+	MOVQ   576(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   472(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   536(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   464(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 592(BP)
+	MOVQ   $0x3c9ebe0a15c9bebc, DX
+	ADDQ   AX, R13
+	MOVQ   R10, AX
+	ADDQ   DX, R13
+	MOVQ   R10, CX
+	RORQ   $0x0e, AX
+	MOVQ   R10, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R10, CX
+	RORQ   $0x29, DX
+	ANDQ   R11, CX
+	XORQ   AX, DX
+	MOVQ   R10, AX
+	NOTQ   AX
+	ADDQ   DX, R13
+	ANDQ   R12, AX
+	XORQ   CX, AX
+	ADDQ   R13, AX
+	MOVQ   R14, DI
+	MOVQ   R8, BX
+	RORQ   $0x1c, DI
+	MOVQ   R14, DX
+	ANDQ   R15, BX
+	RORQ   $0x22, DX
+	MOVQ   R14, CX
+	ANDQ   R8, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R14, DX
+	MOVQ   R15, CX
+	RORQ   $0x27, DX
+	ANDQ   R14, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R13
+	ADDQ   AX, R9
+	ADDQ   AX, R13
+	MOVQ   584(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   480(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   544(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   472(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 600(BP)
+	MOVQ   $0x431d67c49c100d4c, DX
+	ADDQ   AX, R12
+	MOVQ   R9, AX
+	ADDQ   DX, R12
+	MOVQ   R9, CX
+	RORQ   $0x0e, AX
+	MOVQ   R9, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R9, CX
+	RORQ   $0x29, DX
+	ANDQ   R10, CX
+	XORQ   AX, DX
+	MOVQ   R9, AX
+	NOTQ   AX
+	ADDQ   DX, R12
+	ANDQ   R11, AX
+	XORQ   CX, AX
+	ADDQ   R12, AX
+	MOVQ   R13, DI
+	MOVQ   R15, BX
+	RORQ   $0x1c, DI
+	MOVQ   R13, DX
+	ANDQ   R14, BX
+	RORQ   $0x22, DX
+	MOVQ   R13, CX
+	ANDQ   R15, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R13, DX
+	MOVQ   R14, CX
+	RORQ   $0x27, DX
+	ANDQ   R13, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R12
+	ADDQ   AX, R8
+	ADDQ   AX, R12
+	MOVQ   592(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   488(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   552(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   480(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 608(BP)
+	MOVQ   $0x4cc5d4becb3e42b6, DX
+	ADDQ   AX, R11
+	MOVQ   R8, AX
+	ADDQ   DX, R11
+	MOVQ   R8, CX
+	RORQ   $0x0e, AX
+	MOVQ   R8, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R8, CX
+	RORQ   $0x29, DX
+	ANDQ   R9, CX
+	XORQ   AX, DX
+	MOVQ   R8, AX
+	NOTQ   AX
+	ADDQ   DX, R11
+	ANDQ   R10, AX
+	XORQ   CX, AX
+	ADDQ   R11, AX
+	MOVQ   R12, DI
+	MOVQ   R14, BX
+	RORQ   $0x1c, DI
+	MOVQ   R12, DX
+	ANDQ   R13, BX
+	RORQ   $0x22, DX
+	MOVQ   R12, CX
+	ANDQ   R14, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R12, DX
+	MOVQ   R13, CX
+	RORQ   $0x27, DX
+	ANDQ   R12, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R11
+	ADDQ   AX, R15
+	ADDQ   AX, R11
+	MOVQ   600(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   496(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   560(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   488(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 616(BP)
+	MOVQ   $0x597f299cfc657e2a, DX
+	ADDQ   AX, R10
+	MOVQ   R15, AX
+	ADDQ   DX, R10
+	MOVQ   R15, CX
+	RORQ   $0x0e, AX
+	MOVQ   R15, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R15, CX
+	RORQ   $0x29, DX
+	ANDQ   R8, CX
+	XORQ   AX, DX
+	MOVQ   R15, AX
+	NOTQ   AX
+	ADDQ   DX, R10
+	ANDQ   R9, AX
+	XORQ   CX, AX
+	ADDQ   R10, AX
+	MOVQ   R11, DI
+	MOVQ   R13, BX
+	RORQ   $0x1c, DI
+	MOVQ   R11, DX
+	ANDQ   R12, BX
+	RORQ   $0x22, DX
+	MOVQ   R11, CX
+	ANDQ   R13, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R11, DX
+	MOVQ   R12, CX
+	RORQ   $0x27, DX
+	ANDQ   R11, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R10
+	ADDQ   AX, R14
+	ADDQ   AX, R10
+	MOVQ   608(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   504(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   568(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   496(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 624(BP)
+	MOVQ   $0x5fcb6fab3ad6faec, DX
+	ADDQ   AX, R9
+	MOVQ   R14, AX
+	ADDQ   DX, R9
+	MOVQ   R14, CX
+	RORQ   $0x0e, AX
+	MOVQ   R14, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R14, CX
+	RORQ   $0x29, DX
+	ANDQ   R15, CX
+	XORQ   AX, DX
+	MOVQ   R14, AX
+	NOTQ   AX
+	ADDQ   DX, R9
+	ANDQ   R8, AX
+	XORQ   CX, AX
+	ADDQ   R9, AX
+	MOVQ   R10, DI
+	MOVQ   R12, BX
+	RORQ   $0x1c, DI
+	MOVQ   R10, DX
+	ANDQ   R11, BX
+	RORQ   $0x22, DX
+	MOVQ   R10, CX
+	ANDQ   R12, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R10, DX
+	MOVQ   R11, CX
+	RORQ   $0x27, DX
+	ANDQ   R10, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R9
+	ADDQ   AX, R13
+	ADDQ   AX, R9
+	MOVQ   616(BP), AX
+	MOVQ   AX, CX
+	RORQ   $0x13, AX
+	MOVQ   CX, DX
+	RORQ   $0x3d, CX
+	SHRQ   $0x06, DX
+	MOVQ   512(BP), BX
+	XORQ   CX, AX
+	MOVQ   BX, CX
+	XORQ   DX, AX
+	RORQ   $0x01, BX
+	MOVQ   CX, DX
+	SHRQ   $0x07, DX
+	RORQ   $0x08, CX
+	ADDQ   576(BP), AX
+	XORQ   CX, BX
+	XORQ   DX, BX
+	ADDQ   504(BP), BX
+	ADDQ   BX, AX
+	MOVQ   AX, 632(BP)
+	MOVQ   $0x6c44198c4a475817, DX
+	ADDQ   AX, R8
+	MOVQ   R13, AX
+	ADDQ   DX, R8
+	MOVQ   R13, CX
+	RORQ   $0x0e, AX
+	MOVQ   R13, DX
+	RORQ   $0x12, CX
+	XORQ   CX, AX
+	MOVQ   R13, CX
+	RORQ   $0x29, DX
+	ANDQ   R14, CX
+	XORQ   AX, DX
+	MOVQ   R13, AX
+	NOTQ   AX
+	ADDQ   DX, R8
+	ANDQ   R15, AX
+	XORQ   CX, AX
+	ADDQ   R8, AX
+	MOVQ   R9, DI
+	MOVQ   R11, BX
+	RORQ   $0x1c, DI
+	MOVQ   R9, DX
+	ANDQ   R10, BX
+	RORQ   $0x22, DX
+	MOVQ   R9, CX
+	ANDQ   R11, CX
+	XORQ   DX, DI
+	XORQ   CX, BX
+	MOVQ   R9, DX
+	MOVQ   R10, CX
+	RORQ   $0x27, DX
+	ANDQ   R9, CX
+	XORQ   CX, BX
+	XORQ   DX, DI
+	ADDQ   DI, BX
+	MOVQ   BX, R8
+	ADDQ   AX, R12
+	ADDQ   AX, R8
+	MOVQ   dig+0(FP), BP
+	ADDQ   (BP), R8
+	MOVQ   R8, (BP)
+	ADDQ   8(BP), R9
+	MOVQ   R9, 8(BP)
+	ADDQ   16(BP), R10
+	MOVQ   R10, 16(BP)
+	ADDQ   24(BP), R11
+	MOVQ   R11, 24(BP)
+	ADDQ   32(BP), R12
+	MOVQ   R12, 32(BP)
+	ADDQ   40(BP), R13
+	MOVQ   R13, 40(BP)
+	ADDQ   48(BP), R14
+	MOVQ   R14, 48(BP)
+	ADDQ   56(BP), R15
+	MOVQ   R15, 56(BP)
+	ADDQ   $0x80, SI
+	CMPQ   SI, 640(SP)
+	JB     loop
+
+end:
+	RET
+
+DATA PSHUFFLE_BYTE_FLIP_MASK<>+0(SB)/8, $0x0001020304050607
+DATA PSHUFFLE_BYTE_FLIP_MASK<>+8(SB)/8, $0x08090a0b0c0d0e0f
+DATA PSHUFFLE_BYTE_FLIP_MASK<>+16(SB)/8, $0x1011121314151617
+DATA PSHUFFLE_BYTE_FLIP_MASK<>+24(SB)/8, $0x18191a1b1c1d1e1f
+GLOBL PSHUFFLE_BYTE_FLIP_MASK<>(SB), RODATA|NOPTR, $32
+
 // func blockAVX2(dig *Digest, p []byte)
 // Requires: AVX, AVX2, BMI2
 TEXT ·blockAVX2(SB), NOSPLIT, $56-32
@@ -891,12 +5391,6 @@ done_hash:
 	VZEROUPPER
 	RET
 
-DATA PSHUFFLE_BYTE_FLIP_MASK<>+0(SB)/8, $0x0001020304050607
-DATA PSHUFFLE_BYTE_FLIP_MASK<>+8(SB)/8, $0x08090a0b0c0d0e0f
-DATA PSHUFFLE_BYTE_FLIP_MASK<>+16(SB)/8, $0x1011121314151617
-DATA PSHUFFLE_BYTE_FLIP_MASK<>+24(SB)/8, $0x18191a1b1c1d1e1f
-GLOBL PSHUFFLE_BYTE_FLIP_MASK<>(SB), RODATA|NOPTR, $32
-
 DATA MASK_YMM_LO<>+0(SB)/8, $0x0000000000000000
 DATA MASK_YMM_LO<>+8(SB)/8, $0x0000000000000000
 DATA MASK_YMM_LO<>+16(SB)/8, $0xffffffffffffffff
diff --git a/src/crypto/internal/fips140/sha512/sha512block_loong64.s b/src/crypto/internal/fips140/sha512/sha512block_loong64.s
index f65d563ca34d82..00f686c9f737d1 100644
--- a/src/crypto/internal/fips140/sha512/sha512block_loong64.s
+++ b/src/crypto/internal/fips140/sha512/sha512block_loong64.s
@@ -18,7 +18,7 @@
 // W[i] = M[i]; for 0 <= i <= 15
 #define LOAD0(index) \
 	MOVV	(index*8)(R5), REGTMP4; \
-	REVBV	REGTMP4, REGTMP4; \
+	WORD	$0x3ce7; \	//REVBV	REGTMP4, REGTMP4
 	MOVV	REGTMP4, (index*8)(R3)
 
 // W[i] = SIGMA1(W[i-2]) + W[i-7] + SIGMA0(W[i-15]) + W[i-16]; for 16 <= i <= 79
@@ -50,37 +50,38 @@
 //   T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + K[i] + W[i]
 //     BIGSIGMA1(x) = ROTR(14,x) XOR ROTR(18,x) XOR ROTR(41,x)
 //     Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
-//                 = ((y XOR z) AND x) XOR z
 // Calculate T1 in REGTMP4
 #define SHA512T1(const, e, f, g, h) \
 	ADDV	$const, h; \
 	ADDV	REGTMP4, h; \
-	ROTRV	$14, e, REGTMP5; \
+	ROTRV	$14, e, REGTMP4; \
 	ROTRV	$18, e, REGTMP; \
 	ROTRV	$41, e, REGTMP3; \
-	XOR	f, g, REGTMP2; \
-	XOR	REGTMP, REGTMP5; \
-	AND	e, REGTMP2; \
-	XOR	REGTMP5, REGTMP3; \
-	XOR	g, REGTMP2; \
+	AND	f, e, REGTMP2; \
+	XOR	REGTMP, REGTMP4; \
+	MOVV	$0xffffffffffffffff, REGTMP; \
+	XOR	REGTMP4, REGTMP3; \
+	XOR	REGTMP, e, REGTMP5; \
 	ADDV	REGTMP3, h; \
-	ADDV	h, REGTMP2, REGTMP4
+	AND	g, REGTMP5; \
+	XOR	REGTMP2, REGTMP5; \
+	ADDV	h, REGTMP5, REGTMP4
 
 // T2 = BIGSIGMA0(a) + Maj(a, b, c)
 // BIGSIGMA0(x) = ROTR(28,x) XOR ROTR(34,x) XOR ROTR(39,x)
 // Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
-//              = ((y XOR z) AND x) XOR (y AND z)
 // Calculate T2 in REGTMP1
 #define SHA512T2(a, b, c) \
 	ROTRV	$28, a, REGTMP5; \
-	ROTRV	$34, a, REGTMP3; \
-	ROTRV	$39, a, REGTMP2; \
-	XOR	b, c, REGTMP; \
 	AND	b, c, REGTMP1; \
+	ROTRV	$34, a, REGTMP3; \
+	AND	c, a, REGTMP; \
 	XOR	REGTMP3, REGTMP5; \
-	AND	REGTMP, a, REGTMP; \
-	XOR	REGTMP2, REGTMP5; \
 	XOR	REGTMP, REGTMP1; \
+	ROTRV	$39, a, REGTMP2; \
+	AND	a, b, REGTMP3; \
+	XOR	REGTMP3, REGTMP1; \
+	XOR	REGTMP2, REGTMP5; \
 	ADDV	REGTMP5, REGTMP1
 
 // Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
diff --git a/src/crypto/internal/fips140/sha512/sha512block_riscv64.s b/src/crypto/internal/fips140/sha512/sha512block_riscv64.s
index f25ed62237bd0c..2b156271e67105 100644
--- a/src/crypto/internal/fips140/sha512/sha512block_riscv64.s
+++ b/src/crypto/internal/fips140/sha512/sha512block_riscv64.s
@@ -138,8 +138,9 @@
 #define SHA512ROUND(index, a, b, c, d, e, f, g, h) \
 	SHA512T1(index, e, f, g, h); \
 	SHA512T2(a, b, c); \
+	MOV	X6, h; \
 	ADD	X5, d; \
-	ADD	X6, X5, h
+	ADD	X5, h
 
 #define SHA512ROUND0(index, a, b, c, d, e, f, g, h) \
 	MSGSCHEDULE0(index); \
diff --git a/src/crypto/internal/fips140/ssh/kdf.go b/src/crypto/internal/fips140/ssh/kdf.go
index 431deda8dda9ae..837af199c450a5 100644
--- a/src/crypto/internal/fips140/ssh/kdf.go
+++ b/src/crypto/internal/fips140/ssh/kdf.go
@@ -7,8 +7,8 @@
 package ssh
 
 import (
+	"crypto/internal/fips140"
 	_ "crypto/internal/fips140/check"
-	"hash"
 )
 
 type Direction struct {
@@ -24,7 +24,7 @@ func init() {
 	ClientKeys = Direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}}
 }
 
-func Keys[Hash hash.Hash](hash func() Hash, d Direction,
+func Keys[Hash fips140.Hash](hash func() Hash, d Direction,
 	K, H, sessionID []byte,
 	ivKeyLen, keyLen, macKeyLen int,
 ) (ivKey, key, macKey []byte) {
diff --git a/src/crypto/internal/fips140/subtle/xor_arm.s b/src/crypto/internal/fips140/subtle/xor_arm.s
deleted file mode 100644
index a9e4267a6b7538..00000000000000
--- a/src/crypto/internal/fips140/subtle/xor_arm.s
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2025 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.
-
-//go:build !purego
-
-#include "textflag.h"
-
-// func xorBytes(dst, a, b *byte, n int)
-TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
-	MOVW	dst+0(FP), R0
-	MOVW	a+4(FP), R1
-	MOVW	b+8(FP), R2
-	MOVW	n+12(FP), R3
-
-xor_32_check:
-	CMP	$32, R3
-	BLT	xor_16_check
-xor_32_loop:
-	MOVW	(R1), R4
-	MOVW	4(R1), R5
-	MOVW	8(R1), R6
-	MOVW	(R2), R7
-	MOVW	4(R2), R8
-	MOVW	8(R2), R9
-	EOR	R4, R7
-	EOR	R5, R8
-	EOR	R6, R9
-	MOVW	R7, (R0)
-	MOVW	R8, 4(R0)
-	MOVW	R9, 8(R0)
-
-	MOVW	12(R1), R4
-	MOVW	16(R1), R5
-	MOVW	20(R1), R6
-	MOVW	12(R2), R7
-	MOVW	16(R2), R8
-	MOVW	20(R2), R9
-	EOR	R4, R7
-	EOR	R5, R8
-	EOR	R6, R9
-	MOVW	R7, 12(R0)
-	MOVW	R8, 16(R0)
-	MOVW	R9, 20(R0)
-
-	MOVW	24(R1), R4
-	MOVW	28(R1), R5
-	MOVW	24(R2), R6
-	MOVW	28(R2), R7
-	EOR	 R4, R6
-	EOR	 R5, R7
-	MOVW	R6, 24(R0)
-	MOVW	R7, 28(R0)
-
-	ADD	$32, R1
-	ADD	$32, R2
-	ADD	$32, R0
-	SUB	$32, R3
-	CMP	$32, R3
-	BGE	xor_32_loop
-	CMP	$0, R3
-	BEQ	end
-
-xor_16_check:
-	CMP	$16, R3
-	BLT	xor_8_check
-xor_16:
-	MOVW	(R1), R4
-	MOVW	4(R1), R5
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	EOR	R4, R6
-	EOR	R5, R7
-	MOVW	R6, (R0)
-	MOVW	R7, 4(R0)
-
-	MOVW	8(R1), R4
-	MOVW	12(R1), R5
-	MOVW	8(R2), R6
-	MOVW	12(R2), R7
-	EOR	R4, R6
-	EOR	R5, R7
-	MOVW	R6, 8(R0)
-	MOVW	R7, 12(R0)
-	ADD	$16, R1
-	ADD	$16, R2
-	ADD	$16, R0
-	SUB	$16, R3
-	CMP	$0, R3
-	BEQ	end
-
-xor_8_check:
-	CMP	$8, R3
-	BLT	xor_4_check
-xor_8:
-	MOVW	(R1), R4
-	MOVW	4(R1), R5
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	EOR	R4, R6
-	EOR	R5, R7
-	MOVW	R6, (R0)
-	MOVW	R7, 4(R0)
-
-	ADD	$8, R0
-	ADD	$8, R1
-	ADD	$8, R2
-	SUB	$8, R3
-	CMP	$0, R3
-	BEQ	end
-
-xor_4_check:
-	CMP	$4, R3
-	BLT	xor_2_check
-xor_4:
-	MOVW	(R1), R4
-	MOVW	(R2), R5
-	EOR	R4, R5
-	MOVW	R5, (R0)
-	ADD	$4, R1
-	ADD	$4, R2
-	ADD	$4, R0
-	SUB	$4, R3
-	CMP	$0, R3
-	BEQ	end
-
-xor_2_check:
-	CMP	$2, R3
-	BLT	xor_1
-xor_2:
-	MOVH	(R1), R4
-	MOVH	(R2), R5
-	EOR	R4, R5
-	MOVH	R5, (R0)
-	ADD	$2, R1
-	ADD	$2, R2
-	ADD	$2, R0
-	SUB	$2, R3
-	CMP	$0, R3
-	BEQ	end
-
-xor_1:
-	MOVB	(R1), R4
-	MOVB	(R2), R5
-	EOR	R4, R5
-	MOVB	R5, (R0)
-
-end:
-	RET
diff --git a/src/crypto/internal/fips140/subtle/xor_asm.go b/src/crypto/internal/fips140/subtle/xor_asm.go
index 00f3497a028e28..9a5da424aed9f2 100644
--- a/src/crypto/internal/fips140/subtle/xor_asm.go
+++ b/src/crypto/internal/fips140/subtle/xor_asm.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (amd64 || arm || arm64 || mips || mipsle || mips64 || mips64le || ppc64 || ppc64le || riscv64) && !purego
+//go:build (amd64 || arm64 || loong64 || ppc64 || ppc64le || riscv64) && !purego
 
 package subtle
 
diff --git a/src/crypto/internal/fips140/subtle/xor_generic.go b/src/crypto/internal/fips140/subtle/xor_generic.go
index 06d69ca91fdcaa..0b31eec60197d3 100644
--- a/src/crypto/internal/fips140/subtle/xor_generic.go
+++ b/src/crypto/internal/fips140/subtle/xor_generic.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (!amd64 && !arm && !arm64 && !loong64 && !mips && !mipsle && !mips64 && !mips64le && !ppc64 && !ppc64le && !riscv64) || purego
+//go:build (!amd64 && !arm64 && !loong64 && !ppc64 && !ppc64le && !riscv64) || purego
 
 package subtle
 
diff --git a/src/crypto/internal/fips140/subtle/xor_loong64.go b/src/crypto/internal/fips140/subtle/xor_loong64.go
deleted file mode 100644
index ad66824d8861bd..00000000000000
--- a/src/crypto/internal/fips140/subtle/xor_loong64.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2025 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.
-
-//go:build !purego
-
-package subtle
-
-import (
-	"crypto/internal/fips140deps/cpu"
-	"crypto/internal/impl"
-)
-
-var useLSX = cpu.LOONG64HasLSX
-var useLASX = cpu.LOONG64HasLASX
-
-func init() {
-	impl.Register("subtle", "LSX", &useLSX)
-	impl.Register("subtle", "LASX", &useLASX)
-}
-
-//go:noescape
-func xorBytesBasic(dst, a, b *byte, n int)
-
-//go:noescape
-func xorBytesLSX(dst, a, b *byte, n int)
-
-//go:noescape
-func xorBytesLASX(dst, a, b *byte, n int)
-
-func xorBytes(dst, a, b *byte, n int) {
-	if useLASX {
-		xorBytesLASX(dst, a, b, n)
-	} else if useLSX {
-		xorBytesLSX(dst, a, b, n)
-	} else {
-		xorBytesBasic(dst, a, b, n)
-	}
-}
diff --git a/src/crypto/internal/fips140/subtle/xor_loong64.s b/src/crypto/internal/fips140/subtle/xor_loong64.s
index 36c18a627770ab..09dc80eb9396db 100644
--- a/src/crypto/internal/fips140/subtle/xor_loong64.s
+++ b/src/crypto/internal/fips140/subtle/xor_loong64.s
@@ -6,76 +6,30 @@
 
 #include "textflag.h"
 
-#define SMALL_TAIL \
-	SGTU	$2, R7, R8; \
-	BNE	R8, xor_1; \
-	SGTU	$4, R7, R8; \
-	BNE	R8, xor_2; \
-	SGTU	$8, R7, R8; \
-	BNE	R8, xor_4; \
-	SGTU	$16, R7, R8; \
-	BNE	R8, xor_8; \
-
-#define SMALL \
-xor_8_check:; \
-	SGTU	$8, R7, R8; \
-	BNE	R8, xor_4_check; \
-xor_8:; \
-	SUBV	$8, R7; \
-	MOVV	(R5), R10; \
-	MOVV	(R6), R11; \
-	XOR	R10, R11; \
-	MOVV	R11, (R4); \
-	ADDV	$8, R5; \
-	ADDV	$8, R6; \
-	ADDV	$8, R4; \
-	BEQ	R7, R0, end; \
-xor_4_check:; \
-	SGTU	$4, R7, R8; \
-	BNE	R8, xor_2_check; \
-xor_4:; \
-	SUBV	$4, R7; \
-	MOVW	(R5), R10; \
-	MOVW	(R6), R11; \
-	XOR	R10, R11; \
-	MOVW	R11, (R4); \
-	ADDV	$4, R5; \
-	ADDV	$4, R6; \
-	ADDV	$4, R4; \
-	BEQ	R7, R0, end; \
-xor_2_check:; \
-	SGTU	$2, R7, R8; \
-	BNE	R8, xor_1; \
-xor_2:; \
-	SUBV	$2, R7; \
-	MOVH	(R5), R10; \
-	MOVH	(R6), R11; \
-	XOR	R10, R11; \
-	MOVH	R11, (R4); \
-	ADDV	$2, R5; \
-	ADDV	$2, R6; \
-	ADDV	$2, R4; \
-	BEQ	R7, R0, end; \
-xor_1:; \
-	MOVB	(R5), R10; \
-	MOVB	(R6), R11; \
-	XOR	R10, R11; \
-	MOVB	R11, (R4); \
-
-// func xorBytesBasic(dst, a, b *byte, n int)
-TEXT ·xorBytesBasic(SB), NOSPLIT, $0
+// func xorBytes(dst, a, b *byte, n int)
+TEXT ·xorBytes(SB), NOSPLIT, $0
 	MOVV	dst+0(FP), R4
 	MOVV	a+8(FP), R5
 	MOVV	b+16(FP), R6
 	MOVV	n+24(FP), R7
 
-	SMALL_TAIL
-
-xor_64_check:
-	SGTU	$64, R7, R8
-	BNE	R8, xor_32_check
-xor_64_loop:
-	SUBV	$64, R7
+	MOVV	$64, R9
+	BGEU	R7, R9, loop64	// n >= 64
+tail:
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_32	// n >= 32 && n < 64
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_16	// n >= 16 && n < 32
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_8	// n >= 8 && n < 16
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_4	// n >= 4 && n < 8
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_2	// n >= 2 && n < 4
+	SRLV	$1, R9
+	BGEU	R7, R9, xor_1	// n = 1
+
+loop64:
 	MOVV	(R5), R10
 	MOVV	8(R5), R11
 	MOVV	16(R5), R12
@@ -108,18 +62,18 @@ xor_64_loop:
 	MOVV	R15, 40(R4)
 	MOVV	R16, 48(R4)
 	MOVV	R17, 56(R4)
-	SGTU	$64, R7, R8
 	ADDV	$64, R5
 	ADDV	$64, R6
 	ADDV	$64, R4
-	BEQ	R8, xor_64_loop
-	BEQ	R7, end
+	SUBV	$64, R7
+	// 64 in R9
+	BGEU	R7, R9, loop64
+	BEQ	R7, R0, end
 
 xor_32_check:
-	SGTU	$32, R7, R8
-	BNE	R8, xor_16_check
+	SRLV	$1, R9
+	BLT	R7, R9, xor_16_check
 xor_32:
-	SUBV	$32, R7
 	MOVV	(R5), R10
 	MOVV	8(R5), R11
 	MOVV	16(R5), R12
@@ -139,13 +93,13 @@ xor_32:
 	ADDV	$32, R5
 	ADDV	$32, R6
 	ADDV	$32, R4
+	SUBV	$32, R7
 	BEQ	R7, R0, end
 
 xor_16_check:
-	SGTU	$16, R7, R8
-	BNE	R8, xor_8_check
+	SRLV	$1, R9
+	BLT	R7, R9, xor_8_check
 xor_16:
-	SUBV	$16, R7
 	MOVV	(R5), R10
 	MOVV	8(R5), R11
 	MOVV	(R6), R12
@@ -157,253 +111,56 @@ xor_16:
 	ADDV	$16, R5
 	ADDV	$16, R6
 	ADDV	$16, R4
-	BEQ	R7, R0, end
-
-	SMALL
-end:
-	RET
-
-// func xorBytesLSX(dst, a, b *byte, n int)
-TEXT ·xorBytesLSX(SB), NOSPLIT, $0
-	MOVV	dst+0(FP), R4
-	MOVV	a+8(FP), R5
-	MOVV	b+16(FP), R6
-	MOVV	n+24(FP), R7
-
-	SMALL_TAIL
-
-xor_128_lsx_check:
-	SGTU	$128, R7, R8
-	BNE	R8, xor_64_lsx_check
-xor_128_lsx_loop:
-	SUBV	$128, R7
-	VMOVQ	(R5), V0
-	VMOVQ	16(R5), V1
-	VMOVQ	32(R5), V2
-	VMOVQ	48(R5), V3
-	VMOVQ	64(R5), V4
-	VMOVQ	80(R5), V5
-	VMOVQ	96(R5), V6
-	VMOVQ	112(R5), V7
-	VMOVQ	(R6), V8
-	VMOVQ	16(R6), V9
-	VMOVQ	32(R6), V10
-	VMOVQ	48(R6), V11
-	VMOVQ	64(R6), V12
-	VMOVQ	80(R6), V13
-	VMOVQ	96(R6), V14
-	VMOVQ	112(R6), V15
-	VXORV	V0, V8, V8
-	VXORV	V1, V9, V9
-	VXORV	V2, V10, V10
-	VXORV	V3, V11, V11
-	VXORV	V4, V12, V12
-	VXORV	V5, V13, V13
-	VXORV	V6, V14, V14
-	VXORV	V7, V15, V15
-	VMOVQ	V8, (R4)
-	VMOVQ	V9, 16(R4)
-	VMOVQ	V10, 32(R4)
-	VMOVQ	V11, 48(R4)
-	VMOVQ	V12, 64(R4)
-	VMOVQ	V13, 80(R4)
-	VMOVQ	V14, 96(R4)
-	VMOVQ	V15, 112(R4)
-	SGTU	$128, R7, R8
-	ADDV	$128, R5
-	ADDV	$128, R6
-	ADDV	$128, R4
-	BEQ	R8, xor_128_lsx_loop
-	BEQ	R7, end
-
-xor_64_lsx_check:
-	SGTU	$64, R7, R8
-	BNE	R8, xor_32_lsx_check
-xor_64_lsx:
-	SUBV	$64, R7
-	VMOVQ	(R5), V0
-	VMOVQ	16(R5), V1
-	VMOVQ	32(R5), V2
-	VMOVQ	48(R5), V3
-	VMOVQ	(R6), V4
-	VMOVQ	16(R6), V5
-	VMOVQ	32(R6), V6
-	VMOVQ	48(R6), V7
-	VXORV	V0, V4, V4
-	VXORV	V1, V5, V5
-	VXORV	V2, V6, V6
-	VXORV	V3, V7, V7
-	VMOVQ	V4, (R4)
-	VMOVQ	V5, 16(R4)
-	VMOVQ	V6, 32(R4)
-	VMOVQ	V7, 48(R4)
-	ADDV	$64, R5
-	ADDV	$64, R6
-	ADDV	$64, R4
-	BEQ	R7, end
-
-xor_32_lsx_check:
-	SGTU	$32, R7, R8
-	BNE	R8, xor_16_lsx_check
-xor_32_lsx:
-	SUBV	$32, R7
-	VMOVQ	(R5), V0
-	VMOVQ	16(R5), V1
-	VMOVQ	(R6), V2
-	VMOVQ	16(R6), V3
-	VXORV	V0, V2, V2
-	VXORV	V1, V3, V3
-	VMOVQ	V2, (R4)
-	VMOVQ	V3, 16(R4)
-	ADDV	$32, R5
-	ADDV	$32, R6
-	ADDV	$32, R4
-	BEQ	R7, end
-
-xor_16_lsx_check:
-	SGTU	$16, R7, R8
-	BNE	R8, xor_8_check
-xor_16_lsx:
 	SUBV	$16, R7
-	VMOVQ	(R5), V0
-	VMOVQ	(R6), V1
-	VXORV	V0, V1, V1
-	VMOVQ	V1, (R4)
-	ADDV	$16, R5
-	ADDV	$16, R6
-	ADDV	$16, R4
-	BEQ	R7, end
-
-	SMALL
-end:
-	RET
-
-// func xorBytesLASX(dst, a, b *byte, n int)
-TEXT ·xorBytesLASX(SB), NOSPLIT, $0
-	MOVV	dst+0(FP), R4
-	MOVV	a+8(FP), R5
-	MOVV	b+16(FP), R6
-	MOVV	n+24(FP), R7
-
-	SMALL_TAIL
-
-xor_256_lasx_check:
-	SGTU	$256, R7, R8
-	BNE	R8, xor_128_lasx_check
-xor_256_lasx_loop:
-	SUBV	$256, R7
-	XVMOVQ	(R5), X0
-	XVMOVQ	32(R5), X1
-	XVMOVQ	64(R5), X2
-	XVMOVQ	96(R5), X3
-	XVMOVQ	128(R5), X4
-	XVMOVQ	160(R5), X5
-	XVMOVQ	192(R5), X6
-	XVMOVQ	224(R5), X7
-	XVMOVQ	(R6), X8
-	XVMOVQ	32(R6), X9
-	XVMOVQ	64(R6), X10
-	XVMOVQ	96(R6), X11
-	XVMOVQ	128(R6), X12
-	XVMOVQ	160(R6), X13
-	XVMOVQ	192(R6), X14
-	XVMOVQ	224(R6), X15
-	XVXORV	X0, X8, X8
-	XVXORV	X1, X9, X9
-	XVXORV	X2, X10, X10
-	XVXORV	X3, X11, X11
-	XVXORV	X4, X12, X12
-	XVXORV	X5, X13, X13
-	XVXORV	X6, X14, X14
-	XVXORV	X7, X15, X15
-	XVMOVQ	X8, (R4)
-	XVMOVQ	X9, 32(R4)
-	XVMOVQ	X10, 64(R4)
-	XVMOVQ	X11, 96(R4)
-	XVMOVQ	X12, 128(R4)
-	XVMOVQ	X13, 160(R4)
-	XVMOVQ	X14, 192(R4)
-	XVMOVQ	X15, 224(R4)
-	SGTU	$256, R7, R8
-	ADDV	$256, R5
-	ADDV	$256, R6
-	ADDV	$256, R4
-	BEQ	R8, xor_256_lasx_loop
-	BEQ	R7, end
+	BEQ	R7, R0, end
 
-xor_128_lasx_check:
-	SGTU	$128, R7, R8
-	BNE	R8, xor_64_lasx_check
-xor_128_lasx:
-	SUBV	$128, R7
-	XVMOVQ	(R5), X0
-	XVMOVQ	32(R5), X1
-	XVMOVQ	64(R5), X2
-	XVMOVQ	96(R5), X3
-	XVMOVQ	(R6), X4
-	XVMOVQ	32(R6), X5
-	XVMOVQ	64(R6), X6
-	XVMOVQ	96(R6), X7
-	XVXORV	X0, X4, X4
-	XVXORV	X1, X5, X5
-	XVXORV	X2, X6, X6
-	XVXORV	X3, X7, X7
-	XVMOVQ	X4, (R4)
-	XVMOVQ	X5, 32(R4)
-	XVMOVQ	X6, 64(R4)
-	XVMOVQ	X7, 96(R4)
-	ADDV	$128, R5
-	ADDV	$128, R6
-	ADDV	$128, R4
-	BEQ	R7, end
+xor_8_check:
+	SRLV	$1, R9
+	BLT	R7, R9, xor_4_check
+xor_8:
+	MOVV	(R5), R10
+	MOVV	(R6), R11
+	XOR	R10, R11
+	MOVV	R11, (R4)
+	ADDV	$8, R5
+	ADDV	$8, R6
+	ADDV	$8, R4
+	SUBV	$8, R7
+	BEQ	R7, R0, end
 
-xor_64_lasx_check:
-	SGTU	$64, R7, R8
-	BNE	R8, xor_32_lasx_check
-xor_64_lasx:
-	SUBV	$64, R7
-	XVMOVQ	(R5), X0
-	XVMOVQ	32(R5), X1
-	XVMOVQ	(R6), X2
-	XVMOVQ	32(R6), X3
-	XVXORV	X0, X2, X2
-	XVXORV	X1, X3, X3
-	XVMOVQ	X2, (R4)
-	XVMOVQ	X3, 32(R4)
-	ADDV	$64, R5
-	ADDV	$64, R6
-	ADDV	$64, R4
-	BEQ	R7, end
+xor_4_check:
+	SRLV	$1, R9
+	BLT	R7, R9, xor_2_check
+xor_4:
+	MOVW	(R5), R10
+	MOVW	(R6), R11
+	XOR	R10, R11
+	MOVW	R11, (R4)
+	ADDV	$4, R5
+	ADDV	$4, R6
+	ADDV	$4, R4
+	SUBV	$4, R7
+	BEQ	R7, R0, end
 
-xor_32_lasx_check:
-	SGTU	$32, R7, R8
-	BNE	R8, xor_16_lasx_check
-xor_32_lasx:
-	SUBV	$32, R7
-	XVMOVQ	(R5), X0
-	XVMOVQ	(R6), X1
-	XVXORV	X0, X1, X1
-	XVMOVQ	X1, (R4)
-	ADDV	$32, R5
-	ADDV	$32, R6
-	ADDV	$32, R4
-	BEQ	R7, end
+xor_2_check:
+	SRLV	$1, R9
+	BLT	R7, R9, xor_1
+xor_2:
+	MOVH	(R5), R10
+	MOVH	(R6), R11
+	XOR	R10, R11
+	MOVH	R11, (R4)
+	ADDV	$2, R5
+	ADDV	$2, R6
+	ADDV	$2, R4
+	SUBV	$2, R7
+	BEQ	R7, R0, end
 
-xor_16_lasx_check:
-	SGTU	$16, R7, R8
-	BNE	R8, xor_8_check
-xor_16_lasx:
-	SUBV	$16, R7
-	VMOVQ	(R5), V0
-	VMOVQ	(R6), V1
-	VXORV	V0, V1, V1
-	VMOVQ	V1, (R4)
-	ADDV	$16, R5
-	ADDV	$16, R6
-	ADDV	$16, R4
-	BEQ	R7, end
+xor_1:
+	MOVB	(R5), R10
+	MOVB	(R6), R11
+	XOR	R10, R11
+	MOVB	R11, (R4)
 
-	SMALL
 end:
 	RET
-
diff --git a/src/crypto/internal/fips140/subtle/xor_mips64x.s b/src/crypto/internal/fips140/subtle/xor_mips64x.s
deleted file mode 100644
index e580235914aeaf..00000000000000
--- a/src/crypto/internal/fips140/subtle/xor_mips64x.s
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2025 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.
-
-//go:build (mips64 || mips64le) && !purego
-
-#include "textflag.h"
-
-// func xorBytes(dst, a, b *byte, n int)
-TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
-	MOVV	dst+0(FP), R1
-	MOVV	a+8(FP), R2
-	MOVV	b+16(FP), R3
-	MOVV	n+24(FP), R4
-
-xor_64_check:
-	SGTU	$64, R4, R5 // R5 = 1 if (64 > R4)
-	BNE	R5, xor_32_check
-xor_64:
-	MOVV	(R2), R6
-	MOVV	8(R2), R7
-	MOVV	16(R2), R8
-	MOVV	24(R2), R9
-	MOVV	(R3), R10
-	MOVV	8(R3), R11
-	MOVV	16(R3), R12
-	MOVV	24(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVV	R10, (R1)
-	MOVV	R11, 8(R1)
-	MOVV	R12, 16(R1)
-	MOVV	R13, 24(R1)
-	MOVV	32(R2), R6
-	MOVV	40(R2), R7
-	MOVV	48(R2), R8
-	MOVV	56(R2), R9
-	MOVV	32(R3), R10
-	MOVV	40(R3), R11
-	MOVV	48(R3), R12
-	MOVV	56(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVV	R10, 32(R1)
-	MOVV	R11, 40(R1)
-	MOVV	R12, 48(R1)
-	MOVV	R13, 56(R1)
-	ADDV	$64, R2
-	ADDV	$64, R3
-	ADDV	$64, R1
-	SUBV	$64, R4
-	SGTU	$64, R4, R5
-	BEQ	R0, R5, xor_64
-	BEQ	R0, R4, end
-
-xor_32_check:
-	SGTU	$32, R4, R5
-	BNE	R5, xor_16_check
-xor_32:
-	MOVV	(R2), R6
-	MOVV	8(R2), R7
-	MOVV	16(R2), R8
-	MOVV	24(R2), R9
-	MOVV	(R3), R10
-	MOVV	8(R3), R11
-	MOVV	16(R3), R12
-	MOVV	24(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVV	R10, (R1)
-	MOVV	R11, 8(R1)
-	MOVV	R12, 16(R1)
-	MOVV	R13, 24(R1)
-	ADDV	$32, R2
-	ADDV	$32, R3
-	ADDV	$32, R1
-	SUBV	$32, R4
-	BEQ	R0, R4, end
-
-xor_16_check:
-	SGTU	$16, R4, R5
-	BNE	R5, xor_8_check
-xor_16:
-	MOVV	(R2), R6
-	MOVV	8(R2), R7
-	MOVV	(R3), R8
-	MOVV	8(R3), R9
-	XOR	R6, R8
-	XOR	R7, R9
-	MOVV	R8, (R1)
-	MOVV	R9, 8(R1)
-	ADDV	$16, R2
-	ADDV	$16, R3
-	ADDV	$16, R1
-	SUBV	$16, R4
-	BEQ	R0, R4, end
-
-xor_8_check:
-	SGTU	$8, R4, R5
-	BNE	R5, xor_4_check
-xor_8:
-	MOVV	(R2), R6
-	MOVV	(R3), R7
-	XOR	R6, R7
-	MOVV	R7, (R1)
-	ADDV	$8, R1
-	ADDV	$8, R2
-	ADDV	$8, R3
-	SUBV	$8, R4
-	BEQ	R0, R4, end
-
-xor_4_check:
-	SGTU	$4, R4, R5
-	BNE	R5, xor_2_check
-xor_4:
-	MOVW	(R2), R6
-	MOVW	(R3), R7
-	XOR	R6, R7
-	MOVW	R7, (R1)
-	ADDV	$4, R2
-	ADDV	$4, R3
-	ADDV	$4, R1
-	SUBV	$4, R4
-	BEQ	R0, R4, end
-
-xor_2_check:
-	SGTU	$2, R4, R5
-	BNE	R5, xor_1
-xor_2:
-	MOVH	(R2), R6
-	MOVH	(R3), R7
-	XOR	R6, R7
-	MOVH	R7, (R1)
-	ADDV	$2, R2
-	ADDV	$2, R3
-	ADDV	$2, R1
-	SUBV	$2, R4
-	BEQ	R0, R4, end
-
-xor_1:
-	MOVB	(R2), R6
-	MOVB	(R3), R7
-	XOR	R6, R7
-	MOVB	R7, (R1)
-
-end:
-	RET
diff --git a/src/crypto/internal/fips140/subtle/xor_mipsx.s b/src/crypto/internal/fips140/subtle/xor_mipsx.s
deleted file mode 100644
index 1a6b3f409dddc9..00000000000000
--- a/src/crypto/internal/fips140/subtle/xor_mipsx.s
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2025 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.
-
-//go:build (mips || mipsle) && !purego
-
-#include "textflag.h"
-
-// func xorBytes(dst, a, b *byte, n int)
-TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
-	MOVW	dst+0(FP), R1
-	MOVW	a+4(FP), R2
-	MOVW	b+8(FP), R3
-	MOVW	n+12(FP), R4
-
-	SGTU	$64, R4, R5 // R5 = 1 if (64 > R4)
-	BNE	R5, xor_32_check
-xor_64:
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	MOVW	8(R2), R8
-	MOVW	12(R2), R9
-	MOVW	(R3), R10
-	MOVW	4(R3), R11
-	MOVW	8(R3), R12
-	MOVW	12(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, (R1)
-	MOVW	R11, 4(R1)
-	MOVW	R12, 8(R1)
-	MOVW	R13, 12(R1)
-	MOVW	16(R2), R6
-	MOVW	20(R2), R7
-	MOVW	24(R2), R8
-	MOVW	28(R2), R9
-	MOVW	16(R3), R10
-	MOVW	20(R3), R11
-	MOVW	24(R3), R12
-	MOVW	28(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, 16(R1)
-	MOVW	R11, 20(R1)
-	MOVW	R12, 24(R1)
-	MOVW	R13, 28(R1)
-	MOVW	32(R2), R6
-	MOVW	36(R2), R7
-	MOVW	40(R2), R8
-	MOVW	44(R2), R9
-	MOVW	32(R3), R10
-	MOVW	36(R3), R11
-	MOVW	40(R3), R12
-	MOVW	44(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, 32(R1)
-	MOVW	R11, 36(R1)
-	MOVW	R12, 40(R1)
-	MOVW	R13, 44(R1)
-	MOVW	48(R2), R6
-	MOVW	52(R2), R7
-	MOVW	56(R2), R8
-	MOVW	60(R2), R9
-	MOVW	48(R3), R10
-	MOVW	52(R3), R11
-	MOVW	56(R3), R12
-	MOVW	60(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, 48(R1)
-	MOVW	R11, 52(R1)
-	MOVW	R12, 56(R1)
-	MOVW	R13, 60(R1)
-	ADD	$64, R2
-	ADD	$64, R3
-	ADD	$64, R1
-	SUB	$64, R4
-	SGTU	$64, R4, R5
-	BEQ	R0, R5, xor_64
-	BEQ	R0, R4, end
-
-xor_32_check:
-	SGTU	$32, R4, R5
-	BNE	R5, xor_16_check
-xor_32:
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	MOVW	8(R2), R8
-	MOVW	12(R2), R9
-	MOVW	(R3), R10
-	MOVW	4(R3), R11
-	MOVW	8(R3), R12
-	MOVW	12(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, (R1)
-	MOVW	R11, 4(R1)
-	MOVW	R12, 8(R1)
-	MOVW	R13, 12(R1)
-	MOVW	16(R2), R6
-	MOVW	20(R2), R7
-	MOVW	24(R2), R8
-	MOVW	28(R2), R9
-	MOVW	16(R3), R10
-	MOVW	20(R3), R11
-	MOVW	24(R3), R12
-	MOVW	28(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, 16(R1)
-	MOVW	R11, 20(R1)
-	MOVW	R12, 24(R1)
-	MOVW	R13, 28(R1)
-	ADD	$32, R2
-	ADD	$32, R3
-	ADD	$32, R1
-	SUB	$32, R4
-	BEQ	R0, R4, end
-
-xor_16_check:
-	SGTU	$16, R4, R5
-	BNE	R5, xor_8_check
-xor_16:
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	MOVW	8(R2), R8
-	MOVW	12(R2), R9
-	MOVW	(R3), R10
-	MOVW	4(R3), R11
-	MOVW	8(R3), R12
-	MOVW	12(R3), R13
-	XOR	R6, R10
-	XOR	R7, R11
-	XOR	R8, R12
-	XOR	R9, R13
-	MOVW	R10, (R1)
-	MOVW	R11, 4(R1)
-	MOVW	R12, 8(R1)
-	MOVW	R13, 12(R1)
-	ADD	$16, R2
-	ADD	$16, R3
-	ADD	$16, R1
-	SUB	$16, R4
-	BEQ	R0, R4, end
-
-xor_8_check:
-	SGTU	$8, R4, R5
-	BNE	R5, xor_4_check
-xor_8:
-	MOVW	(R2), R6
-	MOVW	4(R2), R7
-	MOVW	(R3), R8
-	MOVW	4(R3), R9
-	XOR	R6, R8
-	XOR	R7, R9
-	MOVW	R8, (R1)
-	MOVW	R9, 4(R1)
-	ADD	$8, R1
-	ADD	$8, R2
-	ADD	$8, R3
-	SUB	$8, R4
-	BEQ	R0, R4, end
-
-xor_4_check:
-	SGTU	$4, R4, R5
-	BNE	R5, xor_2_check
-xor_4:
-	MOVW	(R2), R6
-	MOVW	(R3), R7
-	XOR	R6, R7
-	MOVW	R7, (R1)
-	ADD	$4, R2
-	ADD	$4, R3
-	ADD	$4, R1
-	SUB	$4, R4
-	BEQ	R0, R4, end
-
-xor_2_check:
-	SGTU	$2, R4, R5
-	BNE	R5, xor_1
-xor_2:
-	MOVH	(R2), R6
-	MOVH	(R3), R7
-	XOR	R6, R7
-	MOVH	R7, (R1)
-	ADD	$2, R2
-	ADD	$2, R3
-	ADD	$2, R1
-	SUB	$2, R4
-	BEQ	R0, R4, end
-
-xor_1:
-	MOVB	(R2), R6
-	MOVB	(R3), R7
-	XOR	R6, R7
-	MOVB	R7, (R1)
-
-end:
-	RET
diff --git a/src/crypto/internal/fips140/tls12/tls12.go b/src/crypto/internal/fips140/tls12/tls12.go
index 5b4dcae101f3d5..b07e02c85f2ff8 100644
--- a/src/crypto/internal/fips140/tls12/tls12.go
+++ b/src/crypto/internal/fips140/tls12/tls12.go
@@ -9,12 +9,11 @@ import (
 	"crypto/internal/fips140/hmac"
 	"crypto/internal/fips140/sha256"
 	"crypto/internal/fips140/sha512"
-	"hash"
 )
 
 // PRF implements the TLS 1.2 pseudo-random function, as defined in RFC 5246,
 // Section 5 and allowed by SP 800-135, Revision 1, Section 4.2.2.
-func PRF[H hash.Hash](hash func() H, secret []byte, label string, seed []byte, keyLen int) []byte {
+func PRF[H fips140.Hash](hash func() H, secret []byte, label string, seed []byte, keyLen int) []byte {
 	labelAndSeed := make([]byte, len(label)+len(seed))
 	copy(labelAndSeed, label)
 	copy(labelAndSeed[len(label):], seed)
@@ -25,7 +24,7 @@ func PRF[H hash.Hash](hash func() H, secret []byte, label string, seed []byte, k
 }
 
 // pHash implements the P_hash function, as defined in RFC 5246, Section 5.
-func pHash[H hash.Hash](hash func() H, result, secret, seed []byte) {
+func pHash[H fips140.Hash](hash func() H, result, secret, seed []byte) {
 	h := hmac.New(hash, secret)
 	h.Write(seed)
 	a := h.Sum(nil)
@@ -49,7 +48,7 @@ const extendedMasterSecretLabel = "extended master secret"
 
 // MasterSecret implements the TLS 1.2 extended master secret derivation, as
 // defined in RFC 7627 and allowed by SP 800-135, Revision 1, Section 4.2.2.
-func MasterSecret[H hash.Hash](hash func() H, preMasterSecret, transcript []byte) []byte {
+func MasterSecret[H fips140.Hash](hash func() H, preMasterSecret, transcript []byte) []byte {
 	// "The TLS 1.2 KDF is an approved KDF when the following conditions are
 	// satisfied: [...] (3) P_HASH uses either SHA-256, SHA-384 or SHA-512."
 	h := hash()
diff --git a/src/crypto/internal/fips140/tls13/tls13.go b/src/crypto/internal/fips140/tls13/tls13.go
index f2c2423a2579a5..009844a5078f67 100644
--- a/src/crypto/internal/fips140/tls13/tls13.go
+++ b/src/crypto/internal/fips140/tls13/tls13.go
@@ -7,9 +7,9 @@
 package tls13
 
 import (
+	"crypto/internal/fips140"
 	"crypto/internal/fips140/hkdf"
 	"crypto/internal/fips140deps/byteorder"
-	"hash"
 )
 
 // We don't set the service indicator in this package but we delegate that to
@@ -17,7 +17,7 @@ import (
 // its own.
 
 // ExpandLabel implements HKDF-Expand-Label from RFC 8446, Section 7.1.
-func ExpandLabel[H hash.Hash](hash func() H, secret []byte, label string, context []byte, length int) []byte {
+func ExpandLabel[H fips140.Hash](hash func() H, secret []byte, label string, context []byte, length int) []byte {
 	if len("tls13 ")+len(label) > 255 || len(context) > 255 {
 		// It should be impossible for this to panic: labels are fixed strings,
 		// and context is either a fixed-length computed hash, or parsed from a
@@ -39,14 +39,14 @@ func ExpandLabel[H hash.Hash](hash func() H, secret []byte, label string, contex
 	return hkdf.Expand(hash, secret, string(hkdfLabel), length)
 }
 
-func extract[H hash.Hash](hash func() H, newSecret, currentSecret []byte) []byte {
+func extract[H fips140.Hash](hash func() H, newSecret, currentSecret []byte) []byte {
 	if newSecret == nil {
 		newSecret = make([]byte, hash().Size())
 	}
 	return hkdf.Extract(hash, newSecret, currentSecret)
 }
 
-func deriveSecret[H hash.Hash](hash func() H, secret []byte, label string, transcript hash.Hash) []byte {
+func deriveSecret[H fips140.Hash](hash func() H, secret []byte, label string, transcript fips140.Hash) []byte {
 	if transcript == nil {
 		transcript = hash()
 	}
@@ -67,13 +67,13 @@ const (
 
 type EarlySecret struct {
 	secret []byte
-	hash   func() hash.Hash
+	hash   func() fips140.Hash
 }
 
-func NewEarlySecret[H hash.Hash](h func() H, psk []byte) *EarlySecret {
+func NewEarlySecret[H fips140.Hash](hash func() H, psk []byte) *EarlySecret {
 	return &EarlySecret{
-		secret: extract(h, psk, nil),
-		hash:   func() hash.Hash { return h() },
+		secret: extract(hash, psk, nil),
+		hash:   func() fips140.Hash { return hash() },
 	}
 }
 
@@ -83,13 +83,13 @@ func (s *EarlySecret) ResumptionBinderKey() []byte {
 
 // ClientEarlyTrafficSecret derives the client_early_traffic_secret from the
 // early secret and the transcript up to the ClientHello.
-func (s *EarlySecret) ClientEarlyTrafficSecret(transcript hash.Hash) []byte {
+func (s *EarlySecret) ClientEarlyTrafficSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, clientEarlyTrafficLabel, transcript)
 }
 
 type HandshakeSecret struct {
 	secret []byte
-	hash   func() hash.Hash
+	hash   func() fips140.Hash
 }
 
 func (s *EarlySecret) HandshakeSecret(sharedSecret []byte) *HandshakeSecret {
@@ -102,19 +102,19 @@ func (s *EarlySecret) HandshakeSecret(sharedSecret []byte) *HandshakeSecret {
 
 // ClientHandshakeTrafficSecret derives the client_handshake_traffic_secret from
 // the handshake secret and the transcript up to the ServerHello.
-func (s *HandshakeSecret) ClientHandshakeTrafficSecret(transcript hash.Hash) []byte {
+func (s *HandshakeSecret) ClientHandshakeTrafficSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, clientHandshakeTrafficLabel, transcript)
 }
 
 // ServerHandshakeTrafficSecret derives the server_handshake_traffic_secret from
 // the handshake secret and the transcript up to the ServerHello.
-func (s *HandshakeSecret) ServerHandshakeTrafficSecret(transcript hash.Hash) []byte {
+func (s *HandshakeSecret) ServerHandshakeTrafficSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, serverHandshakeTrafficLabel, transcript)
 }
 
 type MasterSecret struct {
 	secret []byte
-	hash   func() hash.Hash
+	hash   func() fips140.Hash
 }
 
 func (s *HandshakeSecret) MasterSecret() *MasterSecret {
@@ -127,30 +127,30 @@ func (s *HandshakeSecret) MasterSecret() *MasterSecret {
 
 // ClientApplicationTrafficSecret derives the client_application_traffic_secret_0
 // from the master secret and the transcript up to the server Finished.
-func (s *MasterSecret) ClientApplicationTrafficSecret(transcript hash.Hash) []byte {
+func (s *MasterSecret) ClientApplicationTrafficSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, clientApplicationTrafficLabel, transcript)
 }
 
 // ServerApplicationTrafficSecret derives the server_application_traffic_secret_0
 // from the master secret and the transcript up to the server Finished.
-func (s *MasterSecret) ServerApplicationTrafficSecret(transcript hash.Hash) []byte {
+func (s *MasterSecret) ServerApplicationTrafficSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, serverApplicationTrafficLabel, transcript)
 }
 
 // ResumptionMasterSecret derives the resumption_master_secret from the master secret
 // and the transcript up to the client Finished.
-func (s *MasterSecret) ResumptionMasterSecret(transcript hash.Hash) []byte {
+func (s *MasterSecret) ResumptionMasterSecret(transcript fips140.Hash) []byte {
 	return deriveSecret(s.hash, s.secret, resumptionLabel, transcript)
 }
 
 type ExporterMasterSecret struct {
 	secret []byte
-	hash   func() hash.Hash
+	hash   func() fips140.Hash
 }
 
 // ExporterMasterSecret derives the exporter_master_secret from the master secret
 // and the transcript up to the server Finished.
-func (s *MasterSecret) ExporterMasterSecret(transcript hash.Hash) *ExporterMasterSecret {
+func (s *MasterSecret) ExporterMasterSecret(transcript fips140.Hash) *ExporterMasterSecret {
 	return &ExporterMasterSecret{
 		secret: deriveSecret(s.hash, s.secret, exporterLabel, transcript),
 		hash:   s.hash,
@@ -159,7 +159,7 @@ func (s *MasterSecret) ExporterMasterSecret(transcript hash.Hash) *ExporterMaste
 
 // EarlyExporterMasterSecret derives the exporter_master_secret from the early secret
 // and the transcript up to the ClientHello.
-func (s *EarlySecret) EarlyExporterMasterSecret(transcript hash.Hash) *ExporterMasterSecret {
+func (s *EarlySecret) EarlyExporterMasterSecret(transcript fips140.Hash) *ExporterMasterSecret {
 	return &ExporterMasterSecret{
 		secret: deriveSecret(s.hash, s.secret, earlyExporterLabel, transcript),
 		hash:   s.hash,
diff --git a/src/crypto/internal/fips140cache/cache.go b/src/crypto/internal/fips140cache/cache.go
deleted file mode 100644
index bfa588b1472b97..00000000000000
--- a/src/crypto/internal/fips140cache/cache.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package fips140cache provides a weak map that associates the lifetime of
-// values with the lifetime of keys.
-//
-// It can be used to associate a precomputed value (such as an internal/fips140
-// PrivateKey value, which in FIPS 140-3 mode may have required an expensive
-// pairwise consistency test) with a type that doesn't have private fields (such
-// as an ed25519.PrivateKey), or that can't be safely modified because it may be
-// concurrently copied (such as an ecdsa.PrivateKey).
-package fips140cache
-
-import (
-	"runtime"
-	"sync"
-	"weak"
-)
-
-type Cache[K, V any] struct {
-	m sync.Map
-}
-
-// Get returns the result of new, for an associated key k.
-//
-// If Get was called with k before and didn't return an error, Get may return
-// the same value it returned from the previous call if check returns true on
-// it. If check returns false, Get will call new again and return the result.
-//
-// The cache is evicted some time after k becomes unreachable.
-func (c *Cache[K, V]) Get(k *K, new func() (*V, error), check func(*V) bool) (*V, error) {
-	p := weak.Make(k)
-	if cached, ok := c.m.Load(p); ok {
-		v := cached.(*V)
-		if check(v) {
-			return v, nil
-		}
-	}
-	v, err := new()
-	if err != nil {
-		return nil, err
-	}
-	if _, present := c.m.Swap(p, v); !present {
-		runtime.AddCleanup(k, c.evict, p)
-	}
-	return v, nil
-}
-
-func (c *Cache[K, V]) evict(p weak.Pointer[K]) {
-	c.m.Delete(p)
-}
diff --git a/src/crypto/internal/fips140cache/cache_test.go b/src/crypto/internal/fips140cache/cache_test.go
deleted file mode 100644
index 5f9139727923aa..00000000000000
--- a/src/crypto/internal/fips140cache/cache_test.go
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2025 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package fips140cache
-
-import (
-	"context"
-	"errors"
-	"runtime"
-	"sync"
-	"testing"
-	"time"
-)
-
-func TestCache(t *testing.T) {
-	c := new(Cache[key, value])
-	checkTrue := func(*value) bool { return true }
-	checkFalse := func(*value) bool { return false }
-	newNotCalled := func() (*value, error) {
-		t.Helper()
-		t.Fatal("new called")
-		return nil, nil
-	}
-
-	k1 := newKey()
-	v1 := &value{}
-
-	v, err := c.Get(k1, func() (*value, error) { return v1, nil }, checkTrue)
-	expectValue(t, v, err, v1)
-
-	// Cached value is returned if check is true.
-	v, err = c.Get(k1, newNotCalled, checkTrue)
-	expectValue(t, v, err, v1)
-
-	// New value is returned and cached if check is false.
-	v2 := &value{}
-	v, err = c.Get(k1, func() (*value, error) { return v2, nil }, checkFalse)
-	expectValue(t, v, err, v2)
-	v, err = c.Get(k1, newNotCalled, checkTrue)
-	expectValue(t, v, err, v2)
-	expectMapSize(t, c, 1)
-
-	// Cache is evicted when key becomes unreachable.
-	waitUnreachable(t, &k1)
-	expectMapSize(t, c, 0)
-
-	// Value is not cached if new returns an error.
-	k2 := newKey()
-	err1 := errors.New("error")
-	_, err = c.Get(k2, func() (*value, error) { return nil, err1 }, checkTrue)
-	if err != err1 {
-		t.Errorf("got %v, want %v", err, err1)
-	}
-	expectMapSize(t, c, 0)
-
-	// Value is not replaced if check is false and new returns an error.
-	v, err = c.Get(k2, func() (*value, error) { return v1, nil }, checkTrue)
-	expectValue(t, v, err, v1)
-	_, err = c.Get(k2, func() (*value, error) { return v2, err1 }, checkFalse)
-	if err != err1 {
-		t.Errorf("got %v, want %v", err, err1)
-	}
-	v, err = c.Get(k2, newNotCalled, checkTrue)
-	expectValue(t, v, err, v1)
-	expectMapSize(t, c, 1)
-
-	// Cache is evicted for keys used only once.
-	k3 := newKey()
-	v, err = c.Get(k3, func() (*value, error) { return v1, nil }, checkTrue)
-	expectValue(t, v, err, v1)
-	expectMapSize(t, c, 2)
-	waitUnreachable(t, &k2)
-	waitUnreachable(t, &k3)
-	expectMapSize(t, c, 0)
-
-	// When two goroutines race, the returned value may be the new or old one,
-	// but the map must shrink to 0.
-	keys := make([]*key, 100)
-	for i := range keys {
-		keys[i] = newKey()
-		v1, v2 := &value{}, &value{}
-		start := make(chan struct{})
-		var wg sync.WaitGroup
-		wg.Add(2)
-		go func() {
-			<-start
-			v, err := c.Get(keys[i], func() (*value, error) { return v1, nil }, checkTrue)
-			expectValue(t, v, err, v1, v2)
-			wg.Done()
-		}()
-		go func() {
-			<-start
-			v, err := c.Get(keys[i], func() (*value, error) { return v2, nil }, checkTrue)
-			expectValue(t, v, err, v1, v2)
-			wg.Done()
-		}()
-		close(start)
-		wg.Wait()
-		v3 := &value{}
-		v, err := c.Get(keys[i], func() (*value, error) { return v3, nil }, checkTrue)
-		expectValue(t, v, err, v1, v2)
-	}
-	for i := range keys {
-		waitUnreachable(t, &keys[i])
-	}
-	expectMapSize(t, c, 0)
-}
-
-type key struct {
-	_ *int
-}
-
-type value struct {
-	_ *int
-}
-
-// newKey allocates a key value on the heap.
-//
-//go:noinline
-func newKey() *key {
-	return &key{}
-}
-
-func expectValue(t *testing.T, v *value, err error, want ...*value) {
-	t.Helper()
-	if err != nil {
-		t.Fatal(err)
-	}
-	for _, w := range want {
-		if v == w {
-			return
-		}
-	}
-	t.Errorf("got %p, want %p", v, want)
-}
-
-func expectMapSize(t *testing.T, c *Cache[key, value], want int) {
-	t.Helper()
-	var size int
-	// Loop a few times because the AddCleanup might not be done yet.
-	for range 10 {
-		size = 0
-		c.m.Range(func(_, _ any) bool {
-			size++
-			return true
-		})
-		if size == want {
-			return
-		}
-		time.Sleep(100 * time.Millisecond)
-	}
-	t.Errorf("got %d, want %d", size, want)
-}
-
-func waitUnreachable(t *testing.T, k **key) {
-	ctx, cancel := context.WithCancel(t.Context())
-	defer cancel()
-	runtime.AddCleanup(*k, func(_ *int) { cancel() }, nil)
-	*k = nil
-	for ctx.Err() == nil {
-		runtime.GC()
-	}
-	if ctx.Err() != context.Canceled {
-		t.Fatal(ctx.Err())
-	}
-}
diff --git a/src/crypto/internal/fips140deps/cpu/cpu.go b/src/crypto/internal/fips140deps/cpu/cpu.go
index 2dfcc1a4d4aae3..cc9ac0035a140b 100644
--- a/src/crypto/internal/fips140deps/cpu/cpu.go
+++ b/src/crypto/internal/fips140deps/cpu/cpu.go
@@ -22,10 +22,6 @@ var (
 	ARM64HasPMULL  = cpu.ARM64.HasPMULL
 	ARM64HasSHA2   = cpu.ARM64.HasSHA2
 	ARM64HasSHA512 = cpu.ARM64.HasSHA512
-	ARM64HasSHA3   = cpu.ARM64.HasSHA3
-
-	LOONG64HasLSX  = cpu.Loong64.HasLSX
-	LOONG64HasLASX = cpu.Loong64.HasLASX
 
 	S390XHasAES    = cpu.S390X.HasAES
 	S390XHasAESCBC = cpu.S390X.HasAESCBC
diff --git a/src/crypto/internal/fips140test/acvp_test.go b/src/crypto/internal/fips140test/acvp_test.go
index 5871bde8be4b2b..ddb234bab655e1 100644
--- a/src/crypto/internal/fips140test/acvp_test.go
+++ b/src/crypto/internal/fips140test/acvp_test.go
@@ -50,7 +50,6 @@ import (
 	"encoding/binary"
 	"errors"
 	"fmt"
-	"hash"
 	"internal/testenv"
 	"io"
 	"math/big"
@@ -199,32 +198,32 @@ var (
 		"cSHAKE-256":     cmdCShakeAft(func(N, S []byte) *sha3.SHAKE { return sha3.NewCShake256(N, S) }),
 		"cSHAKE-256/MCT": cmdCShakeMct(func(N, S []byte) *sha3.SHAKE { return sha3.NewCShake256(N, S) }),
 
-		"HMAC-SHA2-224":     cmdHmacAft(func() hash.Hash { return sha256.New224() }),
-		"HMAC-SHA2-256":     cmdHmacAft(func() hash.Hash { return sha256.New() }),
-		"HMAC-SHA2-384":     cmdHmacAft(func() hash.Hash { return sha512.New384() }),
-		"HMAC-SHA2-512":     cmdHmacAft(func() hash.Hash { return sha512.New() }),
-		"HMAC-SHA2-512/224": cmdHmacAft(func() hash.Hash { return sha512.New512_224() }),
-		"HMAC-SHA2-512/256": cmdHmacAft(func() hash.Hash { return sha512.New512_256() }),
-		"HMAC-SHA3-224":     cmdHmacAft(func() hash.Hash { return sha3.New224() }),
-		"HMAC-SHA3-256":     cmdHmacAft(func() hash.Hash { return sha3.New256() }),
-		"HMAC-SHA3-384":     cmdHmacAft(func() hash.Hash { return sha3.New384() }),
-		"HMAC-SHA3-512":     cmdHmacAft(func() hash.Hash { return sha3.New512() }),
-
-		"HKDF/SHA2-224":     cmdHkdfAft(func() hash.Hash { return sha256.New224() }),
-		"HKDF/SHA2-256":     cmdHkdfAft(func() hash.Hash { return sha256.New() }),
-		"HKDF/SHA2-384":     cmdHkdfAft(func() hash.Hash { return sha512.New384() }),
-		"HKDF/SHA2-512":     cmdHkdfAft(func() hash.Hash { return sha512.New() }),
-		"HKDF/SHA2-512/224": cmdHkdfAft(func() hash.Hash { return sha512.New512_224() }),
-		"HKDF/SHA2-512/256": cmdHkdfAft(func() hash.Hash { return sha512.New512_256() }),
-		"HKDF/SHA3-224":     cmdHkdfAft(func() hash.Hash { return sha3.New224() }),
-		"HKDF/SHA3-256":     cmdHkdfAft(func() hash.Hash { return sha3.New256() }),
-		"HKDF/SHA3-384":     cmdHkdfAft(func() hash.Hash { return sha3.New384() }),
-		"HKDF/SHA3-512":     cmdHkdfAft(func() hash.Hash { return sha3.New512() }),
-
-		"HKDFExtract/SHA2-256":     cmdHkdfExtractAft(func() hash.Hash { return sha256.New() }),
-		"HKDFExtract/SHA2-384":     cmdHkdfExtractAft(func() hash.Hash { return sha512.New384() }),
-		"HKDFExpandLabel/SHA2-256": cmdHkdfExpandLabelAft(func() hash.Hash { return sha256.New() }),
-		"HKDFExpandLabel/SHA2-384": cmdHkdfExpandLabelAft(func() hash.Hash { return sha512.New384() }),
+		"HMAC-SHA2-224":     cmdHmacAft(func() fips140.Hash { return sha256.New224() }),
+		"HMAC-SHA2-256":     cmdHmacAft(func() fips140.Hash { return sha256.New() }),
+		"HMAC-SHA2-384":     cmdHmacAft(func() fips140.Hash { return sha512.New384() }),
+		"HMAC-SHA2-512":     cmdHmacAft(func() fips140.Hash { return sha512.New() }),
+		"HMAC-SHA2-512/224": cmdHmacAft(func() fips140.Hash { return sha512.New512_224() }),
+		"HMAC-SHA2-512/256": cmdHmacAft(func() fips140.Hash { return sha512.New512_256() }),
+		"HMAC-SHA3-224":     cmdHmacAft(func() fips140.Hash { return sha3.New224() }),
+		"HMAC-SHA3-256":     cmdHmacAft(func() fips140.Hash { return sha3.New256() }),
+		"HMAC-SHA3-384":     cmdHmacAft(func() fips140.Hash { return sha3.New384() }),
+		"HMAC-SHA3-512":     cmdHmacAft(func() fips140.Hash { return sha3.New512() }),
+
+		"HKDF/SHA2-224":     cmdHkdfAft(func() fips140.Hash { return sha256.New224() }),
+		"HKDF/SHA2-256":     cmdHkdfAft(func() fips140.Hash { return sha256.New() }),
+		"HKDF/SHA2-384":     cmdHkdfAft(func() fips140.Hash { return sha512.New384() }),
+		"HKDF/SHA2-512":     cmdHkdfAft(func() fips140.Hash { return sha512.New() }),
+		"HKDF/SHA2-512/224": cmdHkdfAft(func() fips140.Hash { return sha512.New512_224() }),
+		"HKDF/SHA2-512/256": cmdHkdfAft(func() fips140.Hash { return sha512.New512_256() }),
+		"HKDF/SHA3-224":     cmdHkdfAft(func() fips140.Hash { return sha3.New224() }),
+		"HKDF/SHA3-256":     cmdHkdfAft(func() fips140.Hash { return sha3.New256() }),
+		"HKDF/SHA3-384":     cmdHkdfAft(func() fips140.Hash { return sha3.New384() }),
+		"HKDF/SHA3-512":     cmdHkdfAft(func() fips140.Hash { return sha3.New512() }),
+
+		"HKDFExtract/SHA2-256":     cmdHkdfExtractAft(func() fips140.Hash { return sha256.New() }),
+		"HKDFExtract/SHA2-384":     cmdHkdfExtractAft(func() fips140.Hash { return sha512.New384() }),
+		"HKDFExpandLabel/SHA2-256": cmdHkdfExpandLabelAft(func() fips140.Hash { return sha256.New() }),
+		"HKDFExpandLabel/SHA2-384": cmdHkdfExpandLabelAft(func() fips140.Hash { return sha512.New384() }),
 
 		"PBKDF": cmdPbkdf(),
 
@@ -235,16 +234,16 @@ var (
 		"ML-KEM-1024/encap":  cmdMlKem1024EncapAft(),
 		"ML-KEM-1024/decap":  cmdMlKem1024DecapAft(),
 
-		"hmacDRBG/SHA2-224":     cmdHmacDrbgAft(func() hash.Hash { return sha256.New224() }),
-		"hmacDRBG/SHA2-256":     cmdHmacDrbgAft(func() hash.Hash { return sha256.New() }),
-		"hmacDRBG/SHA2-384":     cmdHmacDrbgAft(func() hash.Hash { return sha512.New384() }),
-		"hmacDRBG/SHA2-512":     cmdHmacDrbgAft(func() hash.Hash { return sha512.New() }),
-		"hmacDRBG/SHA2-512/224": cmdHmacDrbgAft(func() hash.Hash { return sha512.New512_224() }),
-		"hmacDRBG/SHA2-512/256": cmdHmacDrbgAft(func() hash.Hash { return sha512.New512_256() }),
-		"hmacDRBG/SHA3-224":     cmdHmacDrbgAft(func() hash.Hash { return sha3.New224() }),
-		"hmacDRBG/SHA3-256":     cmdHmacDrbgAft(func() hash.Hash { return sha3.New256() }),
-		"hmacDRBG/SHA3-384":     cmdHmacDrbgAft(func() hash.Hash { return sha3.New384() }),
-		"hmacDRBG/SHA3-512":     cmdHmacDrbgAft(func() hash.Hash { return sha3.New512() }),
+		"hmacDRBG/SHA2-224":     cmdHmacDrbgAft(func() fips140.Hash { return sha256.New224() }),
+		"hmacDRBG/SHA2-256":     cmdHmacDrbgAft(func() fips140.Hash { return sha256.New() }),
+		"hmacDRBG/SHA2-384":     cmdHmacDrbgAft(func() fips140.Hash { return sha512.New384() }),
+		"hmacDRBG/SHA2-512":     cmdHmacDrbgAft(func() fips140.Hash { return sha512.New() }),
+		"hmacDRBG/SHA2-512/224": cmdHmacDrbgAft(func() fips140.Hash { return sha512.New512_224() }),
+		"hmacDRBG/SHA2-512/256": cmdHmacDrbgAft(func() fips140.Hash { return sha512.New512_256() }),
+		"hmacDRBG/SHA3-224":     cmdHmacDrbgAft(func() fips140.Hash { return sha3.New224() }),
+		"hmacDRBG/SHA3-256":     cmdHmacDrbgAft(func() fips140.Hash { return sha3.New256() }),
+		"hmacDRBG/SHA3-384":     cmdHmacDrbgAft(func() fips140.Hash { return sha3.New384() }),
+		"hmacDRBG/SHA3-512":     cmdHmacDrbgAft(func() fips140.Hash { return sha3.New512() }),
 
 		"EDDSA/keyGen": cmdEddsaKeyGenAft(),
 		"EDDSA/keyVer": cmdEddsaKeyVerAft(),
@@ -271,20 +270,20 @@ var (
 
 		// Note: Only SHA2-256, SHA2-384 and SHA2-512 are valid hash functions for TLSKDF.
 		// 		 See https://pages.nist.gov/ACVP/draft-celi-acvp-kdf-tls.html#section-7.2.1
-		"TLSKDF/1.2/SHA2-256": cmdTlsKdf12Aft(func() hash.Hash { return sha256.New() }),
-		"TLSKDF/1.2/SHA2-384": cmdTlsKdf12Aft(func() hash.Hash { return sha512.New384() }),
-		"TLSKDF/1.2/SHA2-512": cmdTlsKdf12Aft(func() hash.Hash { return sha512.New() }),
+		"TLSKDF/1.2/SHA2-256": cmdTlsKdf12Aft(func() fips140.Hash { return sha256.New() }),
+		"TLSKDF/1.2/SHA2-384": cmdTlsKdf12Aft(func() fips140.Hash { return sha512.New384() }),
+		"TLSKDF/1.2/SHA2-512": cmdTlsKdf12Aft(func() fips140.Hash { return sha512.New() }),
 
 		// Note: only SHA2-224, SHA2-256, SHA2-384 and SHA2-512 are valid hash functions for SSHKDF.
 		// 		 See https://pages.nist.gov/ACVP/draft-celi-acvp-kdf-ssh.html#section-7.2.1
-		"SSHKDF/SHA2-224/client": cmdSshKdfAft(func() hash.Hash { return sha256.New224() }, ssh.ClientKeys),
-		"SSHKDF/SHA2-224/server": cmdSshKdfAft(func() hash.Hash { return sha256.New224() }, ssh.ServerKeys),
-		"SSHKDF/SHA2-256/client": cmdSshKdfAft(func() hash.Hash { return sha256.New() }, ssh.ClientKeys),
-		"SSHKDF/SHA2-256/server": cmdSshKdfAft(func() hash.Hash { return sha256.New() }, ssh.ServerKeys),
-		"SSHKDF/SHA2-384/client": cmdSshKdfAft(func() hash.Hash { return sha512.New384() }, ssh.ClientKeys),
-		"SSHKDF/SHA2-384/server": cmdSshKdfAft(func() hash.Hash { return sha512.New384() }, ssh.ServerKeys),
-		"SSHKDF/SHA2-512/client": cmdSshKdfAft(func() hash.Hash { return sha512.New() }, ssh.ClientKeys),
-		"SSHKDF/SHA2-512/server": cmdSshKdfAft(func() hash.Hash { return sha512.New() }, ssh.ServerKeys),
+		"SSHKDF/SHA2-224/client": cmdSshKdfAft(func() fips140.Hash { return sha256.New224() }, ssh.ClientKeys),
+		"SSHKDF/SHA2-224/server": cmdSshKdfAft(func() fips140.Hash { return sha256.New224() }, ssh.ServerKeys),
+		"SSHKDF/SHA2-256/client": cmdSshKdfAft(func() fips140.Hash { return sha256.New() }, ssh.ClientKeys),
+		"SSHKDF/SHA2-256/server": cmdSshKdfAft(func() fips140.Hash { return sha256.New() }, ssh.ServerKeys),
+		"SSHKDF/SHA2-384/client": cmdSshKdfAft(func() fips140.Hash { return sha512.New384() }, ssh.ClientKeys),
+		"SSHKDF/SHA2-384/server": cmdSshKdfAft(func() fips140.Hash { return sha512.New384() }, ssh.ServerKeys),
+		"SSHKDF/SHA2-512/client": cmdSshKdfAft(func() fips140.Hash { return sha512.New() }, ssh.ClientKeys),
+		"SSHKDF/SHA2-512/server": cmdSshKdfAft(func() fips140.Hash { return sha512.New() }, ssh.ServerKeys),
 
 		"ECDH/P-224": cmdEcdhAftVal(ecdh.P224()),
 		"ECDH/P-256": cmdEcdhAftVal(ecdh.P256()),
@@ -296,58 +295,58 @@ var (
 
 		"RSA/keyGen": cmdRsaKeyGenAft(),
 
-		"RSA/sigGen/SHA2-224/pkcs1v1.5": cmdRsaSigGenAft(func() hash.Hash { return sha256.New224() }, "SHA-224", false),
-		"RSA/sigGen/SHA2-256/pkcs1v1.5": cmdRsaSigGenAft(func() hash.Hash { return sha256.New() }, "SHA-256", false),
-		"RSA/sigGen/SHA2-384/pkcs1v1.5": cmdRsaSigGenAft(func() hash.Hash { return sha512.New384() }, "SHA-384", false),
-		"RSA/sigGen/SHA2-512/pkcs1v1.5": cmdRsaSigGenAft(func() hash.Hash { return sha512.New() }, "SHA-512", false),
-		"RSA/sigGen/SHA2-224/pss":       cmdRsaSigGenAft(func() hash.Hash { return sha256.New224() }, "SHA-224", true),
-		"RSA/sigGen/SHA2-256/pss":       cmdRsaSigGenAft(func() hash.Hash { return sha256.New() }, "SHA-256", true),
-		"RSA/sigGen/SHA2-384/pss":       cmdRsaSigGenAft(func() hash.Hash { return sha512.New384() }, "SHA-384", true),
-		"RSA/sigGen/SHA2-512/pss":       cmdRsaSigGenAft(func() hash.Hash { return sha512.New() }, "SHA-512", true),
-
-		"RSA/sigVer/SHA2-224/pkcs1v1.5": cmdRsaSigVerAft(func() hash.Hash { return sha256.New224() }, "SHA-224", false),
-		"RSA/sigVer/SHA2-256/pkcs1v1.5": cmdRsaSigVerAft(func() hash.Hash { return sha256.New() }, "SHA-256", false),
-		"RSA/sigVer/SHA2-384/pkcs1v1.5": cmdRsaSigVerAft(func() hash.Hash { return sha512.New384() }, "SHA-384", false),
-		"RSA/sigVer/SHA2-512/pkcs1v1.5": cmdRsaSigVerAft(func() hash.Hash { return sha512.New() }, "SHA-512", false),
-		"RSA/sigVer/SHA2-224/pss":       cmdRsaSigVerAft(func() hash.Hash { return sha256.New224() }, "SHA-224", true),
-		"RSA/sigVer/SHA2-256/pss":       cmdRsaSigVerAft(func() hash.Hash { return sha256.New() }, "SHA-256", true),
-		"RSA/sigVer/SHA2-384/pss":       cmdRsaSigVerAft(func() hash.Hash { return sha512.New384() }, "SHA-384", true),
-		"RSA/sigVer/SHA2-512/pss":       cmdRsaSigVerAft(func() hash.Hash { return sha512.New() }, "SHA-512", true),
+		"RSA/sigGen/SHA2-224/pkcs1v1.5": cmdRsaSigGenAft(func() fips140.Hash { return sha256.New224() }, "SHA-224", false),
+		"RSA/sigGen/SHA2-256/pkcs1v1.5": cmdRsaSigGenAft(func() fips140.Hash { return sha256.New() }, "SHA-256", false),
+		"RSA/sigGen/SHA2-384/pkcs1v1.5": cmdRsaSigGenAft(func() fips140.Hash { return sha512.New384() }, "SHA-384", false),
+		"RSA/sigGen/SHA2-512/pkcs1v1.5": cmdRsaSigGenAft(func() fips140.Hash { return sha512.New() }, "SHA-512", false),
+		"RSA/sigGen/SHA2-224/pss":       cmdRsaSigGenAft(func() fips140.Hash { return sha256.New224() }, "SHA-224", true),
+		"RSA/sigGen/SHA2-256/pss":       cmdRsaSigGenAft(func() fips140.Hash { return sha256.New() }, "SHA-256", true),
+		"RSA/sigGen/SHA2-384/pss":       cmdRsaSigGenAft(func() fips140.Hash { return sha512.New384() }, "SHA-384", true),
+		"RSA/sigGen/SHA2-512/pss":       cmdRsaSigGenAft(func() fips140.Hash { return sha512.New() }, "SHA-512", true),
+
+		"RSA/sigVer/SHA2-224/pkcs1v1.5": cmdRsaSigVerAft(func() fips140.Hash { return sha256.New224() }, "SHA-224", false),
+		"RSA/sigVer/SHA2-256/pkcs1v1.5": cmdRsaSigVerAft(func() fips140.Hash { return sha256.New() }, "SHA-256", false),
+		"RSA/sigVer/SHA2-384/pkcs1v1.5": cmdRsaSigVerAft(func() fips140.Hash { return sha512.New384() }, "SHA-384", false),
+		"RSA/sigVer/SHA2-512/pkcs1v1.5": cmdRsaSigVerAft(func() fips140.Hash { return sha512.New() }, "SHA-512", false),
+		"RSA/sigVer/SHA2-224/pss":       cmdRsaSigVerAft(func() fips140.Hash { return sha256.New224() }, "SHA-224", true),
+		"RSA/sigVer/SHA2-256/pss":       cmdRsaSigVerAft(func() fips140.Hash { return sha256.New() }, "SHA-256", true),
+		"RSA/sigVer/SHA2-384/pss":       cmdRsaSigVerAft(func() fips140.Hash { return sha512.New384() }, "SHA-384", true),
+		"RSA/sigVer/SHA2-512/pss":       cmdRsaSigVerAft(func() fips140.Hash { return sha512.New() }, "SHA-512", true),
 
 		"KDF-counter":  cmdKdfCounterAft(),
 		"KDF-feedback": cmdKdfFeedbackAft(),
 
-		"OneStepNoCounter/HMAC-SHA2-224":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha256.New224() }),
-		"OneStepNoCounter/HMAC-SHA2-256":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha256.New() }),
-		"OneStepNoCounter/HMAC-SHA2-384":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha512.New384() }),
-		"OneStepNoCounter/HMAC-SHA2-512":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha512.New() }),
-		"OneStepNoCounter/HMAC-SHA2-512/224": cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha512.New512_224() }),
-		"OneStepNoCounter/HMAC-SHA2-512/256": cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha512.New512_256() }),
-		"OneStepNoCounter/HMAC-SHA3-224":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha3.New224() }),
-		"OneStepNoCounter/HMAC-SHA3-256":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha3.New256() }),
-		"OneStepNoCounter/HMAC-SHA3-384":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha3.New384() }),
-		"OneStepNoCounter/HMAC-SHA3-512":     cmdOneStepNoCounterHmacAft(func() hash.Hash { return sha3.New512() }),
-
-		"KTS-IFC/SHA2-224/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha256.New224() }),
-		"KTS-IFC/SHA2-224/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha256.New224() }),
-		"KTS-IFC/SHA2-256/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha256.New() }),
-		"KTS-IFC/SHA2-256/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha256.New() }),
-		"KTS-IFC/SHA2-384/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha512.New384() }),
-		"KTS-IFC/SHA2-384/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha512.New384() }),
-		"KTS-IFC/SHA2-512/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha512.New() }),
-		"KTS-IFC/SHA2-512/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha512.New() }),
-		"KTS-IFC/SHA2-512/224/initiator": cmdKtsIfcInitiatorAft(func() hash.Hash { return sha512.New512_224() }),
-		"KTS-IFC/SHA2-512/224/responder": cmdKtsIfcResponderAft(func() hash.Hash { return sha512.New512_224() }),
-		"KTS-IFC/SHA2-512/256/initiator": cmdKtsIfcInitiatorAft(func() hash.Hash { return sha512.New512_256() }),
-		"KTS-IFC/SHA2-512/256/responder": cmdKtsIfcResponderAft(func() hash.Hash { return sha512.New512_256() }),
-		"KTS-IFC/SHA3-224/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha3.New224() }),
-		"KTS-IFC/SHA3-224/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha3.New224() }),
-		"KTS-IFC/SHA3-256/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha3.New256() }),
-		"KTS-IFC/SHA3-256/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha3.New256() }),
-		"KTS-IFC/SHA3-384/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha3.New384() }),
-		"KTS-IFC/SHA3-384/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha3.New384() }),
-		"KTS-IFC/SHA3-512/initiator":     cmdKtsIfcInitiatorAft(func() hash.Hash { return sha3.New512() }),
-		"KTS-IFC/SHA3-512/responder":     cmdKtsIfcResponderAft(func() hash.Hash { return sha3.New512() }),
+		"OneStepNoCounter/HMAC-SHA2-224":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha256.New224() }),
+		"OneStepNoCounter/HMAC-SHA2-256":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha256.New() }),
+		"OneStepNoCounter/HMAC-SHA2-384":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha512.New384() }),
+		"OneStepNoCounter/HMAC-SHA2-512":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha512.New() }),
+		"OneStepNoCounter/HMAC-SHA2-512/224": cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha512.New512_224() }),
+		"OneStepNoCounter/HMAC-SHA2-512/256": cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha512.New512_256() }),
+		"OneStepNoCounter/HMAC-SHA3-224":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha3.New224() }),
+		"OneStepNoCounter/HMAC-SHA3-256":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha3.New256() }),
+		"OneStepNoCounter/HMAC-SHA3-384":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha3.New384() }),
+		"OneStepNoCounter/HMAC-SHA3-512":     cmdOneStepNoCounterHmacAft(func() fips140.Hash { return sha3.New512() }),
+
+		"KTS-IFC/SHA2-224/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha256.New224() }),
+		"KTS-IFC/SHA2-224/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha256.New224() }),
+		"KTS-IFC/SHA2-256/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha256.New() }),
+		"KTS-IFC/SHA2-256/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha256.New() }),
+		"KTS-IFC/SHA2-384/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha512.New384() }),
+		"KTS-IFC/SHA2-384/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha512.New384() }),
+		"KTS-IFC/SHA2-512/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha512.New() }),
+		"KTS-IFC/SHA2-512/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha512.New() }),
+		"KTS-IFC/SHA2-512/224/initiator": cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha512.New512_224() }),
+		"KTS-IFC/SHA2-512/224/responder": cmdKtsIfcResponderAft(func() fips140.Hash { return sha512.New512_224() }),
+		"KTS-IFC/SHA2-512/256/initiator": cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha512.New512_256() }),
+		"KTS-IFC/SHA2-512/256/responder": cmdKtsIfcResponderAft(func() fips140.Hash { return sha512.New512_256() }),
+		"KTS-IFC/SHA3-224/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha3.New224() }),
+		"KTS-IFC/SHA3-224/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha3.New224() }),
+		"KTS-IFC/SHA3-256/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha3.New256() }),
+		"KTS-IFC/SHA3-256/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha3.New256() }),
+		"KTS-IFC/SHA3-384/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha3.New384() }),
+		"KTS-IFC/SHA3-384/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha3.New384() }),
+		"KTS-IFC/SHA3-512/initiator":     cmdKtsIfcInitiatorAft(func() fips140.Hash { return sha3.New512() }),
+		"KTS-IFC/SHA3-512/responder":     cmdKtsIfcResponderAft(func() fips140.Hash { return sha3.New512() }),
 	}
 )
 
@@ -474,7 +473,7 @@ func cmdGetConfig() command {
 // and writes the resulting digest as a response.
 //
 // See https://pages.nist.gov/ACVP/draft-celi-acvp-sha.html
-func cmdHashAft(h hash.Hash) command {
+func cmdHashAft(h fips140.Hash) command {
 	return command{
 		requiredArgs: 1, // Message to hash.
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -502,7 +501,7 @@ func cmdHashAft(h hash.Hash) command {
 //
 // [0]: https://pages.nist.gov/ACVP/draft-celi-acvp-sha.html#section-6.2
 // [1]: https://boringssl.googlesource.com/boringssl/+/refs/heads/master/util/fipstools/acvp/ACVP.md#testing-other-fips-modules
-func cmdHashMct(h hash.Hash) command {
+func cmdHashMct(h fips140.Hash) command {
 	return command{
 		requiredArgs: 1, // Seed message.
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -546,7 +545,7 @@ func cmdHashMct(h hash.Hash) command {
 // like that handler it does not perform the outer 100 iterations.
 //
 // [0]: https://pages.nist.gov/ACVP/draft-celi-acvp-sha3.html#section-6.2.1
-func cmdSha3Mct(h hash.Hash) command {
+func cmdSha3Mct(h fips140.Hash) command {
 	return command{
 		requiredArgs: 1, // Seed message.
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -713,7 +712,7 @@ func cmdCShakeMct(hFn func(N, S []byte) *sha3.SHAKE) command {
 	}
 }
 
-func cmdHmacAft(h func() hash.Hash) command {
+func cmdHmacAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 2, // Message and key
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -726,7 +725,7 @@ func cmdHmacAft(h func() hash.Hash) command {
 	}
 }
 
-func cmdHkdfAft(h func() hash.Hash) command {
+func cmdHkdfAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 4, // Key, salt, info, length bytes
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -740,7 +739,7 @@ func cmdHkdfAft(h func() hash.Hash) command {
 	}
 }
 
-func cmdHkdfExtractAft(h func() hash.Hash) command {
+func cmdHkdfExtractAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 2, // secret, salt
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -752,7 +751,7 @@ func cmdHkdfExtractAft(h func() hash.Hash) command {
 	}
 }
 
-func cmdHkdfExpandLabelAft(h func() hash.Hash) command {
+func cmdHkdfExpandLabelAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 4, // output length, secret, label, transcript hash
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -991,7 +990,7 @@ func pointFromAffine(curve elliptic.Curve, x, y *big.Int) ([]byte, error) {
 	return buf, nil
 }
 
-func signEcdsa[P ecdsa.Point[P], H hash.Hash](c *ecdsa.Curve[P], h func() H, sigType ecdsaSigType, q []byte, sk []byte, digest []byte) (*ecdsa.Signature, error) {
+func signEcdsa[P ecdsa.Point[P], H fips140.Hash](c *ecdsa.Curve[P], h func() H, sigType ecdsaSigType, q []byte, sk []byte, digest []byte) (*ecdsa.Signature, error) {
 	priv, err := ecdsa.NewPrivateKey(c, sk, q)
 	if err != nil {
 		return nil, fmt.Errorf("invalid private key: %w", err)
@@ -1121,30 +1120,30 @@ func verifyEcdsa[P ecdsa.Point[P]](c *ecdsa.Curve[P], q []byte, digest []byte, s
 	return ecdsa.Verify(c, pub, digest, sig)
 }
 
-func lookupHash(name string) (func() hash.Hash, error) {
-	var h func() hash.Hash
+func lookupHash(name string) (func() fips140.Hash, error) {
+	var h func() fips140.Hash
 
 	switch name {
 	case "SHA2-224":
-		h = func() hash.Hash { return sha256.New224() }
+		h = func() fips140.Hash { return sha256.New224() }
 	case "SHA2-256":
-		h = func() hash.Hash { return sha256.New() }
+		h = func() fips140.Hash { return sha256.New() }
 	case "SHA2-384":
-		h = func() hash.Hash { return sha512.New384() }
+		h = func() fips140.Hash { return sha512.New384() }
 	case "SHA2-512":
-		h = func() hash.Hash { return sha512.New() }
+		h = func() fips140.Hash { return sha512.New() }
 	case "SHA2-512/224":
-		h = func() hash.Hash { return sha512.New512_224() }
+		h = func() fips140.Hash { return sha512.New512_224() }
 	case "SHA2-512/256":
-		h = func() hash.Hash { return sha512.New512_256() }
+		h = func() fips140.Hash { return sha512.New512_256() }
 	case "SHA3-224":
-		h = func() hash.Hash { return sha3.New224() }
+		h = func() fips140.Hash { return sha3.New224() }
 	case "SHA3-256":
-		h = func() hash.Hash { return sha3.New256() }
+		h = func() fips140.Hash { return sha3.New256() }
 	case "SHA3-384":
-		h = func() hash.Hash { return sha3.New384() }
+		h = func() fips140.Hash { return sha3.New384() }
 	case "SHA3-512":
-		h = func() hash.Hash { return sha3.New512() }
+		h = func() fips140.Hash { return sha3.New512() }
 	default:
 		return nil, fmt.Errorf("unknown hash name: %q", name)
 	}
@@ -1519,7 +1518,7 @@ func cmdCmacAesVerifyAft() command {
 	}
 }
 
-func cmdTlsKdf12Aft(h func() hash.Hash) command {
+func cmdTlsKdf12Aft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 5, // Number output bytes, secret, label, seed1, seed2
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1534,7 +1533,7 @@ func cmdTlsKdf12Aft(h func() hash.Hash) command {
 	}
 }
 
-func cmdSshKdfAft(hFunc func() hash.Hash, direction ssh.Direction) command {
+func cmdSshKdfAft(hFunc func() fips140.Hash, direction ssh.Direction) command {
 	return command{
 		requiredArgs: 4, // K, H, SessionID, cipher
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1600,7 +1599,7 @@ func cmdEcdhAftVal[P ecdh.Point[P]](curve *ecdh.Curve[P]) command {
 	}
 }
 
-func cmdHmacDrbgAft(h func() hash.Hash) command {
+func cmdHmacDrbgAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 6, // Output length, entropy, personalization, ad1, ad2, nonce
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1624,7 +1623,7 @@ func cmdHmacDrbgAft(h func() hash.Hash) command {
 			//   * Uninstantiate
 			// See Table 7 in draft-vassilev-acvp-drbg
 			out := make([]byte, outLen)
-			drbg := ecdsa.TestingOnlyNewDRBG(func() fips140.Hash { return h() }, entropy, nonce, personalization)
+			drbg := ecdsa.TestingOnlyNewDRBG(h, entropy, nonce, personalization)
 			drbg.Generate(out)
 			drbg.Generate(out)
 
@@ -1869,7 +1868,7 @@ func cmdRsaKeyGenAft() command {
 	}
 }
 
-func cmdRsaSigGenAft(hashFunc func() hash.Hash, hashName string, pss bool) command {
+func cmdRsaSigGenAft(hashFunc func() fips140.Hash, hashName string, pss bool) command {
 	return command{
 		requiredArgs: 2, // Modulus bit-size, message
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1907,7 +1906,7 @@ func cmdRsaSigGenAft(hashFunc func() hash.Hash, hashName string, pss bool) comma
 	}
 }
 
-func cmdRsaSigVerAft(hashFunc func() hash.Hash, hashName string, pss bool) command {
+func cmdRsaSigVerAft(hashFunc func() fips140.Hash, hashName string, pss bool) command {
 	return command{
 		requiredArgs: 4, // n, e, message, signature
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1967,7 +1966,7 @@ func getRSAKey(bits int) (*rsa.PrivateKey, error) {
 	return key, nil
 }
 
-func cmdOneStepNoCounterHmacAft(h func() hash.Hash) command {
+func cmdOneStepNoCounterHmacAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 4, // key, info, salt, outBytes
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -1995,7 +1994,7 @@ func cmdOneStepNoCounterHmacAft(h func() hash.Hash) command {
 	}
 }
 
-func cmdKtsIfcInitiatorAft(h func() hash.Hash) command {
+func cmdKtsIfcInitiatorAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 3, // output bytes, n bytes, e bytes
 		handler: func(args [][]byte) ([][]byte, error) {
@@ -2035,7 +2034,7 @@ func cmdKtsIfcInitiatorAft(h func() hash.Hash) command {
 	}
 }
 
-func cmdKtsIfcResponderAft(h func() hash.Hash) command {
+func cmdKtsIfcResponderAft(h func() fips140.Hash) command {
 	return command{
 		requiredArgs: 6, // n bytes, e bytes, p bytes, q bytes, d bytes, c bytes
 		handler: func(args [][]byte) ([][]byte, error) {
diff --git a/src/crypto/internal/hpke/hpke.go b/src/crypto/internal/hpke/hpke.go
index 599bf97771c8d1..de601c4bfe3fbc 100644
--- a/src/crypto/internal/hpke/hpke.go
+++ b/src/crypto/internal/hpke/hpke.go
@@ -144,7 +144,7 @@ type Sender struct {
 	*context
 }
 
-type Recipient struct {
+type Receipient struct {
 	*context
 }
 
@@ -259,7 +259,7 @@ func SetupSender(kemID, kdfID, aeadID uint16, pub *ecdh.PublicKey, info []byte)
 	return encapsulatedKey, &Sender{context}, nil
 }
 
-func SetupRecipient(kemID, kdfID, aeadID uint16, priv *ecdh.PrivateKey, info, encPubEph []byte) (*Recipient, error) {
+func SetupReceipient(kemID, kdfID, aeadID uint16, priv *ecdh.PrivateKey, info, encPubEph []byte) (*Receipient, error) {
 	kem, err := newDHKem(kemID)
 	if err != nil {
 		return nil, err
@@ -274,7 +274,7 @@ func SetupRecipient(kemID, kdfID, aeadID uint16, priv *ecdh.PrivateKey, info, en
 		return nil, err
 	}
 
-	return &Recipient{context}, nil
+	return &Receipient{context}, nil
 }
 
 func (ctx *context) nextNonce() []byte {
@@ -300,7 +300,7 @@ func (s *Sender) Seal(aad, plaintext []byte) ([]byte, error) {
 	return ciphertext, nil
 }
 
-func (r *Recipient) Open(aad, ciphertext []byte) ([]byte, error) {
+func (r *Receipient) Open(aad, ciphertext []byte) ([]byte, error) {
 	plaintext, err := r.aead.Open(nil, r.nextNonce(), ciphertext, aad)
 	if err != nil {
 		return nil, err
diff --git a/src/crypto/internal/hpke/hpke_test.go b/src/crypto/internal/hpke/hpke_test.go
index 395552476fc4bb..51beeed21281e7 100644
--- a/src/crypto/internal/hpke/hpke_test.go
+++ b/src/crypto/internal/hpke/hpke_test.go
@@ -126,7 +126,7 @@ func TestRFC9180Vectors(t *testing.T) {
 				t.Fatal(err)
 			}
 
-			recipient, err := SetupRecipient(
+			receipient, err := SetupReceipient(
 				uint16(kemID),
 				uint16(kdfID),
 				uint16(aeadID),
@@ -138,7 +138,7 @@ func TestRFC9180Vectors(t *testing.T) {
 				t.Fatal(err)
 			}
 
-			for _, ctx := range []*context{sender.context, recipient.context} {
+			for _, ctx := range []*context{sender.context, receipient.context} {
 				expectedSharedSecret := mustDecodeHex(t, setup["shared_secret"])
 				if !bytes.Equal(ctx.sharedSecret, expectedSharedSecret) {
 					t.Errorf("unexpected shared secret, got: %x, want %x", ctx.sharedSecret, expectedSharedSecret)
@@ -164,7 +164,7 @@ func TestRFC9180Vectors(t *testing.T) {
 						t.Fatal(err)
 					}
 					sender.seqNum = uint128{lo: uint64(seqNum)}
-					recipient.seqNum = uint128{lo: uint64(seqNum)}
+					receipient.seqNum = uint128{lo: uint64(seqNum)}
 					expectedNonce := mustDecodeHex(t, enc["nonce"])
 					computedNonce := sender.nextNonce()
 					if !bytes.Equal(computedNonce, expectedNonce) {
@@ -181,7 +181,7 @@ func TestRFC9180Vectors(t *testing.T) {
 					}
 
 					expectedPlaintext := mustDecodeHex(t, enc["pt"])
-					plaintext, err := recipient.Open(mustDecodeHex(t, enc["aad"]), mustDecodeHex(t, enc["ct"]))
+					plaintext, err := receipient.Open(mustDecodeHex(t, enc["aad"]), mustDecodeHex(t, enc["ct"]))
 					if err != nil {
 						t.Fatal(err)
 					}
diff --git a/src/crypto/md5/md5.go b/src/crypto/md5/md5.go
index 9274f89d3e2c15..a0384e175f31bd 100644
--- a/src/crypto/md5/md5.go
+++ b/src/crypto/md5/md5.go
@@ -28,11 +28,6 @@ const Size = 16
 // The blocksize of MD5 in bytes.
 const BlockSize = 64
 
-// The maximum number of bytes that can be passed to block(). The limit exists
-// because implementations that rely on assembly routines are not preemptible.
-const maxAsmIters = 1024
-const maxAsmSize = BlockSize * maxAsmIters // 64KiB
-
 const (
 	init0 = 0x67452301
 	init1 = 0xEFCDAB89
@@ -104,11 +99,6 @@ func consumeUint32(b []byte) ([]byte, uint32) {
 	return b[4:], byteorder.BEUint32(b[0:4])
 }
 
-func (d *digest) Clone() (hash.Cloner, error) {
-	r := *d
-	return &r, nil
-}
-
 // New returns a new [hash.Hash] computing the MD5 checksum. The Hash
 // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and
 // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal
@@ -148,11 +138,6 @@ func (d *digest) Write(p []byte) (nn int, err error) {
 	if len(p) >= BlockSize {
 		n := len(p) &^ (BlockSize - 1)
 		if haveAsm {
-			for n > maxAsmSize {
-				block(d, p[:maxAsmSize])
-				p = p[maxAsmSize:]
-				n -= maxAsmSize
-			}
 			block(d, p[:n])
 		} else {
 			blockGeneric(d, p[:n])
diff --git a/src/crypto/md5/md5_test.go b/src/crypto/md5/md5_test.go
index 403ff2881f4b68..2353ea85b54baf 100644
--- a/src/crypto/md5/md5_test.go
+++ b/src/crypto/md5/md5_test.go
@@ -133,11 +133,10 @@ func TestGoldenMarshal(t *testing.T) {
 
 func TestLarge(t *testing.T) {
 	const N = 10000
-	const offsets = 4
 	ok := "2bb571599a4180e1d542f76904adc3df" // md5sum of "0123456789" * 1000
-	block := make([]byte, N+offsets)
+	block := make([]byte, 10004)
 	c := New()
-	for offset := 0; offset < offsets; offset++ {
+	for offset := 0; offset < 4; offset++ {
 		for i := 0; i < N; i++ {
 			block[offset+i] = '0' + byte(i%10)
 		}
@@ -156,31 +155,6 @@ func TestLarge(t *testing.T) {
 	}
 }
 
-func TestExtraLarge(t *testing.T) {
-	const N = 100000
-	const offsets = 4
-	ok := "13572e9e296cff52b79c52148313c3a5" // md5sum of "0123456789" * 10000
-	block := make([]byte, N+offsets)
-	c := New()
-	for offset := 0; offset < offsets; offset++ {
-		for i := 0; i < N; i++ {
-			block[offset+i] = '0' + byte(i%10)
-		}
-		for blockSize := 10; blockSize <= N; blockSize *= 10 {
-			blocks := N / blockSize
-			b := block[offset : offset+blockSize]
-			c.Reset()
-			for i := 0; i < blocks; i++ {
-				c.Write(b)
-			}
-			s := fmt.Sprintf("%x", c.Sum(nil))
-			if s != ok {
-				t.Fatalf("md5 TestExtraLarge offset=%d, blockSize=%d = %s want %s", offset, blockSize, s, ok)
-			}
-		}
-	}
-}
-
 // Tests that blockGeneric (pure Go) and block (in assembly for amd64, 386, arm) match.
 func TestBlockGeneric(t *testing.T) {
 	gen, asm := New().(*digest), New().(*digest)
@@ -270,17 +244,10 @@ func TestMD5Hash(t *testing.T) {
 }
 
 func TestExtraMethods(t *testing.T) {
-	h := maybeCloner(New())
+	h := New()
 	cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 }
 
-func maybeCloner(h hash.Hash) any {
-	if c, ok := h.(hash.Cloner); ok {
-		return &c
-	}
-	return &h
-}
-
 var bench = New()
 var buf = make([]byte, 1024*1024*8+1)
 var sum = make([]byte, bench.Size())
diff --git a/src/crypto/sha1/_asm/sha1block_amd64_asm.go b/src/crypto/sha1/_asm/sha1block_amd64_asm.go
index dbd171c08bd772..750f5ce31c7511 100644
--- a/src/crypto/sha1/_asm/sha1block_amd64_asm.go
+++ b/src/crypto/sha1/_asm/sha1block_amd64_asm.go
@@ -23,11 +23,231 @@ import (
 func main() {
 	Package("crypto/sha1")
 	ConstraintExpr("!purego")
+	blockAMD64()
 	blockAVX2()
-	blockSHANI()
 	Generate()
 }
 
+func LOAD(index int) {
+	MOVL(Mem{Base: SI}.Offset(index*4), R10L)
+	BSWAPL(R10L)
+	MOVL(R10L, Mem{Base: SP}.Offset(index*4))
+}
+
+func SHUFFLE(index int) {
+	MOVL(Mem{Base: SP}.Offset(((index)&0xf)*4), R10L)
+	XORL(Mem{Base: SP}.Offset(((index-3)&0xf)*4), R10L)
+	XORL(Mem{Base: SP}.Offset(((index-8)&0xf)*4), R10L)
+	XORL(Mem{Base: SP}.Offset(((index-14)&0xf)*4), R10L)
+	ROLL(Imm(1), R10L)
+	MOVL(R10L, Mem{Base: SP}.Offset(((index)&0xf)*4))
+}
+
+func FUNC1(a, b, c, d, e GPPhysical) {
+	MOVL(d, R9L)
+	XORL(c, R9L)
+	ANDL(b, R9L)
+	XORL(d, R9L)
+}
+
+func FUNC2(a, b, c, d, e GPPhysical) {
+	MOVL(b, R9L)
+	XORL(c, R9L)
+	XORL(d, R9L)
+}
+
+func FUNC3(a, b, c, d, e GPPhysical) {
+	MOVL(b, R8L)
+	ORL(c, R8L)
+	ANDL(d, R8L)
+	MOVL(b, R9L)
+	ANDL(c, R9L)
+	ORL(R8L, R9L)
+}
+
+func FUNC4(a, b, c, d, e GPPhysical) {
+	FUNC2(a, b, c, d, e)
+}
+
+func MIX(a, b, c, d, e GPPhysical, konst int) {
+	ROLL(Imm(30), b)
+	ADDL(R9L, e)
+	MOVL(a, R8L)
+	ROLL(Imm(5), R8L)
+	LEAL(Mem{Base: e, Index: R10L, Scale: 1}.Offset(konst), e)
+	ADDL(R8L, e)
+}
+
+func ROUND1(a, b, c, d, e GPPhysical, index int) {
+	LOAD(index)
+	FUNC1(a, b, c, d, e)
+	MIX(a, b, c, d, e, 0x5A827999)
+}
+
+func ROUND1x(a, b, c, d, e GPPhysical, index int) {
+	SHUFFLE(index)
+	FUNC1(a, b, c, d, e)
+	MIX(a, b, c, d, e, 0x5A827999)
+}
+
+func ROUND2(a, b, c, d, e GPPhysical, index int) {
+	SHUFFLE(index)
+	FUNC2(a, b, c, d, e)
+	MIX(a, b, c, d, e, 0x6ED9EBA1)
+}
+
+func ROUND3(a, b, c, d, e GPPhysical, index int) {
+	SHUFFLE(index)
+	FUNC3(a, b, c, d, e)
+	MIX(a, b, c, d, e, 0x8F1BBCDC)
+}
+
+func ROUND4(a, b, c, d, e GPPhysical, index int) {
+	SHUFFLE(index)
+	FUNC4(a, b, c, d, e)
+	MIX(a, b, c, d, e, 0xCA62C1D6)
+}
+
+func blockAMD64() {
+	Implement("blockAMD64")
+	Attributes(NOSPLIT)
+	AllocLocal(64)
+
+	Load(Param("dig"), RBP)
+	Load(Param("p").Base(), RSI)
+	Load(Param("p").Len(), RDX)
+	SHRQ(Imm(6), RDX)
+	SHLQ(Imm(6), RDX)
+
+	LEAQ(Mem{Base: SI, Index: DX, Scale: 1}, RDI)
+	MOVL(Mem{Base: BP}.Offset(0*4), EAX)
+	MOVL(Mem{Base: BP}.Offset(1*4), EBX)
+	MOVL(Mem{Base: BP}.Offset(2*4), ECX)
+	MOVL(Mem{Base: BP}.Offset(3*4), EDX)
+	MOVL(Mem{Base: BP}.Offset(4*4), EBP)
+
+	CMPQ(RSI, RDI)
+	JEQ(LabelRef("end"))
+
+	loop_amd64()
+	end()
+}
+
+func loop_amd64() {
+	Label("loop")
+	MOVL(EAX, R11L)
+	MOVL(EBX, R12L)
+	MOVL(ECX, R13L)
+	MOVL(EDX, R14L)
+	MOVL(EBP, R15L)
+
+	ROUND1(EAX, EBX, ECX, EDX, EBP, 0)
+	ROUND1(EBP, EAX, EBX, ECX, EDX, 1)
+	ROUND1(EDX, EBP, EAX, EBX, ECX, 2)
+	ROUND1(ECX, EDX, EBP, EAX, EBX, 3)
+	ROUND1(EBX, ECX, EDX, EBP, EAX, 4)
+	ROUND1(EAX, EBX, ECX, EDX, EBP, 5)
+	ROUND1(EBP, EAX, EBX, ECX, EDX, 6)
+	ROUND1(EDX, EBP, EAX, EBX, ECX, 7)
+	ROUND1(ECX, EDX, EBP, EAX, EBX, 8)
+	ROUND1(EBX, ECX, EDX, EBP, EAX, 9)
+	ROUND1(EAX, EBX, ECX, EDX, EBP, 10)
+	ROUND1(EBP, EAX, EBX, ECX, EDX, 11)
+	ROUND1(EDX, EBP, EAX, EBX, ECX, 12)
+	ROUND1(ECX, EDX, EBP, EAX, EBX, 13)
+	ROUND1(EBX, ECX, EDX, EBP, EAX, 14)
+	ROUND1(EAX, EBX, ECX, EDX, EBP, 15)
+
+	ROUND1x(EBP, EAX, EBX, ECX, EDX, 16)
+	ROUND1x(EDX, EBP, EAX, EBX, ECX, 17)
+	ROUND1x(ECX, EDX, EBP, EAX, EBX, 18)
+	ROUND1x(EBX, ECX, EDX, EBP, EAX, 19)
+
+	ROUND2(EAX, EBX, ECX, EDX, EBP, 20)
+	ROUND2(EBP, EAX, EBX, ECX, EDX, 21)
+	ROUND2(EDX, EBP, EAX, EBX, ECX, 22)
+	ROUND2(ECX, EDX, EBP, EAX, EBX, 23)
+	ROUND2(EBX, ECX, EDX, EBP, EAX, 24)
+	ROUND2(EAX, EBX, ECX, EDX, EBP, 25)
+	ROUND2(EBP, EAX, EBX, ECX, EDX, 26)
+	ROUND2(EDX, EBP, EAX, EBX, ECX, 27)
+	ROUND2(ECX, EDX, EBP, EAX, EBX, 28)
+	ROUND2(EBX, ECX, EDX, EBP, EAX, 29)
+	ROUND2(EAX, EBX, ECX, EDX, EBP, 30)
+	ROUND2(EBP, EAX, EBX, ECX, EDX, 31)
+	ROUND2(EDX, EBP, EAX, EBX, ECX, 32)
+	ROUND2(ECX, EDX, EBP, EAX, EBX, 33)
+	ROUND2(EBX, ECX, EDX, EBP, EAX, 34)
+	ROUND2(EAX, EBX, ECX, EDX, EBP, 35)
+	ROUND2(EBP, EAX, EBX, ECX, EDX, 36)
+	ROUND2(EDX, EBP, EAX, EBX, ECX, 37)
+	ROUND2(ECX, EDX, EBP, EAX, EBX, 38)
+	ROUND2(EBX, ECX, EDX, EBP, EAX, 39)
+
+	ROUND3(EAX, EBX, ECX, EDX, EBP, 40)
+	ROUND3(EBP, EAX, EBX, ECX, EDX, 41)
+	ROUND3(EDX, EBP, EAX, EBX, ECX, 42)
+	ROUND3(ECX, EDX, EBP, EAX, EBX, 43)
+	ROUND3(EBX, ECX, EDX, EBP, EAX, 44)
+	ROUND3(EAX, EBX, ECX, EDX, EBP, 45)
+	ROUND3(EBP, EAX, EBX, ECX, EDX, 46)
+	ROUND3(EDX, EBP, EAX, EBX, ECX, 47)
+	ROUND3(ECX, EDX, EBP, EAX, EBX, 48)
+	ROUND3(EBX, ECX, EDX, EBP, EAX, 49)
+	ROUND3(EAX, EBX, ECX, EDX, EBP, 50)
+	ROUND3(EBP, EAX, EBX, ECX, EDX, 51)
+	ROUND3(EDX, EBP, EAX, EBX, ECX, 52)
+	ROUND3(ECX, EDX, EBP, EAX, EBX, 53)
+	ROUND3(EBX, ECX, EDX, EBP, EAX, 54)
+	ROUND3(EAX, EBX, ECX, EDX, EBP, 55)
+	ROUND3(EBP, EAX, EBX, ECX, EDX, 56)
+	ROUND3(EDX, EBP, EAX, EBX, ECX, 57)
+	ROUND3(ECX, EDX, EBP, EAX, EBX, 58)
+	ROUND3(EBX, ECX, EDX, EBP, EAX, 59)
+
+	ROUND4(EAX, EBX, ECX, EDX, EBP, 60)
+	ROUND4(EBP, EAX, EBX, ECX, EDX, 61)
+	ROUND4(EDX, EBP, EAX, EBX, ECX, 62)
+	ROUND4(ECX, EDX, EBP, EAX, EBX, 63)
+	ROUND4(EBX, ECX, EDX, EBP, EAX, 64)
+	ROUND4(EAX, EBX, ECX, EDX, EBP, 65)
+	ROUND4(EBP, EAX, EBX, ECX, EDX, 66)
+	ROUND4(EDX, EBP, EAX, EBX, ECX, 67)
+	ROUND4(ECX, EDX, EBP, EAX, EBX, 68)
+	ROUND4(EBX, ECX, EDX, EBP, EAX, 69)
+	ROUND4(EAX, EBX, ECX, EDX, EBP, 70)
+	ROUND4(EBP, EAX, EBX, ECX, EDX, 71)
+	ROUND4(EDX, EBP, EAX, EBX, ECX, 72)
+	ROUND4(ECX, EDX, EBP, EAX, EBX, 73)
+	ROUND4(EBX, ECX, EDX, EBP, EAX, 74)
+	ROUND4(EAX, EBX, ECX, EDX, EBP, 75)
+	ROUND4(EBP, EAX, EBX, ECX, EDX, 76)
+	ROUND4(EDX, EBP, EAX, EBX, ECX, 77)
+	ROUND4(ECX, EDX, EBP, EAX, EBX, 78)
+	ROUND4(EBX, ECX, EDX, EBP, EAX, 79)
+
+	ADDL(R11L, EAX)
+	ADDL(R12L, EBX)
+	ADDL(R13L, ECX)
+	ADDL(R14L, EDX)
+	ADDL(R15L, EBP)
+
+	ADDQ(Imm(64), RSI)
+	CMPQ(RSI, RDI)
+	JB(LabelRef("loop"))
+}
+
+func end() {
+	Label("end")
+	Load(Param("dig"), RDI)
+	MOVL(EAX, Mem{Base: DI}.Offset(0*4))
+	MOVL(EBX, Mem{Base: DI}.Offset(1*4))
+	MOVL(ECX, Mem{Base: DI}.Offset(2*4))
+	MOVL(EDX, Mem{Base: DI}.Offset(3*4))
+	MOVL(EBP, Mem{Base: DI}.Offset(4*4))
+	RET()
+}
+
 // This is the implementation using AVX2, BMI1 and BMI2. It is based on:
 // "SHA-1 implementation with Intel(R) AVX2 instruction set extensions"
 // From http://software.intel.com/en-us/articles
diff --git a/src/crypto/sha1/_asm/sha1block_amd64_shani.go b/src/crypto/sha1/_asm/sha1block_amd64_shani.go
deleted file mode 100644
index 0a0160a823a2c5..00000000000000
--- a/src/crypto/sha1/_asm/sha1block_amd64_shani.go
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
-	"fmt"
-
-	. "github.com/mmcloughlin/avo/build"
-	. "github.com/mmcloughlin/avo/operand"
-	. "github.com/mmcloughlin/avo/reg"
-)
-
-// Implement the SHA-1 block function using the Intel(R) SHA extensions
-// (SHA1RNDS4, SHA1NEXTE, SHA1MSG1, and SHA1MSG2). This implementation requires
-// the AVX, SHA, SSE2, SSE4.1, and SSSE3 extensions.
-//
-// Reference:
-// S. Gulley, et al, "New Instructions Supporting the Secure Hash
-// Algorithm on Intel® Architecture Processors", July 2013
-// https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sha-extensions.html
-
-func blockSHANI() {
-	Implement("blockSHANI")
-
-	digest := Load(Param("dig"), RDI)
-	data := Load(Param("p").Base(), RSI)
-	len := Load(Param("p").Len(), RDX)
-
-	abcd := XMM()
-	msg0, msg1, msg2, msg3 := XMM(), XMM(), XMM(), XMM()
-	e0, e1 := XMM(), XMM()
-	shufMask := XMM()
-
-	CMPQ(len, Imm(0))
-	JEQ(LabelRef("done"))
-	ADDQ(data, len)
-
-	stackPtr := GP64()
-	{
-		Comment("Allocate space on the stack for saving ABCD and E0, and align it to 16 bytes")
-		local := AllocLocal(32 + 16)
-		LEAQ(local.Offset(15), stackPtr)
-		tmp := GP64()
-		MOVQ(U64(15), tmp)
-		NOTQ(tmp)
-		ANDQ(tmp, stackPtr)
-	}
-	e0_save := Mem{Base: stackPtr}
-	abcd_save := Mem{Base: stackPtr}.Offset(16)
-
-	Comment("Load initial hash state")
-	PINSRD(Imm(3), Mem{Base: digest}.Offset(16), e0)
-	VMOVDQU(Mem{Base: digest}, abcd)
-	PAND(upperMask(), e0)
-	PSHUFD(Imm(0x1b), abcd, abcd)
-
-	VMOVDQA(flipMask(), shufMask)
-
-	Label("loop")
-
-	Comment("Save ABCD and E working values")
-	VMOVDQA(e0, e0_save)
-	VMOVDQA(abcd, abcd_save)
-
-	Comment("Rounds 0-3")
-	VMOVDQU(Mem{Base: data}, msg0)
-	PSHUFB(shufMask, msg0)
-	PADDD(msg0, e0)
-	VMOVDQA(abcd, e1)
-	SHA1RNDS4(Imm(0), e0, abcd)
-
-	Comment("Rounds 4-7")
-	VMOVDQU(Mem{Base: data}.Offset(16), msg1)
-	PSHUFB(shufMask, msg1)
-	SHA1NEXTE(msg1, e1)
-	VMOVDQA(abcd, e0)
-	SHA1RNDS4(Imm(0), e1, abcd)
-	SHA1MSG1(msg1, msg0)
-
-	Comment("Rounds 8-11")
-	VMOVDQU(Mem{Base: data}.Offset(16*2), msg2)
-	PSHUFB(shufMask, msg2)
-	SHA1NEXTE(msg2, e0)
-	VMOVDQA(abcd, e1)
-	SHA1RNDS4(Imm(0), e0, abcd)
-	SHA1MSG1(msg2, msg1)
-	PXOR(msg2, msg0)
-
-	// Rounds 12 through 67 use the same repeated pattern, with e0 and e1 ping-ponging
-	// back and forth, and each of the msg temporaries moving up one every four rounds.
-	msgs := []VecVirtual{msg3, msg0, msg1, msg2}
-	for i := range 14 {
-		Comment(fmt.Sprintf("Rounds %d-%d", 12+(i*4), 12+(i*4)+3))
-		a, b := e1, e0
-		if i == 0 {
-			VMOVDQU(Mem{Base: data}.Offset(16*3), msg3)
-			PSHUFB(shufMask, msg3)
-		}
-		if i%2 == 1 {
-			a, b = e0, e1
-		}
-		imm := uint64((12 + i*4) / 20)
-
-		SHA1NEXTE(msgs[i%4], a)
-		VMOVDQA(abcd, b)
-		SHA1MSG2(msgs[i%4], msgs[(1+i)%4])
-		SHA1RNDS4(Imm(imm), a, abcd)
-		SHA1MSG1(msgs[i%4], msgs[(3+i)%4])
-		PXOR(msgs[i%4], msgs[(2+i)%4])
-	}
-
-	Comment("Rounds 68-71")
-	SHA1NEXTE(msg1, e1)
-	VMOVDQA(abcd, e0)
-	SHA1MSG2(msg1, msg2)
-	SHA1RNDS4(Imm(3), e1, abcd)
-	PXOR(msg1, msg3)
-
-	Comment("Rounds 72-75")
-	SHA1NEXTE(msg2, e0)
-	VMOVDQA(abcd, e1)
-	SHA1MSG2(msg2, msg3)
-	SHA1RNDS4(Imm(3), e0, abcd)
-
-	Comment("Rounds 76-79")
-	SHA1NEXTE(msg3, e1)
-	VMOVDQA(abcd, e0)
-	SHA1RNDS4(Imm(3), e1, abcd)
-
-	Comment("Add saved E and ABCD")
-	SHA1NEXTE(e0_save, e0)
-	PADDD(abcd_save, abcd)
-
-	Comment("Check if we are done, if not return to the loop")
-	ADDQ(Imm(64), data)
-	CMPQ(data, len)
-	JNE(LabelRef("loop"))
-
-	Comment("Write the hash state back to digest")
-	PSHUFD(Imm(0x1b), abcd, abcd)
-	VMOVDQU(abcd, Mem{Base: digest})
-	PEXTRD(Imm(3), e0, Mem{Base: digest}.Offset(16))
-
-	Label("done")
-	RET()
-}
-
-func flipMask() Mem {
-	mask := GLOBL("shuffle_mask", RODATA)
-	// 0x000102030405060708090a0b0c0d0e0f
-	DATA(0x00, U64(0x08090a0b0c0d0e0f))
-	DATA(0x08, U64(0x0001020304050607))
-	return mask
-}
-
-func upperMask() Mem {
-	mask := GLOBL("upper_mask", RODATA)
-	// 0xFFFFFFFF000000000000000000000000
-	DATA(0x00, U64(0x0000000000000000))
-	DATA(0x08, U64(0xFFFFFFFF00000000))
-	return mask
-}
diff --git a/src/crypto/sha1/fallback_test.go b/src/crypto/sha1/fallback_test.go
new file mode 100644
index 00000000000000..b869a939f601fb
--- /dev/null
+++ b/src/crypto/sha1/fallback_test.go
@@ -0,0 +1,34 @@
+// Copyright 2016 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.
+
+//go:build s390x && !purego
+
+package sha1
+
+import (
+	"fmt"
+	"io"
+	"testing"
+)
+
+// Tests the fallback code path in case the optimized asm
+// implementation cannot be used.
+// See also TestBlockGeneric.
+func TestGenericPath(t *testing.T) {
+	if !useAsm {
+		t.Skipf("assembly implementation unavailable")
+	}
+	useAsm = false
+	defer func() { useAsm = true }()
+	c := New()
+	in := "ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϺϘΡΣΤΥΦΧΨΩ"
+	gold := "0f58c2bb130f8182375f325c18342215255387e5"
+	if _, err := io.WriteString(c, in); err != nil {
+		t.Fatalf("could not write to c: %v", err)
+	}
+	out := fmt.Sprintf("%x", c.Sum(nil))
+	if out != gold {
+		t.Fatalf("mismatch: got %s, wanted %s", out, gold)
+	}
+}
diff --git a/src/crypto/sha1/issue15617_test.go b/src/crypto/sha1/issue15617_test.go
index 402c57482c4ca3..116c78ff743ccd 100644
--- a/src/crypto/sha1/issue15617_test.go
+++ b/src/crypto/sha1/issue15617_test.go
@@ -7,24 +7,21 @@
 package sha1_test
 
 import (
-	"crypto/internal/cryptotest"
 	"crypto/sha1"
 	"syscall"
 	"testing"
 )
 
 func TestOutOfBoundsRead(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha1", func(t *testing.T) {
-		const pageSize = 4 << 10
-		data, err := syscall.Mmap(0, 0, 2*pageSize, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_ANON|syscall.MAP_PRIVATE)
-		if err != nil {
-			panic(err)
-		}
-		if err := syscall.Mprotect(data[pageSize:], syscall.PROT_NONE); err != nil {
-			panic(err)
-		}
-		for i := 0; i < pageSize; i++ {
-			sha1.Sum(data[pageSize-i : pageSize])
-		}
-	})
+	const pageSize = 4 << 10
+	data, err := syscall.Mmap(0, 0, 2*pageSize, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_ANON|syscall.MAP_PRIVATE)
+	if err != nil {
+		panic(err)
+	}
+	if err := syscall.Mprotect(data[pageSize:], syscall.PROT_NONE); err != nil {
+		panic(err)
+	}
+	for i := 0; i < pageSize; i++ {
+		sha1.Sum(data[pageSize-i : pageSize])
+	}
 }
diff --git a/src/crypto/sha1/sha1.go b/src/crypto/sha1/sha1.go
index 3acc5b11fb789e..d2ffaac0aeb674 100644
--- a/src/crypto/sha1/sha1.go
+++ b/src/crypto/sha1/sha1.go
@@ -93,11 +93,6 @@ func consumeUint32(b []byte) ([]byte, uint32) {
 	return b[4:], byteorder.BEUint32(b)
 }
 
-func (d *digest) Clone() (hash.Cloner, error) {
-	r := *d
-	return &r, nil
-}
-
 func (d *digest) Reset() {
 	d.h[0] = init0
 	d.h[1] = init1
diff --git a/src/crypto/sha1/sha1_test.go b/src/crypto/sha1/sha1_test.go
index ef6e5ddcbb2d97..f9243dbf506bb5 100644
--- a/src/crypto/sha1/sha1_test.go
+++ b/src/crypto/sha1/sha1_test.go
@@ -10,6 +10,7 @@ import (
 	"bytes"
 	"crypto/internal/boring"
 	"crypto/internal/cryptotest"
+	"crypto/rand"
 	"encoding"
 	"fmt"
 	"hash"
@@ -59,9 +60,6 @@ var golden = []sha1Test{
 }
 
 func TestGolden(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha1", testGolden)
-}
-func testGolden(t *testing.T) {
 	for i := 0; i < len(golden); i++ {
 		g := golden[i]
 		s := fmt.Sprintf("%x", Sum([]byte(g.in)))
@@ -99,9 +97,6 @@ func testGolden(t *testing.T) {
 }
 
 func TestGoldenMarshal(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha1", testGoldenMarshal)
-}
-func testGoldenMarshal(t *testing.T) {
 	h := New()
 	h2 := New()
 	for _, g := range golden {
@@ -161,6 +156,23 @@ func TestBlockSize(t *testing.T) {
 	}
 }
 
+// Tests that blockGeneric (pure Go) and block (in assembly for some architectures) match.
+func TestBlockGeneric(t *testing.T) {
+	if boring.Enabled {
+		t.Skip("BoringCrypto doesn't expose digest")
+	}
+	for i := 1; i < 30; i++ { // arbitrary factor
+		gen, asm := New().(*digest), New().(*digest)
+		buf := make([]byte, BlockSize*i)
+		rand.Read(buf)
+		blockGeneric(gen, buf)
+		block(asm, buf)
+		if *gen != *asm {
+			t.Errorf("For %#v block and blockGeneric resulted in different states", buf)
+		}
+	}
+}
+
 // Tests for unmarshaling hashes that have hashed a large amount of data
 // The initial hash generation is omitted from the test, because it takes a long time.
 // The test contains some already-generated states, and their expected sums
@@ -198,10 +210,8 @@ func safeSum(h hash.Hash) (sum []byte, err error) {
 }
 
 func TestLargeHashes(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha1", testLargeHashes)
-}
-func testLargeHashes(t *testing.T) {
 	for i, test := range largeUnmarshalTests {
+
 		h := New()
 		if err := h.(encoding.BinaryUnmarshaler).UnmarshalBinary([]byte(test.state)); err != nil {
 			t.Errorf("test %d could not unmarshal: %v", i, err)
@@ -236,24 +246,15 @@ func TestAllocations(t *testing.T) {
 }
 
 func TestSHA1Hash(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha1", func(t *testing.T) {
-		cryptotest.TestHash(t, New)
-	})
+	cryptotest.TestHash(t, New)
 }
 
 func TestExtraMethods(t *testing.T) {
-	h := maybeCloner(New())
+	h := New()
 	cryptotest.NoExtraMethods(t, &h, "ConstantTimeSum",
 		"MarshalBinary", "UnmarshalBinary", "AppendBinary")
 }
 
-func maybeCloner(h hash.Hash) any {
-	if c, ok := h.(hash.Cloner); ok {
-		return &c
-	}
-	return &h
-}
-
 var bench = New()
 var buf = make([]byte, 8192)
 
diff --git a/src/crypto/sha1/sha1block_amd64.go b/src/crypto/sha1/sha1block_amd64.go
index 1f78e2d78b4b17..10376d1dcc79de 100644
--- a/src/crypto/sha1/sha1block_amd64.go
+++ b/src/crypto/sha1/sha1block_amd64.go
@@ -6,41 +6,31 @@
 
 package sha1
 
-import (
-	"crypto/internal/impl"
-	"internal/cpu"
-)
+import "internal/cpu"
 
 //go:noescape
 func blockAVX2(dig *digest, p []byte)
 
 //go:noescape
-func blockSHANI(dig *digest, p []byte)
+func blockAMD64(dig *digest, p []byte)
 
 var useAVX2 = cpu.X86.HasAVX && cpu.X86.HasAVX2 && cpu.X86.HasBMI1 && cpu.X86.HasBMI2
-var useSHANI = cpu.X86.HasAVX && cpu.X86.HasSHA && cpu.X86.HasSSE41 && cpu.X86.HasSSSE3
-
-func init() {
-	impl.Register("sha1", "AVX2", &useAVX2)
-	impl.Register("sha1", "SHA-NI", &useSHANI)
-}
 
 func block(dig *digest, p []byte) {
-	if useSHANI {
-		blockSHANI(dig, p)
-	} else if useAVX2 && len(p) >= 256 {
-		// blockAVX2 calculates sha1 for 2 block per iteration and also
-		// interleaves precalculation for next block. So it may read up-to 192
-		// bytes past end of p. We could add checks inside blockAVX2, but this
-		// would just turn it into a copy of the old pre-AVX2 amd64 SHA1
-		// assembly implementation, so just call blockGeneric instead.
+	if useAVX2 && len(p) >= 256 {
+		// blockAVX2 calculates sha1 for 2 block per iteration
+		// it also interleaves precalculation for next block.
+		// So it may read up-to 192 bytes past end of p
+		// We may add checks inside blockAVX2, but this will
+		// just turn it into a copy of blockAMD64,
+		// so call it directly, instead.
 		safeLen := len(p) - 128
 		if safeLen%128 != 0 {
 			safeLen -= 64
 		}
 		blockAVX2(dig, p[:safeLen])
-		blockGeneric(dig, p[safeLen:])
+		blockAMD64(dig, p[safeLen:])
 	} else {
-		blockGeneric(dig, p)
+		blockAMD64(dig, p)
 	}
 }
diff --git a/src/crypto/sha1/sha1block_amd64.s b/src/crypto/sha1/sha1block_amd64.s
index 4e0c43ee4e1875..9c7aa1467744fe 100644
--- a/src/crypto/sha1/sha1block_amd64.s
+++ b/src/crypto/sha1/sha1block_amd64.s
@@ -4,6 +4,1278 @@
 
 #include "textflag.h"
 
+// func blockAMD64(dig *digest, p []byte)
+TEXT ·blockAMD64(SB), NOSPLIT, $64-32
+	MOVQ dig+0(FP), BP
+	MOVQ p_base+8(FP), SI
+	MOVQ p_len+16(FP), DX
+	SHRQ $0x06, DX
+	SHLQ $0x06, DX
+	LEAQ (SI)(DX*1), DI
+	MOVL (BP), AX
+	MOVL 4(BP), BX
+	MOVL 8(BP), CX
+	MOVL 12(BP), DX
+	MOVL 16(BP), BP
+	CMPQ SI, DI
+	JEQ  end
+
+loop:
+	MOVL   AX, R11
+	MOVL   BX, R12
+	MOVL   CX, R13
+	MOVL   DX, R14
+	MOVL   BP, R15
+	MOVL   (SI), R10
+	BSWAPL R10
+	MOVL   R10, (SP)
+	MOVL   DX, R9
+	XORL   CX, R9
+	ANDL   BX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   4(SI), R10
+	BSWAPL R10
+	MOVL   R10, 4(SP)
+	MOVL   CX, R9
+	XORL   BX, R9
+	ANDL   AX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   8(SI), R10
+	BSWAPL R10
+	MOVL   R10, 8(SP)
+	MOVL   BX, R9
+	XORL   AX, R9
+	ANDL   BP, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   12(SI), R10
+	BSWAPL R10
+	MOVL   R10, 12(SP)
+	MOVL   AX, R9
+	XORL   BP, R9
+	ANDL   DX, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   16(SI), R10
+	BSWAPL R10
+	MOVL   R10, 16(SP)
+	MOVL   BP, R9
+	XORL   DX, R9
+	ANDL   CX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   20(SI), R10
+	BSWAPL R10
+	MOVL   R10, 20(SP)
+	MOVL   DX, R9
+	XORL   CX, R9
+	ANDL   BX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   24(SI), R10
+	BSWAPL R10
+	MOVL   R10, 24(SP)
+	MOVL   CX, R9
+	XORL   BX, R9
+	ANDL   AX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   28(SI), R10
+	BSWAPL R10
+	MOVL   R10, 28(SP)
+	MOVL   BX, R9
+	XORL   AX, R9
+	ANDL   BP, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   32(SI), R10
+	BSWAPL R10
+	MOVL   R10, 32(SP)
+	MOVL   AX, R9
+	XORL   BP, R9
+	ANDL   DX, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   36(SI), R10
+	BSWAPL R10
+	MOVL   R10, 36(SP)
+	MOVL   BP, R9
+	XORL   DX, R9
+	ANDL   CX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   40(SI), R10
+	BSWAPL R10
+	MOVL   R10, 40(SP)
+	MOVL   DX, R9
+	XORL   CX, R9
+	ANDL   BX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   44(SI), R10
+	BSWAPL R10
+	MOVL   R10, 44(SP)
+	MOVL   CX, R9
+	XORL   BX, R9
+	ANDL   AX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   48(SI), R10
+	BSWAPL R10
+	MOVL   R10, 48(SP)
+	MOVL   BX, R9
+	XORL   AX, R9
+	ANDL   BP, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   52(SI), R10
+	BSWAPL R10
+	MOVL   R10, 52(SP)
+	MOVL   AX, R9
+	XORL   BP, R9
+	ANDL   DX, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   56(SI), R10
+	BSWAPL R10
+	MOVL   R10, 56(SP)
+	MOVL   BP, R9
+	XORL   DX, R9
+	ANDL   CX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   60(SI), R10
+	BSWAPL R10
+	MOVL   R10, 60(SP)
+	MOVL   DX, R9
+	XORL   CX, R9
+	ANDL   BX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   (SP), R10
+	XORL   52(SP), R10
+	XORL   32(SP), R10
+	XORL   8(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, (SP)
+	MOVL   CX, R9
+	XORL   BX, R9
+	ANDL   AX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   4(SP), R10
+	XORL   56(SP), R10
+	XORL   36(SP), R10
+	XORL   12(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 4(SP)
+	MOVL   BX, R9
+	XORL   AX, R9
+	ANDL   BP, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   8(SP), R10
+	XORL   60(SP), R10
+	XORL   40(SP), R10
+	XORL   16(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 8(SP)
+	MOVL   AX, R9
+	XORL   BP, R9
+	ANDL   DX, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   12(SP), R10
+	XORL   (SP), R10
+	XORL   44(SP), R10
+	XORL   20(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 12(SP)
+	MOVL   BP, R9
+	XORL   DX, R9
+	ANDL   CX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1518500249(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   16(SP), R10
+	XORL   4(SP), R10
+	XORL   48(SP), R10
+	XORL   24(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 16(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   20(SP), R10
+	XORL   8(SP), R10
+	XORL   52(SP), R10
+	XORL   28(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 20(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   24(SP), R10
+	XORL   12(SP), R10
+	XORL   56(SP), R10
+	XORL   32(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 24(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   28(SP), R10
+	XORL   16(SP), R10
+	XORL   60(SP), R10
+	XORL   36(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 28(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   32(SP), R10
+	XORL   20(SP), R10
+	XORL   (SP), R10
+	XORL   40(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 32(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   36(SP), R10
+	XORL   24(SP), R10
+	XORL   4(SP), R10
+	XORL   44(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 36(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   40(SP), R10
+	XORL   28(SP), R10
+	XORL   8(SP), R10
+	XORL   48(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 40(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   44(SP), R10
+	XORL   32(SP), R10
+	XORL   12(SP), R10
+	XORL   52(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 44(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   48(SP), R10
+	XORL   36(SP), R10
+	XORL   16(SP), R10
+	XORL   56(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 48(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   52(SP), R10
+	XORL   40(SP), R10
+	XORL   20(SP), R10
+	XORL   60(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 52(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   56(SP), R10
+	XORL   44(SP), R10
+	XORL   24(SP), R10
+	XORL   (SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 56(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   60(SP), R10
+	XORL   48(SP), R10
+	XORL   28(SP), R10
+	XORL   4(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 60(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   (SP), R10
+	XORL   52(SP), R10
+	XORL   32(SP), R10
+	XORL   8(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, (SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   4(SP), R10
+	XORL   56(SP), R10
+	XORL   36(SP), R10
+	XORL   12(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 4(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   8(SP), R10
+	XORL   60(SP), R10
+	XORL   40(SP), R10
+	XORL   16(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 8(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   12(SP), R10
+	XORL   (SP), R10
+	XORL   44(SP), R10
+	XORL   20(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 12(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   16(SP), R10
+	XORL   4(SP), R10
+	XORL   48(SP), R10
+	XORL   24(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 16(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   20(SP), R10
+	XORL   8(SP), R10
+	XORL   52(SP), R10
+	XORL   28(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 20(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   24(SP), R10
+	XORL   12(SP), R10
+	XORL   56(SP), R10
+	XORL   32(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 24(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   28(SP), R10
+	XORL   16(SP), R10
+	XORL   60(SP), R10
+	XORL   36(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 28(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   1859775393(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   32(SP), R10
+	XORL   20(SP), R10
+	XORL   (SP), R10
+	XORL   40(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 32(SP)
+	MOVL   BX, R8
+	ORL    CX, R8
+	ANDL   DX, R8
+	MOVL   BX, R9
+	ANDL   CX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   36(SP), R10
+	XORL   24(SP), R10
+	XORL   4(SP), R10
+	XORL   44(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 36(SP)
+	MOVL   AX, R8
+	ORL    BX, R8
+	ANDL   CX, R8
+	MOVL   AX, R9
+	ANDL   BX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   40(SP), R10
+	XORL   28(SP), R10
+	XORL   8(SP), R10
+	XORL   48(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 40(SP)
+	MOVL   BP, R8
+	ORL    AX, R8
+	ANDL   BX, R8
+	MOVL   BP, R9
+	ANDL   AX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   44(SP), R10
+	XORL   32(SP), R10
+	XORL   12(SP), R10
+	XORL   52(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 44(SP)
+	MOVL   DX, R8
+	ORL    BP, R8
+	ANDL   AX, R8
+	MOVL   DX, R9
+	ANDL   BP, R9
+	ORL    R8, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   48(SP), R10
+	XORL   36(SP), R10
+	XORL   16(SP), R10
+	XORL   56(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 48(SP)
+	MOVL   CX, R8
+	ORL    DX, R8
+	ANDL   BP, R8
+	MOVL   CX, R9
+	ANDL   DX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   52(SP), R10
+	XORL   40(SP), R10
+	XORL   20(SP), R10
+	XORL   60(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 52(SP)
+	MOVL   BX, R8
+	ORL    CX, R8
+	ANDL   DX, R8
+	MOVL   BX, R9
+	ANDL   CX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   56(SP), R10
+	XORL   44(SP), R10
+	XORL   24(SP), R10
+	XORL   (SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 56(SP)
+	MOVL   AX, R8
+	ORL    BX, R8
+	ANDL   CX, R8
+	MOVL   AX, R9
+	ANDL   BX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   60(SP), R10
+	XORL   48(SP), R10
+	XORL   28(SP), R10
+	XORL   4(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 60(SP)
+	MOVL   BP, R8
+	ORL    AX, R8
+	ANDL   BX, R8
+	MOVL   BP, R9
+	ANDL   AX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   (SP), R10
+	XORL   52(SP), R10
+	XORL   32(SP), R10
+	XORL   8(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, (SP)
+	MOVL   DX, R8
+	ORL    BP, R8
+	ANDL   AX, R8
+	MOVL   DX, R9
+	ANDL   BP, R9
+	ORL    R8, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   4(SP), R10
+	XORL   56(SP), R10
+	XORL   36(SP), R10
+	XORL   12(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 4(SP)
+	MOVL   CX, R8
+	ORL    DX, R8
+	ANDL   BP, R8
+	MOVL   CX, R9
+	ANDL   DX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   8(SP), R10
+	XORL   60(SP), R10
+	XORL   40(SP), R10
+	XORL   16(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 8(SP)
+	MOVL   BX, R8
+	ORL    CX, R8
+	ANDL   DX, R8
+	MOVL   BX, R9
+	ANDL   CX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   12(SP), R10
+	XORL   (SP), R10
+	XORL   44(SP), R10
+	XORL   20(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 12(SP)
+	MOVL   AX, R8
+	ORL    BX, R8
+	ANDL   CX, R8
+	MOVL   AX, R9
+	ANDL   BX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   16(SP), R10
+	XORL   4(SP), R10
+	XORL   48(SP), R10
+	XORL   24(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 16(SP)
+	MOVL   BP, R8
+	ORL    AX, R8
+	ANDL   BX, R8
+	MOVL   BP, R9
+	ANDL   AX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   20(SP), R10
+	XORL   8(SP), R10
+	XORL   52(SP), R10
+	XORL   28(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 20(SP)
+	MOVL   DX, R8
+	ORL    BP, R8
+	ANDL   AX, R8
+	MOVL   DX, R9
+	ANDL   BP, R9
+	ORL    R8, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   24(SP), R10
+	XORL   12(SP), R10
+	XORL   56(SP), R10
+	XORL   32(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 24(SP)
+	MOVL   CX, R8
+	ORL    DX, R8
+	ANDL   BP, R8
+	MOVL   CX, R9
+	ANDL   DX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   28(SP), R10
+	XORL   16(SP), R10
+	XORL   60(SP), R10
+	XORL   36(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 28(SP)
+	MOVL   BX, R8
+	ORL    CX, R8
+	ANDL   DX, R8
+	MOVL   BX, R9
+	ANDL   CX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   32(SP), R10
+	XORL   20(SP), R10
+	XORL   (SP), R10
+	XORL   40(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 32(SP)
+	MOVL   AX, R8
+	ORL    BX, R8
+	ANDL   CX, R8
+	MOVL   AX, R9
+	ANDL   BX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   36(SP), R10
+	XORL   24(SP), R10
+	XORL   4(SP), R10
+	XORL   44(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 36(SP)
+	MOVL   BP, R8
+	ORL    AX, R8
+	ANDL   BX, R8
+	MOVL   BP, R9
+	ANDL   AX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   40(SP), R10
+	XORL   28(SP), R10
+	XORL   8(SP), R10
+	XORL   48(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 40(SP)
+	MOVL   DX, R8
+	ORL    BP, R8
+	ANDL   AX, R8
+	MOVL   DX, R9
+	ANDL   BP, R9
+	ORL    R8, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   44(SP), R10
+	XORL   32(SP), R10
+	XORL   12(SP), R10
+	XORL   52(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 44(SP)
+	MOVL   CX, R8
+	ORL    DX, R8
+	ANDL   BP, R8
+	MOVL   CX, R9
+	ANDL   DX, R9
+	ORL    R8, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   2400959708(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   48(SP), R10
+	XORL   36(SP), R10
+	XORL   16(SP), R10
+	XORL   56(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 48(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   52(SP), R10
+	XORL   40(SP), R10
+	XORL   20(SP), R10
+	XORL   60(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 52(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   56(SP), R10
+	XORL   44(SP), R10
+	XORL   24(SP), R10
+	XORL   (SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 56(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   60(SP), R10
+	XORL   48(SP), R10
+	XORL   28(SP), R10
+	XORL   4(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 60(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   (SP), R10
+	XORL   52(SP), R10
+	XORL   32(SP), R10
+	XORL   8(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, (SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   4(SP), R10
+	XORL   56(SP), R10
+	XORL   36(SP), R10
+	XORL   12(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 4(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   8(SP), R10
+	XORL   60(SP), R10
+	XORL   40(SP), R10
+	XORL   16(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 8(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   12(SP), R10
+	XORL   (SP), R10
+	XORL   44(SP), R10
+	XORL   20(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 12(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   16(SP), R10
+	XORL   4(SP), R10
+	XORL   48(SP), R10
+	XORL   24(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 16(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   20(SP), R10
+	XORL   8(SP), R10
+	XORL   52(SP), R10
+	XORL   28(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 20(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   24(SP), R10
+	XORL   12(SP), R10
+	XORL   56(SP), R10
+	XORL   32(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 24(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   28(SP), R10
+	XORL   16(SP), R10
+	XORL   60(SP), R10
+	XORL   36(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 28(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   32(SP), R10
+	XORL   20(SP), R10
+	XORL   (SP), R10
+	XORL   40(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 32(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   36(SP), R10
+	XORL   24(SP), R10
+	XORL   4(SP), R10
+	XORL   44(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 36(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   40(SP), R10
+	XORL   28(SP), R10
+	XORL   8(SP), R10
+	XORL   48(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 40(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(AX)(R10*1), AX
+	ADDL   R8, AX
+	MOVL   44(SP), R10
+	XORL   32(SP), R10
+	XORL   12(SP), R10
+	XORL   52(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 44(SP)
+	MOVL   BX, R9
+	XORL   CX, R9
+	XORL   DX, R9
+	ROLL   $0x1e, BX
+	ADDL   R9, BP
+	MOVL   AX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BP)(R10*1), BP
+	ADDL   R8, BP
+	MOVL   48(SP), R10
+	XORL   36(SP), R10
+	XORL   16(SP), R10
+	XORL   56(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 48(SP)
+	MOVL   AX, R9
+	XORL   BX, R9
+	XORL   CX, R9
+	ROLL   $0x1e, AX
+	ADDL   R9, DX
+	MOVL   BP, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(DX)(R10*1), DX
+	ADDL   R8, DX
+	MOVL   52(SP), R10
+	XORL   40(SP), R10
+	XORL   20(SP), R10
+	XORL   60(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 52(SP)
+	MOVL   BP, R9
+	XORL   AX, R9
+	XORL   BX, R9
+	ROLL   $0x1e, BP
+	ADDL   R9, CX
+	MOVL   DX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(CX)(R10*1), CX
+	ADDL   R8, CX
+	MOVL   56(SP), R10
+	XORL   44(SP), R10
+	XORL   24(SP), R10
+	XORL   (SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 56(SP)
+	MOVL   DX, R9
+	XORL   BP, R9
+	XORL   AX, R9
+	ROLL   $0x1e, DX
+	ADDL   R9, BX
+	MOVL   CX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(BX)(R10*1), BX
+	ADDL   R8, BX
+	MOVL   60(SP), R10
+	XORL   48(SP), R10
+	XORL   28(SP), R10
+	XORL   4(SP), R10
+	ROLL   $0x01, R10
+	MOVL   R10, 60(SP)
+	MOVL   CX, R9
+	XORL   DX, R9
+	XORL   BP, R9
+	ROLL   $0x1e, CX
+	ADDL   R9, AX
+	MOVL   BX, R8
+	ROLL   $0x05, R8
+	LEAL   3395469782(AX)(R10*1), AX
+	ADDL   R8, AX
+	ADDL   R11, AX
+	ADDL   R12, BX
+	ADDL   R13, CX
+	ADDL   R14, DX
+	ADDL   R15, BP
+	ADDQ   $0x40, SI
+	CMPQ   SI, DI
+	JB     loop
+
+end:
+	MOVQ dig+0(FP), DI
+	MOVL AX, (DI)
+	MOVL BX, 4(DI)
+	MOVL CX, 8(DI)
+	MOVL DX, 12(DI)
+	MOVL BP, 16(DI)
+	RET
+
 // func blockAVX2(dig *digest, p []byte)
 // Requires: AVX, AVX2, BMI, BMI2, CMOV
 TEXT ·blockAVX2(SB), $1408-32
@@ -1777,212 +3049,3 @@ DATA BSWAP_SHUFB_CTL<>+20(SB)/4, $0x04050607
 DATA BSWAP_SHUFB_CTL<>+24(SB)/4, $0x08090a0b
 DATA BSWAP_SHUFB_CTL<>+28(SB)/4, $0x0c0d0e0f
 GLOBL BSWAP_SHUFB_CTL<>(SB), RODATA, $32
-
-// func blockSHANI(dig *digest, p []byte)
-// Requires: AVX, SHA, SSE2, SSE4.1, SSSE3
-TEXT ·blockSHANI(SB), $48-32
-	MOVQ dig+0(FP), DI
-	MOVQ p_base+8(FP), SI
-	MOVQ p_len+16(FP), DX
-	CMPQ DX, $0x00
-	JEQ  done
-	ADDQ SI, DX
-
-	// Allocate space on the stack for saving ABCD and E0, and align it to 16 bytes
-	LEAQ 15(SP), AX
-	MOVQ $0x000000000000000f, CX
-	NOTQ CX
-	ANDQ CX, AX
-
-	// Load initial hash state
-	PINSRD  $0x03, 16(DI), X5
-	VMOVDQU (DI), X0
-	PAND    upper_mask<>+0(SB), X5
-	PSHUFD  $0x1b, X0, X0
-	VMOVDQA shuffle_mask<>+0(SB), X7
-
-loop:
-	// Save ABCD and E working values
-	VMOVDQA X5, (AX)
-	VMOVDQA X0, 16(AX)
-
-	// Rounds 0-3
-	VMOVDQU   (SI), X1
-	PSHUFB    X7, X1
-	PADDD     X1, X5
-	VMOVDQA   X0, X6
-	SHA1RNDS4 $0x00, X5, X0
-
-	// Rounds 4-7
-	VMOVDQU   16(SI), X2
-	PSHUFB    X7, X2
-	SHA1NEXTE X2, X6
-	VMOVDQA   X0, X5
-	SHA1RNDS4 $0x00, X6, X0
-	SHA1MSG1  X2, X1
-
-	// Rounds 8-11
-	VMOVDQU   32(SI), X3
-	PSHUFB    X7, X3
-	SHA1NEXTE X3, X5
-	VMOVDQA   X0, X6
-	SHA1RNDS4 $0x00, X5, X0
-	SHA1MSG1  X3, X2
-	PXOR      X3, X1
-
-	// Rounds 12-15
-	VMOVDQU   48(SI), X4
-	PSHUFB    X7, X4
-	SHA1NEXTE X4, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X4, X1
-	SHA1RNDS4 $0x00, X6, X0
-	SHA1MSG1  X4, X3
-	PXOR      X4, X2
-
-	// Rounds 16-19
-	SHA1NEXTE X1, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X1, X2
-	SHA1RNDS4 $0x00, X5, X0
-	SHA1MSG1  X1, X4
-	PXOR      X1, X3
-
-	// Rounds 20-23
-	SHA1NEXTE X2, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X2, X3
-	SHA1RNDS4 $0x01, X6, X0
-	SHA1MSG1  X2, X1
-	PXOR      X2, X4
-
-	// Rounds 24-27
-	SHA1NEXTE X3, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X3, X4
-	SHA1RNDS4 $0x01, X5, X0
-	SHA1MSG1  X3, X2
-	PXOR      X3, X1
-
-	// Rounds 28-31
-	SHA1NEXTE X4, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X4, X1
-	SHA1RNDS4 $0x01, X6, X0
-	SHA1MSG1  X4, X3
-	PXOR      X4, X2
-
-	// Rounds 32-35
-	SHA1NEXTE X1, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X1, X2
-	SHA1RNDS4 $0x01, X5, X0
-	SHA1MSG1  X1, X4
-	PXOR      X1, X3
-
-	// Rounds 36-39
-	SHA1NEXTE X2, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X2, X3
-	SHA1RNDS4 $0x01, X6, X0
-	SHA1MSG1  X2, X1
-	PXOR      X2, X4
-
-	// Rounds 40-43
-	SHA1NEXTE X3, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X3, X4
-	SHA1RNDS4 $0x02, X5, X0
-	SHA1MSG1  X3, X2
-	PXOR      X3, X1
-
-	// Rounds 44-47
-	SHA1NEXTE X4, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X4, X1
-	SHA1RNDS4 $0x02, X6, X0
-	SHA1MSG1  X4, X3
-	PXOR      X4, X2
-
-	// Rounds 48-51
-	SHA1NEXTE X1, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X1, X2
-	SHA1RNDS4 $0x02, X5, X0
-	SHA1MSG1  X1, X4
-	PXOR      X1, X3
-
-	// Rounds 52-55
-	SHA1NEXTE X2, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X2, X3
-	SHA1RNDS4 $0x02, X6, X0
-	SHA1MSG1  X2, X1
-	PXOR      X2, X4
-
-	// Rounds 56-59
-	SHA1NEXTE X3, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X3, X4
-	SHA1RNDS4 $0x02, X5, X0
-	SHA1MSG1  X3, X2
-	PXOR      X3, X1
-
-	// Rounds 60-63
-	SHA1NEXTE X4, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X4, X1
-	SHA1RNDS4 $0x03, X6, X0
-	SHA1MSG1  X4, X3
-	PXOR      X4, X2
-
-	// Rounds 64-67
-	SHA1NEXTE X1, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X1, X2
-	SHA1RNDS4 $0x03, X5, X0
-	SHA1MSG1  X1, X4
-	PXOR      X1, X3
-
-	// Rounds 68-71
-	SHA1NEXTE X2, X6
-	VMOVDQA   X0, X5
-	SHA1MSG2  X2, X3
-	SHA1RNDS4 $0x03, X6, X0
-	PXOR      X2, X4
-
-	// Rounds 72-75
-	SHA1NEXTE X3, X5
-	VMOVDQA   X0, X6
-	SHA1MSG2  X3, X4
-	SHA1RNDS4 $0x03, X5, X0
-
-	// Rounds 76-79
-	SHA1NEXTE X4, X6
-	VMOVDQA   X0, X5
-	SHA1RNDS4 $0x03, X6, X0
-
-	// Add saved E and ABCD
-	SHA1NEXTE (AX), X5
-	PADDD     16(AX), X0
-
-	// Check if we are done, if not return to the loop
-	ADDQ $0x40, SI
-	CMPQ SI, DX
-	JNE  loop
-
-	// Write the hash state back to digest
-	PSHUFD  $0x1b, X0, X0
-	VMOVDQU X0, (DI)
-	PEXTRD  $0x03, X5, 16(DI)
-
-done:
-	RET
-
-DATA upper_mask<>+0(SB)/8, $0x0000000000000000
-DATA upper_mask<>+8(SB)/8, $0xffffffff00000000
-GLOBL upper_mask<>(SB), RODATA, $16
-
-DATA shuffle_mask<>+0(SB)/8, $0x08090a0b0c0d0e0f
-DATA shuffle_mask<>+8(SB)/8, $0x0001020304050607
-GLOBL shuffle_mask<>(SB), RODATA, $16
diff --git a/src/crypto/sha1/sha1block_arm64.go b/src/crypto/sha1/sha1block_arm64.go
index b972a1e62e8017..e6d96a9080a8c5 100644
--- a/src/crypto/sha1/sha1block_arm64.go
+++ b/src/crypto/sha1/sha1block_arm64.go
@@ -6,16 +6,7 @@
 
 package sha1
 
-import (
-	"crypto/internal/impl"
-	"internal/cpu"
-)
-
-var useSHA1 = cpu.ARM64.HasSHA1
-
-func init() {
-	impl.Register("sha1", "Armv8.0", &useSHA1)
-}
+import "internal/cpu"
 
 var k = []uint32{
 	0x5A827999,
@@ -28,10 +19,10 @@ var k = []uint32{
 func sha1block(h []uint32, p []byte, k []uint32)
 
 func block(dig *digest, p []byte) {
-	if useSHA1 {
+	if !cpu.ARM64.HasSHA1 {
+		blockGeneric(dig, p)
+	} else {
 		h := dig.h[:]
 		sha1block(h, p, k)
-	} else {
-		blockGeneric(dig, p)
 	}
 }
diff --git a/src/crypto/sha1/sha1block_decl.go b/src/crypto/sha1/sha1block_decl.go
index 887d8cad01f4ee..46f41a1cc2634a 100644
--- a/src/crypto/sha1/sha1block_decl.go
+++ b/src/crypto/sha1/sha1block_decl.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (386 || arm || loong64) && !purego
+//go:build (386 || arm || loong64 || s390x) && !purego
 
 package sha1
 
diff --git a/src/crypto/sha1/sha1block_loong64.s b/src/crypto/sha1/sha1block_loong64.s
index b76b193ad0e3e5..7e9d6e0933994e 100644
--- a/src/crypto/sha1/sha1block_loong64.s
+++ b/src/crypto/sha1/sha1block_loong64.s
@@ -29,7 +29,7 @@
 
 #define LOAD1(index) \
 	MOVW	(index*4)(R5), REGTMP3; \
-	REVB2W	REGTMP3, REGTMP3; \
+	WORD	$0x3a73; \	// REVB2W REGTMP3, REGTMP3   to big-endian
 	MOVW	REGTMP3, (index*4)(R3)
 
 #define LOAD(index) \
diff --git a/src/crypto/sha1/sha1block_s390x.go b/src/crypto/sha1/sha1block_s390x.go
index 104220c8bdef5a..f8b0d8ba31007b 100644
--- a/src/crypto/sha1/sha1block_s390x.go
+++ b/src/crypto/sha1/sha1block_s390x.go
@@ -6,26 +6,6 @@
 
 package sha1
 
-import (
-	"crypto/internal/impl"
-	"internal/cpu"
-)
+import "internal/cpu"
 
-var useSHA1 = cpu.S390X.HasSHA1
-
-func init() {
-	// CP Assist for Cryptographic Functions (CPACF)
-	// https://www.ibm.com/docs/en/zos/3.1.0?topic=icsf-cp-assist-cryptographic-functions-cpacf
-	impl.Register("sha1", "CPACF", &useSHA1)
-}
-
-//go:noescape
-func blockS390X(dig *digest, p []byte)
-
-func block(dig *digest, p []byte) {
-	if useSHA1 {
-		blockS390X(dig, p)
-	} else {
-		blockGeneric(dig, p)
-	}
-}
+var useAsm = cpu.S390X.HasSHA1
diff --git a/src/crypto/sha1/sha1block_s390x.s b/src/crypto/sha1/sha1block_s390x.s
index 3ddc9b586a00c6..7a2f4e39c4013f 100644
--- a/src/crypto/sha1/sha1block_s390x.s
+++ b/src/crypto/sha1/sha1block_s390x.s
@@ -6,12 +6,17 @@
 
 #include "textflag.h"
 
-// func blockS390X(dig *digest, p []byte)
-TEXT ·blockS390X(SB), NOSPLIT|NOFRAME, $0-32
+// func block(dig *digest, p []byte)
+TEXT ·block(SB), NOSPLIT|NOFRAME, $0-32
+	MOVBZ  ·useAsm(SB), R4
 	LMG    dig+0(FP), R1, R3            // R2 = &p[0], R3 = len(p)
 	MOVBZ  $1, R0                       // SHA-1 function code
+	CMPBEQ R4, $0, generic
 
 loop:
 	KIMD R0, R2      // compute intermediate message digest (KIMD)
 	BVS  loop        // continue if interrupted
 	RET
+
+generic:
+	BR ·blockGeneric(SB)
diff --git a/src/crypto/sha256/sha256_test.go b/src/crypto/sha256/sha256_test.go
index 11b24db7d6b0a0..b3b4e77f578e60 100644
--- a/src/crypto/sha256/sha256_test.go
+++ b/src/crypto/sha256/sha256_test.go
@@ -200,56 +200,6 @@ func testGoldenMarshal(t *testing.T) {
 	}
 }
 
-func TestLarge(t *testing.T) {
-	const N = 10000
-	const offsets = 4
-	ok := "4c207598af7a20db0e3334dd044399a40e467cb81b37f7ba05a4f76dcbd8fd59" // sha256sum of "0123456789" * 1000
-	block := make([]byte, N+offsets)
-	c := New()
-	for offset := 0; offset < offsets; offset++ {
-		for i := 0; i < N; i++ {
-			block[offset+i] = '0' + byte(i%10)
-		}
-		for blockSize := 10; blockSize <= N; blockSize *= 10 {
-			blocks := N / blockSize
-			b := block[offset : offset+blockSize]
-			c.Reset()
-			for i := 0; i < blocks; i++ {
-				c.Write(b)
-			}
-			s := fmt.Sprintf("%x", c.Sum(nil))
-			if s != ok {
-				t.Fatalf("sha256 TestLarge offset=%d, blockSize=%d = %s want %s", offset, blockSize, s, ok)
-			}
-		}
-	}
-}
-
-func TestExtraLarge(t *testing.T) {
-	const N = 100000
-	const offsets = 4
-	ok := "aca9e593cc629cbaa94cd5a07dc029424aad93e5129e5d11f8dcd2f139c16cc0" // sha256sum of "0123456789" * 10000
-	block := make([]byte, N+offsets)
-	c := New()
-	for offset := 0; offset < offsets; offset++ {
-		for i := 0; i < N; i++ {
-			block[offset+i] = '0' + byte(i%10)
-		}
-		for blockSize := 10; blockSize <= N; blockSize *= 10 {
-			blocks := N / blockSize
-			b := block[offset : offset+blockSize]
-			c.Reset()
-			for i := 0; i < blocks; i++ {
-				c.Write(b)
-			}
-			s := fmt.Sprintf("%x", c.Sum(nil))
-			if s != ok {
-				t.Fatalf("sha256 TestExtraLarge offset=%d, blockSize=%d = %s want %s", offset, blockSize, s, ok)
-			}
-		}
-	}
-}
-
 func TestMarshalTypeMismatch(t *testing.T) {
 	h1 := New()
 	h2 := New224()
@@ -403,36 +353,29 @@ func TestHash(t *testing.T) {
 func TestExtraMethods(t *testing.T) {
 	t.Run("SHA-224", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha256", func(t *testing.T) {
-			h := maybeCloner(New224())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New224()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 	t.Run("SHA-256", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha256", func(t *testing.T) {
-			h := maybeCloner(New())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 }
 
-func maybeCloner(h hash.Hash) any {
-	if c, ok := h.(hash.Cloner); ok {
-		return &c
-	}
-	return &h
-}
-
 var bench = New()
+var buf = make([]byte, 8192)
 
 func benchmarkSize(b *testing.B, size int) {
-	buf := make([]byte, size)
 	sum := make([]byte, bench.Size())
 	b.Run("New", func(b *testing.B) {
 		b.ReportAllocs()
 		b.SetBytes(int64(size))
 		for i := 0; i < b.N; i++ {
 			bench.Reset()
-			bench.Write(buf)
+			bench.Write(buf[:size])
 			bench.Sum(sum[:0])
 		}
 	})
@@ -440,14 +383,14 @@ func benchmarkSize(b *testing.B, size int) {
 		b.ReportAllocs()
 		b.SetBytes(int64(size))
 		for i := 0; i < b.N; i++ {
-			Sum224(buf)
+			Sum224(buf[:size])
 		}
 	})
 	b.Run("Sum256", func(b *testing.B) {
 		b.ReportAllocs()
 		b.SetBytes(int64(size))
 		for i := 0; i < b.N; i++ {
-			Sum256(buf)
+			Sum256(buf[:size])
 		}
 	})
 }
@@ -463,11 +406,3 @@ func BenchmarkHash1K(b *testing.B) {
 func BenchmarkHash8K(b *testing.B) {
 	benchmarkSize(b, 8192)
 }
-
-func BenchmarkHash256K(b *testing.B) {
-	benchmarkSize(b, 256*1024)
-}
-
-func BenchmarkHash1M(b *testing.B) {
-	benchmarkSize(b, 1024*1024)
-}
diff --git a/src/crypto/sha3/sha3.go b/src/crypto/sha3/sha3.go
index 2a1b3ca7008f5e..a6c5ae55f1ff20 100644
--- a/src/crypto/sha3/sha3.go
+++ b/src/crypto/sha3/sha3.go
@@ -166,12 +166,6 @@ func (s *SHA3) UnmarshalBinary(data []byte) error {
 	return s.s.UnmarshalBinary(data)
 }
 
-// Clone implements [hash.Cloner].
-func (d *SHA3) Clone() (hash.Cloner, error) {
-	r := *d
-	return &r, nil
-}
-
 // SHAKE is an instance of a SHAKE extendable output function.
 type SHAKE struct {
 	s sha3.SHAKE
diff --git a/src/crypto/sha3/sha3_test.go b/src/crypto/sha3/sha3_test.go
index 15ee877236e195..f88e51d3e746e2 100644
--- a/src/crypto/sha3/sha3_test.go
+++ b/src/crypto/sha3/sha3_test.go
@@ -7,9 +7,9 @@ package sha3_test
 import (
 	"bytes"
 	"crypto/internal/cryptotest"
+	"crypto/internal/fips140"
 	. "crypto/sha3"
 	"encoding/hex"
-	"hash"
 	"io"
 	"math/rand"
 	"strings"
@@ -42,14 +42,13 @@ var testShakes = map[string]struct {
 	"cSHAKE256": {NewCSHAKE256, "CSHAKE256", "CustomString"},
 }
 
-func TestSHA3Hash(t *testing.T) {
-	cryptotest.TestAllImplementations(t, "sha3", func(t *testing.T) {
-		for name, f := range testDigests {
-			t.Run(name, func(t *testing.T) {
-				cryptotest.TestHash(t, func() hash.Hash { return f() })
-			})
-		}
-	})
+// decodeHex converts a hex-encoded string into a raw byte string.
+func decodeHex(s string) []byte {
+	b, err := hex.DecodeString(s)
+	if err != nil {
+		panic(err)
+	}
+	return b
 }
 
 // TestUnalignedWrite tests that writing data in an arbitrary pattern with
@@ -451,7 +450,7 @@ func testMarshalUnmarshalSHAKE(t *testing.T, h *SHAKE) {
 }
 
 // benchmarkHash tests the speed to hash num buffers of buflen each.
-func benchmarkHash(b *testing.B, h hash.Hash, size, num int) {
+func benchmarkHash(b *testing.B, h fips140.Hash, size, num int) {
 	b.StopTimer()
 	h.Reset()
 	data := sequentialBytes(size)
diff --git a/src/crypto/sha512/sha512_test.go b/src/crypto/sha512/sha512_test.go
index 080bf694f03652..7e80f49dea4315 100644
--- a/src/crypto/sha512/sha512_test.go
+++ b/src/crypto/sha512/sha512_test.go
@@ -966,37 +966,30 @@ func TestHash(t *testing.T) {
 func TestExtraMethods(t *testing.T) {
 	t.Run("SHA-384", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha512", func(t *testing.T) {
-			h := maybeCloner(New384())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New384()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 	t.Run("SHA-512/224", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha512", func(t *testing.T) {
-			h := maybeCloner(New512_224())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New512_224()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 	t.Run("SHA-512/256", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha512", func(t *testing.T) {
-			h := maybeCloner(New512_256())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New512_256()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 	t.Run("SHA-512", func(t *testing.T) {
 		cryptotest.TestAllImplementations(t, "sha512", func(t *testing.T) {
-			h := maybeCloner(New())
-			cryptotest.NoExtraMethods(t, h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
+			h := New()
+			cryptotest.NoExtraMethods(t, &h, "MarshalBinary", "UnmarshalBinary", "AppendBinary")
 		})
 	})
 }
 
-func maybeCloner(h hash.Hash) any {
-	if c, ok := h.(hash.Cloner); ok {
-		return &c
-	}
-	return &h
-}
-
 var bench = New()
 var buf = make([]byte, 8192)
 
diff --git a/src/crypto/tls/auth.go b/src/crypto/tls/auth.go
index f5de7b306940df..81a85851ee5ae5 100644
--- a/src/crypto/tls/auth.go
+++ b/src/crypto/tls/auth.go
@@ -149,18 +149,20 @@ func legacyTypeAndHashFromPublicKey(pub crypto.PublicKey) (sigType uint8, hash c
 var rsaSignatureSchemes = []struct {
 	scheme          SignatureScheme
 	minModulusBytes int
+	maxVersion      uint16
 }{
 	// RSA-PSS is used with PSSSaltLengthEqualsHash, and requires
 	//    emLen >= hLen + sLen + 2
-	{PSSWithSHA256, crypto.SHA256.Size()*2 + 2},
-	{PSSWithSHA384, crypto.SHA384.Size()*2 + 2},
-	{PSSWithSHA512, crypto.SHA512.Size()*2 + 2},
+	{PSSWithSHA256, crypto.SHA256.Size()*2 + 2, VersionTLS13},
+	{PSSWithSHA384, crypto.SHA384.Size()*2 + 2, VersionTLS13},
+	{PSSWithSHA512, crypto.SHA512.Size()*2 + 2, VersionTLS13},
 	// PKCS #1 v1.5 uses prefixes from hashPrefixes in crypto/rsa, and requires
 	//    emLen >= len(prefix) + hLen + 11
-	{PKCS1WithSHA256, 19 + crypto.SHA256.Size() + 11},
-	{PKCS1WithSHA384, 19 + crypto.SHA384.Size() + 11},
-	{PKCS1WithSHA512, 19 + crypto.SHA512.Size() + 11},
-	{PKCS1WithSHA1, 15 + crypto.SHA1.Size() + 11},
+	// TLS 1.3 dropped support for PKCS #1 v1.5 in favor of RSA-PSS.
+	{PKCS1WithSHA256, 19 + crypto.SHA256.Size() + 11, VersionTLS12},
+	{PKCS1WithSHA384, 19 + crypto.SHA384.Size() + 11, VersionTLS12},
+	{PKCS1WithSHA512, 19 + crypto.SHA512.Size() + 11, VersionTLS12},
+	{PKCS1WithSHA1, 15 + crypto.SHA1.Size() + 11, VersionTLS12},
 }
 
 // signatureSchemesForCertificate returns the list of supported SignatureSchemes
@@ -200,7 +202,7 @@ func signatureSchemesForCertificate(version uint16, cert *Certificate) []Signatu
 		size := pub.Size()
 		sigAlgs = make([]SignatureScheme, 0, len(rsaSignatureSchemes))
 		for _, candidate := range rsaSignatureSchemes {
-			if size >= candidate.minModulusBytes {
+			if size >= candidate.minModulusBytes && version <= candidate.maxVersion {
 				sigAlgs = append(sigAlgs, candidate.scheme)
 			}
 		}
@@ -217,9 +219,10 @@ func signatureSchemesForCertificate(version uint16, cert *Certificate) []Signatu
 	}
 
 	// Filter out any unsupported signature algorithms, for example due to
-	// FIPS 140-3 policy, tlssha1=0, or protocol version.
+	// FIPS 140-3 policy, or any downstream changes to defaults.go.
+	supportedAlgs := supportedSignatureAlgorithms()
 	sigAlgs = slices.DeleteFunc(sigAlgs, func(sigAlg SignatureScheme) bool {
-		return isDisabledSignatureAlgorithm(version, sigAlg, false)
+		return !isSupportedSignatureAlgorithm(sigAlg, supportedAlgs)
 	})
 
 	return sigAlgs
@@ -236,11 +239,6 @@ func selectSignatureScheme(vers uint16, c *Certificate, peerAlgs []SignatureSche
 	if len(peerAlgs) == 0 && vers == VersionTLS12 {
 		// For TLS 1.2, if the client didn't send signature_algorithms then we
 		// can assume that it supports SHA1. See RFC 5246, Section 7.4.1.4.1.
-		// RFC 9155 made signature_algorithms mandatory in TLS 1.2, and we gated
-		// it behind the tlssha1 GODEBUG setting.
-		if tlssha1.Value() != "1" {
-			return 0, errors.New("tls: missing signature_algorithms from TLS 1.2 peer")
-		}
 		peerAlgs = []SignatureScheme{PKCS1WithSHA1, ECDSAWithSHA1}
 	}
 	// Pick signature scheme in the peer's preference order, as our
diff --git a/src/crypto/tls/auth_test.go b/src/crypto/tls/auth_test.go
index 727bdc4df76393..9036f4c8d2bbb6 100644
--- a/src/crypto/tls/auth_test.go
+++ b/src/crypto/tls/auth_test.go
@@ -7,7 +7,6 @@ package tls
 import (
 	"crypto"
 	"crypto/tls/internal/fips140tls"
-	"os"
 	"testing"
 )
 
@@ -34,41 +33,35 @@ func TestSignatureSelection(t *testing.T) {
 		cert        *Certificate
 		peerSigAlgs []SignatureScheme
 		tlsVersion  uint16
-		godebug     string
 
 		expectedSigAlg  SignatureScheme
 		expectedSigType uint8
 		expectedHash    crypto.Hash
 	}{
-		{rsaCert, []SignatureScheme{PKCS1WithSHA1, PKCS1WithSHA256}, VersionTLS12, "", PKCS1WithSHA256, signaturePKCS1v15, crypto.SHA256},
-		{rsaCert, []SignatureScheme{PKCS1WithSHA1, PKCS1WithSHA256}, VersionTLS12, "tlssha1=1", PKCS1WithSHA1, signaturePKCS1v15, crypto.SHA1},
-		{rsaCert, []SignatureScheme{PKCS1WithSHA512, PKCS1WithSHA1}, VersionTLS12, "", PKCS1WithSHA512, signaturePKCS1v15, crypto.SHA512},
-		{rsaCert, []SignatureScheme{PSSWithSHA256, PKCS1WithSHA256}, VersionTLS12, "", PSSWithSHA256, signatureRSAPSS, crypto.SHA256},
-		{pkcs1Cert, []SignatureScheme{PSSWithSHA256, PKCS1WithSHA256}, VersionTLS12, "", PKCS1WithSHA256, signaturePKCS1v15, crypto.SHA256},
-		{rsaCert, []SignatureScheme{PSSWithSHA384, PKCS1WithSHA1}, VersionTLS13, "", PSSWithSHA384, signatureRSAPSS, crypto.SHA384},
-		{rsaCert, []SignatureScheme{PKCS1WithSHA1, PSSWithSHA384}, VersionTLS13, "", PSSWithSHA384, signatureRSAPSS, crypto.SHA384},
-		{ecdsaCert, []SignatureScheme{ECDSAWithSHA1, ECDSAWithP256AndSHA256}, VersionTLS12, "", ECDSAWithP256AndSHA256, signatureECDSA, crypto.SHA256},
-		{ecdsaCert, []SignatureScheme{ECDSAWithSHA1}, VersionTLS12, "tlssha1=1", ECDSAWithSHA1, signatureECDSA, crypto.SHA1},
-		{ecdsaCert, []SignatureScheme{ECDSAWithP256AndSHA256}, VersionTLS12, "", ECDSAWithP256AndSHA256, signatureECDSA, crypto.SHA256},
-		{ecdsaCert, []SignatureScheme{ECDSAWithP256AndSHA256}, VersionTLS13, "", ECDSAWithP256AndSHA256, signatureECDSA, crypto.SHA256},
-		{ed25519Cert, []SignatureScheme{Ed25519}, VersionTLS12, "", Ed25519, signatureEd25519, directSigning},
-		{ed25519Cert, []SignatureScheme{Ed25519}, VersionTLS13, "", Ed25519, signatureEd25519, directSigning},
+		{rsaCert, []SignatureScheme{PKCS1WithSHA1, PKCS1WithSHA256}, VersionTLS12, PKCS1WithSHA1, signaturePKCS1v15, crypto.SHA1},
+		{rsaCert, []SignatureScheme{PKCS1WithSHA512, PKCS1WithSHA1}, VersionTLS12, PKCS1WithSHA512, signaturePKCS1v15, crypto.SHA512},
+		{rsaCert, []SignatureScheme{PSSWithSHA256, PKCS1WithSHA256}, VersionTLS12, PSSWithSHA256, signatureRSAPSS, crypto.SHA256},
+		{pkcs1Cert, []SignatureScheme{PSSWithSHA256, PKCS1WithSHA256}, VersionTLS12, PKCS1WithSHA256, signaturePKCS1v15, crypto.SHA256},
+		{rsaCert, []SignatureScheme{PSSWithSHA384, PKCS1WithSHA1}, VersionTLS13, PSSWithSHA384, signatureRSAPSS, crypto.SHA384},
+		{ecdsaCert, []SignatureScheme{ECDSAWithSHA1}, VersionTLS12, ECDSAWithSHA1, signatureECDSA, crypto.SHA1},
+		{ecdsaCert, []SignatureScheme{ECDSAWithP256AndSHA256}, VersionTLS12, ECDSAWithP256AndSHA256, signatureECDSA, crypto.SHA256},
+		{ecdsaCert, []SignatureScheme{ECDSAWithP256AndSHA256}, VersionTLS13, ECDSAWithP256AndSHA256, signatureECDSA, crypto.SHA256},
+		{ed25519Cert, []SignatureScheme{Ed25519}, VersionTLS12, Ed25519, signatureEd25519, directSigning},
+		{ed25519Cert, []SignatureScheme{Ed25519}, VersionTLS13, Ed25519, signatureEd25519, directSigning},
 
 		// TLS 1.2 without signature_algorithms extension
-		{rsaCert, nil, VersionTLS12, "tlssha1=1", PKCS1WithSHA1, signaturePKCS1v15, crypto.SHA1},
-		{ecdsaCert, nil, VersionTLS12, "tlssha1=1", ECDSAWithSHA1, signatureECDSA, crypto.SHA1},
+		{rsaCert, nil, VersionTLS12, PKCS1WithSHA1, signaturePKCS1v15, crypto.SHA1},
+		{ecdsaCert, nil, VersionTLS12, ECDSAWithSHA1, signatureECDSA, crypto.SHA1},
 
 		// TLS 1.2 does not restrict the ECDSA curve (our ecdsaCert is P-256)
-		{ecdsaCert, []SignatureScheme{ECDSAWithP384AndSHA384}, VersionTLS12, "", ECDSAWithP384AndSHA384, signatureECDSA, crypto.SHA384},
+		{ecdsaCert, []SignatureScheme{ECDSAWithP384AndSHA384}, VersionTLS12, ECDSAWithP384AndSHA384, signatureECDSA, crypto.SHA384},
 	}
 
 	for testNo, test := range tests {
-		if fips140tls.Required() && test.expectedHash == crypto.SHA1 {
+		if fips140tls.Required() && (test.expectedHash == crypto.SHA1 || test.expectedSigAlg == Ed25519) {
 			t.Logf("skipping test[%d] - not compatible with TLS FIPS mode", testNo)
 			continue
 		}
-		savedGODEBUG := os.Getenv("GODEBUG")
-		os.Setenv("GODEBUG", savedGODEBUG+","+test.godebug)
 
 		sigAlg, err := selectSignatureScheme(test.tlsVersion, test.cert, test.peerSigAlgs)
 		if err != nil {
@@ -87,8 +80,6 @@ func TestSignatureSelection(t *testing.T) {
 		if test.expectedHash != hashFunc {
 			t.Errorf("test[%d]: expected hash function %#x, got %#x", testNo, test.expectedHash, hashFunc)
 		}
-
-		os.Setenv("GODEBUG", savedGODEBUG)
 	}
 
 	brokenCert := &Certificate{
@@ -125,11 +116,6 @@ func TestSignatureSelection(t *testing.T) {
 		{ecdsaCert, []SignatureScheme{ECDSAWithSHA1}, VersionTLS13},
 		// The key can be too small for the hash.
 		{rsaCert, []SignatureScheme{PSSWithSHA512}, VersionTLS12},
-		// SHA-1 requires tlssha1=1
-		{rsaCert, []SignatureScheme{PKCS1WithSHA1}, VersionTLS12},
-		{ecdsaCert, []SignatureScheme{ECDSAWithSHA1}, VersionTLS12},
-		{rsaCert, nil, VersionTLS12},
-		{ecdsaCert, nil, VersionTLS12},
 	}
 
 	for testNo, test := range badTests {
@@ -173,7 +159,7 @@ func TestLegacyTypeAndHash(t *testing.T) {
 // TestSupportedSignatureAlgorithms checks that all supportedSignatureAlgorithms
 // have valid type and hash information.
 func TestSupportedSignatureAlgorithms(t *testing.T) {
-	for _, sigAlg := range supportedSignatureAlgorithms(VersionTLS12) {
+	for _, sigAlg := range supportedSignatureAlgorithms() {
 		sigType, hash, err := typeAndHashFromSignatureScheme(sigAlg)
 		if err != nil {
 			t.Errorf("%v: unexpected error: %v", sigAlg, err)
diff --git a/src/crypto/tls/bogo_config.json b/src/crypto/tls/bogo_config.json
index 9e3990ecb56e2a..5261a35ca95bad 100644
--- a/src/crypto/tls/bogo_config.json
+++ b/src/crypto/tls/bogo_config.json
@@ -8,7 +8,7 @@
         "TLS-ECH-Client-Rejected-OverrideName-TLS12": "We won't attempt to negotiate 1.2 if ECH is enabled",
         "TLS-ECH-Client-Reject-TLS12-NoFalseStart": "We won't attempt to negotiate 1.2 if ECH is enabled",
         "TLS-ECH-Client-TLS12SessionTicket": "We won't attempt to negotiate 1.2 if ECH is enabled",
-        "TLS-ECH-Client-TLS12SessionID": "We won't attempt to negotiate 1.2 if ECH is enabled, and we don't support session ID resumption",
+        "TLS-ECH-Client-TLS12SessionID": "We won't attempt to negotiate 1.2 if ECH is enabled",
 
         "TLS-ECH-Client-Reject-ResumeInnerSession-TLS12": "We won't attempt to negotiate 1.2 if ECH is enabled (we could possibly test this if we had the ability to indicate not to send ECH on resumption?)",
 
@@ -38,19 +38,7 @@
         "PostQuantumNotEnabledByDefaultInClients": "We do enable it by default!",
         "*-Kyber-TLS13": "We don't support Kyber, only ML-KEM (BoGo bug ignoring AllCurves?)",
 
-        "*-RSA_PKCS1_SHA256_LEGACY-TLS13": "We don't support the legacy PKCS#1 v1.5 codepoint for TLS 1.3",
-        "*-Verify-RSA_PKCS1_SHA256_LEGACY-TLS12": "Likewise, we don't know how to handle it in TLS 1.2, so we send the wrong alert",
-        "*-VerifyDefault-*": "Our signature algorithms are not configurable, so there is no difference between default and supported",
-        "Ed25519DefaultDisable-*": "We support Ed25519 by default",
-        "NoCommonSignatureAlgorithms-TLS12-Fallback": "We don't support the legacy RSA exchange (without tlsrsakex=1)",
-
-        "*_SHA1-TLS12": "We don't support SHA-1 in TLS 1.2 (without tlssha1=1)",
-        "Agree-Digest-SHA1": "We don't support SHA-1 in TLS 1.2 (without tlssha1=1)",
-        "ServerAuth-SHA1-Fallback*": "We don't support SHA-1 in TLS 1.2 (without tlssha1=1), so we fail if there are no signature_algorithms",
-
-        "Agree-Digest-SHA256": "We select signature algorithms in peer preference order. We should consider changing this.",
-        "ECDSACurveMismatch-Verify-TLS13": "We don't enforce the curve when verifying. This is a bug. We need to fix this.",
-        "*-Verify-ECDSA_P224_SHA256-TLS13": "Side effect of the bug above. BoGo sends a P-256 sigAlg with a P-224 key, and we allow it.",
+        "*-SignDefault-*": "TODO, partially it encodes BoringSSL defaults, partially we might be missing some implicit behavior of a missing flag",
 
         "V2ClientHello-*": "We don't support SSLv2",
         "SendV2ClientHello*": "We don't support SSLv2",
@@ -70,20 +58,45 @@
         "*Client-P-224*": "no P-224 support",
         "*Server-P-224*": "no P-224 support",
         "CurveID-Resume*": "unexposed curveID is not stored in the ticket yet",
-        "BadRSAClientKeyExchange-4": "crypto/tls doesn't check the version number in the premaster secret - see processClientKeyExchange comment",
-        "BadRSAClientKeyExchange-5": "crypto/tls doesn't check the version number in the premaster secret - see processClientKeyExchange comment",
-        "SupportTicketsWithSessionID": "We don't support session ID resumption",
-        "ResumeTLS12SessionID-TLS13": "We don't support session ID resumption",
-
         "CheckLeafCurve": "TODO: first pass, this should be fixed",
+        "DisabledCurve-HelloRetryRequest-TLS13": "TODO: first pass, this should be fixed",
+        "UnsupportedCurve": "TODO: first pass, this should be fixed",
+        "SupportTicketsWithSessionID": "TODO: first pass, this should be fixed",
+        "NoNullCompression-TLS12": "TODO: first pass, this should be fixed",
         "KeyUpdate-RequestACK": "TODO: first pass, this should be fixed",
+        "TLS13-HRR-InvalidCompressionMethod": "TODO: first pass, this should be fixed",
+        "InvalidCompressionMethod": "TODO: first pass, this should be fixed",
+        "TLS-TLS12-RSA_WITH_AES_128_GCM_SHA256-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS1-RSA_WITH_AES_128_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS11-RSA_WITH_AES_128_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS12-RSA_WITH_AES_128_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS12-RSA_WITH_AES_256_GCM_SHA384-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS1-RSA_WITH_AES_256_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS11-RSA_WITH_AES_256_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS12-RSA_WITH_AES_256_CBC_SHA-LargeRecord": "TODO: first pass, this should be fixed",
+        "TLS-TLS12-ECDHE_RSA_WITH_AES_128_CBC_SHA256-LargeRecord": "TODO: first pass, this should be fixed",
+        "RequireAnyClientCertificate-TLS1": "TODO: first pass, this should be fixed",
+        "RequireAnyClientCertificate-TLS11": "TODO: first pass, this should be fixed",
+        "RequireAnyClientCertificate-TLS12": "TODO: first pass, this should be fixed",
+        "ClientHelloVersionTooHigh": "TODO: first pass, this should be fixed",
+        "MinorVersionTolerance": "TODO: first pass, this should be fixed",
+        "IgnoreClientVersionOrder": "TODO: first pass, this should be fixed",
         "SupportedVersionSelection-TLS12": "TODO: first pass, this should be fixed",
+        "MajorVersionTolerance": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionServer-TLS-TLS1": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionClient-TLS-TLS1": "TODO: first pass, this should be fixed",
         "UnsolicitedServerNameAck-TLS-TLS1": "TODO: first pass, this should be fixed",
         "TicketSessionIDLength-33-TLS-TLS1": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionServer-TLS-TLS11": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionClient-TLS-TLS11": "TODO: first pass, this should be fixed",
         "UnsolicitedServerNameAck-TLS-TLS11": "TODO: first pass, this should be fixed",
         "TicketSessionIDLength-33-TLS-TLS11": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionServer-TLS-TLS12": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionClient-TLS-TLS12": "TODO: first pass, this should be fixed",
         "UnsolicitedServerNameAck-TLS-TLS12": "TODO: first pass, this should be fixed",
         "TicketSessionIDLength-33-TLS-TLS12": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionClient-TLS-TLS13": "TODO: first pass, this should be fixed",
+        "DuplicateExtensionServer-TLS-TLS13": "TODO: first pass, this should be fixed",
         "UnsolicitedServerNameAck-TLS-TLS13": "TODO: first pass, this should be fixed",
         "RenegotiationInfo-Forbidden-TLS13": "TODO: first pass, this should be fixed",
         "EMS-Forbidden-TLS13": "TODO: first pass, this should be fixed",
@@ -100,6 +113,19 @@
         "Resume-Server-OmitPSKsOnSecondClientHello": "TODO: first pass, this should be fixed",
         "Renegotiate-Server-Forbidden": "TODO: first pass, this should be fixed",
         "Renegotiate-Client-Forbidden-1": "TODO: first pass, this should be fixed",
+        "Client-Sign-RSA_PKCS1_SHA1-TLS13": "TODO: first pass, this should be fixed",
+        "Client-Sign-RSA_PKCS1_SHA256-TLS13": "TODO: first pass, this should be fixed",
+        "Client-Sign-RSA_PKCS1_SHA384-TLS13": "TODO: first pass, this should be fixed",
+        "Client-Sign-RSA_PKCS1_SHA512-TLS13": "TODO: first pass, this should be fixed",
+        "Client-Sign-ECDSA_SHA1-TLS13": "TODO: first pass, this should be fixed",
+        "Client-Sign-ECDSA_P224_SHA256-TLS13": "TODO: first pass, this should be fixed",
+        "ClientAuth-NoFallback-TLS13": "TODO: first pass, this should be fixed",
+        "ClientAuth-NoFallback-ECDSA": "TODO: first pass, this should be fixed",
+        "ClientAuth-NoFallback-RSA": "TODO: first pass, this should be fixed",
+        "ECDSACurveMismatch-Verify-TLS13": "TODO: first pass, this should be fixed",
+        "Ed25519DefaultDisable-NoAdvertise": "TODO: first pass, this should be fixed",
+        "Ed25519DefaultDisable-NoAccept": "TODO: first pass, this should be fixed",
+        "NoCommonSignatureAlgorithms-TLS12-Fallback": "TODO: first pass, this should be fixed",
         "UnknownExtension-Client": "TODO: first pass, this should be fixed",
         "UnknownUnencryptedExtension-Client-TLS13": "TODO: first pass, this should be fixed",
         "UnofferedExtension-Client-TLS13": "TODO: first pass, this should be fixed",
@@ -107,6 +133,7 @@
         "SendClientVersion-RSA": "TODO: first pass, this should be fixed",
         "NoCommonCurves": "TODO: first pass, this should be fixed",
         "PointFormat-EncryptedExtensions-TLS13": "TODO: first pass, this should be fixed",
+        "PointFormat-Client-MissingUncompressed": "TODO: first pass, this should be fixed",
         "TLS13-SendNoKEMModesWithPSK-Server": "TODO: first pass, this should be fixed",
         "TLS13-DuplicateTicketEarlyDataSupport": "TODO: first pass, this should be fixed",
         "Basic-Client-NoTicket-TLS-Sync": "TODO: first pass, this should be fixed",
@@ -152,6 +179,7 @@
         "TrailingMessageData-TLS13-ClientCertificate-TLS": "TODO: first pass, this should be fixed",
         "TrailingMessageData-TLS13-ClientCertificateVerify-TLS": "TODO: first pass, this should be fixed",
         "TrailingMessageData-TLS13-ServerCertificate-TLS": "TODO: first pass, this should be fixed",
+        "ResumeTLS12SessionID-TLS13": "TODO: first pass, this should be fixed",
         "SkipEarlyData-TLS13": "TODO: first pass, this should be fixed",
         "DuplicateKeyShares-TLS13": "TODO: first pass, this should be fixed",
         "Server-TooLongSessionID-TLS13": "TODO: first pass, this should be fixed",
diff --git a/src/crypto/tls/bogo_shim_test.go b/src/crypto/tls/bogo_shim_test.go
index 2e88d539c4d119..25367eef615bec 100644
--- a/src/crypto/tls/bogo_shim_test.go
+++ b/src/crypto/tls/bogo_shim_test.go
@@ -35,10 +35,8 @@ var (
 
 	isHandshakerSupported = flag.Bool("is-handshaker-supported", false, "")
 
-	keyfile      = flag.String("key-file", "", "")
-	certfile     = flag.String("cert-file", "", "")
-	ocspResponse = flagBase64("ocsp-response", "")
-	signingPrefs = flagIntSlice("signing-prefs", "")
+	keyfile  = flag.String("key-file", "", "")
+	certfile = flag.String("cert-file", "", "")
 
 	trustCert = flag.String("trust-cert", "", "")
 
@@ -57,17 +55,13 @@ var (
 
 	resumeCount = flag.Int("resume-count", 0, "")
 
-	curves        = flagIntSlice("curves", "")
+	curves        = flagStringSlice("curves", "")
 	expectedCurve = flag.String("expect-curve-id", "", "")
 
-	verifyPrefs        = flagIntSlice("verify-prefs", "")
-	expectedSigAlg     = flag.String("expect-peer-signature-algorithm", "", "")
-	expectedPeerSigAlg = flagIntSlice("expect-peer-verify-pref", "")
-
 	shimID = flag.Uint64("shim-id", 0, "")
 	_      = flag.Bool("ipv6", false, "")
 
-	echConfigList              = flagBase64("ech-config-list", "")
+	echConfigListB64           = flag.String("ech-config-list", "", "")
 	expectECHAccepted          = flag.Bool("expect-ech-accept", false, "")
 	expectHRR                  = flag.Bool("expect-hrr", false, "")
 	expectNoHRR                = flag.Bool("expect-no-hrr", false, "")
@@ -77,7 +71,7 @@ var (
 	_                          = flag.Bool("expect-no-ech-name-override", false, "")
 	_                          = flag.String("expect-ech-name-override", "", "")
 	_                          = flag.Bool("reverify-on-resume", false, "")
-	onResumeECHConfigList      = flagBase64("on-resume-ech-config-list", "")
+	onResumeECHConfigListB64   = flag.String("on-resume-ech-config-list", "", "")
 	_                          = flag.Bool("on-resume-expect-reject-early-data", false, "")
 	onResumeExpectECHAccepted  = flag.Bool("on-resume-expect-ech-accept", false, "")
 	_                          = flag.Bool("on-resume-expect-no-ech-name-override", false, "")
@@ -111,7 +105,7 @@ var (
 type stringSlice []string
 
 func flagStringSlice(name, usage string) *stringSlice {
-	f := new(stringSlice)
+	f := &stringSlice{}
 	flag.Var(f, name, usage)
 	return f
 }
@@ -125,65 +119,12 @@ func (saf *stringSlice) Set(s string) error {
 	return nil
 }
 
-type intSlice []int64
-
-func flagIntSlice(name, usage string) *intSlice {
-	f := new(intSlice)
-	flag.Var(f, name, usage)
-	return f
-}
-
-func (sf *intSlice) String() string {
-	return strings.Join(strings.Split(fmt.Sprint(*sf), " "), ",")
-}
-
-func (sf *intSlice) Set(s string) error {
-	i, err := strconv.ParseInt(s, 10, 64)
-	if err != nil {
-		return err
-	}
-	*sf = append(*sf, i)
-	return nil
-}
-
-type base64Flag []byte
-
-func flagBase64(name, usage string) *base64Flag {
-	f := new(base64Flag)
-	flag.Var(f, name, usage)
-	return f
-}
-
-func (f *base64Flag) String() string {
-	return base64.StdEncoding.EncodeToString(*f)
-}
-
-func (f *base64Flag) Set(s string) error {
-	if *f != nil {
-		return fmt.Errorf("multiple base64 values not supported")
-	}
-	b, err := base64.StdEncoding.DecodeString(s)
-	if err != nil {
-		return err
-	}
-	*f = b
-	return nil
-}
-
 func bogoShim() {
 	if *isHandshakerSupported {
 		fmt.Println("No")
 		return
 	}
 
-	fmt.Printf("BoGo shim flags: %q", os.Args[1:])
-
-	// Test with both the default and insecure cipher suites.
-	var ciphersuites []uint16
-	for _, s := range append(CipherSuites(), InsecureCipherSuites()...) {
-		ciphersuites = append(ciphersuites, s.ID)
-	}
-
 	cfg := &Config{
 		ServerName: "test",
 
@@ -192,8 +133,6 @@ func bogoShim() {
 
 		ClientSessionCache: NewLRUClientSessionCache(0),
 
-		CipherSuites: ciphersuites,
-
 		GetConfigForClient: func(chi *ClientHelloInfo) (*Config, error) {
 
 			if *expectAdvertisedALPN != "" {
@@ -271,39 +210,7 @@ func bogoShim() {
 		if err != nil {
 			log.Fatalf("load key-file err: %s", err)
 		}
-		for _, id := range *signingPrefs {
-			pair.SupportedSignatureAlgorithms = append(pair.SupportedSignatureAlgorithms, SignatureScheme(id))
-		}
-		pair.OCSPStaple = *ocspResponse
-		// Use Get[Client]Certificate to force the use of the certificate, which
-		// more closely matches the BoGo expectations (e.g. handshake failure if
-		// no client certificates are compatible).
-		cfg.GetCertificate = func(chi *ClientHelloInfo) (*Certificate, error) {
-			if *expectedPeerSigAlg != nil {
-				if len(chi.SignatureSchemes) != len(*expectedPeerSigAlg) {
-					return nil, fmt.Errorf("unexpected signature algorithms: got %s, want %v", chi.SignatureSchemes, *expectedPeerSigAlg)
-				}
-				for i := range *expectedPeerSigAlg {
-					if chi.SignatureSchemes[i] != SignatureScheme((*expectedPeerSigAlg)[i]) {
-						return nil, fmt.Errorf("unexpected signature algorithms: got %s, want %v", chi.SignatureSchemes, *expectedPeerSigAlg)
-					}
-				}
-			}
-			return &pair, nil
-		}
-		cfg.GetClientCertificate = func(cri *CertificateRequestInfo) (*Certificate, error) {
-			if *expectedPeerSigAlg != nil {
-				if len(cri.SignatureSchemes) != len(*expectedPeerSigAlg) {
-					return nil, fmt.Errorf("unexpected signature algorithms: got %s, want %v", cri.SignatureSchemes, *expectedPeerSigAlg)
-				}
-				for i := range *expectedPeerSigAlg {
-					if cri.SignatureSchemes[i] != SignatureScheme((*expectedPeerSigAlg)[i]) {
-						return nil, fmt.Errorf("unexpected signature algorithms: got %s, want %v", cri.SignatureSchemes, *expectedPeerSigAlg)
-					}
-				}
-			}
-			return &pair, nil
-		}
+		cfg.Certificates = []Certificate{pair}
 	}
 	if *trustCert != "" {
 		pool := x509.NewCertPool()
@@ -327,24 +234,26 @@ func bogoShim() {
 		cfg.ClientAuth = VerifyClientCertIfGiven
 	}
 
-	if *echConfigList != nil {
-		cfg.EncryptedClientHelloConfigList = *echConfigList
+	if *echConfigListB64 != "" {
+		echConfigList, err := base64.StdEncoding.DecodeString(*echConfigListB64)
+		if err != nil {
+			log.Fatalf("parse ech-config-list err: %s", err)
+		}
+		cfg.EncryptedClientHelloConfigList = echConfigList
 		cfg.MinVersion = VersionTLS13
 	}
 
-	if *curves != nil {
-		for _, id := range *curves {
+	if len(*curves) != 0 {
+		for _, curveStr := range *curves {
+			id, err := strconv.Atoi(curveStr)
+			if err != nil {
+				log.Fatalf("failed to parse curve id %q: %s", curveStr, err)
+			}
 			cfg.CurvePreferences = append(cfg.CurvePreferences, CurveID(id))
 		}
 	}
 
-	if *verifyPrefs != nil {
-		for _, id := range *verifyPrefs {
-			testingOnlySupportedSignatureAlgorithms = append(testingOnlySupportedSignatureAlgorithms, SignatureScheme(id))
-		}
-	}
-
-	if *echServerConfig != nil {
+	if len(*echServerConfig) != 0 {
 		if len(*echServerConfig) != len(*echServerKey) || len(*echServerConfig) != len(*echServerRetryConfig) {
 			log.Fatal("-ech-server-config, -ech-server-key, and -ech-is-retry-config mismatch")
 		}
@@ -368,8 +277,12 @@ func bogoShim() {
 	}
 
 	for i := 0; i < *resumeCount+1; i++ {
-		if i > 0 && *onResumeECHConfigList != nil {
-			cfg.EncryptedClientHelloConfigList = *onResumeECHConfigList
+		if i > 0 && (*onResumeECHConfigListB64 != "") {
+			echConfigList, err := base64.StdEncoding.DecodeString(*onResumeECHConfigListB64)
+			if err != nil {
+				log.Fatalf("parse ech-config-list err: %s", err)
+			}
+			cfg.EncryptedClientHelloConfigList = echConfigList
 		}
 
 		conn, err := net.Dial("tcp", net.JoinHostPort("localhost", *port))
@@ -422,7 +335,7 @@ func bogoShim() {
 		if err != io.EOF {
 			retryErr, ok := err.(*ECHRejectionError)
 			if !ok {
-				log.Fatal(err)
+				log.Fatalf("unexpected error type returned: %v", err)
 			}
 			if *expectNoECHRetryConfigs && len(retryErr.RetryConfigList) > 0 {
 				log.Fatalf("expected no ECH retry configs, got some")
@@ -487,21 +400,10 @@ func bogoShim() {
 			if err != nil {
 				log.Fatalf("failed to parse -expect-curve-id: %s", err)
 			}
-			if cs.CurveID != CurveID(expectedCurveID) {
+			if tlsConn.curveID != CurveID(expectedCurveID) {
 				log.Fatalf("unexpected curve id: want %d, got %d", expectedCurveID, tlsConn.curveID)
 			}
 		}
-
-		// TODO: implement testingOnlyPeerSignatureAlgorithm on resumption.
-		if *expectedSigAlg != "" && !cs.DidResume {
-			expectedSigAlgID, err := strconv.Atoi(*expectedSigAlg)
-			if err != nil {
-				log.Fatalf("failed to parse -expect-peer-signature-algorithm: %s", err)
-			}
-			if cs.testingOnlyPeerSignatureAlgorithm != SignatureScheme(expectedSigAlgID) {
-				log.Fatalf("unexpected peer signature algorithm: want %s, got %s", SignatureScheme(expectedSigAlgID), cs.testingOnlyPeerSignatureAlgorithm)
-			}
-		}
 	}
 }
 
@@ -581,36 +483,20 @@ func TestBogoSuite(t *testing.T) {
 	assertResults := map[string]string{
 		"CurveTest-Client-MLKEM-TLS13": "PASS",
 		"CurveTest-Server-MLKEM-TLS13": "PASS",
-
-		// Various signature algorithm tests checking that we enforce our
-		// preferences on the peer.
-		"ClientAuth-Enforced":                    "PASS",
-		"ServerAuth-Enforced":                    "PASS",
-		"ClientAuth-Enforced-TLS13":              "PASS",
-		"ServerAuth-Enforced-TLS13":              "PASS",
-		"VerifyPreferences-Advertised":           "PASS",
-		"VerifyPreferences-Enforced":             "PASS",
-		"Client-TLS12-NoSign-RSA_PKCS1_MD5_SHA1": "PASS",
-		"Server-TLS12-NoSign-RSA_PKCS1_MD5_SHA1": "PASS",
-		"Client-TLS13-NoSign-RSA_PKCS1_MD5_SHA1": "PASS",
-		"Server-TLS13-NoSign-RSA_PKCS1_MD5_SHA1": "PASS",
 	}
 
 	for name, result := range results.Tests {
 		// This is not really the intended way to do this... but... it works?
 		t.Run(name, func(t *testing.T) {
 			if result.Actual == "FAIL" && result.IsUnexpected {
-				t.Fail()
-			}
-			if result.Error != "" {
-				t.Log(result.Error)
+				t.Fatal(result.Error)
 			}
-			if exp, ok := assertResults[name]; ok && exp != result.Actual {
-				t.Errorf("unexpected result: got %s, want %s", result.Actual, exp)
+			if expectedResult, ok := assertResults[name]; ok && expectedResult != result.Actual {
+				t.Fatalf("unexpected result: got %s, want %s", result.Actual, assertResults[name])
 			}
 			delete(assertResults, name)
 			if result.Actual == "SKIP" {
-				t.SkipNow()
+				t.Skip()
 			}
 		})
 	}
diff --git a/src/crypto/tls/cache.go b/src/crypto/tls/cache.go
index a2c255af88af2d..a7677611fdc7bf 100644
--- a/src/crypto/tls/cache.go
+++ b/src/crypto/tls/cache.go
@@ -8,19 +8,78 @@ import (
 	"crypto/x509"
 	"runtime"
 	"sync"
-	"weak"
+	"sync/atomic"
 )
 
-// weakCertCache provides a cache of *x509.Certificates, allowing multiple
-// connections to reuse parsed certificates, instead of re-parsing the
-// certificate for every connection, which is an expensive operation.
-type weakCertCache struct{ sync.Map }
+type cacheEntry struct {
+	refs atomic.Int64
+	cert *x509.Certificate
+}
+
+// certCache implements an intern table for reference counted x509.Certificates,
+// implemented in a similar fashion to BoringSSL's CRYPTO_BUFFER_POOL. This
+// allows for a single x509.Certificate to be kept in memory and referenced from
+// multiple Conns. Returned references should not be mutated by callers. Certificates
+// are still safe to use after they are removed from the cache.
+//
+// Certificates are returned wrapped in an activeCert struct that should be held by
+// the caller. When references to the activeCert are freed, the number of references
+// to the certificate in the cache is decremented. Once the number of references
+// reaches zero, the entry is evicted from the cache.
+//
+// The main difference between this implementation and CRYPTO_BUFFER_POOL is that
+// CRYPTO_BUFFER_POOL is a more  generic structure which supports blobs of data,
+// rather than specific structures. Since we only care about x509.Certificates,
+// certCache is implemented as a specific cache, rather than a generic one.
+//
+// See https://boringssl.googlesource.com/boringssl/+/master/include/openssl/pool.h
+// and https://boringssl.googlesource.com/boringssl/+/master/crypto/pool/pool.c
+// for the BoringSSL reference.
+type certCache struct {
+	sync.Map
+}
+
+var globalCertCache = new(certCache)
+
+// activeCert is a handle to a certificate held in the cache. Once there are
+// no alive activeCerts for a given certificate, the certificate is removed
+// from the cache by a finalizer.
+type activeCert struct {
+	cert *x509.Certificate
+}
 
-func (wcc *weakCertCache) newCert(der []byte) (*x509.Certificate, error) {
-	if entry, ok := wcc.Load(string(der)); ok {
-		if v := entry.(weak.Pointer[x509.Certificate]).Value(); v != nil {
-			return v, nil
+// active increments the number of references to the entry, wraps the
+// certificate in the entry in an activeCert, and sets the finalizer.
+//
+// Note that there is a race between active and the finalizer set on the
+// returned activeCert, triggered if active is called after the ref count is
+// decremented such that refs may be > 0 when evict is called. We consider this
+// safe, since the caller holding an activeCert for an entry that is no longer
+// in the cache is fine, with the only side effect being the memory overhead of
+// there being more than one distinct reference to a certificate alive at once.
+func (cc *certCache) active(e *cacheEntry) *activeCert {
+	e.refs.Add(1)
+	a := &activeCert{e.cert}
+	runtime.SetFinalizer(a, func(_ *activeCert) {
+		if e.refs.Add(-1) == 0 {
+			cc.evict(e)
 		}
+	})
+	return a
+}
+
+// evict removes a cacheEntry from the cache.
+func (cc *certCache) evict(e *cacheEntry) {
+	cc.Delete(string(e.cert.Raw))
+}
+
+// newCert returns a x509.Certificate parsed from der. If there is already a copy
+// of the certificate in the cache, a reference to the existing certificate will
+// be returned. Otherwise, a fresh certificate will be added to the cache, and
+// the reference returned. The returned reference should not be mutated.
+func (cc *certCache) newCert(der []byte) (*activeCert, error) {
+	if entry, ok := cc.Load(string(der)); ok {
+		return cc.active(entry.(*cacheEntry)), nil
 	}
 
 	cert, err := x509.ParseCertificate(der)
@@ -28,17 +87,9 @@ func (wcc *weakCertCache) newCert(der []byte) (*x509.Certificate, error) {
 		return nil, err
 	}
 
-	wp := weak.Make(cert)
-	if entry, loaded := wcc.LoadOrStore(string(der), wp); !loaded {
-		runtime.AddCleanup(cert, func(_ any) { wcc.CompareAndDelete(string(der), entry) }, any(string(der)))
-	} else if v := entry.(weak.Pointer[x509.Certificate]).Value(); v != nil {
-		return v, nil
-	} else {
-		if wcc.CompareAndSwap(string(der), entry, wp) {
-			runtime.AddCleanup(cert, func(_ any) { wcc.CompareAndDelete(string(der), wp) }, any(string(der)))
-		}
+	entry := &cacheEntry{cert: cert}
+	if entry, loaded := cc.LoadOrStore(string(der), entry); loaded {
+		return cc.active(entry.(*cacheEntry)), nil
 	}
-	return cert, nil
+	return cc.active(entry), nil
 }
-
-var globalCertCache = new(weakCertCache)
diff --git a/src/crypto/tls/cache_test.go b/src/crypto/tls/cache_test.go
index 75a0508ec0defa..2846734195d2d2 100644
--- a/src/crypto/tls/cache_test.go
+++ b/src/crypto/tls/cache_test.go
@@ -1,60 +1,63 @@
-// Copyright 2025 The Go Authors. All rights reserved.
+// Copyright 2022 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
+
 package tls
 
 import (
 	"encoding/pem"
+	"fmt"
 	"runtime"
 	"testing"
 	"time"
 )
 
-func TestWeakCertCache(t *testing.T) {
-	wcc := weakCertCache{}
+func TestCertCache(t *testing.T) {
+	cc := certCache{}
 	p, _ := pem.Decode([]byte(rsaCertPEM))
 	if p == nil {
 		t.Fatal("Failed to decode certificate")
 	}
 
-	certA, err := wcc.newCert(p.Bytes)
+	certA, err := cc.newCert(p.Bytes)
 	if err != nil {
 		t.Fatalf("newCert failed: %s", err)
 	}
-	certB, err := wcc.newCert(p.Bytes)
+	certB, err := cc.newCert(p.Bytes)
 	if err != nil {
 		t.Fatalf("newCert failed: %s", err)
 	}
-	if certA != certB {
+	if certA.cert != certB.cert {
 		t.Fatal("newCert returned a unique reference for a duplicate certificate")
 	}
 
-	if _, ok := wcc.Load(string(p.Bytes)); !ok {
+	if entry, ok := cc.Load(string(p.Bytes)); !ok {
 		t.Fatal("cache does not contain expected entry")
+	} else {
+		if refs := entry.(*cacheEntry).refs.Load(); refs != 2 {
+			t.Fatalf("unexpected number of references: got %d, want 2", refs)
+		}
 	}
 
-	timeoutRefCheck := func(t *testing.T, key string, present bool) {
+	timeoutRefCheck := func(t *testing.T, key string, count int64) {
 		t.Helper()
-		timeout := time.After(4 * time.Second)
+		c := time.After(4 * time.Second)
 		for {
 			select {
-			case <-timeout:
+			case <-c:
 				t.Fatal("timed out waiting for expected ref count")
 			default:
-				_, ok := wcc.Load(key)
-				if ok == present {
+				e, ok := cc.Load(key)
+				if !ok && count != 0 {
+					t.Fatal("cache does not contain expected key")
+				} else if count == 0 && !ok {
+					return
+				}
+
+				if e.(*cacheEntry).refs.Load() == count {
 					return
 				}
 			}
-			// Explicitly yield to the scheduler.
-			//
-			// On single-threaded platforms like js/wasm a busy-loop might
-			// never call into the scheduler for the full timeout, meaning
-			// that if we arrive here and the cleanup hasn't already run,
-			// we'll simply loop until the timeout. Busy-loops put us at the
-			// mercy of the Go scheduler, making this test fragile on some
-			// platforms.
-			runtime.Gosched()
 		}
 	}
 
@@ -65,7 +68,7 @@ func TestWeakCertCache(t *testing.T) {
 	certA = nil
 	runtime.GC()
 
-	timeoutRefCheck(t, string(p.Bytes), true)
+	timeoutRefCheck(t, string(p.Bytes), 1)
 
 	// Keep certB alive until at least now, so that we can
 	// purposefully nil it and force the finalizer to be
@@ -74,5 +77,41 @@ func TestWeakCertCache(t *testing.T) {
 	certB = nil
 	runtime.GC()
 
-	timeoutRefCheck(t, string(p.Bytes), false)
+	timeoutRefCheck(t, string(p.Bytes), 0)
+}
+
+func BenchmarkCertCache(b *testing.B) {
+	p, _ := pem.Decode([]byte(rsaCertPEM))
+	if p == nil {
+		b.Fatal("Failed to decode certificate")
+	}
+
+	cc := certCache{}
+	b.ReportAllocs()
+	b.ResetTimer()
+	// We expect that calling newCert additional times after
+	// the initial call should not cause additional allocations.
+	for extra := 0; extra < 4; extra++ {
+		b.Run(fmt.Sprint(extra), func(b *testing.B) {
+			actives := make([]*activeCert, extra+1)
+			b.ResetTimer()
+			for i := 0; i < b.N; i++ {
+				var err error
+				actives[0], err = cc.newCert(p.Bytes)
+				if err != nil {
+					b.Fatal(err)
+				}
+				for j := 0; j < extra; j++ {
+					actives[j+1], err = cc.newCert(p.Bytes)
+					if err != nil {
+						b.Fatal(err)
+					}
+				}
+				for j := 0; j < extra+1; j++ {
+					actives[j] = nil
+				}
+				runtime.GC()
+			}
+		})
+	}
 }
diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go
index 6fe6f34cd210d8..26f795f13a0830 100644
--- a/src/crypto/tls/common.go
+++ b/src/crypto/tls/common.go
@@ -309,10 +309,6 @@ type ConnectionState struct {
 
 	// testingOnlyDidHRR is true if a HelloRetryRequest was sent/received.
 	testingOnlyDidHRR bool
-
-	// testingOnlyPeerSignatureAlgorithm is the signature algorithm used by the
-	// peer to sign the handshake. It is not set for resumed connections.
-	testingOnlyPeerSignatureAlgorithm SignatureScheme
 }
 
 // ExportKeyingMaterial returns length bytes of exported key material in a new
@@ -841,20 +837,6 @@ type Config struct {
 	// when ECH is rejected, even if set, and InsecureSkipVerify is ignored.
 	EncryptedClientHelloRejectionVerify func(ConnectionState) error
 
-	// GetEncryptedClientHelloKeys, if not nil, is called when by a server when
-	// a client attempts ECH.
-	//
-	// If GetEncryptedClientHelloKeys is not nil, [EncryptedClientHelloKeys] is
-	// ignored.
-	//
-	// If GetEncryptedClientHelloKeys returns an error, the handshake will be
-	// aborted and the error will be returned. Otherwise,
-	// GetEncryptedClientHelloKeys must return a non-nil slice of
-	// [EncryptedClientHelloKey] that represents the acceptable ECH keys.
-	//
-	// For further details, see [EncryptedClientHelloKeys].
-	GetEncryptedClientHelloKeys func(*ClientHelloInfo) ([]EncryptedClientHelloKey, error)
-
 	// EncryptedClientHelloKeys are the ECH keys to use when a client
 	// attempts ECH.
 	//
@@ -865,9 +847,6 @@ type Config struct {
 	// will send a list of configs to retry based on the set of
 	// EncryptedClientHelloKeys which have the SendAsRetry field set.
 	//
-	// If GetEncryptedClientHelloKeys is non-nil, EncryptedClientHelloKeys is
-	// ignored.
-	//
 	// On the client side, this field is ignored. In order to configure ECH for
 	// clients, see the EncryptedClientHelloConfigList field.
 	EncryptedClientHelloKeys []EncryptedClientHelloKey
@@ -956,7 +935,6 @@ func (c *Config) Clone() *Config {
 		GetCertificate:                      c.GetCertificate,
 		GetClientCertificate:                c.GetClientCertificate,
 		GetConfigForClient:                  c.GetConfigForClient,
-		GetEncryptedClientHelloKeys:         c.GetEncryptedClientHelloKeys,
 		VerifyPeerCertificate:               c.VerifyPeerCertificate,
 		VerifyConnection:                    c.VerifyConnection,
 		RootCAs:                             c.RootCAs,
@@ -1167,8 +1145,6 @@ const roleServer = false
 
 var tls10server = godebug.New("tls10server")
 
-// supportedVersions returns the list of supported TLS versions, sorted from
-// highest to lowest (and hence also in preference order).
 func (c *Config) supportedVersions(isClient bool) []uint16 {
 	versions := make([]uint16, 0, len(supportedVersions))
 	for _, v := range supportedVersions {
@@ -1239,11 +1215,11 @@ func (c *Config) supportsCurve(version uint16, curve CurveID) bool {
 }
 
 // mutualVersion returns the protocol version to use given the advertised
-// versions of the peer. The highest supported version is preferred.
+// versions of the peer. Priority is given to the peer preference order.
 func (c *Config) mutualVersion(isClient bool, peerVersions []uint16) (uint16, bool) {
 	supportedVersions := c.supportedVersions(isClient)
-	for _, v := range supportedVersions {
-		if slices.Contains(peerVersions, v) {
+	for _, v := range peerVersions {
+		if slices.Contains(supportedVersions, v) {
 			return v, true
 		}
 	}
@@ -1396,11 +1372,7 @@ func (chi *ClientHelloInfo) SupportsCertificate(c *Certificate) error {
 	}
 
 	// The only signed key exchange we support is ECDHE.
-	ecdheSupported, err := supportsECDHE(config, vers, chi.SupportedCurves, chi.SupportedPoints)
-	if err != nil {
-		return err
-	}
-	if !ecdheSupported {
+	if !supportsECDHE(config, vers, chi.SupportedCurves, chi.SupportedPoints) {
 		return supportsRSAFallback(errors.New("client doesn't support ECDHE, can only use legacy RSA key exchange"))
 	}
 
@@ -1688,62 +1660,12 @@ func unexpectedMessageError(wanted, got any) error {
 	return fmt.Errorf("tls: received unexpected handshake message of type %T when waiting for %T", got, wanted)
 }
 
-var testingOnlySupportedSignatureAlgorithms []SignatureScheme
-
-// supportedSignatureAlgorithms returns the supported signature algorithms for
-// the given minimum TLS version, to advertise in ClientHello and
-// CertificateRequest messages.
-func supportedSignatureAlgorithms(minVers uint16) []SignatureScheme {
-	sigAlgs := defaultSupportedSignatureAlgorithms()
-	if testingOnlySupportedSignatureAlgorithms != nil {
-		sigAlgs = slices.Clone(testingOnlySupportedSignatureAlgorithms)
-	}
-	return slices.DeleteFunc(sigAlgs, func(s SignatureScheme) bool {
-		return isDisabledSignatureAlgorithm(minVers, s, false)
-	})
-}
-
-var tlssha1 = godebug.New("tlssha1")
-
-func isDisabledSignatureAlgorithm(version uint16, s SignatureScheme, isCert bool) bool {
-	if fips140tls.Required() && !slices.Contains(allowedSignatureAlgorithmsFIPS, s) {
-		return true
-	}
-
-	// For the _cert extension we include all algorithms, including SHA-1 and
-	// PKCS#1 v1.5, because it's more likely that something on our side will be
-	// willing to accept a *-with-SHA1 certificate (e.g. with a custom
-	// VerifyConnection or by a direct match with the CertPool), than that the
-	// peer would have a better certificate but is just choosing not to send it.
-	// crypto/x509 will refuse to verify important SHA-1 signatures anyway.
-	if isCert {
-		return false
-	}
-
-	// TLS 1.3 removed support for PKCS#1 v1.5 and SHA-1 signatures,
-	// and Go 1.25 removed support for SHA-1 signatures in TLS 1.2.
-	if version > VersionTLS12 {
-		sigType, sigHash, _ := typeAndHashFromSignatureScheme(s)
-		if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 {
-			return true
-		}
-	} else if tlssha1.Value() != "1" {
-		_, sigHash, _ := typeAndHashFromSignatureScheme(s)
-		if sigHash == crypto.SHA1 {
-			return true
-		}
+// supportedSignatureAlgorithms returns the supported signature algorithms.
+func supportedSignatureAlgorithms() []SignatureScheme {
+	if fips140tls.Required() {
+		return allowedSupportedSignatureAlgorithmsFIPS
 	}
-
-	return false
-}
-
-// supportedSignatureAlgorithmsCert returns the supported algorithms for
-// signatures in certificates.
-func supportedSignatureAlgorithmsCert() []SignatureScheme {
-	sigAlgs := defaultSupportedSignatureAlgorithms()
-	return slices.DeleteFunc(sigAlgs, func(s SignatureScheme) bool {
-		return isDisabledSignatureAlgorithm(0, s, true)
-	})
+	return defaultSupportedSignatureAlgorithms
 }
 
 func isSupportedSignatureAlgorithm(sigAlg SignatureScheme, supportedSignatureAlgorithms []SignatureScheme) bool {
diff --git a/src/crypto/tls/conn.go b/src/crypto/tls/conn.go
index b36fcaa64830d2..1276665a2feeb4 100644
--- a/src/crypto/tls/conn.go
+++ b/src/crypto/tls/conn.go
@@ -51,10 +51,12 @@ type Conn struct {
 	didHRR           bool // whether a HelloRetryRequest was sent/received
 	cipherSuite      uint16
 	curveID          CurveID
-	peerSigAlg       SignatureScheme
 	ocspResponse     []byte   // stapled OCSP response
 	scts             [][]byte // signed certificate timestamps from server
 	peerCertificates []*x509.Certificate
+	// activeCertHandles contains the cache handles to certificates in
+	// peerCertificates that are used to track active references.
+	activeCertHandles []*activeCert
 	// verifiedChains contains the certificate chains that we built, as
 	// opposed to the ones presented by the server.
 	verifiedChains [][]*x509.Certificate
@@ -1180,7 +1182,7 @@ func (c *Conn) unmarshalHandshakeMessage(data []byte, transcript transcriptHash)
 	data = append([]byte(nil), data...)
 
 	if !m.unmarshal(data) {
-		return nil, c.in.setErrorLocked(c.sendAlert(alertDecodeError))
+		return nil, c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage))
 	}
 
 	if transcript != nil {
@@ -1631,7 +1633,6 @@ func (c *Conn) connectionStateLocked() ConnectionState {
 	state.NegotiatedProtocol = c.clientProtocol
 	state.DidResume = c.didResume
 	state.testingOnlyDidHRR = c.didHRR
-	state.testingOnlyPeerSignatureAlgorithm = c.peerSigAlg
 	state.CurveID = c.curveID
 	state.NegotiatedProtocolIsMutual = true
 	state.ServerName = c.serverName
diff --git a/src/crypto/tls/defaults.go b/src/crypto/tls/defaults.go
index 489a2750dff390..a3f43eb87e5204 100644
--- a/src/crypto/tls/defaults.go
+++ b/src/crypto/tls/defaults.go
@@ -24,25 +24,23 @@ func defaultCurvePreferences() []CurveID {
 	return []CurveID{X25519MLKEM768, X25519, CurveP256, CurveP384, CurveP521}
 }
 
-// defaultSupportedSignatureAlgorithms returns the signature and hash algorithms that
-// the code advertises and supports in a TLS 1.2+ ClientHello and in a TLS 1.2+
+// defaultSupportedSignatureAlgorithms contains the signature and hash algorithms that
+// the code advertises as supported in a TLS 1.2+ ClientHello and in a TLS 1.2+
 // CertificateRequest. The two fields are merged to match with TLS 1.3.
 // Note that in TLS 1.2, the ECDSA algorithms are not constrained to P-256, etc.
-func defaultSupportedSignatureAlgorithms() []SignatureScheme {
-	return []SignatureScheme{
-		PSSWithSHA256,
-		ECDSAWithP256AndSHA256,
-		Ed25519,
-		PSSWithSHA384,
-		PSSWithSHA512,
-		PKCS1WithSHA256,
-		PKCS1WithSHA384,
-		PKCS1WithSHA512,
-		ECDSAWithP384AndSHA384,
-		ECDSAWithP521AndSHA512,
-		PKCS1WithSHA1,
-		ECDSAWithSHA1,
-	}
+var defaultSupportedSignatureAlgorithms = []SignatureScheme{
+	PSSWithSHA256,
+	ECDSAWithP256AndSHA256,
+	Ed25519,
+	PSSWithSHA384,
+	PSSWithSHA512,
+	PKCS1WithSHA256,
+	PKCS1WithSHA384,
+	PKCS1WithSHA512,
+	ECDSAWithP384AndSHA384,
+	ECDSAWithP521AndSHA512,
+	PKCS1WithSHA1,
+	ECDSAWithSHA1,
 }
 
 var tlsrsakex = godebug.New("tlsrsakex")
diff --git a/src/crypto/tls/defaults_boring.go b/src/crypto/tls/defaults_boring.go
index e88f05cc505cfb..96406acfca0f54 100644
--- a/src/crypto/tls/defaults_boring.go
+++ b/src/crypto/tls/defaults_boring.go
@@ -31,7 +31,7 @@ var (
 		CurveP384,
 		CurveP521,
 	}
-	allowedSignatureAlgorithmsFIPS = []SignatureScheme{
+	allowedSupportedSignatureAlgorithmsFIPS = []SignatureScheme{
 		PSSWithSHA256,
 		PSSWithSHA384,
 		PSSWithSHA512,
diff --git a/src/crypto/tls/defaults_fips140.go b/src/crypto/tls/defaults_fips140.go
index 00176795eba6b7..472bb807f04dc5 100644
--- a/src/crypto/tls/defaults_fips140.go
+++ b/src/crypto/tls/defaults_fips140.go
@@ -36,7 +36,7 @@ var (
 		CurveP384,
 		CurveP521,
 	}
-	allowedSignatureAlgorithmsFIPS = []SignatureScheme{
+	allowedSupportedSignatureAlgorithmsFIPS = []SignatureScheme{
 		PSSWithSHA256,
 		ECDSAWithP256AndSHA256,
 		Ed25519,
diff --git a/src/crypto/tls/ech.go b/src/crypto/tls/ech.go
index 76727a890896a0..3ca9fd00b1b562 100644
--- a/src/crypto/tls/ech.go
+++ b/src/crypto/tls/ech.go
@@ -419,7 +419,7 @@ func decodeInnerClientHello(outer *clientHelloMsg, encoded []byte) (*clientHello
 	return inner, nil
 }
 
-func decryptECHPayload(context *hpke.Recipient, hello, payload []byte) ([]byte, error) {
+func decryptECHPayload(context *hpke.Receipient, hello, payload []byte) ([]byte, error) {
 	outerAAD := bytes.Replace(hello[4:], payload, make([]byte, len(payload)), 1)
 	return context.Open(outerAAD, payload)
 }
@@ -578,7 +578,7 @@ func marshalEncryptedClientHelloConfigList(configs []EncryptedClientHelloKey) ([
 	return builder.Bytes()
 }
 
-func (c *Conn) processECHClientHello(outer *clientHelloMsg, echKeys []EncryptedClientHelloKey) (*clientHelloMsg, *echServerContext, error) {
+func (c *Conn) processECHClientHello(outer *clientHelloMsg) (*clientHelloMsg, *echServerContext, error) {
 	echType, echCiphersuite, configID, encap, payload, err := parseECHExt(outer.encryptedClientHello)
 	if err != nil {
 		if errors.Is(err, errInvalidECHExt) {
@@ -594,11 +594,11 @@ func (c *Conn) processECHClientHello(outer *clientHelloMsg, echKeys []EncryptedC
 		return outer, &echServerContext{inner: true}, nil
 	}
 
-	if len(echKeys) == 0 {
+	if len(c.config.EncryptedClientHelloKeys) == 0 {
 		return outer, nil, nil
 	}
 
-	for _, echKey := range echKeys {
+	for _, echKey := range c.config.EncryptedClientHelloKeys {
 		skip, config, err := parseECHConfig(echKey.Config)
 		if err != nil || skip {
 			c.sendAlert(alertInternalError)
@@ -613,7 +613,7 @@ func (c *Conn) processECHClientHello(outer *clientHelloMsg, echKeys []EncryptedC
 			return nil, nil, fmt.Errorf("tls: invalid EncryptedClientHelloKeys PrivateKey: %s", err)
 		}
 		info := append([]byte("tls ech\x00"), echKey.Config...)
-		hpkeContext, err := hpke.SetupRecipient(hpke.DHKEM_X25519_HKDF_SHA256, echCiphersuite.KDFID, echCiphersuite.AEADID, echPriv, info, encap)
+		hpkeContext, err := hpke.SetupReceipient(hpke.DHKEM_X25519_HKDF_SHA256, echCiphersuite.KDFID, echCiphersuite.AEADID, echPriv, info, encap)
 		if err != nil {
 			// attempt next trial decryption
 			continue
diff --git a/src/crypto/tls/fips140_test.go b/src/crypto/tls/fips140_test.go
index d3fa61dc97d398..c22ad485ccdae5 100644
--- a/src/crypto/tls/fips140_test.go
+++ b/src/crypto/tls/fips140_test.go
@@ -18,7 +18,6 @@ import (
 	"internal/testenv"
 	"math/big"
 	"net"
-	"os"
 	"runtime"
 	"strings"
 	"testing"
@@ -196,7 +195,7 @@ func TestFIPSServerCipherSuites(t *testing.T) {
 				keyShares:                    []keyShare{generateKeyShare(CurveP256)},
 				supportedPoints:              []uint8{pointFormatUncompressed},
 				supportedVersions:            []uint16{VersionTLS12},
-				supportedSignatureAlgorithms: allowedSignatureAlgorithmsFIPS,
+				supportedSignatureAlgorithms: allowedSupportedSignatureAlgorithmsFIPS,
 			}
 			if isTLS13CipherSuite(id) {
 				clientHello.supportedVersions = []uint16{VersionTLS13}
@@ -263,19 +262,15 @@ func fipsHandshake(t *testing.T, clientConfig, serverConfig *Config) (clientErr,
 
 func TestFIPSServerSignatureAndHash(t *testing.T) {
 	defer func() {
-		testingOnlySupportedSignatureAlgorithms = nil
+		testingOnlyForceClientHelloSignatureAlgorithms = nil
 	}()
-	defer func(godebug string) {
-		os.Setenv("GODEBUG", godebug)
-	}(os.Getenv("GODEBUG"))
-	os.Setenv("GODEBUG", "tlssha1=1")
 
-	for _, sigHash := range defaultSupportedSignatureAlgorithms() {
+	for _, sigHash := range defaultSupportedSignatureAlgorithms {
 		t.Run(fmt.Sprintf("%v", sigHash), func(t *testing.T) {
 			serverConfig := testConfig.Clone()
 			serverConfig.Certificates = make([]Certificate, 1)
 
-			testingOnlySupportedSignatureAlgorithms = []SignatureScheme{sigHash}
+			testingOnlyForceClientHelloSignatureAlgorithms = []SignatureScheme{sigHash}
 
 			sigType, _, _ := typeAndHashFromSignatureScheme(sigHash)
 			switch sigType {
diff --git a/src/crypto/tls/handshake_client.go b/src/crypto/tls/handshake_client.go
index 90c5bdacd82318..30f2e2a2a2c43d 100644
--- a/src/crypto/tls/handshake_client.go
+++ b/src/crypto/tls/handshake_client.go
@@ -20,6 +20,7 @@ import (
 	"errors"
 	"fmt"
 	"hash"
+	"internal/byteorder"
 	"internal/godebug"
 	"io"
 	"net"
@@ -41,6 +42,8 @@ type clientHandshakeState struct {
 	ticket       []byte        // a fresh ticket received during this handshake
 }
 
+var testingOnlyForceClientHelloSignatureAlgorithms []SignatureScheme
+
 func (c *Conn) makeClientHello() (*clientHelloMsg, *keySharePrivateKeys, *echClientContext, error) {
 	config := c.config
 	if len(config.ServerName) == 0 && !config.InsecureSkipVerify {
@@ -63,10 +66,7 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *keySharePrivateKeys, *echCli
 	if len(supportedVersions) == 0 {
 		return nil, nil, nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion")
 	}
-	// Since supportedVersions is sorted in descending order, the first element
-	// is the maximum version and the last element is the minimum version.
-	maxVersion := supportedVersions[0]
-	minVersion := supportedVersions[len(supportedVersions)-1]
+	maxVersion := config.maxSupportedVersion(roleClient)
 
 	hello := &clientHelloMsg{
 		vers:                         maxVersion,
@@ -120,17 +120,18 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *keySharePrivateKeys, *echCli
 	}
 
 	if maxVersion >= VersionTLS12 {
-		hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms(minVersion)
-		hello.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithmsCert()
+		hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
+	}
+	if testingOnlyForceClientHelloSignatureAlgorithms != nil {
+		hello.supportedSignatureAlgorithms = testingOnlyForceClientHelloSignatureAlgorithms
 	}
 
 	var keyShareKeys *keySharePrivateKeys
-	if maxVersion >= VersionTLS13 {
+	if hello.supportedVersions[0] == VersionTLS13 {
 		// Reset the list of ciphers when the client only supports TLS 1.3.
-		if minVersion >= VersionTLS13 {
+		if len(hello.supportedVersions) == 1 {
 			hello.cipherSuites = nil
 		}
-
 		if fips140tls.Required() {
 			hello.cipherSuites = append(hello.cipherSuites, allowedCipherSuitesTLS13FIPS...)
 		} else if hasAESGCMHardwareSupport {
@@ -726,9 +727,8 @@ func (hs *clientHandshakeState) doFullHandshake() error {
 			c.sendAlert(alertIllegalParameter)
 			return err
 		}
-		if keyAgreement, ok := keyAgreement.(*ecdheKeyAgreement); ok {
-			c.curveID = keyAgreement.curveID
-			c.peerSigAlg = keyAgreement.signatureAlgorithm
+		if len(skx.key) >= 3 && skx.key[0] == 3 /* named curve */ {
+			c.curveID = CurveID(byteorder.BEUint16(skx.key[1:]))
 		}
 
 		msg, err = c.readHandshake(&hs.finishedHash)
@@ -814,7 +814,7 @@ func (hs *clientHandshakeState) doFullHandshake() error {
 		if c.vers >= VersionTLS12 {
 			signatureAlgorithm, err := selectSignatureScheme(c.vers, chainToSend, certReq.supportedSignatureAlgorithms)
 			if err != nil {
-				c.sendAlert(alertHandshakeFailure)
+				c.sendAlert(alertIllegalParameter)
 				return err
 			}
 			sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm)
@@ -823,10 +823,6 @@ func (hs *clientHandshakeState) doFullHandshake() error {
 			}
 			certVerify.hasSignatureAlgorithm = true
 			certVerify.signatureAlgorithm = signatureAlgorithm
-			if sigHash == crypto.SHA1 {
-				tlssha1.Value() // ensure godebug is initialized
-				tlssha1.IncNonDefault()
-			}
 		} else {
 			sigType, sigHash, err = legacyTypeAndHashFromPublicKey(key.Public())
 			if err != nil {
@@ -893,23 +889,10 @@ func (hs *clientHandshakeState) processServerHello() (bool, error) {
 	}
 
 	if hs.serverHello.compressionMethod != compressionNone {
-		c.sendAlert(alertIllegalParameter)
+		c.sendAlert(alertUnexpectedMessage)
 		return false, errors.New("tls: server selected unsupported compression format")
 	}
 
-	supportsPointFormat := false
-	offeredNonCompressedFormat := false
-	for _, format := range hs.serverHello.supportedPoints {
-		if format == pointFormatUncompressed {
-			supportsPointFormat = true
-		} else {
-			offeredNonCompressedFormat = true
-		}
-	}
-	if !supportsPointFormat && offeredNonCompressedFormat {
-		return false, errors.New("tls: server offered only incompatible point formats")
-	}
-
 	if c.handshakes == 0 && hs.serverHello.secureRenegotiationSupported {
 		c.secureRenegotiation = true
 		if len(hs.serverHello.secureRenegotiation) != 0 {
@@ -960,6 +943,7 @@ func (hs *clientHandshakeState) processServerHello() (bool, error) {
 	hs.masterSecret = hs.session.secret
 	c.extMasterSecret = hs.session.extMasterSecret
 	c.peerCertificates = hs.session.peerCertificates
+	c.activeCertHandles = hs.c.activeCertHandles
 	c.verifiedChains = hs.session.verifiedChains
 	c.ocspResponse = hs.session.ocspResponse
 	// Let the ServerHello SCTs override the session SCTs from the original
@@ -1110,6 +1094,7 @@ func checkKeySize(n int) (max int, ok bool) {
 // verifyServerCertificate parses and verifies the provided chain, setting
 // c.verifiedChains and c.peerCertificates or sending the appropriate alert.
 func (c *Conn) verifyServerCertificate(certificates [][]byte) error {
+	activeHandles := make([]*activeCert, len(certificates))
 	certs := make([]*x509.Certificate, len(certificates))
 	for i, asn1Data := range certificates {
 		cert, err := globalCertCache.newCert(asn1Data)
@@ -1117,14 +1102,15 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error {
 			c.sendAlert(alertDecodeError)
 			return errors.New("tls: failed to parse certificate from server: " + err.Error())
 		}
-		if cert.PublicKeyAlgorithm == x509.RSA {
-			n := cert.PublicKey.(*rsa.PublicKey).N.BitLen()
+		if cert.cert.PublicKeyAlgorithm == x509.RSA {
+			n := cert.cert.PublicKey.(*rsa.PublicKey).N.BitLen()
 			if max, ok := checkKeySize(n); !ok {
 				c.sendAlert(alertBadCertificate)
 				return fmt.Errorf("tls: server sent certificate containing RSA key larger than %d bits", max)
 			}
 		}
-		certs[i] = cert
+		activeHandles[i] = cert
+		certs[i] = cert.cert
 	}
 
 	echRejected := c.config.EncryptedClientHelloConfigList != nil && !c.echAccepted
@@ -1189,6 +1175,7 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error {
 		return fmt.Errorf("tls: server's certificate contains an unsupported type of public key: %T", certs[0].PublicKey)
 	}
 
+	c.activeCertHandles = activeHandles
 	c.peerCertificates = certs
 
 	if c.config.VerifyPeerCertificate != nil && !echRejected {
diff --git a/src/crypto/tls/handshake_client_test.go b/src/crypto/tls/handshake_client_test.go
index 6118711a0eb65a..5e636e9109e45e 100644
--- a/src/crypto/tls/handshake_client_test.go
+++ b/src/crypto/tls/handshake_client_test.go
@@ -2655,8 +2655,8 @@ func TestClientHandshakeContextCancellation(t *testing.T) {
 	if err != context.Canceled {
 		t.Errorf("Unexpected client handshake error: %v", err)
 	}
-	if runtime.GOOS == "js" || runtime.GOOS == "wasip1" {
-		t.Skip("conn.Close does not error as expected when called multiple times on GOOS=js or GOOS=wasip1")
+	if runtime.GOARCH == "wasm" {
+		t.Skip("conn.Close does not error as expected when called multiple times on WASM")
 	}
 	err = cli.Close()
 	if err == nil {
diff --git a/src/crypto/tls/handshake_client_tls13.go b/src/crypto/tls/handshake_client_tls13.go
index 4f4966904f59f4..66dc76f72d6e6f 100644
--- a/src/crypto/tls/handshake_client_tls13.go
+++ b/src/crypto/tls/handshake_client_tls13.go
@@ -197,8 +197,8 @@ func (hs *clientHandshakeStateTLS13) checkServerHelloOrHRR() error {
 	}
 
 	if hs.serverHello.compressionMethod != compressionNone {
-		c.sendAlert(alertDecodeError)
-		return errors.New("tls: server sent non-zero legacy TLS compression method")
+		c.sendAlert(alertIllegalParameter)
+		return errors.New("tls: server selected unsupported compression format")
 	}
 
 	selectedSuite := mutualCipherSuiteTLS13(hs.hello.cipherSuites, hs.serverHello.cipherSuite)
@@ -466,6 +466,7 @@ func (hs *clientHandshakeStateTLS13) processServerHello() error {
 	hs.usingPSK = true
 	c.didResume = true
 	c.peerCertificates = hs.session.peerCertificates
+	c.activeCertHandles = hs.session.activeCertHandles
 	c.verifiedChains = hs.session.verifiedChains
 	c.ocspResponse = hs.session.ocspResponse
 	c.scts = hs.session.scts
@@ -675,9 +676,7 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error {
 	}
 
 	// See RFC 8446, Section 4.4.3.
-	// We don't use hs.hello.supportedSignatureAlgorithms because it might
-	// include PKCS#1 v1.5 and SHA-1 if the ClientHello also supported TLS 1.2.
-	if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms(c.vers)) {
+	if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms()) {
 		c.sendAlert(alertIllegalParameter)
 		return errors.New("tls: certificate used with invalid signature algorithm")
 	}
@@ -686,7 +685,8 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error {
 		return c.sendAlert(alertInternalError)
 	}
 	if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 {
-		return c.sendAlert(alertInternalError)
+		c.sendAlert(alertIllegalParameter)
+		return errors.New("tls: certificate used with invalid signature algorithm")
 	}
 	signed := signedMessage(sigHash, serverSignatureContext, hs.transcript)
 	if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey,
@@ -694,7 +694,6 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error {
 		c.sendAlert(alertDecryptError)
 		return errors.New("tls: invalid signature by the server certificate: " + err.Error())
 	}
-	c.peerSigAlg = certVerify.signatureAlgorithm
 
 	if err := transcriptMsg(certVerify, hs.transcript); err != nil {
 		return err
diff --git a/src/crypto/tls/handshake_messages.go b/src/crypto/tls/handshake_messages.go
index d9a475aab14b22..6c6141c421ea34 100644
--- a/src/crypto/tls/handshake_messages.go
+++ b/src/crypto/tls/handshake_messages.go
@@ -1056,7 +1056,6 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool {
 		return false
 	}
 
-	seenExts := make(map[uint16]bool)
 	for !extensions.Empty() {
 		var extension uint16
 		var extData cryptobyte.String
@@ -1065,11 +1064,6 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool {
 			return false
 		}
 
-		if seenExts[extension] {
-			return false
-		}
-		seenExts[extension] = true
-
 		switch extension {
 		case extensionALPN:
 			var protoList cryptobyte.String
@@ -1790,7 +1784,7 @@ func (m *certificateRequestMsg) unmarshal(data []byte) bool {
 		}
 		sigAndHashLen := uint16(data[0])<<8 | uint16(data[1])
 		data = data[2:]
-		if sigAndHashLen&1 != 0 || sigAndHashLen == 0 {
+		if sigAndHashLen&1 != 0 {
 			return false
 		}
 		if len(data) < int(sigAndHashLen) {
diff --git a/src/crypto/tls/handshake_messages_test.go b/src/crypto/tls/handshake_messages_test.go
index fa81a72b0de018..aafb889b3017c2 100644
--- a/src/crypto/tls/handshake_messages_test.go
+++ b/src/crypto/tls/handshake_messages_test.go
@@ -72,6 +72,10 @@ func TestMarshalUnmarshal(t *testing.T) {
 					break
 				}
 
+				if m, ok := m.(*SessionState); ok {
+					m.activeCertHandles = nil
+				}
+
 				if ch, ok := m.(*clientHelloMsg); ok {
 					// extensions is special cased, as it is only populated by the
 					// server-side of a handshake and is not expected to roundtrip
@@ -179,10 +183,10 @@ func (*clientHelloMsg) Generate(rand *rand.Rand, size int) reflect.Value {
 		}
 	}
 	if rand.Intn(10) > 5 {
-		m.supportedSignatureAlgorithms = supportedSignatureAlgorithms(VersionTLS12)
+		m.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
 	}
 	if rand.Intn(10) > 5 {
-		m.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms(VersionTLS12)
+		m.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms()
 	}
 	for i := 0; i < rand.Intn(5); i++ {
 		m.alpnProtocols = append(m.alpnProtocols, randomString(rand.Intn(20)+1, rand))
@@ -473,10 +477,10 @@ func (*certificateRequestMsgTLS13) Generate(rand *rand.Rand, size int) reflect.V
 		m.scts = true
 	}
 	if rand.Intn(10) > 5 {
-		m.supportedSignatureAlgorithms = supportedSignatureAlgorithms(VersionTLS12)
+		m.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
 	}
 	if rand.Intn(10) > 5 {
-		m.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms(VersionTLS12)
+		m.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms()
 	}
 	if rand.Intn(10) > 5 {
 		m.certificateAuthorities = make([][]byte, 3)
diff --git a/src/crypto/tls/handshake_server.go b/src/crypto/tls/handshake_server.go
index 8240e6afae3c6b..507b69a0ed1471 100644
--- a/src/crypto/tls/handshake_server.go
+++ b/src/crypto/tls/handshake_server.go
@@ -16,6 +16,7 @@ import (
 	"errors"
 	"fmt"
 	"hash"
+	"internal/byteorder"
 	"io"
 	"time"
 )
@@ -148,15 +149,7 @@ func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, *echServer
 	// the contents of the client hello, since we may swap it out completely.
 	var ech *echServerContext
 	if len(clientHello.encryptedClientHello) != 0 {
-		echKeys := c.config.EncryptedClientHelloKeys
-		if c.config.GetEncryptedClientHelloKeys != nil {
-			echKeys, err = c.config.GetEncryptedClientHelloKeys(clientHelloInfo(ctx, c, clientHello))
-			if err != nil {
-				c.sendAlert(alertInternalError)
-				return nil, nil, err
-			}
-		}
-		clientHello, ech, err = c.processECHClientHello(clientHello, echKeys)
+		clientHello, ech, err = c.processECHClientHello(clientHello)
 		if err != nil {
 			return nil, nil, err
 		}
@@ -176,15 +169,7 @@ func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, *echServer
 	c.ticketKeys = originalConfig.ticketKeys(configForClient)
 
 	clientVersions := clientHello.supportedVersions
-	if clientHello.vers >= VersionTLS13 && len(clientVersions) == 0 {
-		// RFC 8446 4.2.1 indicates when the supported_versions extension is not sent,
-		// compatible servers MUST negotiate TLS 1.2 or earlier if supported, even
-		// if the client legacy version is TLS 1.3 or later.
-		//
-		// Since we reject empty extensionSupportedVersions in the client hello unmarshal
-		// finding the supportedVersions empty indicates the extension was not present.
-		clientVersions = supportedVersionsFromMax(VersionTLS12)
-	} else if len(clientVersions) == 0 {
+	if len(clientHello.supportedVersions) == 0 {
 		clientVersions = supportedVersionsFromMax(clientHello.vers)
 	}
 	c.vers, ok = c.config.mutualVersion(roleServer, clientVersions)
@@ -232,7 +217,7 @@ func (hs *serverHandshakeState) processClientHello() error {
 	}
 
 	if !foundCompression {
-		c.sendAlert(alertIllegalParameter)
+		c.sendAlert(alertHandshakeFailure)
 		return errors.New("tls: client does not support uncompressed connections")
 	}
 
@@ -287,11 +272,7 @@ func (hs *serverHandshakeState) processClientHello() error {
 		hs.hello.scts = hs.cert.SignedCertificateTimestamps
 	}
 
-	hs.ecdheOk, err = supportsECDHE(c.config, c.vers, hs.clientHello.supportedCurves, hs.clientHello.supportedPoints)
-	if err != nil {
-		c.sendAlert(alertMissingExtension)
-		return err
-	}
+	hs.ecdheOk = supportsECDHE(c.config, c.vers, hs.clientHello.supportedCurves, hs.clientHello.supportedPoints)
 
 	if hs.ecdheOk && len(hs.clientHello.supportedPoints) > 0 {
 		// Although omitting the ec_point_formats extension is permitted, some
@@ -362,7 +343,7 @@ func negotiateALPN(serverProtos, clientProtos []string, quic bool) (string, erro
 
 // supportsECDHE returns whether ECDHE key exchanges can be used with this
 // pre-TLS 1.3 client.
-func supportsECDHE(c *Config, version uint16, supportedCurves []CurveID, supportedPoints []uint8) (bool, error) {
+func supportsECDHE(c *Config, version uint16, supportedCurves []CurveID, supportedPoints []uint8) bool {
 	supportsCurve := false
 	for _, curve := range supportedCurves {
 		if c.supportsCurve(version, curve) {
@@ -372,12 +353,10 @@ func supportsECDHE(c *Config, version uint16, supportedCurves []CurveID, support
 	}
 
 	supportsPointFormat := false
-	offeredNonCompressedFormat := false
 	for _, pointFormat := range supportedPoints {
 		if pointFormat == pointFormatUncompressed {
 			supportsPointFormat = true
-		} else {
-			offeredNonCompressedFormat = true
+			break
 		}
 	}
 	// Per RFC 8422, Section 5.1.2, if the Supported Point Formats extension is
@@ -386,11 +365,9 @@ func supportsECDHE(c *Config, version uint16, supportedCurves []CurveID, support
 	// the parser. See https://go.dev/issue/49126.
 	if len(supportedPoints) == 0 {
 		supportsPointFormat = true
-	} else if offeredNonCompressedFormat && !supportsPointFormat {
-		return false, errors.New("tls: client offered only incompatible point formats")
 	}
 
-	return supportsCurve && supportsPointFormat, nil
+	return supportsCurve && supportsPointFormat
 }
 
 func (hs *serverHandshakeState) pickCipherSuite() error {
@@ -631,9 +608,8 @@ func (hs *serverHandshakeState) doFullHandshake() error {
 		return err
 	}
 	if skx != nil {
-		if keyAgreement, ok := keyAgreement.(*ecdheKeyAgreement); ok {
-			c.curveID = keyAgreement.curveID
-			c.peerSigAlg = keyAgreement.signatureAlgorithm
+		if len(skx.key) >= 3 && skx.key[0] == 3 /* named curve */ {
+			c.curveID = CurveID(byteorder.BEUint16(skx.key[1:]))
 		}
 		if _, err := hs.c.writeHandshakeRecord(skx, &hs.finishedHash); err != nil {
 			return err
@@ -650,7 +626,7 @@ func (hs *serverHandshakeState) doFullHandshake() error {
 		}
 		if c.vers >= VersionTLS12 {
 			certReq.hasSignatureAlgorithm = true
-			certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms(c.vers)
+			certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
 		}
 
 		// An empty list of certificateAuthorities signals to
@@ -772,10 +748,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
 			if err != nil {
 				return c.sendAlert(alertInternalError)
 			}
-			if sigHash == crypto.SHA1 {
-				tlssha1.Value() // ensure godebug is initialized
-				tlssha1.IncNonDefault()
-			}
 		} else {
 			sigType, sigHash, err = legacyTypeAndHashFromPublicKey(pub)
 			if err != nil {
@@ -789,7 +761,6 @@ func (hs *serverHandshakeState) doFullHandshake() error {
 			c.sendAlert(alertDecryptError)
 			return errors.New("tls: invalid signature by the client certificate: " + err.Error())
 		}
-		c.peerSigAlg = certVerify.signatureAlgorithm
 
 		if err := transcriptMsg(certVerify, &hs.finishedHash); err != nil {
 			return err
@@ -919,7 +890,7 @@ func (hs *serverHandshakeState) sendFinished(out []byte) error {
 }
 
 // processCertsFromClient takes a chain of client certificates either from a
-// certificateMsg message or a certificateMsgTLS13 message and verifies them.
+// Certificates message and verifies them.
 func (c *Conn) processCertsFromClient(certificate Certificate) error {
 	certificates := certificate.Certificate
 	certs := make([]*x509.Certificate, len(certificates))
@@ -942,7 +913,7 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error {
 		if c.vers == VersionTLS13 {
 			c.sendAlert(alertCertificateRequired)
 		} else {
-			c.sendAlert(alertHandshakeFailure)
+			c.sendAlert(alertBadCertificate)
 		}
 		return errors.New("tls: client didn't provide a certificate")
 	}
diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go
index a6d64a506a0542..9a2a378dcedaaa 100644
--- a/src/crypto/tls/handshake_server_test.go
+++ b/src/crypto/tls/handshake_server_test.go
@@ -157,7 +157,7 @@ func TestRejectSNIWithTrailingDot(t *testing.T) {
 		vers:       VersionTLS12,
 		random:     make([]byte, 32),
 		serverName: "foo.com.",
-	}, "decoding message")
+	}, "unexpected message")
 }
 
 func TestDontSelectECDSAWithRSAKey(t *testing.T) {
@@ -2044,8 +2044,8 @@ func TestServerHandshakeContextCancellation(t *testing.T) {
 	if err != context.Canceled {
 		t.Errorf("Unexpected server handshake error: %v", err)
 	}
-	if runtime.GOOS == "js" || runtime.GOOS == "wasip1" {
-		t.Skip("conn.Close does not error as expected when called multiple times on GOOS=js or GOOS=wasip1")
+	if runtime.GOARCH == "wasm" {
+		t.Skip("conn.Close does not error as expected when called multiple times on WASM")
 	}
 	err = conn.Close()
 	if err == nil {
diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go
index dbd6ff2c4f4d94..ab0cff9e28454e 100644
--- a/src/crypto/tls/handshake_server_tls13.go
+++ b/src/crypto/tls/handshake_server_tls13.go
@@ -31,7 +31,7 @@ import (
 const maxClientPSKIdentities = 5
 
 type echServerContext struct {
-	hpkeContext *hpke.Recipient
+	hpkeContext *hpke.Receipient
 	configID    uint8
 	ciphersuite echCipher
 	transcript  hash.Hash
@@ -804,16 +804,8 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error {
 
 	// If client sent ECH extension, but we didn't accept it,
 	// send retry configs, if available.
-	echKeys := hs.c.config.EncryptedClientHelloKeys
-	if hs.c.config.GetEncryptedClientHelloKeys != nil {
-		echKeys, err = hs.c.config.GetEncryptedClientHelloKeys(clientHelloInfo(hs.ctx, c, hs.clientHello))
-		if err != nil {
-			c.sendAlert(alertInternalError)
-			return err
-		}
-	}
-	if len(echKeys) > 0 && len(hs.clientHello.encryptedClientHello) > 0 && hs.echContext == nil {
-		encryptedExtensions.echRetryConfigs, err = buildRetryConfigList(echKeys)
+	if len(hs.c.config.EncryptedClientHelloKeys) > 0 && len(hs.clientHello.encryptedClientHello) > 0 && hs.echContext == nil {
+		encryptedExtensions.echRetryConfigs, err = buildRetryConfigList(hs.c.config.EncryptedClientHelloKeys)
 		if err != nil {
 			c.sendAlert(alertInternalError)
 			return err
@@ -844,8 +836,7 @@ func (hs *serverHandshakeStateTLS13) sendServerCertificate() error {
 		certReq := new(certificateRequestMsgTLS13)
 		certReq.ocspStapling = true
 		certReq.scts = true
-		certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms(c.vers)
-		certReq.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithmsCert()
+		certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
 		if c.config.ClientCAs != nil {
 			certReq.certificateAuthorities = c.config.ClientCAs.Subjects()
 		}
@@ -1096,9 +1087,7 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error {
 		}
 
 		// See RFC 8446, Section 4.4.3.
-		// We don't use certReq.supportedSignatureAlgorithms because it would
-		// require keeping the certificateRequestMsgTLS13 around in the hs.
-		if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms(c.vers)) {
+		if !isSupportedSignatureAlgorithm(certVerify.signatureAlgorithm, supportedSignatureAlgorithms()) {
 			c.sendAlert(alertIllegalParameter)
 			return errors.New("tls: client certificate used with invalid signature algorithm")
 		}
@@ -1107,7 +1096,8 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error {
 			return c.sendAlert(alertInternalError)
 		}
 		if sigType == signaturePKCS1v15 || sigHash == crypto.SHA1 {
-			return c.sendAlert(alertInternalError)
+			c.sendAlert(alertIllegalParameter)
+			return errors.New("tls: client certificate used with invalid signature algorithm")
 		}
 		signed := signedMessage(sigHash, clientSignatureContext, hs.transcript)
 		if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey,
@@ -1115,7 +1105,6 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error {
 			c.sendAlert(alertDecryptError)
 			return errors.New("tls: invalid signature by the client certificate: " + err.Error())
 		}
-		c.peerSigAlg = certVerify.signatureAlgorithm
 
 		if err := transcriptMsg(certVerify, hs.transcript); err != nil {
 			return err
diff --git a/src/crypto/tls/key_agreement.go b/src/crypto/tls/key_agreement.go
index 88116f941e0b9a..3e96242b9798b8 100644
--- a/src/crypto/tls/key_agreement.go
+++ b/src/crypto/tls/key_agreement.go
@@ -14,7 +14,6 @@ import (
 	"errors"
 	"fmt"
 	"io"
-	"slices"
 )
 
 // A keyAgreement implements the client and server side of a TLS 1.0–1.2 key
@@ -165,29 +164,25 @@ type ecdheKeyAgreement struct {
 	// and returned in generateClientKeyExchange.
 	ckx             *clientKeyExchangeMsg
 	preMasterSecret []byte
-
-	// curveID and signatureAlgorithm are set by processServerKeyExchange and
-	// generateServerKeyExchange.
-	curveID            CurveID
-	signatureAlgorithm SignatureScheme
 }
 
 func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *Config, cert *Certificate, clientHello *clientHelloMsg, hello *serverHelloMsg) (*serverKeyExchangeMsg, error) {
+	var curveID CurveID
 	for _, c := range clientHello.supportedCurves {
 		if config.supportsCurve(ka.version, c) {
-			ka.curveID = c
+			curveID = c
 			break
 		}
 	}
 
-	if ka.curveID == 0 {
+	if curveID == 0 {
 		return nil, errors.New("tls: no supported elliptic curves offered")
 	}
-	if _, ok := curveForCurveID(ka.curveID); !ok {
+	if _, ok := curveForCurveID(curveID); !ok {
 		return nil, errors.New("tls: CurvePreferences includes unsupported curve")
 	}
 
-	key, err := generateECDHEKey(config.rand(), ka.curveID)
+	key, err := generateECDHEKey(config.rand(), curveID)
 	if err != nil {
 		return nil, err
 	}
@@ -197,8 +192,8 @@ func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *Config, cert *Cer
 	ecdhePublic := key.PublicKey().Bytes()
 	serverECDHEParams := make([]byte, 1+2+1+len(ecdhePublic))
 	serverECDHEParams[0] = 3 // named curve
-	serverECDHEParams[1] = byte(ka.curveID >> 8)
-	serverECDHEParams[2] = byte(ka.curveID)
+	serverECDHEParams[1] = byte(curveID >> 8)
+	serverECDHEParams[2] = byte(curveID)
 	serverECDHEParams[3] = byte(len(ecdhePublic))
 	copy(serverECDHEParams[4:], ecdhePublic)
 
@@ -207,21 +202,18 @@ func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *Config, cert *Cer
 		return nil, fmt.Errorf("tls: certificate private key of type %T does not implement crypto.Signer", cert.PrivateKey)
 	}
 
+	var signatureAlgorithm SignatureScheme
 	var sigType uint8
 	var sigHash crypto.Hash
 	if ka.version >= VersionTLS12 {
-		ka.signatureAlgorithm, err = selectSignatureScheme(ka.version, cert, clientHello.supportedSignatureAlgorithms)
+		signatureAlgorithm, err = selectSignatureScheme(ka.version, cert, clientHello.supportedSignatureAlgorithms)
 		if err != nil {
 			return nil, err
 		}
-		sigType, sigHash, err = typeAndHashFromSignatureScheme(ka.signatureAlgorithm)
+		sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm)
 		if err != nil {
 			return nil, err
 		}
-		if sigHash == crypto.SHA1 {
-			tlssha1.Value() // ensure godebug is initialized
-			tlssha1.IncNonDefault()
-		}
 	} else {
 		sigType, sigHash, err = legacyTypeAndHashFromPublicKey(priv.Public())
 		if err != nil {
@@ -252,8 +244,8 @@ func (ka *ecdheKeyAgreement) generateServerKeyExchange(config *Config, cert *Cer
 	copy(skx.key, serverECDHEParams)
 	k := skx.key[len(serverECDHEParams):]
 	if ka.version >= VersionTLS12 {
-		k[0] = byte(ka.signatureAlgorithm >> 8)
-		k[1] = byte(ka.signatureAlgorithm)
+		k[0] = byte(signatureAlgorithm >> 8)
+		k[1] = byte(signatureAlgorithm)
 		k = k[2:]
 	}
 	k[0] = byte(len(sig) >> 8)
@@ -287,7 +279,7 @@ func (ka *ecdheKeyAgreement) processServerKeyExchange(config *Config, clientHell
 	if skx.key[0] != 3 { // named curve
 		return errors.New("tls: server selected unsupported curve")
 	}
-	ka.curveID = CurveID(skx.key[1])<<8 | CurveID(skx.key[2])
+	curveID := CurveID(skx.key[1])<<8 | CurveID(skx.key[2])
 
 	publicLen := int(skx.key[3])
 	if publicLen+4 > len(skx.key) {
@@ -301,15 +293,11 @@ func (ka *ecdheKeyAgreement) processServerKeyExchange(config *Config, clientHell
 		return errServerKeyExchange
 	}
 
-	if !slices.Contains(clientHello.supportedCurves, ka.curveID) {
-		return errors.New("tls: server selected unoffered curve")
-	}
-
-	if _, ok := curveForCurveID(ka.curveID); !ok {
+	if _, ok := curveForCurveID(curveID); !ok {
 		return errors.New("tls: server selected unsupported curve")
 	}
 
-	key, err := generateECDHEKey(config.rand(), ka.curveID)
+	key, err := generateECDHEKey(config.rand(), curveID)
 	if err != nil {
 		return err
 	}
@@ -333,23 +321,19 @@ func (ka *ecdheKeyAgreement) processServerKeyExchange(config *Config, clientHell
 	var sigType uint8
 	var sigHash crypto.Hash
 	if ka.version >= VersionTLS12 {
-		ka.signatureAlgorithm = SignatureScheme(sig[0])<<8 | SignatureScheme(sig[1])
+		signatureAlgorithm := SignatureScheme(sig[0])<<8 | SignatureScheme(sig[1])
 		sig = sig[2:]
 		if len(sig) < 2 {
 			return errServerKeyExchange
 		}
 
-		if !isSupportedSignatureAlgorithm(ka.signatureAlgorithm, clientHello.supportedSignatureAlgorithms) {
+		if !isSupportedSignatureAlgorithm(signatureAlgorithm, clientHello.supportedSignatureAlgorithms) {
 			return errors.New("tls: certificate used with invalid signature algorithm")
 		}
-		sigType, sigHash, err = typeAndHashFromSignatureScheme(ka.signatureAlgorithm)
+		sigType, sigHash, err = typeAndHashFromSignatureScheme(signatureAlgorithm)
 		if err != nil {
 			return err
 		}
-		if sigHash == crypto.SHA1 {
-			tlssha1.Value() // ensure godebug is initialized
-			tlssha1.IncNonDefault()
-		}
 	} else {
 		sigType, sigHash, err = legacyTypeAndHashFromPublicKey(cert.PublicKey)
 		if err != nil {
diff --git a/src/crypto/tls/key_schedule.go b/src/crypto/tls/key_schedule.go
index 1426a276bf2de0..38d6d3f7be1673 100644
--- a/src/crypto/tls/key_schedule.go
+++ b/src/crypto/tls/key_schedule.go
@@ -82,3 +82,18 @@ func curveForCurveID(id CurveID) (ecdh.Curve, bool) {
 		return nil, false
 	}
 }
+
+func curveIDForCurve(curve ecdh.Curve) (CurveID, bool) {
+	switch curve {
+	case ecdh.X25519():
+		return X25519, true
+	case ecdh.P256():
+		return CurveP256, true
+	case ecdh.P384():
+		return CurveP384, true
+	case ecdh.P521():
+		return CurveP521, true
+	default:
+		return 0, false
+	}
+}
diff --git a/src/crypto/tls/quic_test.go b/src/crypto/tls/quic_test.go
index 51cd4ef765dd6c..1bb2e55bddcbea 100644
--- a/src/crypto/tls/quic_test.go
+++ b/src/crypto/tls/quic_test.go
@@ -9,7 +9,6 @@ import (
 	"context"
 	"errors"
 	"reflect"
-	"strings"
 	"testing"
 )
 
@@ -279,7 +278,7 @@ func TestQUICPostHandshakeClientAuthentication(t *testing.T) {
 	certReq := new(certificateRequestMsgTLS13)
 	certReq.ocspStapling = true
 	certReq.scts = true
-	certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms(VersionTLS13)
+	certReq.supportedSignatureAlgorithms = supportedSignatureAlgorithms()
 	certReqBytes, err := certReq.marshal()
 	if err != nil {
 		t.Fatal(err)
@@ -309,11 +308,11 @@ func TestQUICPostHandshakeKeyUpdate(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	expectedErr := "unexpected key update message"
-	if err = cli.conn.HandleData(QUICEncryptionLevelApplication, keyUpdateBytes); err == nil {
-		t.Fatalf("key update request: expected error from post-handshake key update, got nil")
-	} else if !strings.Contains(err.Error(), expectedErr) {
-		t.Fatalf("key update request: got error %v, expected substring %q", err, expectedErr)
+	if err := cli.conn.HandleData(QUICEncryptionLevelApplication, append([]byte{
+		byte(typeKeyUpdate),
+		byte(0), byte(0), byte(len(keyUpdateBytes)),
+	}, keyUpdateBytes...)); !errors.Is(err, alertUnexpectedMessage) {
+		t.Fatalf("key update request: got error %v, want alertUnexpectedMessage", err)
 	}
 }
 
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
index 3bd86fd90ed92a..b79aec63004179 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
+++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 1a 76 c4 d5 b5  |....]...Y...v...|
-00000010  7e 30 1c 1e c3 62 8b 92  a8 19 9b 62 4e 36 a1 d3  |~0...b.....bN6..|
-00000020  c8 e3 55 f6 64 5f 06 aa  19 9a 48 20 24 a4 2d a9  |..U.d_....H $.-.|
-00000030  8a bd cf 4e 9b cf 7d c7  8e 8f e8 ed f5 09 37 ad  |...N..}.......7.|
-00000040  06 c9 6b a4 d5 de 7f 07  07 a6 9d c7 c0 09 00 00  |..k.............|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 58 ee cb 2c 2e  |....]...Y..X..,.|
+00000010  24 e7 e4 50 2b 4b 9c 0f  ab f5 79 c1 12 b6 89 e5  |$..P+K....y.....|
+00000020  83 41 06 cb 45 f6 66 e9  e1 d2 fe 20 95 fd 7f 15  |.A..E.f.... ....|
+00000030  44 4e 44 18 9b fc 16 a7  8a a4 d9 f7 ca 49 85 e8  |DND..........I..|
+00000040  00 ce 02 26 38 38 1b 8d  6d 16 f2 b8 c0 09 00 00  |...&88..m.......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -58,17 +57,17 @@
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
 00000270  95 12 07 8f 2a 16 03 01  00 b5 0c 00 00 b1 03 00  |....*...........|
-00000280  1d 20 3e 61 33 da 82 02  f5 6d 70 2d e5 07 df 43  |. >a3....mp-...C|
-00000290  d7 e6 1a b2 81 3e 58 03  dc 27 37 34 3b 2e 5a d5  |.....>X..'74;.Z.|
-000002a0  d4 1a 00 8b 30 81 88 02  42 00 8b 0c f4 0f fe 8c  |....0...B.......|
-000002b0  01 70 3a c5 e5 29 53 1c  ad 6c f4 35 53 e3 e6 ce  |.p:..)S..l.5S...|
-000002c0  19 21 03 de f5 e3 df 8e  e5 6b 43 00 08 b7 24 2c  |.!.......kC...$,|
-000002d0  27 9e 2b bc 2f 96 07 a0  f9 a9 6b d4 b7 75 a8 5d  |'.+./.....k..u.]|
-000002e0  99 13 ab 5a dd 35 56 08  6d 9c a1 02 42 01 29 62  |...Z.5V.m...B.)b|
-000002f0  b9 64 8b 6d 91 b7 f5 59  73 9d 2d bc 9d 9a 5b 43  |.d.m...Ys.-...[C|
-00000300  d8 d5 76 be 2a 8f c5 f0  2e 5d a8 be 7b d0 36 fe  |..v.*....]..{.6.|
-00000310  62 97 7f 17 96 f6 c3 b4  06 2a e2 cb 77 80 ff 28  |b........*..w..(|
-00000320  02 64 cb bb c7 a9 77 4b  96 7d 07 11 7e e8 28 16  |.d....wK.}..~.(.|
+00000280  1d 20 b2 d4 b5 f1 3f 61  7d 07 30 8b fd 17 76 41  |. ....?a}.0...vA|
+00000290  12 c5 e1 25 f1 e9 ad 68  26 55 4b f5 60 16 b0 44  |...%...h&UK.`..D|
+000002a0  90 7a 00 8b 30 81 88 02  42 01 26 8b c1 0d 38 f2  |.z..0...B.&...8.|
+000002b0  0f 22 de fd 81 53 5b 5a  87 b6 57 23 33 22 06 8f  |."...S[Z..W#3"..|
+000002c0  8b 59 f1 70 85 46 41 f2  b7 0c 80 77 df 40 08 77  |.Y.p.FA....w.@.w|
+000002d0  e1 b8 21 7f 55 77 c7 b7  ef ef b5 31 ae a0 22 a8  |..!.Uw.....1..".|
+000002e0  d3 e0 67 e8 67 bc a9 cb  03 47 76 02 42 00 f4 7a  |..g.g....Gv.B..z|
+000002f0  eb 2f d0 82 d7 06 75 35  e4 61 fb cf 27 93 95 29  |./....u5.a..'..)|
+00000300  6e 2c b5 d4 01 45 5b b6  d9 72 e9 f9 13 a6 5f bd  |n,...E[..r...._.|
+00000310  24 76 3b 8e 48 7a ce 4f  f5 c2 77 75 66 2d 18 6d  |$v;.Hz.O..wuf-.m|
+00000320  7d 9e c7 95 0c fe 0b 80  15 67 b2 f2 f6 5a dd 16  |}........g...Z..|
 00000330  03 01 00 0a 0d 00 00 06  03 01 02 40 00 00 16 03  |...........@....|
 00000340  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
@@ -107,30 +106,30 @@
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
 00000210  03 01 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 90 0f 00  |...._X.;t.......|
-00000240  00 8c 00 8a 30 81 87 02  41 46 5f cc 88 bc 2b e5  |....0...AF_...+.|
-00000250  20 33 a9 ff 52 bb 25 dc  cf a1 08 45 b5 82 9a 1b  | 3..R.%....E....|
-00000260  53 04 18 b4 23 20 c4 d2  d8 92 9b 21 a7 ec 36 d6  |S...# .....!..6.|
-00000270  63 35 68 4c 21 c4 0e 20  07 0c 8f 38 2f 9b b7 9e  |c5hL!.. ...8/...|
-00000280  e7 9d 6d ea da 1c a6 f1  c5 d3 02 42 01 ed 54 c8  |..m........B..T.|
-00000290  9e b2 45 f1 1f 77 ee e3  a7 3a 40 9b fe 9b 1d 38  |..E..w...:@....8|
-000002a0  ff 9b b4 c6 e7 94 07 b8  5f 93 bd 38 8d 31 dd 80  |........_..8.1..|
-000002b0  2f 82 6e b5 85 8f 15 8b  cd b2 04 81 e2 0b 2a fa  |/.n...........*.|
-000002c0  d9 4b 47 0b 86 26 8b 4e  83 a6 15 9e 93 15 14 03  |.KG..&.N........|
-000002d0  01 00 01 01 16 03 01 00  30 f3 06 0e 6f 16 1b 0b  |........0...o...|
-000002e0  46 54 37 fd c6 80 0f ec  4b dd d7 d4 17 b2 d7 8d  |FT7.....K.......|
-000002f0  4e 6a 7f 2a af d2 ea 19  11 8f 23 57 b7 e7 2f b3  |Nj.*......#W../.|
-00000300  97 f6 93 3f ac 0d 5c f8  f5                       |...?..\..|
+00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 91 0f 00  |...._X.;t.......|
+00000240  00 8d 00 8b 30 81 88 02  42 01 87 b2 c8 53 94 c3  |....0...B....S..|
+00000250  9f ea 8a 04 35 1e 53 fb  c0 db c5 43 e8 99 b7 81  |....5.S....C....|
+00000260  43 fd 47 fd a6 cd 89 b5  0a b9 d0 5d 79 b0 c2 1a  |C.G........]y...|
+00000270  94 1f d8 2e 2b 8d 23 2a  c8 08 63 98 f6 01 1f 8f  |....+.#*..c.....|
+00000280  67 60 3a 88 44 63 7e 8b  91 3e 48 02 42 00 e1 1f  |g`:.Dc~..>H.B...|
+00000290  69 9a 97 bb b6 e9 97 4d  f5 f5 d7 23 56 be 1d ff  |i......M...#V...|
+000002a0  f0 22 67 8d a3 a1 13 33  5b f7 0b c2 a3 c8 5a 8c  |."g....3[.....Z.|
+000002b0  e8 65 b8 a8 7e 6c 99 11  db ab bd 80 0a ca dd 5a  |.e..~l.........Z|
+000002c0  d4 e0 28 12 38 7a b4 86  e7 3e 13 05 a1 3f 5f 14  |..(.8z...>...?_.|
+000002d0  03 01 00 01 01 16 03 01  00 30 9a fa ce 11 0b 50  |.........0.....P|
+000002e0  fa a1 59 9b 89 41 a9 0b  1b 74 dd 8f 7b a9 e0 39  |..Y..A...t..{..9|
+000002f0  5d e3 cc ee 11 f4 27 15  bc 4c 8f e1 2c 51 ec 8e  |].....'..L..,Q..|
+00000300  ed 6c 97 75 4c e9 da fb  68 9d                    |.l.uL...h.|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 03 aa a1 4c bf  |..........0...L.|
-00000010  ab 53 f3 96 e7 db b1 a4  d7 19 f7 2f c0 b7 32 ea  |.S........./..2.|
-00000020  bd f3 4a 7c 0d 4c df a4  5f a0 3d f3 1b 57 65 a1  |..J|.L.._.=..We.|
-00000030  d1 31 ae 52 6e ed 15 d2  d9 23 68                 |.1.Rn....#h|
+00000000  14 03 01 00 01 01 16 03  01 00 30 12 06 0c 4d 1c  |..........0...M.|
+00000010  81 47 06 5f b9 85 68 60  9c 26 4a 14 f2 40 60 7f  |.G._..h`.&J..@`.|
+00000020  d1 1e 51 9e f2 70 2f be  54 cb 42 b3 b3 8d 90 9c  |..Q..p/.T.B.....|
+00000030  9d d2 0d e2 f7 b6 56 31  11 af 5f                 |......V1.._|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 aa 0c f4  30 17 b7 59 47 33 91 07  |.... ...0..YG3..|
-00000010  cc 52 7b 52 f8 a0 82 44  25 03 0e b4 45 6e 0c 5a  |.R{R...D%...En.Z|
-00000020  37 6d d6 6d 80 17 03 01  00 20 bc c7 70 3b 94 cc  |7m.m..... ..p;..|
-00000030  09 db 15 84 d8 b9 c5 cf  d6 01 91 93 5b 20 5a b1  |............[ Z.|
-00000040  6a 43 23 30 7e 02 ea 8b  e0 28 15 03 01 00 20 c2  |jC#0~....(.... .|
-00000050  7f c9 90 b3 ef c6 52 68  44 df 05 30 17 39 d9 42  |......RhD..0.9.B|
-00000060  76 7a 1d a1 17 2b fa b4  92 ca 40 a9 58 d4 87     |vz...+....@.X..|
+00000000  17 03 01 00 20 0f d0 65  cd d4 59 d0 9e 07 06 6d  |.... ..e..Y....m|
+00000010  8a 11 34 d9 3a 31 59 70  02 39 08 ef 28 98 36 2f  |..4.:1Yp.9..(.6/|
+00000020  0d 5b d0 23 3f 17 03 01  00 20 5b 16 82 9c 29 c6  |.[.#?.... [...).|
+00000030  78 34 76 09 5e bb 01 5e  fc 01 b2 55 9b ef 67 a8  |x4v.^..^...U..g.|
+00000040  ca 9f b9 6d b5 ea 87 48  8e 76 15 03 01 00 20 43  |...m...H.v.... C|
+00000050  12 3b f6 99 31 67 d8 8a  94 d1 37 ef 01 ca a1 62  |.;..1g....7....b|
+00000060  9f d7 2a eb 7e 37 79 d9  a4 07 15 5f fb 84 32     |..*.~7y...._..2|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
index de3de89cd16616..b02fe3d25b9db1 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
+++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 fc 68 73 9f 1a  |....]...Y...hs..|
-00000010  9d 3b 9b f9 10 cf b5 84  b9 31 f4 a8 e9 47 ab 33  |.;.......1...G.3|
-00000020  55 42 0b c0 f2 8e fa e7  a0 39 55 20 56 cd 87 f6  |UB.......9U V...|
-00000030  05 e0 b1 e9 aa b8 b2 ca  33 9d 46 02 fd d8 f0 11  |........3.F.....|
-00000040  0e fc 96 7e b4 fa fc c2  f3 da c4 2b c0 13 00 00  |...~.......+....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 0b 4b bc a9 e8  |....]...Y...K...|
+00000010  4a 08 69 de 73 f8 fc 53  c6 e9 cd cf 25 7a 5f b6  |J.i.s..S....%z_.|
+00000020  60 48 65 3e f5 5f 9f 14  e7 38 a0 20 ec fe 94 b2  |`He>._...8. ....|
+00000030  6d a9 d7 91 c4 92 6b 3e  a4 2e 88 72 07 c3 47 12  |m.....k>...r..G.|
+00000040  78 cc 45 86 f9 56 16 f9  d7 d9 38 c2 c0 13 00 00  |x.E..V....8.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,17 +61,17 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 74 0e 72  |............ t.r|
-000002d0  d9 71 10 de 9b f7 59 f0  c0 a2 b9 35 68 6a 3d f3  |.q....Y....5hj=.|
-000002e0  27 fb 13 3d a1 c0 4c f6  17 9b f1 25 50 00 80 c2  |'..=..L....%P...|
-000002f0  20 fd 4f 8b c9 6a fc 97  61 9d b3 b0 1d 2d 9a 2f  | .O..j..a....-./|
-00000300  90 15 44 a7 04 01 0b 6f  a9 47 5d a1 46 aa 30 f1  |..D....o.G].F.0.|
-00000310  5f 9b db 4d 8d 7a a4 99  3f 5c cb 4a ff 0a 49 b1  |_..M.z..?\.J..I.|
-00000320  fc df 0a f7 31 90 a9 98  cd da 8c 49 a5 1f 0f c7  |....1......I....|
-00000330  48 63 ee ff a8 fb 07 0a  fe e1 d7 1b ed b3 3f ce  |Hc............?.|
-00000340  39 ef bb 50 e9 a0 f4 c1  6f a6 7e 5b c8 36 1a 76  |9..P....o.~[.6.v|
-00000350  c8 00 3b e2 04 98 88 f1  fa 56 34 8f 02 86 0a 8e  |..;......V4.....|
-00000360  29 4f eb 70 fb 2f 21 ed  8d fa a9 91 66 c9 c0 16  |)O.p./!.....f...|
+000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 fc 77 2f  |............ .w/|
+000002d0  88 9a a9 71 3a 14 bf 27  27 40 e0 28 ce e8 e8 3b  |...q:..''@.(...;|
+000002e0  cd 0a 43 21 75 c9 93 70  9a 22 f1 ec 3a 00 80 d2  |..C!u..p."..:...|
+000002f0  cd 71 ae f6 d8 54 5c f3  a4 da c7 64 51 b8 36 b8  |.q...T\....dQ.6.|
+00000300  46 d5 8c b1 a0 43 9b f2  b5 2c 12 89 08 39 2b c3  |F....C...,...9+.|
+00000310  79 4e 5d 3d 7e 7f d5 51  c3 c5 1e 9e 3b 7c 39 c4  |yN]=~..Q....;|9.|
+00000320  c3 64 52 91 94 2f 2c ee  aa 7c 0e ed fd 7a 65 bb  |.dR../,..|...ze.|
+00000330  5a 62 f4 45 24 3d e7 e3  f2 8a 72 74 a7 9d f2 d5  |Zb.E$=....rt....|
+00000340  69 be dc 6e 23 fb 68 bb  6e 64 9e 43 a8 f4 08 2b  |i..n#.h.nd.C...+|
+00000350  86 be ea 88 40 13 5f 3f  0b 18 74 e3 43 76 be 98  |....@._?..t.Cv..|
+00000360  b8 15 ea 4d cb 6e 23 3c  8b a9 ce d4 6a e3 13 16  |...M.n#<....j...|
 00000370  03 01 00 0a 0d 00 00 06  03 01 02 40 00 00 16 03  |...........@....|
 00000380  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
@@ -111,30 +110,30 @@
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
 00000210  03 01 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 91 0f 00  |...._X.;t.......|
-00000240  00 8d 00 8b 30 81 88 02  42 00 88 3e 14 10 fa b5  |....0...B..>....|
-00000250  65 d8 03 71 7e b7 44 a5  db 04 85 d2 f4 5d c5 de  |e..q~.D......]..|
-00000260  71 e4 f9 ad 5e 47 6c 83  eb 6a 2b fc 8d 60 6b 1b  |q...^Gl..j+..`k.|
-00000270  55 89 7b 03 60 fb 9c b2  b1 42 ef 02 63 29 59 03  |U.{.`....B..c)Y.|
-00000280  02 a8 48 4d 9a 3d f3 e9  6b ac 76 02 42 01 90 36  |..HM.=..k.v.B..6|
-00000290  5d d0 ec dd 76 75 0c 97  66 7f 10 ec 1d 39 5e bb  |]...vu..f....9^.|
-000002a0  2c 81 9e 15 fa 59 3f e8  77 3f 33 03 b6 2d 02 5a  |,....Y?.w?3..-.Z|
-000002b0  28 82 53 7a 18 69 29 5b  d9 7d ce 4f 94 d9 69 29  |(.Sz.i)[.}.O..i)|
-000002c0  b2 84 87 4a 15 47 c6 da  6f c3 df ca 8a 58 0b 14  |...J.G..o....X..|
-000002d0  03 01 00 01 01 16 03 01  00 30 89 15 96 15 9d 93  |.........0......|
-000002e0  e3 ae 94 14 f9 ea 39 d7  3b d6 98 e1 ed c8 0a 3f  |......9.;......?|
-000002f0  6f 2c a2 9b cd c5 ea 1a  1f 27 89 1a 7d ff 60 07  |o,.......'..}.`.|
-00000300  22 1f bc b8 56 3a ee 24  5a ff                    |"...V:.$Z.|
+00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 01 00 90 0f 00  |...._X.;t.......|
+00000240  00 8c 00 8a 30 81 87 02  41 2c f8 d2 c2 28 75 28  |....0...A,...(u(|
+00000250  67 de 75 fb 7a 09 20 8a  ec 06 a6 42 03 ad 3c 95  |g.u.z. ....B..<.|
+00000260  bb 00 f6 10 71 c7 90 fe  08 16 fa ed 7d 71 24 a2  |....q.......}q$.|
+00000270  b6 76 ce f9 1b ff a9 ff  05 b6 dd d8 63 2b 74 86  |.v..........c+t.|
+00000280  65 f5 ef f7 36 41 47 77  b5 88 02 42 00 8a 80 f8  |e...6AGw...B....|
+00000290  9b cf de a6 b7 c3 d8 48  a1 a0 47 7e cf 33 fc f7  |.......H..G~.3..|
+000002a0  fc 87 40 cf 8d c3 81 85  c7 19 9e 37 9e 54 f7 3e  |..@........7.T.>|
+000002b0  d1 1c 42 83 21 d7 2e ae  02 7b 3c ce 97 f3 9b a0  |..B.!....{<.....|
+000002c0  a3 4e b9 a0 9c 78 f0 7e  9c 96 fc 78 e6 08 14 03  |.N...x.~...x....|
+000002d0  01 00 01 01 16 03 01 00  30 84 a0 4f 8d 01 40 ca  |........0..O..@.|
+000002e0  c0 fd ea 1a 9c df 27 cc  25 00 56 e2 30 05 c0 d9  |......'.%.V.0...|
+000002f0  c7 21 48 37 6b 35 c3 a4  4e bf 67 98 87 78 0f 3c  |.!H7k5..N.g..x.<|
+00000300  74 72 4f 6a c5 0d fd 0c  84                       |trOj.....|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 bf 0c 82 bd 43  |..........0....C|
-00000010  ba 60 ec df 88 4d 48 be  d5 c4 0c b5 7d c4 94 c4  |.`...MH.....}...|
-00000020  15 6e 50 45 77 56 ce d5  e0 4c 15 fc da 96 0b 41  |.nPEwV...L.....A|
-00000030  fd 70 39 e9 33 3f 57 77  f5 a3 67                 |.p9.3?Ww..g|
+00000000  14 03 01 00 01 01 16 03  01 00 30 01 da 6e 2a 83  |..........0..n*.|
+00000010  20 ad 52 16 f2 c6 c1 55  b8 77 0d 5f c6 48 dc e7  | .R....U.w._.H..|
+00000020  72 29 88 0a 2b 1a d1 1e  fd fb c0 c3 18 c8 43 47  |r)..+.........CG|
+00000030  a9 8f d3 fe f3 d8 d2 a8  ce 79 44                 |.........yD|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 50 1e 02  79 6b 4b 67 77 bb c0 a7  |.... P..ykKgw...|
-00000010  ef 5a c1 cc bc 28 14 86  2c 83 4f 3f 34 97 c4 73  |.Z...(..,.O?4..s|
-00000020  24 44 ad 59 8c 17 03 01  00 20 e3 52 89 d7 d1 9a  |$D.Y..... .R....|
-00000030  33 21 78 e4 41 36 b1 11  74 c0 73 fb ea c9 42 88  |3!x.A6..t.s...B.|
-00000040  7f 71 ea 40 a0 3a 62 54  dc b7 15 03 01 00 20 4a  |.q.@.:bT...... J|
-00000050  ff f4 c6 c0 5f fd e2 b3  bd 4a a9 aa 19 64 2d 98  |...._....J...d-.|
-00000060  f1 ea 56 4e 3a c9 1c be  8d fb c3 6c 2f 98 ff     |..VN:......l/..|
+00000000  17 03 01 00 20 e5 74 9a  b9 0b 6c 43 0f 4e db e4  |.... .t...lC.N..|
+00000010  ba 10 5d 9a f0 96 16 17  ad a5 42 d8 0d a3 39 86  |..].......B...9.|
+00000020  6c f0 8a 64 70 17 03 01  00 20 d2 11 27 ea f2 80  |l..dp.... ..'...|
+00000030  a5 5d ba 7b 99 4b 94 25  13 24 29 05 7b 64 00 51  |.].{.K.%.$).{d.Q|
+00000040  14 8e d5 e9 e2 c0 5d 98  96 30 15 03 01 00 20 7e  |......]..0.... ~|
+00000050  87 d2 6c 5c b5 1c 11 72  e1 c4 e5 e0 f3 16 6b db  |..l\...r......k.|
+00000060  55 c3 c7 ae a9 38 d3 07  04 41 be c5 42 43 a4     |U....8...A..BC.|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA
index 8ce1bad1908d8e..ac8a0ebad31a07 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA
+++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 ef c9 5c 4d 29  |....]...Y....\M)|
-00000010  07 24 2a 41 08 94 39 cc  d3 fb 92 88 1c ff 64 6b  |.$*A..9.......dk|
-00000020  0a 14 41 89 c6 5d 9b 25  7e a7 04 20 a0 aa ad 46  |..A..].%~.. ...F|
-00000030  14 01 d2 dd 37 44 05 4b  1d 9f ea e5 98 29 1e 36  |....7D.K.....).6|
-00000040  09 e2 ab 90 93 ee c1 99  7d 17 77 9b c0 09 00 00  |........}.w.....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 6f 48 26 41 da  |....]...Y..oH&A.|
+00000010  73 82 d1 cf 84 ad 06 e9  76 39 dc e4 c8 34 af 53  |s.......v9...4.S|
+00000020  06 ed ed 68 56 5f 76 11  4e f6 ff 20 55 fd 29 c5  |...hV_v.N.. U.).|
+00000030  aa 56 af bd 5d 67 74 4f  08 8a 52 a1 7e cd b9 ac  |.V..]gtO..R.~...|
+00000040  31 a0 2f 45 25 1f b2 24  71 26 80 17 c0 09 00 00  |1./E%..$q&......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -57,20 +56,20 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 01  00 b4 0c 00 00 b0 03 00  |....*...........|
-00000280  1d 20 a4 4e 43 df 00 5c  c7 1c e8 d4 8e 9b cf b0  |. .NC..\........|
-00000290  36 85 64 7c d7 69 95 c0  b4 6f d8 0b 45 b8 a4 34  |6.d|.i...o..E..4|
-000002a0  1a 18 00 8a 30 81 87 02  42 01 d0 4a 3f 65 9d 46  |....0...B..J?e.F|
-000002b0  20 80 34 28 12 93 56 6e  dc e4 0e 91 0b 45 4b 83  | .4(..Vn.....EK.|
-000002c0  c5 e9 83 2c 41 d6 dc 49  15 15 e6 65 9f 18 ba a6  |...,A..I...e....|
-000002d0  20 a6 de c7 20 7e 09 71  e6 59 86 9e aa 32 be 43  | ... ~.q.Y...2.C|
-000002e0  b7 c3 27 98 ba 5b 49 9b  1d b9 67 02 41 4e 36 0e  |..'..[I...g.AN6.|
-000002f0  6d 29 c8 7d 0b d9 6f 06  92 ca 0b b9 33 7e 11 58  |m).}..o.....3~.X|
-00000300  2f cc 06 ae ad 57 80 f4  38 a1 8a e3 6a ef 37 86  |/....W..8...j.7.|
-00000310  58 1a 59 f9 4a 9a 64 89  5b 7c 8a 7a c5 78 dd b5  |X.Y.J.d.[|.z.x..|
-00000320  6c 96 b8 23 ff fc 88 20  59 0b e9 74 99 b9 16 03  |l..#... Y..t....|
-00000330  01 00 0a 0d 00 00 06 03  01 02 40 00 00 16 03 01  |..........@.....|
-00000340  00 04 0e 00 00 00                                 |......|
+00000270  95 12 07 8f 2a 16 03 01  00 b3 0c 00 00 af 03 00  |....*...........|
+00000280  1d 20 51 4c 6f eb 08 70  52 20 15 78 d3 f8 65 5e  |. QLo..pR .x..e^|
+00000290  0f 59 03 b7 d1 0e e9 7e  be 42 d2 cd f3 57 c6 24  |.Y.....~.B...W.$|
+000002a0  6b 2c 00 89 30 81 86 02  41 7b 1b ec 11 08 f4 8f  |k,..0...A{......|
+000002b0  db 2c c5 1b 33 b2 b0 b4  da 76 b9 a7 78 ed ee 0e  |.,..3....v..x...|
+000002c0  23 5c 4b b0 10 6e 41 12  b9 d4 68 c1 15 ea 70 0a  |#\K..nA...h...p.|
+000002d0  0c 91 c1 8d 4a 4d 41 c1  c3 25 f1 90 ef 95 f3 e1  |....JMA..%......|
+000002e0  a8 30 4d ce 4d d1 eb 8c  cf 9a 02 41 09 e0 8c 8e  |.0M.M......A....|
+000002f0  70 01 f1 5d b2 8a d1 61  bc 86 f4 85 2f 6c ac 2c  |p..]...a..../l.,|
+00000300  e8 bf 20 c7 81 46 21 6e  9b bd c1 83 71 34 8d 65  |.. ..F!n....q4.e|
+00000310  fc 35 07 be c8 ad d4 3a  c6 7b 40 1c f7 17 e3 d9  |.5.....:.{@.....|
+00000320  96 19 d4 cd 0d d0 8c 4f  b2 09 6a 4b 05 16 03 01  |.......O..jK....|
+00000330  00 0a 0d 00 00 06 03 01  02 40 00 00 16 03 01 00  |.........@......|
+00000340  04 0e 00 00 00                                    |.....|
 >>> Flow 3 (client to server)
 00000000  16 03 01 01 fd 0b 00 01  f9 00 01 f6 00 01 f3 30  |...............0|
 00000010  82 01 ef 30 82 01 58 a0  03 02 01 02 02 10 5c 19  |...0..X.......\.|
@@ -107,29 +106,29 @@
 00000200  e5 35 16 03 01 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 01 00  |......._X.;t....|
-00000230  86 0f 00 00 82 00 80 a4  68 2d 1f 8a 97 43 76 aa  |........h-...Cv.|
-00000240  f9 24 95 20 62 13 c0 a3  45 c6 18 1c a3 34 70 02  |.$. b...E....4p.|
-00000250  ff f5 01 4e ba e2 20 1c  f9 06 a6 67 92 d9 e6 9d  |...N.. ....g....|
-00000260  a3 49 e0 75 3e 11 00 74  52 b1 36 58 4b 1e 54 83  |.I.u>..tR.6XK.T.|
-00000270  e0 9a 48 4d df 2c ab fd  cd 5e 7a cf c9 b8 32 08  |..HM.,...^z...2.|
-00000280  74 e6 ae 75 20 f4 41 3a  7c a9 a3 19 38 a0 8d 05  |t..u .A:|...8...|
-00000290  0a e9 3e 50 6c f6 f8 a3  89 a9 55 ea dc 3f be b1  |..>Pl.....U..?..|
-000002a0  0a 92 83 cc f0 9b c9 e1  49 13 db 64 be 55 46 b5  |........I..d.UF.|
-000002b0  12 b1 0b 88 32 e3 f1 14  03 01 00 01 01 16 03 01  |....2...........|
-000002c0  00 30 81 77 0f 6c 7a bc  a8 d2 41 f9 8b a7 da 96  |.0.w.lz...A.....|
-000002d0  29 f1 2f b1 31 f3 57 03  09 21 5c fa dc f7 5c f6  |)./.1.W..!\...\.|
-000002e0  7f a8 24 08 30 70 bb 34  16 22 f8 c6 b2 4d a7 16  |..$.0p.4."...M..|
-000002f0  68 61                                             |ha|
+00000230  86 0f 00 00 82 00 80 59  18 58 aa 18 70 84 a3 26  |.......Y.X..p..&|
+00000240  8c 1d 77 52 a7 2d 00 e5  00 dc 24 1c f6 9b 9f 63  |..wR.-....$....c|
+00000250  c8 84 8b dc e7 61 78 9c  28 0d 4c 3a 1e 5f a7 ce  |.....ax.(.L:._..|
+00000260  35 17 1c b1 de e0 01 32  35 6f 85 59 22 73 50 2a  |5......25o.Y"sP*|
+00000270  36 df 39 0c c8 c1 45 70  a2 e4 53 bb de e6 0e 6a  |6.9...Ep..S....j|
+00000280  fd 45 8e 4d eb 1f de 86  d3 fb 94 e4 8d 22 cd 30  |.E.M.........".0|
+00000290  e7 29 de 65 f0 2a cd b8  3d b5 be 91 a3 7d 3b 30  |.).e.*..=....};0|
+000002a0  1a a5 63 bd 84 1f 95 19  d1 fe 25 40 b8 8f ab 96  |..c.......%@....|
+000002b0  59 42 e6 31 93 c0 39 14  03 01 00 01 01 16 03 01  |YB.1..9.........|
+000002c0  00 30 a9 f7 c0 97 f4 b8  06 65 a6 7c fb 80 a1 79  |.0.......e.|...y|
+000002d0  5f 44 72 55 13 d1 ca e3  9a 91 5d 1e 08 93 6d b5  |_DrU......]...m.|
+000002e0  1c 5e 52 24 b1 ec db aa  3b bc fe db 18 0b 18 fe  |.^R$....;.......|
+000002f0  51 6a                                             |Qj|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 71 d2 ee cd f8  |..........0q....|
-00000010  c5 fe b4 96 d5 02 ee cb  f7 f8 93 34 f2 8a ed 71  |...........4...q|
-00000020  9a b7 1f 01 9d fb 6c 3f  ee 22 bb 5c b0 8c 08 f5  |......l?.".\....|
-00000030  bf 1e d3 1c 12 ec 7b 86  05 bd e5                 |......{....|
+00000000  14 03 01 00 01 01 16 03  01 00 30 e6 36 50 e7 a3  |..........0.6P..|
+00000010  72 0a 6a 9f 18 17 91 51  ad 48 19 54 c8 6b c0 45  |r.j....Q.H.T.k.E|
+00000020  d5 9b cb 08 34 d3 3a 73  74 04 3a 3d 24 b0 95 48  |....4.:st.:=$..H|
+00000030  97 9e c5 83 4f 20 29 c8  dd 93 6c                 |....O )...l|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 8a 57 b3  89 76 41 f0 b3 51 da f4  |.... .W..vA..Q..|
-00000010  e7 6a f8 46 75 77 4d 8b  67 41 f9 f9 eb a0 cd 12  |.j.FuwM.gA......|
-00000020  78 08 12 d1 7b 17 03 01  00 20 9d 44 6a dd 48 ad  |x...{.... .Dj.H.|
-00000030  0a d9 3f 80 da b1 3d b3  50 be 40 c1 85 b5 bb 59  |..?...=.P.@....Y|
-00000040  e8 b9 2a 9f f5 2e 98 d3  2b c1 15 03 01 00 20 bd  |..*.....+..... .|
-00000050  69 41 45 bb 53 de f8 b7  bf a5 87 12 02 32 1a 05  |iAE.S........2..|
-00000060  09 94 40 a5 64 b3 31 7d  0d dc 01 ff 25 ca 31     |..@.d.1}....%.1|
+00000000  17 03 01 00 20 58 a1 0a  68 2c 04 68 7d e9 13 ce  |.... X..h,.h}...|
+00000010  69 4b 53 4a f6 fc e0 c8  0e 05 ad 19 d8 b3 37 67  |iKSJ..........7g|
+00000020  f2 1f 3b 33 62 17 03 01  00 20 c2 e7 d3 d2 38 ba  |..;3b.... ....8.|
+00000030  27 13 ed d1 73 fc 9b f5  4f 61 f0 35 27 8e 54 52  |'...s...Oa.5'.TR|
+00000040  b7 ce bd 6a 05 c6 61 95  1e 8a 15 03 01 00 20 6e  |...j..a....... n|
+00000050  07 21 86 31 f8 74 6b 45  4d 10 2f 5d e7 2b 64 77  |.!.1.tkEM./].+dw|
+00000060  a9 7f 1e 49 ed d5 d4 1e  2e f2 b1 c5 4d 02 46     |...I........M.F|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA
index 37d05fc481914f..48eb1ce6419bfc 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA
+++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 71 32 68 84 f2  |....]...Y..q2h..|
-00000010  93 91 32 5b 71 e6 d1 fd  26 83 00 87 0f 56 f3 8a  |..2[q...&....V..|
-00000020  70 17 5e c9 c3 b3 ce 61  9a 1d 4d 20 85 cc 39 26  |p.^....a..M ..9&|
-00000030  32 1a 78 34 d5 d3 6c e2  df 89 f5 a0 51 2c f5 2d  |2.x4..l.....Q,.-|
-00000040  e0 17 51 e7 51 f4 61 8d  35 72 75 92 c0 13 00 00  |..Q.Q.a.5ru.....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 24 71 03 c6 1d  |....]...Y..$q...|
+00000010  d4 f5 09 b2 3c d8 88 51  57 4c 90 07 4b 74 fe 1d  |....<..QWL..Kt..|
+00000020  c9 7f 00 78 9b a3 b2 1b  ef 43 66 20 07 97 7c a6  |...x.....Cf ..|.|
+00000030  9b c6 a9 47 42 ae 99 bf  59 fe 52 f6 da d9 1c 68  |...GB...Y.R....h|
+00000040  c2 7a 53 3f 27 0d 11 87  9a 47 81 5c c0 13 00 00  |.zS?'....G.\....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,17 +61,17 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 3a 64 e7  |............ :d.|
-000002d0  9a 59 c3 4e fc 40 5e 2f  5c 89 cd e1 94 85 4e 1f  |.Y.N.@^/\.....N.|
-000002e0  29 37 0b 53 fe 3a 13 76  56 25 2a 97 65 00 80 08  |)7.S.:.vV%*.e...|
-000002f0  1c de 63 0d 31 9b 72 7b  85 0c 03 b0 08 ea 80 a1  |..c.1.r{........|
-00000300  ee 00 03 f9 29 a3 ba 8e  c8 71 3e b4 4d b3 28 54  |....)....q>.M.(T|
-00000310  2c e7 11 3a 15 e0 43 06  f0 36 15 50 54 5e 88 48  |,..:..C..6.PT^.H|
-00000320  ac c4 68 db 83 dc 0c 22  e4 99 4a 08 2a 00 7d 19  |..h...."..J.*.}.|
-00000330  0d 74 ba 7a 27 9c 39 dc  29 41 52 cf a2 ac 29 94  |.t.z'.9.)AR...).|
-00000340  e6 b0 87 60 e5 d3 58 af  3e 8e 41 bd be 48 ba 90  |...`..X.>.A..H..|
-00000350  49 b2 b1 d3 8e b0 49 98  4a 12 70 60 c7 57 d9 a7  |I.....I.J.p`.W..|
-00000360  db dc 41 b0 dc 81 37 1b  6d ac 9c 69 12 f4 fa 16  |..A...7.m..i....|
+000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 ad a7 d5  |............ ...|
+000002d0  fc 63 e1 22 f8 1f 8d ad  50 09 1a 92 a4 57 ea 88  |.c."....P....W..|
+000002e0  6d 9c 20 70 f1 8b 85 15  ec 8e b2 b3 07 00 80 b1  |m. p............|
+000002f0  03 03 a7 cf 8f 73 e2 a3  29 0d 55 4a 06 72 db e5  |.....s..).UJ.r..|
+00000300  65 41 44 49 05 1c 37 17  1c 02 6e b1 f4 e8 a9 bb  |eADI..7...n.....|
+00000310  00 24 3e 3a 3c d6 1c f6  dd 21 a4 e3 61 b0 1d 2e  |.$>:<....!..a...|
+00000320  77 11 53 51 4d 49 1e 07  bf 07 61 d1 54 f4 c7 24  |w.SQMI....a.T..$|
+00000330  4f 7d 5c 5a fb 84 c0 9d  0e 52 12 b6 40 72 37 fd  |O}\Z.....R..@r7.|
+00000340  8c bd d0 8a b1 9e 2c 18  bc 04 a3 c2 90 a3 33 4c  |......,.......3L|
+00000350  06 7c 14 a8 73 7d d2 23  30 f9 31 12 56 31 60 19  |.|..s}.#0.1.V1`.|
+00000360  d1 0d 31 c1 3c 25 66 62  5c 9b 13 5e 34 c6 69 16  |..1.<%fb\..^4.i.|
 00000370  03 01 00 0a 0d 00 00 06  03 01 02 40 00 00 16 03  |...........@....|
 00000380  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
@@ -111,29 +110,29 @@
 00000200  e5 35 16 03 01 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 01 00  |......._X.;t....|
-00000230  86 0f 00 00 82 00 80 21  34 0c d8 10 ac 90 53 f9  |.......!4.....S.|
-00000240  18 52 42 05 ca e8 c7 4f  33 c4 43 4b 8e 7c e4 23  |.RB....O3.CK.|.#|
-00000250  21 6d e4 07 ef 3f 06 d1  ea 1c 9d 3b e0 d2 66 36  |!m...?.....;..f6|
-00000260  b5 c9 a1 da fe 54 fd e0  fe 0c b6 12 90 93 41 1f  |.....T........A.|
-00000270  43 00 00 e4 a4 04 14 af  00 3e 1b db 16 d6 07 4b  |C........>.....K|
-00000280  55 2f ed 55 e1 e1 a8 8b  d8 e1 fe cb 41 1d fe bc  |U/.U........A...|
-00000290  6d d9 ba 8f 2b 1c 26 19  9d 93 a9 78 fb 8a 54 59  |m...+.&....x..TY|
-000002a0  76 3b 0a df e6 71 2c c0  63 dd 22 8d c6 70 ef 0e  |v;...q,.c."..p..|
-000002b0  4f 1b 4c da 65 11 f6 14  03 01 00 01 01 16 03 01  |O.L.e...........|
-000002c0  00 30 b5 c2 b0 f3 b6 6c  4a 99 de f2 98 2f 37 2b  |.0.....lJ..../7+|
-000002d0  8a d8 ab 96 91 c2 9b cc  56 5c fb e1 4f 5b 89 09  |........V\..O[..|
-000002e0  5f 94 05 60 0e 83 b5 49  9a 15 9b 0f 5d 1a 2b a2  |_..`...I....].+.|
-000002f0  11 23                                             |.#|
+00000230  86 0f 00 00 82 00 80 59  e2 7d 00 66 f0 59 a0 19  |.......Y.}.f.Y..|
+00000240  b6 4f 26 80 ad 31 b4 b3  c2 56 af 84 bf 88 15 7f  |.O&..1...V......|
+00000250  dc 29 fc 51 f2 cf 0d ec  52 46 c5 c5 cd 24 c1 93  |.).Q....RF...$..|
+00000260  5b f6 06 09 ad bb 9a 4a  ae 5d ec 57 f8 96 a8 b1  |[......J.].W....|
+00000270  4b 81 45 7d 34 38 59 ea  76 47 76 1c 7f 7b 68 e9  |K.E}48Y.vGv..{h.|
+00000280  89 7b 5d 4c b9 bc 5a 26  e1 f7 6c 42 f7 c6 6d bb  |.{]L..Z&..lB..m.|
+00000290  c0 c7 bd f6 5e 9e 51 d8  30 ec 9f da 56 0a b7 2a  |....^.Q.0...V..*|
+000002a0  6c 5e 50 d1 74 48 70 4a  88 62 16 a1 ba f2 01 e5  |l^P.tHpJ.b......|
+000002b0  00 b6 eb cb e3 18 cf 14  03 01 00 01 01 16 03 01  |................|
+000002c0  00 30 61 51 84 02 46 3c  10 62 b5 2a a2 8b 4e 2d  |.0aQ..F<.b.*..N-|
+000002d0  57 55 26 c5 46 f2 5d a1  f5 20 46 0d 63 fd 48 5a  |WU&.F.].. F.c.HZ|
+000002e0  f3 65 90 8c 1a bd 59 6e  5f d1 5c b6 ee 33 49 12  |.e....Yn_.\..3I.|
+000002f0  46 ec                                             |F.|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 63 a2 f0 9b 1c  |..........0c....|
-00000010  48 6d 23 54 62 b1 2a 19  e7 89 51 fd 0d 83 97 87  |Hm#Tb.*...Q.....|
-00000020  9b 73 31 11 5e 42 56 62  62 37 4d e5 e6 72 8a 6d  |.s1.^BVbb7M..r.m|
-00000030  a3 02 2b 2c 9e a5 1a 5c  34 f2 0d                 |..+,...\4..|
+00000000  14 03 01 00 01 01 16 03  01 00 30 b1 3c 7f c3 15  |..........0.<...|
+00000010  e4 fe bc 1a ee 0d ec 28  ce b0 f7 fd a4 0a e4 79  |.......(.......y|
+00000020  37 09 68 de 58 f8 e8 76  7d 9c 09 35 42 7e 00 8e  |7.h.X..v}..5B~..|
+00000030  4c 8d d1 60 26 d4 09 c5  8b d0 96                 |L..`&......|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 63 1a 2c  25 27 68 ed de ba 94 52  |.... c.,%'h....R|
-00000010  73 f2 7a 28 ed 8c e9 3f  a2 48 9a 07 62 22 27 6d  |s.z(...?.H..b"'m|
-00000020  4e be ba e4 67 17 03 01  00 20 1d ee ac 7c fc a7  |N...g.... ...|..|
-00000030  df 74 93 16 c6 ec 58 5e  04 5d 2e 98 0a ba 52 4f  |.t....X^.]....RO|
-00000040  a0 02 c5 79 c3 d6 f0 ab  8d 33 15 03 01 00 20 bb  |...y.....3.... .|
-00000050  54 a6 65 a7 c9 03 e7 83  ae a1 f3 26 9f 73 76 6b  |T.e........&.svk|
-00000060  e6 1e f7 e0 76 e5 ca 9f  c8 87 14 ac 27 f1 e3     |....v.......'..|
+00000000  17 03 01 00 20 6c bb 09  ee 1d 96 6c 63 5b b6 69  |.... l.....lc[.i|
+00000010  bf ea ad 7a 85 36 a2 4b  d2 f0 73 18 91 b1 42 e5  |...z.6.K..s...B.|
+00000020  77 d0 6c ff ab 17 03 01  00 20 ed 85 78 3b bd 49  |w.l...... ..x;.I|
+00000030  2c f3 02 24 f2 18 72 96  a0 49 6b 06 bd bb 54 25  |,..$..r..Ik...T%|
+00000040  0a 3e ff 07 45 6b 6c cc  a6 d2 15 03 01 00 20 07  |.>..Ekl....... .|
+00000050  9a fb b7 cc 01 cd f7 b6  90 d3 b6 a7 31 15 99 e2  |............1...|
+00000060  e7 e8 2b a5 c0 e8 a9 9d  fe 4e 11 0d 4a d4 b7     |..+......N..J..|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES
index a8593e249b0467..ac354c50bc6bea 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 3e 61 ab b7 94  |....]...Y..>a...|
-00000010  d9 7c 76 db 26 b6 fc 86  00 8f c4 af bd c6 1a 22  |.|v.&.........."|
-00000020  dd 72 ce 5d 2a 4c d8 61  a1 20 6b 20 c9 82 ca c9  |.r.]*L.a. k ....|
-00000030  99 59 80 37 6c 01 d2 b3  b5 0d 68 9f 65 b0 15 7d  |.Y.7l.....h.e..}|
-00000040  a6 b0 15 b0 49 5a ae 38  d2 77 5e 06 c0 09 00 00  |....IZ.8.w^.....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 70 d2 b8 0b 74  |....]...Y..p...t|
+00000010  93 b4 60 d7 ab 1d 0f f3  7c d0 b5 f8 a2 78 45 30  |..`.....|....xE0|
+00000020  b1 41 9b b6 73 bd 05 d8  85 16 66 20 e8 26 8d 7a  |.A..s.....f .&.z|
+00000030  e2 da e0 a0 7a c9 19 d1  dd db 2b bc b4 b2 56 39  |....z.....+...V9|
+00000040  9f e6 62 75 29 96 40 b3  0d c0 db 65 c0 09 00 00  |..bu).@....e....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -57,37 +56,37 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 01  00 b5 0c 00 00 b1 03 00  |....*...........|
-00000280  1d 20 73 36 95 70 b0 c6  fd c6 cf 68 f3 77 1e 46  |. s6.p.....h.w.F|
-00000290  c2 22 3e f8 e6 f4 37 82  73 8e 8d ec 40 64 0d a9  |.">...7.s...@d..|
-000002a0  f7 6f 00 8b 30 81 88 02  42 01 2f 8b 24 b7 24 65  |.o..0...B./.$.$e|
-000002b0  6e f8 a3 55 53 3f da 67  a2 b6 35 b3 ef 8b 87 39  |n..US?.g..5....9|
-000002c0  2f 44 e8 a6 9d 2c 16 c1  82 a9 a9 f6 20 0f 1b 36  |/D...,...... ..6|
-000002d0  32 b8 7a 96 2d 5a b0 4d  43 53 ec c9 06 82 83 0e  |2.z.-Z.MCS......|
-000002e0  fb 0b 8c f8 0b 47 b6 dd  19 4c 96 02 42 01 c6 7e  |.....G...L..B..~|
-000002f0  20 9e d9 2f 33 1f 5f 25  bc 79 a3 df 96 9d e0 05  | ../3._%.y......|
-00000300  d7 72 75 29 7d b3 f2 0a  5e 81 39 71 b7 f9 68 e8  |.ru)}...^.9q..h.|
-00000310  82 07 93 80 88 31 77 2c  db 8b 58 49 28 c5 7b c1  |.....1w,..XI(.{.|
-00000320  e3 84 3c b9 08 2e a0 ab  66 12 b9 3c b9 a2 e8 16  |..<.....f..<....|
-00000330  03 01 00 04 0e 00 00 00                           |........|
+00000270  95 12 07 8f 2a 16 03 01  00 b4 0c 00 00 b0 03 00  |....*...........|
+00000280  1d 20 5f 81 8f 18 31 4e  64 fe 87 f2 da c6 45 45  |. _...1Nd.....EE|
+00000290  54 e3 54 c6 a0 bb bf bd  d1 01 c5 7b 08 d8 32 6b  |T.T........{..2k|
+000002a0  a8 31 00 8a 30 81 87 02  42 01 21 7e c2 26 cb 5e  |.1..0...B.!~.&.^|
+000002b0  f1 2a d2 9b 7f 3f b4 d4  28 5e 63 5a 20 aa 28 87  |.*...?..(^cZ .(.|
+000002c0  bb dd 5c 6a 91 a2 2d 03  7a 69 67 8b ca 84 a6 1f  |..\j..-.zig.....|
+000002d0  d3 58 40 eb 5c 54 95 96  05 d0 37 63 e4 a6 1b 51  |.X@.\T....7c...Q|
+000002e0  9a d0 93 31 82 e6 8e a0  af 29 64 02 41 4c ff ac  |...1.....)d.AL..|
+000002f0  44 74 e0 04 2c ab 1c 23  91 dc 06 36 ff 19 a1 60  |Dt..,..#...6...`|
+00000300  19 d4 e5 d3 78 f5 ed d8  09 7b de 61 6f 65 2c 69  |....x....{.aoe,i|
+00000310  a1 d2 5d 07 bf 99 26 2b  70 fa 34 26 30 41 59 3b  |..]...&+p.4&0AY;|
+00000320  bc a3 10 9c 92 fa 60 a7  df ea e4 8a 3a 76 16 03  |......`.....:v..|
+00000330  01 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
 00000000  16 03 01 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 01 00 01 01  |....._X.;t......|
-00000030  16 03 01 00 30 9a 24 ee  81 ee 6e b3 fe ab 63 04  |....0.$...n...c.|
-00000040  ae b1 1b 11 91 b0 cc 45  b8 67 74 9e 92 15 fd b1  |.......E.gt.....|
-00000050  b4 49 49 b4 f4 a5 61 01  1b ec 91 23 ec c0 98 8d  |.II...a....#....|
-00000060  ee 21 fd 29 95                                    |.!.).|
+00000030  16 03 01 00 30 6d 2a 91  d7 c3 8f 1c d8 d4 cc 67  |....0m*........g|
+00000040  ed 07 41 c2 9c 48 0d bd  7f 11 61 00 58 23 55 88  |..A..H....a.X#U.|
+00000050  f9 bd da 92 bc e4 8d 47  c0 ac 72 43 7f 2d 0f b5  |.......G..rC.-..|
+00000060  de bb 67 6e 9f                                    |..gn.|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 74 d2 f1 68 1e  |..........0t..h.|
-00000010  1e 11 8a eb 51 ae a6 19  af 60 09 c4 85 65 3e 71  |....Q....`...e>q|
-00000020  af d0 94 14 c3 80 18 91  72 23 97 26 f8 91 2f d6  |........r#.&../.|
-00000030  65 3c 02 06 10 d0 bb e7  92 57 b0                 |e<.......W.|
+00000000  14 03 01 00 01 01 16 03  01 00 30 be 25 a7 fa 04  |..........0.%...|
+00000010  a5 dd 58 c1 5f a6 31 f8  fc fc db 27 a1 c7 0b 7c  |..X._.1....'...||
+00000020  a5 9a 0f bd 07 09 d9 9b  95 bf f4 a5 80 c7 7d bd  |..............}.|
+00000030  a0 37 25 68 46 63 37 37  5f 3d b2                 |.7%hFc77_=.|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 bf f3 92  9c 91 50 02 1e d2 29 17  |.... .....P...).|
-00000010  2c 5d 5f 43 c9 de 49 db  7b 0b bf eb 77 c5 9a 37  |,]_C..I.{...w..7|
-00000020  c7 e1 c3 83 a3 17 03 01  00 20 df 80 0b 7e 80 39  |......... ...~.9|
-00000030  b3 46 d8 7c 09 7a a8 c1  3a 04 77 2f 94 30 eb 8e  |.F.|.z..:.w/.0..|
-00000040  5d 56 08 95 bb 50 80 76  4b e7 15 03 01 00 20 0e  |]V...P.vK..... .|
-00000050  91 ba 25 bb d6 f6 ee 42  e0 8e 08 a1 7f d5 8f e3  |..%....B........|
-00000060  18 05 85 24 b6 0c 81 80  98 89 ae 2c 04 0e 8a     |...$.......,...|
+00000000  17 03 01 00 20 98 6e bd  0c 0e 46 88 05 6d 67 b3  |.... .n...F..mg.|
+00000010  a7 92 7a 3c f2 98 8b ab  07 9e 80 bc 7a 5e 70 1a  |..z<........z^p.|
+00000020  2b 3d 2f 28 c9 17 03 01  00 20 f1 a8 ac 45 f6 60  |+=/(..... ...E.`|
+00000030  ac 76 4e 66 1b a1 23 65  9c 55 6b 0b d4 cb 0a 43  |.vNf..#e.Uk....C|
+00000040  42 d1 1e 1b 61 45 16 8e  a8 c2 15 03 01 00 20 3d  |B...aE........ =|
+00000050  c0 ac 27 49 be 69 0e 23  cd 1b ea 01 0f 97 66 34  |..'I.i.#......f4|
+00000060  f8 bd a6 40 35 af 5b 1f  cf 42 25 54 aa 2f 2e     |...@5.[..B%T./.|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES
index b73fd761c46d7e..694cd4ce89273d 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 79 f2 d6 96 d6  |....]...Y..y....|
-00000010  6d c9 a1 7a 04 ba 6d 7d  29 8d 91 3f 8e 2e 17 0f  |m..z..m})..?....|
-00000020  c8 c4 3a e1 3c 64 00 28  f8 21 9d 20 16 7b 80 30  |..:...|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 69 9e db  |............ i..|
-000002d0  5f 4b 5e 7d 1e 00 1e 91  a6 49 81 e3 d9 ee ea 5e  |_K^}.....I.....^|
-000002e0  5c 40 f0 68 fd dd eb 6e  e4 85 58 91 70 00 80 8e  |\@.h...n..X.p...|
-000002f0  d6 64 01 3a 56 c2 58 5c  60 28 bc f6 bd 1e bf 73  |.d.:V.X\`(.....s|
-00000300  21 b8 1a ea fb c2 df d5  f1 b9 4d d7 6f 1c 8b 24  |!.........M.o..$|
-00000310  99 35 a5 ef 20 75 00 3e  83 34 da 40 4e ec e3 43  |.5.. u.>.4.@N..C|
-00000320  04 a4 f2 1e bb 97 23 3e  21 32 88 43 80 99 ec 43  |......#>!2.C...C|
-00000330  66 c3 09 87 1e e2 ad bb  c3 1c db f7 9a 59 3a a8  |f............Y:.|
-00000340  46 43 b6 3d 9a 6e c3 42  5b 1a 7d 85 dc db 96 cc  |FC.=.n.B[.}.....|
-00000350  8d 06 cc 08 d2 f0 09 c3  c6 ed 5f 3b f6 b0 a3 69  |.........._;...i|
-00000360  6c a8 9a a5 ef ad 59 c1  07 96 e8 34 1d f0 d9 16  |l.....Y....4....|
+000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 a7 ec f4  |............ ...|
+000002d0  c7 51 5e a0 fb 55 5a 01  34 cc d1 a6 22 df d6 00  |.Q^..UZ.4..."...|
+000002e0  f5 73 e0 9e b8 9d 2a a9  49 3a 99 ba 17 00 80 14  |.s....*.I:......|
+000002f0  95 47 77 a1 48 b4 e7 ba  6a e8 0e 4e ee 55 25 f5  |.Gw.H...j..N.U%.|
+00000300  ea 82 65 b4 3f db a2 94  03 cc d3 6c 4a e6 cf 57  |..e.?......lJ..W|
+00000310  25 4c 79 b8 fb ab dd 1f  68 e4 55 87 b1 46 12 30  |%Ly.....h.U..F.0|
+00000320  5e 9f 3d 4a 52 24 76 50  c8 54 83 a2 b9 f5 a6 e0  |^.=JR$vP.T......|
+00000330  ec e1 fb ae dd ca d2 c9  b2 31 d5 d4 73 f4 c0 0a  |.........1..s...|
+00000340  29 1c d3 8e 87 4c b4 0a  37 e8 77 e4 e2 a7 e9 9c  |)....L..7.w.....|
+00000350  04 ba af 31 dc 2e 5a b3  2e f3 58 e6 21 0a e2 1c  |...1..Z...X.!...|
+00000360  d4 c6 be b1 70 83 22 05  f8 78 12 6e bd 53 22 16  |....p."..x.n.S".|
 00000370  03 01 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
 00000000  16 03 01 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 01 00 01 01  |....._X.;t......|
-00000030  16 03 01 00 30 d1 17 2f  22 e5 fa 78 a0 b3 d3 22  |....0../"..x..."|
-00000040  ab cb d2 54 52 e6 b2 74  11 bd 3c 69 9a 71 e8 69  |...TR..t..>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 d1 2e 43 5c f7  |..........0..C\.|
-00000010  fc 5f 96 b7 e6 84 60 08  aa b3 22 d1 d9 e2 f3 4d  |._....`..."....M|
-00000020  c8 44 62 9b fa 0e 18 7c  84 fe 1e 75 09 4a f4 94  |.Db....|...u.J..|
-00000030  67 03 91 79 90 26 70 2d  0e 97 6a                 |g..y.&p-..j|
+00000000  14 03 01 00 01 01 16 03  01 00 30 d0 aa 00 27 9e  |..........0...'.|
+00000010  fb 56 22 9f 65 ab 3c cf  34 d9 a0 92 08 62 f2 fe  |.V".e.<.4....b..|
+00000020  29 4b 0c 14 b0 72 f5 c0  f8 2b 7e 1f 38 ad 68 7e  |)K...r...+~.8.h~|
+00000030  37 c3 fb 26 5a 5b 42 39  83 33 c0                 |7..&Z[B9.3.|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 c9 ce 68  cc e9 a7 f7 1f 3c 19 76  |.... ..h.....<.v|
-00000010  4e a6 2d 64 86 4d 35 9b  5e 5b 8b c7 a1 15 d9 d4  |N.-d.M5.^[......|
-00000020  5e 59 67 df 4d 17 03 01  00 20 26 09 76 e2 16 41  |^Yg.M.... &.v..A|
-00000030  a3 7f 3e 8e cc 75 ab a0  cf e1 42 8d 3c 51 d4 bb  |..>..u....B.>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 5d 02 00 00  59 03 01 97 c9 b8 e6 c1  |....]...Y.......|
-00000010  0e b3 68 29 30 ed ff df  a6 f3 cd b7 e0 80 a9 76  |..h)0..........v|
-00000020  84 1b 45 bb 42 29 e0 c8  7f 52 4b 20 95 97 03 66  |..E.B)...RK ...f|
-00000030  6b 45 44 7c 5d 4b 9e 47  fc 72 53 5d 3c 8a 28 6e  |kED|]K.G.rS]<.(n|
-00000040  bc 40 6d c3 96 67 f9 f2  72 ec 6d 0d c0 13 00 00  |.@m..g..r.m.....|
+00000000  16 03 01 00 5d 02 00 00  59 03 01 6f 36 7b f5 f4  |....]...Y..o6{..|
+00000010  3b 49 31 64 aa 42 a7 8c  a2 4d 00 a7 9c b9 b6 9c  |;I1d.B...M......|
+00000020  0d 2f 09 81 e8 ab 74 77  11 fe 0b 20 e0 b9 92 4d  |./....tw... ...M|
+00000030  e2 70 fd 58 ec 58 02 f2  b3 44 d2 3d 7f c9 ad ca  |.p.X.X...D.=....|
+00000040  5c 78 fe f9 36 67 a8 b7  a8 0f 7a 1a c0 13 00 00  |\x..6g....z.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 01 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,36 +61,36 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 15 0b 17  |............ ...|
-000002d0  fd fb 69 3e 44 71 3c 68  b2 6a 99 9e 8c 57 ba e8  |..i>Dq.$.`....9...Z|
-00000300  12 2c c9 3e a7 db 25 ab  32 32 e4 79 9e 0a 9f 98  |.,.>..%.22.y....|
-00000310  99 cd be b3 28 34 40 e1  78 3e 3d 20 35 74 79 7f  |....(4@.x>= 5ty.|
-00000320  f6 c5 5d 4c 54 30 1d 64  31 49 78 bd a2 cb 62 5a  |..]LT0.d1Ix...bZ|
-00000330  89 1a bf 65 bf 7f 1c ff  7d 61 6c 7d d2 76 8c 9e  |...e....}al}.v..|
-00000340  e4 80 56 7d 96 79 48 36  ca c0 99 db 9b ea 3a e7  |..V}.yH6......:.|
-00000350  a7 fe cb ed d8 3b 34 8c  be d5 ee be 59 d5 e2 5f  |.....;4.....Y.._|
-00000360  59 17 f3 57 29 eb c8 0e  ed 1a 06 79 c0 3c 16 16  |Y..W)......y.<..|
+000002c0  16 03 01 00 aa 0c 00 00  a6 03 00 1d 20 10 69 5f  |............ .i_|
+000002d0  db e5 a8 1f 14 81 0c c7  35 d4 3c 22 ee 17 a3 21  |........5.<"...!|
+000002e0  47 9b e2 3c 5a f6 f5 46  b9 73 2a 7f 62 00 80 49  |G..ukv.........Mf|
+00000340  57 70 1a 4c 21 27 7f c8  69 f4 f4 83 5c 44 32 b4  |Wp.L!'..i...\D2.|
+00000350  73 18 a3 c4 4a c1 71 92  04 7a 49 49 15 25 05 a0  |s...J.q..zII.%..|
+00000360  61 69 f8 38 4b 9f 92 96  f4 6b 6b 4b 96 60 45 16  |ai.8K....kkK.`E.|
 00000370  03 01 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
 00000000  16 03 01 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 01 00 01 01  |....._X.;t......|
-00000030  16 03 01 00 30 c6 d7 ad  2c 52 90 50 3c 50 ec 66  |....0...,R.P./!...pt...|
+00000050  36 86 78 08 ea 8f 02 29  e6 a6 71 fa ad 7f c6 97  |6.x....)..q.....|
+00000060  54 6f 88 a3 4b                                    |To..K|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 30 8c a1 03 f1 fb  |..........0.....|
-00000010  fe f8 1b 43 7b fb 10 59  c3 ed b3 34 b9 74 e1 89  |...C{..Y...4.t..|
-00000020  7f 5c 9b 81 b1 4f 13 bf  67 c5 87 92 31 96 7f e7  |.\...O..g...1...|
-00000030  35 7b b0 da 2c 79 2e be  43 f4 cf                 |5{..,y..C..|
+00000000  14 03 01 00 01 01 16 03  01 00 30 af 26 01 47 8a  |..........0.&.G.|
+00000010  a3 08 b2 79 1c fe fa 91  e8 4b a6 e1 ad 8e 59 b7  |...y.....K....Y.|
+00000020  ea 41 ee 3e 3a aa 2f f2  07 9e 0d 90 3d 6f 92 d5  |.A.>:./.....=o..|
+00000030  72 92 ad ae ee c8 5d 48  a0 25 46                 |r.....]H.%F|
 >>> Flow 5 (client to server)
-00000000  17 03 01 00 20 61 e8 5a  b2 15 88 f2 f9 e2 09 61  |.... a.Z.......a|
-00000010  53 a5 7f 79 4b e8 c7 8d  a9 5d 29 bf b9 0a 1d f7  |S..yK....]).....|
-00000020  90 9f 3b 89 39 17 03 01  00 20 86 93 3b 08 7f 77  |..;.9.... ..;..w|
-00000030  55 e5 51 06 ca 0e 80 96  9d 40 73 55 45 18 28 c7  |U.Q......@sUE.(.|
-00000040  54 6a d8 15 d7 67 1e 4b  52 1e 15 03 01 00 20 56  |Tj...g.KR..... V|
-00000050  d8 23 be 5a 8a a8 a4 8f  13 2f f0 34 24 90 96 87  |.#.Z...../.4$...|
-00000060  59 48 3f 76 77 47 d5 eb  4d cb 80 00 bc 11 cf     |YH?vwG..M......|
+00000000  17 03 01 00 20 29 2b 6a  75 2b 1b 94 f4 cb 80 14  |.... )+ju+......|
+00000010  16 91 ec 08 77 5a 08 45  e7 51 2e a2 ec 03 f0 ca  |....wZ.E.Q......|
+00000020  35 88 20 3a 2e 17 03 01  00 20 59 0c 48 6f 66 8e  |5. :..... Y.Hof.|
+00000030  88 62 90 cc 33 39 62 ce  96 28 d0 2f 40 6e ed 14  |.b..39b..(./@n..|
+00000040  94 72 88 d8 4a cb 73 24  a9 01 15 03 01 00 20 5c  |.r..J.s$...... \|
+00000050  8a 91 45 ed c9 38 e7 1d  71 02 b8 30 bf 24 0e 30  |..E..8..q..0.$.0|
+00000060  6d fa 0a 4a 39 9f 56 b2  04 99 3e 67 bd bc d9     |m..J9.V...>g...|
diff --git a/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4
index c217b1112ac1ff..8fce559c72b8b7 100644
--- a/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4
+++ b/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 01 00 55 02 00 00  51 03 01 6a dd d7 0d bb  |....U...Q..j....|
-00000010  bd b4 9c de 87 94 32 27  fa 4b 66 e0 8b 95 f2 11  |......2'.Kf.....|
-00000020  a0 a5 30 15 34 6f 76 6b  f7 23 ec 20 ef 7d 52 7d  |..0.4ovk.#. .}R}|
-00000030  2c 3b 30 1b f2 16 e7 8f  b6 62 64 79 51 5b 31 36  |,;0......bdyQ[16|
-00000040  b7 59 b1 f9 d5 26 d6 21  94 ff 7f bd 00 05 00 00  |.Y...&.!........|
+00000000  16 03 01 00 55 02 00 00  51 03 01 9b 6a cd e3 08  |....U...Q...j...|
+00000010  29 e7 32 d1 53 14 f5 4a  cf b7 61 1a 90 d6 9a 73  |).2.S..J..a....s|
+00000020  ad 48 2a 08 ce d7 d7 cb  f8 25 b1 20 c1 24 61 85  |.H*......%. .$a.|
+00000030  31 d2 81 5e 8e c8 31 40  56 36 79 af bb f7 90 d3  |1..^..1@V6y.....|
+00000040  06 5e 4b 5a 62 50 c0 d5  89 7f 35 70 00 05 00 00  |.^KZbP....5p....|
 00000050  09 ff 01 00 01 00 00 17  00 00 16 03 01 02 59 0b  |..............Y.|
 00000060  00 02 55 00 02 52 00 02  4f 30 82 02 4b 30 82 01  |..U..R..O0..K0..|
 00000070  b4 a0 03 02 01 02 02 09  00 e8 f0 9d 3f e2 5b ea  |............?.[.|
@@ -73,15 +72,15 @@
 00000060  c5 70 0f 08 83 48 e9 48  ef 6e 50 8b 05 7e e5 84  |.p...H.H.nP..~..|
 00000070  25 fa 55 c7 ae 31 02 27  00 ef 3f 98 86 20 12 89  |%.U..1.'..?.. ..|
 00000080  91 59 28 b4 f7 d7 af d2  69 61 35 14 03 01 00 01  |.Y(.....ia5.....|
-00000090  01 16 03 01 00 24 0e 49  42 d7 a8 ca 08 09 a6 63  |.....$.IB......c|
-000000a0  0f b1 4b 06 30 37 5e cb  3a c8 d6 ce f9 9c bf 2f  |..K.07^.:....../|
-000000b0  4a c1 c7 fb 2e 02 a6 b0  de ed                    |J.........|
+00000090  01 16 03 01 00 24 b3 7b  e6 d1 8f 79 04 e2 42 0f  |.....$.{...y..B.|
+000000a0  61 de d2 be 1e 4d 8f d4  6f 7e 2d 59 cf 23 ff 1e  |a....M..o~-Y.#..|
+000000b0  74 ea 2a 9c 7e e2 5b 23  05 2e                    |t.*.~.[#..|
 >>> Flow 4 (server to client)
-00000000  14 03 01 00 01 01 16 03  01 00 24 ea 96 7b ce ae  |..........$..{..|
-00000010  69 a8 0d 6d 0c af a7 4f  5f 27 8d 2a 99 38 18 5a  |i..m...O_'.*.8.Z|
-00000020  f4 4f 67 56 0a 6a f5 fc  f5 ee a0 44 01 b0 d0     |.OgV.j.....D...|
+00000000  14 03 01 00 01 01 16 03  01 00 24 3c 4e 68 82 8f  |..........$>> Flow 5 (client to server)
-00000000  17 03 01 00 1a d3 71 0b  8e 0d d4 e0 06 04 e2 30  |......q........0|
-00000010  59 2c fe 84 81 45 1c e4  59 90 b1 b1 11 85 cb 15  |Y,...E..Y.......|
-00000020  03 01 00 16 ad 5d 98 96  4e 9d 83 af b0 50 64 77  |.....]..N....Pdw|
-00000030  62 a1 2b 1a 63 59 16 9e  60 da                    |b.+.cY..`.|
+00000000  17 03 01 00 1a e0 a4 39  3c 9c 5c 8e 60 db 8e 5c  |.......9<.\.`..\|
+00000010  13 aa 60 4a 1c f0 71 1b  f2 4d a9 f8 52 07 bd 15  |..`J..q..M..R...|
+00000020  03 01 00 16 9e f3 0a 66  42 77 5a 75 74 18 85 f1  |.......fBwZut...|
+00000030  3c fb ea d4 b8 76 6d eb  48 3d                    |<....vm.H=|
diff --git a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES
index dbaefe8eb36ee7..0ad2db05758870 100644
--- a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 02 00 5d 02 00 00  59 03 02 14 c4 6e 18 e9  |....]...Y....n..|
-00000010  5b 74 0d 7f 05 01 75 e3  a3 af 90 f0 ea e3 a8 f0  |[t....u.........|
-00000020  6e b5 7d 29 97 4d f3 7e  e9 06 20 20 ba 37 13 9f  |n.}).M.~..  .7..|
-00000030  4e dd 10 6d 52 96 14 d0  93 3b 99 5b c2 cd f3 9c  |N..mR....;.[....|
-00000040  48 c1 12 78 c2 e5 e7 9d  a1 d6 b4 da c0 09 00 00  |H..x............|
+00000000  16 03 02 00 5d 02 00 00  59 03 02 51 70 ac 24 75  |....]...Y..Qp.$u|
+00000010  53 94 02 c6 20 8e 22 0d  b2 79 30 3b ee a1 00 44  |S... ."..y0;...D|
+00000020  f3 1c b8 a3 4c 51 c4 d9  30 95 d4 20 ca 82 67 4f  |....LQ..0.. ..gO|
+00000030  8c 13 5f c2 7e fc e0 0c  04 5c e2 9a c2 a3 02 a1  |.._.~....\......|
+00000040  bc fa ca 16 38 83 2e 5a  c1 75 19 67 c0 09 00 00  |....8..Z.u.g....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 02 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -58,38 +57,38 @@
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
 00000270  95 12 07 8f 2a 16 03 02  00 b5 0c 00 00 b1 03 00  |....*...........|
-00000280  1d 20 d1 90 13 d3 6d b1  e1 ec a3 e1 8b a1 d6 a6  |. ....m.........|
-00000290  40 ac 8e cf 6e 42 06 7d  a8 80 9a 9e a8 06 00 84  |@...nB.}........|
-000002a0  69 1f 00 8b 30 81 88 02  42 01 b6 ba 66 1c de c4  |i...0...B...f...|
-000002b0  8b a1 4a a7 0e f5 cb aa  5c 76 65 59 ba bb e2 7f  |..J.....\veY....|
-000002c0  a5 ee 91 26 77 40 e9 5d  25 73 5a d6 f9 b4 aa ac  |...&w@.]%sZ.....|
-000002d0  c8 bd 2b a4 95 b3 ef e0  c7 bb f1 d0 5e da 76 34  |..+.........^.v4|
-000002e0  a4 34 5b 6c d6 c8 3b 13  b1 d0 12 02 42 01 e1 18  |.4[l..;.....B...|
-000002f0  d5 90 79 c5 06 00 6b 7a  86 19 e0 2f 67 49 db 9e  |..y...kz.../gI..|
-00000300  4a 74 07 30 51 15 7b a1  01 89 9c 94 d8 17 18 a6  |Jt.0Q.{.........|
-00000310  31 aa fb 4b 57 24 52 00  41 1d cc 36 89 6e b4 ed  |1..KW$R.A..6.n..|
-00000320  fc 23 33 63 dd 94 3b 40  6f f1 af d7 78 27 0c 16  |.#3c..;@o...x'..|
+00000280  1d 20 4a 31 cd 48 ea 05  09 8a 6d 78 c5 46 5d ea  |. J1.H....mx.F].|
+00000290  fb aa 62 79 17 70 31 5e  5a 95 c1 ce a9 52 3e 8e  |..by.p1^Z....R>.|
+000002a0  a1 7b 00 8b 30 81 88 02  42 01 e1 c6 99 40 d7 9f  |.{..0...B....@..|
+000002b0  15 41 f4 4f 54 5f 5d 14  bd a6 cc 18 6e 67 98 ab  |.A.OT_].....ng..|
+000002c0  6a 33 9d 54 68 94 2a 89  22 66 2d 20 97 e7 53 c9  |j3.Th.*."f- ..S.|
+000002d0  f8 ee ad 64 46 6e 53 1d  d6 57 55 6a 4c bc 37 1f  |...dFnS..WUjL.7.|
+000002e0  e7 9c c4 bb 23 cb af 27  2a 19 94 02 42 01 35 b4  |....#..'*...B.5.|
+000002f0  a1 f0 c2 6d 34 f0 05 a7  25 9a 22 6c 3e 41 e7 a0  |...m4...%."l>A..|
+00000300  1e 8f 5a 28 b1 5a 88 46  48 7e 40 93 f2 38 9d 33  |..Z(.Z.FH~@..8.3|
+00000310  6b b5 92 ed 6d 44 07 03  c8 77 ee 3a 80 37 1e f9  |k...mD...w.:.7..|
+00000320  4d 5c 2b 6d c5 15 07 b2  7c eb c5 f5 c5 14 dd 16  |M\+m....|.......|
 00000330  03 02 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
 00000000  16 03 02 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 02 00 01 01  |....._X.;t......|
 00000030  16 03 02 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000040  00 00 00 00 00 bd f5 0b  25 31 b7 e6 3f 74 dc 39  |........%1..?t.9|
-00000050  c8 a4 f5 3f 78 f5 6f 66  1b 59 53 51 40 d2 e1 14  |...?x.of.YSQ@...|
-00000060  56 96 ea 1f 08 30 3f 66  ca e4 e4 a0 b5 9f 60 9b  |V....0?f......`.|
-00000070  f8 b0 c7 b8 79                                    |....y|
+00000040  00 00 00 00 00 40 aa 15  c7 e0 2e f6 9e e8 aa 92  |.....@..........|
+00000050  81 6d 83 8f 13 7e 7c d5  9f b9 bf ca 5d da fd 3c  |.m...~|.....]..<|
+00000060  ba c7 8e 8e 9a 93 86 21  49 15 04 9d b8 75 c1 fe  |.......!I....u..|
+00000070  5b a6 41 d5 46                                    |[.A.F|
 >>> Flow 4 (server to client)
-00000000  14 03 02 00 01 01 16 03  02 00 40 68 2d 60 78 1b  |..........@h-`x.|
-00000010  a7 b8 28 3a 2b f5 cd b8  ef 4e 8e ab 3c d5 67 7b  |..(:+....N..<.g{|
-00000020  1f 29 9e 59 de ca 43 3a  4c 0c f5 70 43 cb 0b 40  |.).Y..C:L..pC..@|
-00000030  69 a3 7c f7 1a 3b 48 2f  b8 a2 7c b4 4a 03 36 2a  |i.|..;H/..|.J.6*|
-00000040  24 c9 78 9a 06 6e 18 2e  4a c0 54                 |$.x..n..J.T|
+00000000  14 03 02 00 01 01 16 03  02 00 40 ba a7 6d aa 40  |..........@..m.@|
+00000010  b5 94 f8 d6 84 38 7c 19  7f b9 e9 8b 0f a8 db 4c  |.....8|........L|
+00000020  68 cf 1e d4 e0 b2 7c 78  80 76 18 c7 a5 cf 57 2d  |h.....|x.v....W-|
+00000030  1e 3d 17 b2 ce 44 93 76  38 91 4b d0 7f 09 00 2f  |.=...D.v8.K..../|
+00000040  c2 da c7 32 70 de fd cb  a4 99 90                 |...2p......|
 >>> Flow 5 (client to server)
 00000000  17 03 02 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 f6 ff 38  da 12 09 78 fe de fb 0f  |.......8...x....|
-00000020  ea d3 5a d8 57 65 73 78  41 2d 0b 1b a4 8d f6 e7  |..Z.WesxA-......|
-00000030  ed 58 97 c9 ea 15 03 02  00 30 00 00 00 00 00 00  |.X.......0......|
-00000040  00 00 00 00 00 00 00 00  00 00 7d 4a 10 43 93 8a  |..........}J.C..|
-00000050  6d d2 50 34 92 22 24 f6  7a 9a c4 1f 57 e8 6d f8  |m.P4."$.z...W.m.|
-00000060  74 c4 cb 8b e0 4d 99 dd  ce 0a                    |t....M....|
+00000010  00 00 00 00 00 86 40 c2  e7 d4 56 43 6b e0 e4 96  |......@...VCk...|
+00000020  41 74 2e b1 65 cd c6 93  06 71 f0 25 20 21 c5 1b  |At..e....q.% !..|
+00000030  d2 ea eb e4 06 15 03 02  00 30 00 00 00 00 00 00  |.........0......|
+00000040  00 00 00 00 00 00 00 00  00 00 1e a9 c0 dc d8 23  |...............#|
+00000050  f2 08 b0 c5 b2 2e 53 9b  23 50 8a 02 c6 41 9a 36  |......S.#P...A.6|
+00000060  59 b1 23 d9 5e 91 45 cf  1b a1                    |Y.#.^.E...|
diff --git a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES
index d0093da76c9ec5..83c7d77102fd2a 100644
--- a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 02 00 5d 02 00 00  59 03 02 3d 12 00 a1 c0  |....]...Y..=....|
-00000010  6f b2 13 96 d8 c3 b6 4e  81 60 03 60 fa 9a 4b 54  |o......N.`.`..KT|
-00000020  a9 1d e3 e9 10 e6 8d 84  e3 af 76 20 7c 6d 5c 41  |..........v |m\A|
-00000030  f6 19 49 92 b0 d2 1d 74  22 5d 6a 3f c6 5e 77 c0  |..I....t"]j?.^w.|
-00000040  c4 bb 31 2d 62 8d 7b 5c  66 6d c4 94 c0 13 00 00  |..1-b.{\fm......|
+00000000  16 03 02 00 5d 02 00 00  59 03 02 79 2f de f0 f3  |....]...Y..y/...|
+00000010  97 6a 5e e3 07 66 d9 f2  8b e9 be 1a 97 9f 6d c8  |.j^..f........m.|
+00000020  9d b5 88 57 fc 8c 5d 7f  d7 3e 34 20 e5 4c 51 33  |...W..]..>4 .LQ3|
+00000030  52 23 a0 52 77 ca 41 4a  1b e4 22 fb 1c 82 f8 e4  |R#.Rw.AJ..".....|
+00000040  aa 13 c2 1a ce cd d5 42  de b0 e9 10 c0 13 00 00  |.......B........|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 02 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,38 +61,38 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 02 00 aa 0c 00 00  a6 03 00 1d 20 73 f2 57  |............ s.W|
-000002d0  12 5a 50 bb 9d 2d 14 f0  ca ee c1 41 bf da 9e 8e  |.ZP..-.....A....|
-000002e0  d5 a9 25 c3 84 07 e7 5c  35 87 8b 70 3d 00 80 d3  |..%....\5..p=...|
-000002f0  86 1b 82 48 5c 14 9b cf  e4 a0 2b 24 bc 8c ad e9  |...H\.....+$....|
-00000300  7c 1e 4f da c2 22 10 91  76 47 bc 9f 64 ca 1c 69  ||.O.."..vG..d..i|
-00000310  77 c0 c7 2c 50 ea 1a 07  d0 8c ec da aa ed 82 9d  |w..,P...........|
-00000320  a5 6c d6 27 05 f8 24 19  f9 d4 b1 c6 e3 0f 49 6f  |.l.'..$.......Io|
-00000330  e4 47 25 9a 36 f1 d3 ed  b1 b5 a0 cc 66 50 75 64  |.G%.6.......fPud|
-00000340  97 ee 3c 65 84 1b 62 f8  1a 8f 02 5a d4 2c 49 b3  |..>> Flow 3 (client to server)
 00000000  16 03 02 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 02 00 01 01  |....._X.;t......|
 00000030  16 03 02 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000040  00 00 00 00 00 93 60 ad  fa 30 93 3e 31 6d 2c 0c  |......`..0.>1m,.|
-00000050  21 3d 6a 53 b1 51 f9 a9  1f 74 ee 42 7a 90 8a 08  |!=jS.Q...t.Bz...|
-00000060  9e a0 7f 42 19 c4 28 06  77 bb 32 c1 a0 0d ec 71  |...B..(.w.2....q|
-00000070  4f 20 89 c1 7d                                    |O ..}|
+00000040  00 00 00 00 00 34 fa 43  0a 6f 38 d0 80 5d a1 d6  |.....4.C.o8..]..|
+00000050  61 c9 62 a9 b2 14 88 b4  7d b9 dc 20 93 11 27 37  |a.b.....}.. ..'7|
+00000060  5a 2a 5b d4 10 54 75 23  8d 39 4a 5b 51 80 48 f2  |Z*[..Tu#.9J[Q.H.|
+00000070  16 64 e5 90 38                                    |.d..8|
 >>> Flow 4 (server to client)
-00000000  14 03 02 00 01 01 16 03  02 00 40 fb 97 d9 4a c6  |..........@...J.|
-00000010  10 21 6f 7b 77 ba e0 41  b2 50 d3 8c df 54 b1 9f  |.!o{w..A.P...T..|
-00000020  98 55 e7 0e fb bd 25 67  fb fb 5a 5c 86 b8 f0 17  |.U....%g..Z\....|
-00000030  2b 56 b3 81 21 45 58 98  38 63 24 0a ec aa 17 55  |+V..!EX.8c$....U|
-00000040  8c 46 67 a6 44 57 00 8d  49 83 28                 |.Fg.DW..I.(|
+00000000  14 03 02 00 01 01 16 03  02 00 40 f8 77 bf c0 dd  |..........@.w...|
+00000010  11 e1 3f 90 e0 1a c0 dc  a6 6a b2 81 9b 1b 63 bc  |..?......j....c.|
+00000020  42 b6 23 b2 1f 95 36 38  56 f8 a4 e4 c1 c9 6f d2  |B.#...68V.....o.|
+00000030  64 16 13 16 b7 25 53 ec  a1 c2 94 de 8d ae 38 b9  |d....%S.......8.|
+00000040  07 29 42 1d 16 3d fb 29  8b 76 15                 |.)B..=.).v.|
 >>> Flow 5 (client to server)
 00000000  17 03 02 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 e7 87 56  3d 84 0b 17 94 41 94 67  |.......V=....A.g|
-00000020  48 ff 0f e4 2d a9 1c 7a  68 fc 42 36 17 27 b0 66  |H...-..zh.B6.'.f|
-00000030  af 97 25 90 a2 15 03 02  00 30 00 00 00 00 00 00  |..%......0......|
-00000040  00 00 00 00 00 00 00 00  00 00 55 a4 8a bc 52 98  |..........U...R.|
-00000050  07 3a dd 7a dc 4f 2c 8d  f2 1b f0 76 09 ca 88 36  |.:.z.O,....v...6|
-00000060  d4 fa f9 f4 b7 2e ce 6e  26 82                    |.......n&.|
+00000010  00 00 00 00 00 59 ac 45  2f 3f 3b d3 5d 73 08 85  |.....Y.E/?;.]s..|
+00000020  9a 0e 99 a2 ad 8d 4e de  52 e9 5b 8b 76 71 5d 5e  |......N.R.[.vq]^|
+00000030  6b ec 05 24 a5 15 03 02  00 30 00 00 00 00 00 00  |k..$.....0......|
+00000040  00 00 00 00 00 00 00 00  00 00 92 ce 2d b7 15 d2  |............-...|
+00000050  3b c5 42 ad aa 73 a8 e0  ac 26 d2 e7 ef c7 a9 72  |;.B..s...&.....r|
+00000060  75 96 5c 8c 2d 60 6e 57  bd ef                    |u.\.-`nW..|
diff --git a/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4
index 64b06a8f17a035..dd58620c470e7d 100644
--- a/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4
+++ b/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 02 00 55 02 00 00  51 03 02 3d a4 ea 71 81  |....U...Q..=..q.|
-00000010  c9 47 24 2b 53 22 83 07  df 5a 9e 76 ef ca d8 1b  |.G$+S"...Z.v....|
-00000020  1f 16 15 cd 7e e4 62 93  1e 5d a7 20 9d ac ea 5a  |....~.b..]. ...Z|
-00000030  9e e3 7c 14 94 9d 1b 9e  2a 7b 2d 80 55 85 2f 9e  |..|.....*{-.U./.|
-00000040  ed 17 20 79 66 a2 6c 88  81 cb b0 79 00 05 00 00  |.. yf.l....y....|
+00000000  16 03 02 00 55 02 00 00  51 03 02 42 bb c8 01 43  |....U...Q..B...C|
+00000010  e4 f7 10 09 bf 35 a3 c2  d7 ca 60 a9 60 be 1d 00  |.....5....`.`...|
+00000020  92 33 b6 3e 56 2b c2 f7  29 e3 f9 20 8c d7 b6 90  |.3.>V+..).. ....|
+00000030  03 f5 8b 55 e9 81 47 5b  84 ec 19 bc 32 58 c6 30  |...U..G[....2X.0|
+00000040  f1 79 ea 51 a2 18 cc c0  4e 8a 8e cb 00 05 00 00  |.y.Q....N.......|
 00000050  09 ff 01 00 01 00 00 17  00 00 16 03 02 02 59 0b  |..............Y.|
 00000060  00 02 55 00 02 52 00 02  4f 30 82 02 4b 30 82 01  |..U..R..O0..K0..|
 00000070  b4 a0 03 02 01 02 02 09  00 e8 f0 9d 3f e2 5b ea  |............?.[.|
@@ -73,15 +72,15 @@
 00000060  c5 70 0f 08 83 48 e9 48  ef 6e 50 8b 05 7e e5 84  |.p...H.H.nP..~..|
 00000070  25 fa 55 c7 ae 31 02 27  00 ef 3f 98 86 20 12 89  |%.U..1.'..?.. ..|
 00000080  91 59 28 b4 f7 d7 af d2  69 61 35 14 03 02 00 01  |.Y(.....ia5.....|
-00000090  01 16 03 02 00 24 30 52  7f 8a 5c 3a 31 65 87 8c  |.....$0R..\:1e..|
-000000a0  9e 31 8f b1 22 15 ed af  99 6c 19 47 46 fd e1 3b  |.1.."....l.GF..;|
-000000b0  b3 f4 3a 5b d8 e5 a6 1a  7c 5e                    |..:[....|^|
+00000090  01 16 03 02 00 24 a8 40  50 90 31 50 fc 5e d8 f5  |.....$.@P.1P.^..|
+000000a0  64 7a a5 62 8d ad ce 03  34 c9 ab 16 31 45 bc 8b  |dz.b....4...1E..|
+000000b0  26 8b fa 38 7a 2e 60 42  86 46                    |&..8z.`B.F|
 >>> Flow 4 (server to client)
-00000000  14 03 02 00 01 01 16 03  02 00 24 c1 5d da 6d 6e  |..........$.].mn|
-00000010  55 3e 70 a4 52 15 d9 ba  88 a1 b7 f0 40 71 09 fa  |U>p.R.......@q..|
-00000020  3f 00 6f 39 72 88 89 a1  3d cf 7a 7a 97 15 b7     |?.o9r...=.zz...|
+00000000  14 03 02 00 01 01 16 03  02 00 24 83 1d 5a 04 90  |..........$..Z..|
+00000010  1f 8d 07 46 39 1e 3c cf  cb 06 45 f5 88 9e 68 5c  |...F9.<...E...h\|
+00000020  96 a0 06 47 43 21 20 ce  90 1f 24 49 52 30 59     |...GC! ...$IR0Y|
 >>> Flow 5 (client to server)
-00000000  17 03 02 00 1a 56 ea a4  ed 0f 9d 98 3b 48 bc 76  |.....V......;H.v|
-00000010  35 3f fb 78 92 d9 ce ef  53 b2 ef a6 13 9a 4c 15  |5?.x....S.....L.|
-00000020  03 02 00 16 b5 41 d0 98  50 73 73 90 c0 fe ec 11  |.....A..Pss.....|
-00000030  ec 98 d5 fb 02 c0 11 11  29 1c                    |........).|
+00000000  17 03 02 00 1a f9 9f c2  32 02 96 87 95 4b ba 17  |........2....K..|
+00000010  1f b9 af fe 6a 87 38 d4  d8 b4 f8 1d ad 05 00 15  |....j.8.........|
+00000020  03 02 00 16 54 07 15 34  f4 c3 a2 3e 01 9e 00 cb  |....T..4...>....|
+00000030  83 f7 58 79 e2 dc a4 b8  15 e9                    |..Xy......|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256
index 33e01c140b0139..d88acc95f9b5b2 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256
+++ b/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 55 02 00 00  51 03 03 c5 da f3 88 41  |....U...Q......A|
-00000010  ed 43 a7 4e 49 ad db 74  04 c6 fb c2 13 49 86 14  |.C.NI..t.....I..|
-00000020  fd d0 e1 7a ab d3 df 65  62 c6 1f 20 29 1a 03 bf  |...z...eb.. )...|
-00000030  10 35 3c 58 36 fd 4d 7a  7d dc f1 fd be d0 c6 b5  |.5D..l.C.:...S.|
+000000b0  a6 d3 5c f0 5b ca e8 6a  c7 13 88 65 50 71        |..\.[..j...ePq|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 e5 b5 71 5d e0  |..........(..q].|
-00000010  c8 9a 75 4c 6e 72 4e a2  5f f9 b4 9f f4 40 a0 de  |..uLnrN._....@..|
-00000020  73 48 9c 01 f3 0b 78 91  5f 85 29 9c 51 dc 77 bc  |sH....x._.).Q.w.|
-00000030  c0 32 42                                          |.2B|
+00000000  14 03 03 00 01 01 16 03  03 00 28 3f 30 36 77 c6  |..........(?06w.|
+00000010  6d 4f 37 2c ac f1 c2 24  9d e1 3f 0c 51 64 12 67  |mO7,...$..?.Qd.g|
+00000020  83 47 ec f1 b8 02 6d 11  11 b7 ec ab 09 26 41 ff  |.G....m......&A.|
+00000030  e8 32 05                                          |.2.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 9e 81 42  |...............B|
-00000010  90 9e ab a2 29 b3 f7 a6  31 45 5f a4 2e d5 52 f7  |....)...1E_...R.|
-00000020  72 8b 3b 15 03 03 00 1a  00 00 00 00 00 00 00 02  |r.;.............|
-00000030  96 5a f4 de 37 1b 2c f1  8d 90 91 17 6f 81 90 7f  |.Z..7.,.....o...|
-00000040  e7 9d                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 af 3a 1e  |..............:.|
+00000010  98 3e 74 5f 66 64 eb 6c  88 36 33 f0 98 e8 46 e9  |.>t_fd.l.63...F.|
+00000020  f1 2f 32 15 03 03 00 1a  00 00 00 00 00 00 00 02  |./2.............|
+00000030  76 2b 83 08 46 7d 34 58  db e8 e8 e1 e2 cb ad 1e  |v+..F}4X........|
+00000040  e4 a5                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256
index b373f27aaeb622..030cbc6f2be591 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256
+++ b/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 55 02 00 00  51 03 03 eb c3 6e 78 2e  |....U...Q....nx.|
-00000010  9f 47 ec 9d 0e bc 8d 49  d2 46 11 75 5e 50 a5 07  |.G.....I.F.u^P..|
-00000020  0a 99 90 34 34 2d 81 75  1b f4 ca 20 fb 28 c1 8c  |...44-.u... .(..|
-00000030  55 27 36 be 4e d1 c7 ee  e8 b3 2a eb 7a be f1 2a  |U'6.N.....*.z..*|
-00000040  fc 81 df d8 5b c2 1f 1e  7b 47 0f 06 00 3c 00 00  |....[...{G...<..|
+00000000  16 03 03 00 55 02 00 00  51 03 03 bd e7 e2 ea 28  |....U...Q......(|
+00000010  09 0b 7f 30 b5 91 fd b4  91 d1 c3 b8 8f 25 38 88  |...0.........%8.|
+00000020  62 28 5c 1d 14 1a 6a 50  7d 30 e8 20 c3 91 2d ea  |b(\...jP}0. ..-.|
+00000030  59 8d 1d 56 98 c9 02 c0  f1 98 94 a6 8c 2b f2 63  |Y..V.........+.c|
+00000040  ed b9 97 36 c6 c6 32 97  9e 61 6c 3b 00 3c 00 00  |...6..2..al;.<..|
 00000050  09 ff 01 00 01 00 00 17  00 00 16 03 03 02 59 0b  |..............Y.|
 00000060  00 02 55 00 02 52 00 02  4f 30 82 02 4b 30 82 01  |..U..R..O0..K0..|
 00000070  b4 a0 03 02 01 02 02 09  00 e8 f0 9d 3f e2 5b ea  |............?.[.|
@@ -74,25 +73,25 @@
 00000070  25 fa 55 c7 ae 31 02 27  00 ef 3f 98 86 20 12 89  |%.U..1.'..?.. ..|
 00000080  91 59 28 b4 f7 d7 af d2  69 61 35 14 03 03 00 01  |.Y(.....ia5.....|
 00000090  01 16 03 03 00 50 00 00  00 00 00 00 00 00 00 00  |.....P..........|
-000000a0  00 00 00 00 00 00 ee 37  21 73 05 93 63 ca 4f 0e  |.......7!s..c.O.|
-000000b0  e2 29 7f 90 6f 3a aa 52  a0 e0 71 97 5f f9 66 cf  |.)..o:.R..q._.f.|
-000000c0  06 19 09 51 03 5f 2e 0c  57 26 42 15 ef 8f 4e a9  |...Q._..W&B...N.|
-000000d0  c4 97 95 0a d1 ce 30 2c  bf 7a 85 4b a9 d0 a9 e0  |......0,.z.K....|
-000000e0  64 11 1a dc 48 1d                                 |d...H.|
+000000a0  00 00 00 00 00 00 f3 6e  c5 65 29 75 22 fe 23 6f  |.......n.e)u".#o|
+000000b0  96 fa b3 8d 98 ac df bf  3a 23 ca 4f d9 52 95 3f  |........:#.O.R.?|
+000000c0  89 8b 61 cf d2 2d f3 14  31 9d 3a 6f a9 b5 7b 69  |..a..-..1.:o..{i|
+000000d0  27 a6 2b 2d 43 6e 77 f1  cd 73 fa 80 7b bf 8a 1d  |'.+-Cnw..s..{...|
+000000e0  83 c5 9b 8c 0a 03                                 |......|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 50 58 d1 09 93 e9  |..........PX....|
-00000010  97 c1 cc c3 db 1d 65 d8  97 35 c1 b4 3f 9f a0 00  |......e..5..?...|
-00000020  9f 81 2a 81 61 b5 51 9f  ec 15 94 d0 86 0f a1 70  |..*.a.Q........p|
-00000030  e9 90 59 dd 16 d3 e7 33  21 b7 d8 6e 4b a8 fd fb  |..Y....3!..nK...|
-00000040  dd 98 78 95 16 44 f8 da  bd e3 e2 3f f0 e1 d9 39  |..x..D.....?...9|
-00000050  c0 2e 0d c4 fe a5 ac 41  66 2d f3                 |.......Af-.|
+00000000  14 03 03 00 01 01 16 03  03 00 50 f6 93 f3 85 25  |..........P....%|
+00000010  06 5c 47 ea d5 6e 90 05  21 91 9a 86 06 42 f6 54  |.\G..n..!....B.T|
+00000020  25 4a 61 65 7e 19 c8 1a  58 52 06 81 df dd 19 fc  |%Jae~...XR......|
+00000030  bd 5a 82 ff ae 80 92 b3  3b 7d 89 c0 64 b1 36 e3  |.Z......;}..d.6.|
+00000040  5c bb 2a 5b e8 6d 18 02  43 27 b5 57 bc 3f ab b1  |\.*[.m..C'.W.?..|
+00000050  27 59 0e 6a d5 07 6a 66  ad 51 82                 |'Y.j..jf.Q.|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000010  00 00 00 00 00 2f d9 4b  fc 22 0f 20 dd 2c 20 83  |...../.K.". ., .|
-00000020  bd f0 49 5b bc 57 55 bc  fb 41 13 79 a7 19 4d e3  |..I[.WU..A.y..M.|
-00000030  71 66 ce b5 77 35 9c 54  86 0e fc 21 d6 9e c4 66  |qf..w5.T...!...f|
-00000040  ee 95 3f 0a d5 15 03 03  00 40 00 00 00 00 00 00  |..?......@......|
-00000050  00 00 00 00 00 00 00 00  00 00 54 25 cd 1a 0a d4  |..........T%....|
-00000060  7b a4 ce f1 62 c8 8f 62  af 93 8e 0e e8 fd ef 55  |{...b..b.......U|
-00000070  1d 47 a4 ac 1c 80 25 6f  c4 a2 51 11 84 e9 63 cb  |.G....%o..Q...c.|
-00000080  db d8 e6 bf 2c 89 4e 1a  d4 11                    |....,.N...|
+00000010  00 00 00 00 00 2a 8b 84  55 57 20 b8 4f 11 d2 cc  |.....*..UW .O...|
+00000020  5e a0 ef 1a f1 62 fc 59  38 14 30 0f e0 76 04 ca  |^....b.Y8.0..v..|
+00000030  eb c2 45 a4 75 12 e6 1a  16 fc d8 bd d4 f7 fd 6f  |..E.u..........o|
+00000040  f3 99 ca d6 41 15 03 03  00 40 00 00 00 00 00 00  |....A....@......|
+00000050  00 00 00 00 00 00 00 00  00 00 8c 80 a8 e9 95 4c  |...............L|
+00000060  c9 fa 4d 9d 06 e5 d8 70  5f fa a9 44 24 15 f4 47  |..M....p_..D$..G|
+00000070  5a 0a 24 55 a7 6a 04 1c  2a 39 80 fd 08 47 d7 08  |Z.$U.j..*9...G..|
+00000080  41 8b 9d 46 74 cb 61 c6  84 84                    |A..Ft.a...|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384
index 9920621be3b770..42454d52f3fdaf 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384
+++ b/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 55 02 00 00  51 03 03 9f 42 e3 1b 5f  |....U...Q...B.._|
-00000010  00 d9 00 0a a5 fa 6d 63  95 11 d2 5a ff 51 b0 f8  |......mc...Z.Q..|
-00000020  bc a9 7f 18 3c 8d d7 38  d5 e8 2d 20 be 5b 08 a0  |....<..8..- .[..|
-00000030  2f 7b 50 d9 06 0c bf 7c  2d cc f0 39 3a 90 e4 e7  |/{P....|-..9:...|
-00000040  9c 27 9b 88 ea ff c0 51  f8 79 cd b9 00 9d 00 00  |.'.....Q.y......|
+00000000  16 03 03 00 55 02 00 00  51 03 03 a3 a8 ef 9d b3  |....U...Q.......|
+00000010  36 14 00 fe 5b e4 07 77  e7 78 c8 b4 d8 96 8d 72  |6...[..w.x.....r|
+00000020  c5 79 99 10 8f 6e ac e3  fd 99 ee 20 53 99 57 36  |.y...n..... S.W6|
+00000030  7e 9b 89 a3 79 c7 57 c6  f6 c7 2c 66 0a 6b 48 a2  |~...y.W...,f.kH.|
+00000040  06 87 54 2c 20 3d 65 b9  1c 93 fd a3 00 9d 00 00  |..T, =e.........|
 00000050  09 ff 01 00 01 00 00 17  00 00 16 03 03 02 59 0b  |..............Y.|
 00000060  00 02 55 00 02 52 00 02  4f 30 82 02 4b 30 82 01  |..U..R..O0..K0..|
 00000070  b4 a0 03 02 01 02 02 09  00 e8 f0 9d 3f e2 5b ea  |............?.[.|
@@ -73,17 +72,17 @@
 00000060  c5 70 0f 08 83 48 e9 48  ef 6e 50 8b 05 7e e5 84  |.p...H.H.nP..~..|
 00000070  25 fa 55 c7 ae 31 02 27  00 ef 3f 98 86 20 12 89  |%.U..1.'..?.. ..|
 00000080  91 59 28 b4 f7 d7 af d2  69 61 35 14 03 03 00 01  |.Y(.....ia5.....|
-00000090  01 16 03 03 00 28 00 00  00 00 00 00 00 00 0e dd  |.....(..........|
-000000a0  10 e6 7a dd b2 02 5c 0d  0c 73 b4 f1 a1 89 85 95  |..z...\..s......|
-000000b0  91 a9 e4 7a 47 49 9a 52  96 77 93 0b cc 74        |...zGI.R.w...t|
+00000090  01 16 03 03 00 28 00 00  00 00 00 00 00 00 76 c9  |.....(........v.|
+000000a0  1e 50 43 51 5e 4a b6 c8  98 33 8f 18 ac f3 fe 20  |.PCQ^J...3..... |
+000000b0  09 76 7c 48 f7 e8 00 2c  3b e1 7e 2f 71 d5        |.v|H...,;.~/q.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 72 c3 d3 ad 10  |..........(r....|
-00000010  71 48 c4 32 9b 24 ac c0  a4 88 db 35 e9 be fe 34  |qH.2.$.....5...4|
-00000020  ee 9a bb 5a a5 90 b6 ec  31 9a bc 4c 56 e2 e6 d5  |...Z....1..LV...|
-00000030  f9 2b 93                                          |.+.|
+00000000  14 03 03 00 01 01 16 03  03 00 28 55 b2 34 a3 b7  |..........(U.4..|
+00000010  18 a8 36 55 c4 ef 81 82  e4 41 9f 1a 42 2c 42 7e  |..6U.....A..B,B~|
+00000020  9b 59 c8 9d 3a 0b 59 a6  78 d0 ab 2f c4 e1 f7 2b  |.Y..:.Y.x../...+|
+00000030  9b ee 9f                                          |...|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 ed af c7  |................|
-00000010  74 44 64 5d e3 1b 0c d4  bd a1 7e 7e 87 10 8d bc  |tDd]......~~....|
-00000020  26 db e8 15 03 03 00 1a  00 00 00 00 00 00 00 02  |&...............|
-00000030  42 6b 3e 59 c5 e4 e5 5b  53 0f fe d9 3f 0c 5c f0  |Bk>Y...[S...?.\.|
-00000040  67 d5                                             |g.|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 ec ad 42  |...............B|
+00000010  8a cf 39 ed 82 b7 70 9b  1a 29 4c 3e b7 f6 92 35  |..9...p..)L>...5|
+00000020  12 e2 df 15 03 03 00 1a  00 00 00 00 00 00 00 02  |................|
+00000030  81 d4 de 3c 03 a9 01 0e  e7 64 ae 18 84 dd d3 6c  |...<.....d.....l|
+00000040  57 6a                                             |Wj|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ALPN b/src/crypto/tls/testdata/Client-TLSv12-ALPN
index 6686f6e9c0f7c5..9f3f4dc930ed36 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ALPN
+++ b/src/crypto/tls/testdata/Client-TLSv12-ALPN
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 2c 01 00 01  28 03 03 00 00 00 00 00  |....,...(.......|
+00000000  16 03 01 01 12 01 00 01  0e 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,24 +7,22 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 ad 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 93 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 10  00 10 00 0e 06 70 72 6f  |.............pro|
-000000f0  74 6f 32 06 70 72 6f 74  6f 31 00 2b 00 09 08 03  |to2.proto1.+....|
-00000100  04 03 03 03 02 03 01 00  33 00 26 00 24 00 1d 00  |........3.&.$...|
-00000110  20 2f e5 7d a3 47 cd 62  43 15 28 da ac 5f bb 29  | /.}.G.bC.(.._.)|
-00000120  07 30 ff f6 84 af c4 cf  c2 ed 90 99 5f 58 cb 3b  |.0.........._X.;|
-00000130  74                                                |t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 10 00 10  |................|
+000000d0  00 0e 06 70 72 6f 74 6f  32 06 70 72 6f 74 6f 31  |...proto2.proto1|
+000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
+000000f0  26 00 24 00 1d 00 20 2f  e5 7d a3 47 cd 62 43 15  |&.$... /.}.G.bC.|
+00000100  28 da ac 5f bb 29 07 30  ff f6 84 af c4 cf c2 ed  |(.._.).0........|
+00000110  90 99 5f 58 cb 3b 74                              |.._X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 6a 02 00 00  66 03 03 37 57 f9 cb 6a  |....j...f..7W..j|
-00000010  dc 6c e2 4b 1d 74 93 8e  e1 1a 05 e7 fd 8d 29 57  |.l.K.t........)W|
-00000020  5e b4 fc 9a ba 7d df de  56 cc e7 20 57 f3 1a b0  |^....}..V.. W...|
-00000030  20 cd ac a1 e3 93 b9 79  f5 1c ce d2 d1 24 da fc  | ......y.....$..|
-00000040  88 97 25 fb 36 72 75 bb  cc a3 2a 79 cc a8 00 00  |..%.6ru...*y....|
+00000000  16 03 03 00 6a 02 00 00  66 03 03 71 ba 32 f4 08  |....j...f..q.2..|
+00000010  31 23 ea 71 46 b6 f0 24  f9 80 c2 94 b8 13 f5 cc  |1#.qF..$........|
+00000020  6b 77 e5 46 f1 76 df a5  0c 56 6a 20 98 53 12 a3  |kw.F.v...Vj .S..|
+00000030  d2 a6 97 45 36 11 e6 b6  b6 6e 0b b9 30 2d 65 c8  |...E6....n..0-e.|
+00000040  47 c7 af 4c c5 a6 51 90  2f 77 db 8c cc a8 00 00  |G..L..Q./w......|
 00000050  1e ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 10  |................|
 00000060  00 09 00 07 06 70 72 6f  74 6f 31 00 17 00 00 16  |.....proto1.....|
 00000070  03 03 02 59 0b 00 02 55  00 02 52 00 02 4f 30 82  |...Y...U..R..O0.|
@@ -65,31 +63,31 @@
 000002a0  43 77 8d 0c 1c f1 0f a1  d8 40 83 61 c9 4c 72 2b  |Cw.......@.a.Lr+|
 000002b0  9d ae db 46 06 06 4d f4  c1 b3 3e c0 d1 bd 42 d4  |...F..M...>...B.|
 000002c0  db fe 3d 13 60 84 5c 21  d3 3b e9 fa e7 16 03 03  |..=.`.\!.;......|
-000002d0  00 ac 0c 00 00 a8 03 00  1d 20 27 fd a6 7d 32 28  |......... '..}2(|
-000002e0  d2 44 43 d5 2a 95 3b e2  7e 77 5a d2 66 87 4a 92  |.DC.*.;.~wZ.f.J.|
-000002f0  12 56 ba 40 3e 09 43 b4  90 02 08 04 00 80 8b e9  |.V.@>.C.........|
-00000300  93 0c 5e 72 b8 a8 49 1c  c3 b7 fc 39 af 58 9c 3a  |..^r..I....9.X.:|
-00000310  27 b6 20 23 9a 5d 35 0e  dd 21 da 1b be 34 32 23  |'. #.]5..!...42#|
-00000320  76 2e c8 9e 3d c8 e5 9e  cd 04 11 a9 be 97 52 53  |v...=.........RS|
-00000330  81 b6 01 fc 60 5d 0d dd  0d ba 05 a6 15 3b 29 4e  |....`].......;)N|
-00000340  88 a0 69 b9 c2 46 d9 c2  6d 17 b2 d0 c0 ee de f9  |..i..F..m.......|
-00000350  94 fe 25 31 66 df 72 7d  02 77 a6 2c a6 ad da eb  |..%1f.r}.w.,....|
-00000360  dc 4b ea d4 5b 0a d4 e6  c8 89 15 cf 3f 81 58 20  |.K..[.......?.X |
-00000370  0f 83 2f e1 db a1 cc a7  e1 61 79 7d 14 4b 16 03  |../......ay}.K..|
+000002d0  00 ac 0c 00 00 a8 03 00  1d 20 76 16 ff 2a 83 9a  |......... v..*..|
+000002e0  07 b0 01 f6 1e 3e 4b c1  69 62 9b 00 38 35 c5 4f  |.....>K.ib..85.O|
+000002f0  d3 2c db 50 16 9d 26 b1  cc 28 08 04 00 80 56 73  |.,.P..&..(....Vs|
+00000300  39 4d ab f4 68 92 14 6d  d5 75 db 10 4b 0c a4 19  |9M..h..m.u..K...|
+00000310  9e 67 42 d3 f8 3f 91 26  06 4d f9 34 9b ad 7c 85  |.gB..?.&.M.4..|.|
+00000320  ec 11 34 43 dd 7d a8 5b  0f 59 54 ff a3 92 dc 7c  |..4C.}.[.YT....||
+00000330  26 ee 07 0e cf bc e4 6a  1a da b9 d2 9a 62 bf de  |&......j.....b..|
+00000340  37 a6 68 e2 cd 21 8e 4e  a3 66 ee e1 74 45 7d 64  |7.h..!.N.f..tE}d|
+00000350  b2 d8 1d dc 6a cd 2a 86  9e 0d 76 a3 7b f2 49 11  |....j.*...v.{.I.|
+00000360  ae ad a1 d4 f2 a9 e5 56  0e 2a 96 a5 f7 8b 74 d4  |.......V.*....t.|
+00000370  78 e0 bc cc 95 a1 f1 76  0b 4b 37 ed 77 1b 16 03  |x......v.K7.w...|
 00000380  03 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 50 e7 36  59 68 f6 0f cd b0 cc ae  |.... P.6Yh......|
-00000040  bc 18 23 d3 c0 fb c9 41  49 91 ec 8f cd f0 69 84  |..#....AI.....i.|
-00000050  49 3c 68 6e 05                                    |IK|
+00000040  92 cd 18 dd ac ce af 1a  b9 f2 df aa 7f a1 d2 ad  |................|
+00000050  0e 8a 67 03 3f                                    |..g.?|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 84 30 04 4f 3e  |.......... .0.O>|
-00000010  72 f6 d8 6a dc ae fb 55  82 69 8e a3 77 c2 1f 27  |r..j...U.i..w..'|
-00000020  88 14 5b 8d 10 79 4c 6a  41 3e e5                 |..[..yLjA>.|
+00000000  14 03 03 00 01 01 16 03  03 00 20 db cb 3a 73 0c  |.......... ..:s.|
+00000010  ab 16 44 41 5a 25 df f7  45 bf f0 70 c6 a8 4f bd  |..DAZ%..E..p..O.|
+00000020  50 99 fb 18 26 e7 cf 71  16 1a 96                 |P...&..q...|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 03 a8 d7  eb 5d 79 60 d4 65 1d c1  |.........]y`.e..|
-00000010  2b 32 b5 c3 fb b2 2f 10  83 4e 39 15 03 03 00 12  |+2..../..N9.....|
-00000020  90 eb 89 fc e7 4c a2 94  02 33 b3 0e 72 6e bc 4e  |.....L...3..rn.N|
-00000030  d4 e7                                             |..|
+00000000  17 03 03 00 16 34 82 27  01 99 27 08 58 c4 aa 76  |.....4.'..'.X..v|
+00000010  fe 34 9c 1f 99 ea 4c f8  a0 ef 96 15 03 03 00 12  |.4....L.........|
+00000020  68 b8 da ac 77 d5 f7 95  9f 68 e0 d6 26 88 cd ef  |h...w....h..&...|
+00000030  31 d4                                             |1.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
index 784e95f87e5874..55cff1d489e6d3 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 4a 0b 4d 4a 05  |....]...Y..J.MJ.|
-00000010  a0 5b ca 5d 65 4f f7 7e  82 3c 54 1d a3 42 64 7c  |.[.]eO.~....v.V.AD|
+000002f0  2a e1 6b ae 5d f9 39 5c  ec 76 ee 01 d7 04 42 ca  |*.k.].9\.v....B.|
+00000300  45 07 e0 59 38 75 d4 47  61 a4 5b 0f a9 7a ba 79  |E..Y8u.Ga.[..z.y|
+00000310  fa 79 92 41 88 8a d3 be  c2 38 3e f7 95 6c 99 3f  |.y.A.....8>..l.?|
+00000320  4c ff af 10 33 14 25 e0  d7 8a fd 70 17 2b 73 ee  |L...3.%....p.+s.|
+00000330  16 03 03 00 3a 0d 00 00  36 03 01 02 40 00 2e 04  |....:...6...@...|
+00000340  03 05 03 06 03 08 07 08  08 08 09 08 0a 08 0b 08  |................|
+00000350  04 08 05 08 06 04 01 05  01 06 01 03 03 02 03 03  |................|
+00000360  01 02 01 03 02 02 02 04  02 05 02 06 02 00 00 16  |................|
+00000370  03 03 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0|
 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5|
@@ -110,32 +109,32 @@
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
 00000210  03 03 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 93 0f 00  |...._X.;t.......|
-00000240  00 8f 04 03 00 8b 30 81  88 02 42 01 dd bf fd e0  |......0...B.....|
-00000250  db 99 16 0b f0 bc a9 4b  93 10 d9 59 06 d2 eb 30  |.......K...Y...0|
-00000260  dc b1 44 69 1d 54 2d 9b  b4 a4 c9 3a f8 d8 9d 2e  |..Di.T-....:....|
-00000270  36 71 3e ff aa 05 98 8a  27 00 dd 65 6a 15 b7 c9  |6q>.....'..ej...|
-00000280  fe 1d 4d 45 02 58 09 4f  38 ea cd 88 3c 02 42 00  |..ME.X.O8...<.B.|
-00000290  a6 27 a5 d7 e7 9e 66 7e  f8 38 37 03 7b 6d df c4  |.'....f~.87.{m..|
-000002a0  81 6a 59 af 5b c7 06 2e  57 e9 8f 8d 1f 9c 9d 94  |.jY.[...W.......|
-000002b0  70 4c 74 ed 03 24 3d df  35 51 a1 76 a7 8f 9b 40  |pLt..$=.5Q.v...@|
-000002c0  16 c6 4f 0e 49 95 34 20  22 dc 5c ce 1d c0 ed bf  |..O.I.4 ".\.....|
-000002d0  f4 14 03 03 00 01 01 16  03 03 00 40 00 00 00 00  |...........@....|
-000002e0  00 00 00 00 00 00 00 00  00 00 00 00 b7 d5 df bf  |................|
-000002f0  2b 32 a9 9e e4 78 40 84  ca c9 7d 54 4e 38 89 3b  |+2...x@...}TN8.;|
-00000300  0f 83 23 42 75 95 6e 4d  70 d4 b6 5a 1a 26 dd bb  |..#Bu.nMp..Z.&..|
-00000310  37 4a 85 88 ab 60 ba 3c  19 bd 02 79              |7J...`.<...y|
+00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 92 0f 00  |...._X.;t.......|
+00000240  00 8e 04 03 00 8a 30 81  87 02 41 0c 11 31 08 e0  |......0...A..1..|
+00000250  7d 4e 11 1e 80 7c 50 70  ea 1b 68 16 d9 e6 93 b7  |}N...|Pp..h.....|
+00000260  fb 6f 0d 6e ce 8b d2 7c  86 70 c3 e9 ed 35 3c 29  |.o.n...|.p...5<)|
+00000270  c7 d8 6c 8f 43 c9 a1 7a  4a ae 19 22 6e e3 85 7e  |..l.C..zJ.."n..~|
+00000280  a0 5d 7f 19 a5 b7 25 ad  d7 1a 5f 42 02 42 00 d8  |.]....%..._B.B..|
+00000290  6a 25 47 2a 0e 1a 38 51  1c 73 aa 2d 10 9e 4b 65  |j%G*..8Q.s.-..Ke|
+000002a0  56 34 72 e5 02 09 f6 30  ce a8 a0 59 75 7b 13 42  |V4r....0...Yu{.B|
+000002b0  1e 31 f3 dd 08 a9 65 df  2d e6 aa 29 5d 9a 5c eb  |.1....e.-..)].\.|
+000002c0  d3 67 af 29 4e d2 76 e5  17 1d 7e e7 0a 50 c4 d0  |.g.)N.v...~..P..|
+000002d0  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
+000002e0  00 00 00 00 00 00 00 00  00 00 00 8b ef 24 70 ef  |.............$p.|
+000002f0  b9 b3 fd 59 49 62 b7 18  9c bc 7f 74 06 21 21 ab  |...YIb.....t.!!.|
+00000300  9c 4d cf 70 0c 6b 3b d3  d4 12 51 a7 f9 09 65 d1  |.M.p.k;...Q...e.|
+00000310  ce b7 28 01 c1 e9 0b e4  41 55 b6                 |..(.....AU.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 40 07 8e 16 c5 c2  |..........@.....|
-00000010  e1 e5 32 41 2d 8b 3c fb  2e 3e b2 84 89 56 4d b5  |..2A-.<..>...VM.|
-00000020  1c bd 1e a5 11 a1 b0 18  29 ce eb 46 f8 11 ff dc  |........)..F....|
-00000030  c0 cc ed 5a 38 33 5a 8f  48 df bf e9 8e 09 be b0  |...Z83Z.H.......|
-00000040  9d 70 85 f7 71 f5 1e 5c  aa 6f 88                 |.p..q..\.o.|
+00000000  14 03 03 00 01 01 16 03  03 00 40 af 82 f6 ba d1  |..........@.....|
+00000010  e8 f9 c5 58 0e ba 94 ec  98 68 b3 20 5b db 4e 8c  |...X.....h. [.N.|
+00000020  f5 00 29 e8 9a c1 34 35  ac 77 af e2 a0 6a 6f 45  |..)...45.w...joE|
+00000030  05 56 d4 a0 5b 75 19 c6  1b 8a c8 65 04 ed 3d f3  |.V..[u.....e..=.|
+00000040  84 e5 1b c0 26 31 5d 03  d5 b4 31                 |....&1]...1|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 37 b7 99  22 eb 67 a0 32 57 76 b5  |.....7..".g.2Wv.|
-00000020  53 86 fc 5b 79 c5 4a 4f  3a 6b a9 0f d8 c8 30 de  |S..[y.JO:k....0.|
-00000030  0a 5b 9b af e2 15 03 03  00 30 00 00 00 00 00 00  |.[.......0......|
-00000040  00 00 00 00 00 00 00 00  00 00 57 9c 4b ca 83 a3  |..........W.K...|
-00000050  c0 3a 52 71 24 f5 b1 37  1e 4d c1 5a 2d 29 1c 90  |.:Rq$..7.M.Z-)..|
-00000060  9b 96 cf 1e 07 39 f1 1b  03 2b                    |.....9...+|
+00000010  00 00 00 00 00 2e a5 7c  6f cc f7 44 1a 38 99 4a  |.......|o..D.8.J|
+00000020  2e a4 4b 79 bf ee b6 c9  12 57 f5 2e 98 dd 1d 2a  |..Ky.....W.....*|
+00000030  5b 79 d5 ef 44 15 03 03  00 30 00 00 00 00 00 00  |[y..D....0......|
+00000040  00 00 00 00 00 00 00 00  00 00 3d fe 37 cb 65 03  |..........=.7.e.|
+00000050  13 ce 3d 3b c2 18 c2 27  f9 a4 b7 fc e6 37 eb 2a  |..=;...'.....7.*|
+00000060  27 6c 52 38 2f 3a 61 d4  a9 e6                    |'lR8/:a...|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
index c20bd95d7f3065..de57515d38297c 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 48 41 85 3e fc  |....]...Y..HA.>.|
-00000010  9f e7 b6 84 da fe 2f a7  1d e9 ba 12 4e a1 cf cb  |....../.....N...|
-00000020  9e f8 df 76 7c e7 29 c1  3b 9e 23 20 07 c9 55 c7  |...v|.).;.# ..U.|
-00000030  0e 45 5c 26 17 94 b4 14  6b 58 39 27 43 4e dc 9b  |.E\&....kX9'CN..|
-00000040  65 30 0e f2 bd 59 d9 a2  a1 f3 0a 01 c0 2f 00 00  |e0...Y......./..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 f8 3d 7c a4 a8  |....]...Y...=|..|
+00000010  11 e3 56 0f 1c 7e 2e 7c  50 7e 75 5c de 1c 51 8e  |..V..~.|P~u\..Q.|
+00000020  de d3 8a 84 d2 90 84 f9  e9 07 d5 20 98 6a a8 c1  |........... .j..|
+00000030  f4 28 bd 0f 6a 25 a5 26  3d 8d 35 b6 3e bb 77 c6  |.(..j%.&=.5.>.w.|
+00000040  8e ab 36 bd 7d c8 a9 b1  5b 30 0f b2 c0 2f 00 00  |..6.}...[0.../..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,18 +61,18 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 73 d3 a9  |............ s..|
-000002d0  7e 93 32 e3 dd ad 1c b3  c1 ff 03 c2 b9 08 da 09  |~.2.............|
-000002e0  d3 1b 67 95 9c 8c d1 05  12 2e 8b dc 7a 08 04 00  |..g.........z...|
-000002f0  80 85 af 3b 06 67 b0 ab  07 70 21 02 b1 3a 89 40  |...;.g...p!..:.@|
-00000300  d6 90 ef a5 5b 89 49 81  18 20 74 9f 7b dd 58 65  |....[.I.. t.{.Xe|
-00000310  28 6f 2a f1 aa 3f 35 91  b9 88 79 27 a0 f3 e7 41  |(o*..?5...y'...A|
-00000320  9a a5 77 be 55 5e 70 89  37 b6 4a 7b 3b 8c df ad  |..w.U^p.7.J{;...|
-00000330  47 cc ac 45 47 43 05 05  ad c9 7b d8 1d d6 a8 fa  |G..EGC....{.....|
-00000340  38 45 c3 54 35 0c 28 a1  29 be 1f 73 98 a6 02 01  |8E.T5.(.)..s....|
-00000350  fb 9d 12 64 1a 9c f3 82  e5 3f f6 0c 20 67 59 72  |...d.....?.. gYr|
-00000360  3f a7 59 4e ef b4 58 ba  49 4e c9 b6 ea 95 b2 b3  |?.YN..X.IN......|
-00000370  78 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |x....:...6...@..|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 5f c1 31  |............ _.1|
+000002d0  d7 64 f0 0b 72 6a 66 2c  49 d7 d1 9c dd 6f e3 3a  |.d..rjf,I....o.:|
+000002e0  ab 2c 78 6d ca b0 ed 16  26 65 9f ff 66 08 04 00  |.,xm....&e..f...|
+000002f0  80 a6 91 d0 03 b8 d2 67  48 69 16 8e 30 dc 5b 3f  |.......gHi..0.[?|
+00000300  ac 4d e4 33 5f 46 e7 0c  49 a0 71 9d 8c 60 63 f2  |.M.3_F..I.q..`c.|
+00000310  2d ff 9e 89 21 7d af 71  ce 41 6b d2 22 fc 1f bd  |-...!}.q.Ak."...|
+00000320  a9 9e 15 2c d7 c3 cb 69  6d df 23 07 7c 13 e9 2b  |...,...im.#.|..+|
+00000330  7d 05 f0 18 1e 86 c8 37  ad cd 9e 39 26 0c 8a 9b  |}......7...9&...|
+00000340  12 90 60 12 95 06 e9 bb  f2 46 41 20 10 f5 64 ea  |..`......FA ..d.|
+00000350  66 13 cb 8e 51 7e 41 78  2a 40 fa 15 e2 0d 5b 37  |f...Q~Ax*@....[7|
+00000360  a7 a8 4a f6 8e 93 82 2a  a2 91 06 66 4e 49 72 68  |..J....*...fNIrh|
+00000370  f9 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
 00000380  04 03 05 03 06 03 08 07  08 08 08 09 08 0a 08 0b  |................|
 00000390  08 04 08 05 08 06 04 01  05 01 06 01 03 03 02 03  |................|
 000003a0  03 01 02 01 03 02 02 02  04 02 05 02 06 02 00 00  |................|
@@ -114,28 +113,28 @@
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
 00000210  03 03 00 25 10 00 00 21  20 2f e5 7d a3 47 cd 62  |...%...! /.}.G.b|
 00000220  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 91 0f 00  |...._X.;t.......|
-00000240  00 8d 04 03 00 89 30 81  86 02 41 66 64 90 bc df  |......0...Afd...|
-00000250  a5 d0 19 89 2b ed fc a5  8f 7e 14 d0 9f a2 07 6b  |....+....~.....k|
-00000260  d3 09 07 46 f8 29 4d b5  6c 01 e5 2e 0d d8 a4 b9  |...F.)M.l.......|
-00000270  1a 86 2f b1 10 4c 29 5b  de e7 29 e6 b9 32 53 ca  |../..L)[..)..2S.|
-00000280  d0 fc 7b a1 82 6e 34 2f  11 7a 2b 98 02 41 74 a4  |..{..n4/.z+..At.|
-00000290  51 21 0c 57 ac 99 d1 a3  8c 86 f6 f2 b8 66 b8 1f  |Q!.W.........f..|
-000002a0  2d db 49 1a c1 34 e6 02  fd ce 50 14 7c 9b a4 52  |-.I..4....P.|..R|
-000002b0  17 bc 96 ab 11 5f 97 9a  7f be ab 26 f7 1f 2b cf  |....._.....&..+.|
-000002c0  30 f1 da 80 b5 82 a0 da  44 be c1 00 51 1d b4 14  |0.......D...Q...|
-000002d0  03 03 00 01 01 16 03 03  00 28 00 00 00 00 00 00  |.........(......|
-000002e0  00 00 39 c2 3d 4e 74 16  e2 8c 4b f9 11 38 94 12  |..9.=Nt...K..8..|
-000002f0  8f d3 16 18 9b ad 41 ef  c9 ed 56 7f e3 ed d7 e5  |......A...V.....|
-00000300  0e 52                                             |.R|
+00000230  c2 ed 90 99 5f 58 cb 3b  74 16 03 03 00 93 0f 00  |...._X.;t.......|
+00000240  00 8f 04 03 00 8b 30 81  88 02 42 01 0f 51 5e 59  |......0...B..Q^Y|
+00000250  78 34 8f 99 03 da 07 66  3b 0d 48 b2 79 57 e2 d5  |x4.....f;.H.yW..|
+00000260  d2 c2 f3 81 8e 25 98 81  e2 9a f7 1f 02 99 b0 7d  |.....%.........}|
+00000270  1c d1 1f e4 ef d7 bc a1  ad 67 c7 a9 cc 4f 67 58  |.........g...OgX|
+00000280  8b 1e 8c 3f 04 73 31 53  60 aa 67 33 27 02 42 01  |...?.s1S`.g3'.B.|
+00000290  f1 66 ba 8f ec 9e 3f 76  76 ac 7a e7 56 cb fb 46  |.f....?vv.z.V..F|
+000002a0  f4 9b 64 03 3a 72 5a d7  cf 49 39 69 26 19 68 52  |..d.:rZ..I9i&.hR|
+000002b0  8b 98 8e ea d3 8e d9 6d  93 f5 e8 23 cd 20 a8 5a  |.......m...#. .Z|
+000002c0  4c 24 10 70 bd a2 ae a3  b1 4f 38 17 dd b9 f5 93  |L$.p.....O8.....|
+000002d0  4b 14 03 03 00 01 01 16  03 03 00 28 00 00 00 00  |K..........(....|
+000002e0  00 00 00 00 e1 2b da c6  4a 5c d2 03 c0 7e f0 eb  |.....+..J\...~..|
+000002f0  a0 4b ed a1 7d e4 45 93  ec f9 37 a0 5b 7e bb 64  |.K..}.E...7.[~.d|
+00000300  af d4 fc ac                                       |....|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 c0 9a 2a 35 ef  |..........(..*5.|
-00000010  fa 87 1f 74 0a e9 b7 ea  3c 1c ab 1c ce 6e bb 95  |...t....<....n..|
-00000020  ef 92 f3 cb 07 c0 e6 af  b1 2a 60 fb 09 2a d7 68  |.........*`..*.h|
-00000030  27 b0 f1                                          |'..|
+00000000  14 03 03 00 01 01 16 03  03 00 28 d3 4a 1e 2b ea  |..........(.J.+.|
+00000010  26 12 c9 fd b0 7b e6 bf  e4 bb b6 d2 6b b4 3c 05  |&....{......k.<.|
+00000020  1f 6c 46 44 5e 25 e6 f9  80 c8 b9 16 19 59 68 90  |.lFD^%.......Yh.|
+00000030  5a 90 16                                          |Z..|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 b1 98 56  |...............V|
-00000010  38 68 a7 d0 da c6 83 4b  00 31 40 d7 1e 81 35 1a  |8h.....K.1@...5.|
-00000020  2f e3 42 15 03 03 00 1a  00 00 00 00 00 00 00 02  |/.B.............|
-00000030  1d 8f a1 cf 12 2f 53 37  4d 60 46 90 e2 db 97 ce  |...../S7M`F.....|
-00000040  3e 99                                             |>.|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 35 25 df  |.............5%.|
+00000010  1f 16 81 00 e3 c4 9e 45  e2 a1 ef 54 72 66 99 3d  |.......E...Trf.=|
+00000020  30 13 25 15 03 03 00 1a  00 00 00 00 00 00 00 02  |0.%.............|
+00000030  16 a5 e9 36 c1 fb 02 d7  c8 7a aa bc aa 77 7b 5c  |...6.....z...w{\|
+00000040  4f a1                                             |O.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519
index 9eb522b86b968e..edb433fefc5fc8 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 7f e3 92 d1 05  |....]...Y.......|
-00000010  fd a2 f7 b4 24 f8 e6 e2  2f 15 51 f2 4b 72 12 59  |....$.../.Q.Kr.Y|
-00000020  e6 af fe c9 0b 86 8b 53  a3 ce ff 20 68 97 1d e3  |.......S... h...|
-00000030  6d 6c fb 67 78 05 ba fc  10 5b 83 87 8c 04 e9 57  |ml.gx....[.....W|
-00000040  19 32 3f ee 88 a0 30 61  de 1c d2 2d cc a8 00 00  |.2?...0a...-....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 68 ad d5 4c 88  |....]...Y..h..L.|
+00000010  60 b8 3b b4 ea e4 f2 55  7d 0f 90 d8 bd 55 b5 53  |`.;....U}....U.S|
+00000020  49 6e f7 50 e4 05 70 a2  6d 9e a5 20 d1 0a e5 58  |In.P..p.m.. ...X|
+00000030  38 f1 82 94 a7 c3 bf 77  60 d8 51 c2 c7 e9 8e d6  |8......w`.Q.....|
+00000040  94 ee 4f 23 51 d3 2c 52  06 12 4b 4a cc a8 00 00  |..O#Q.,R..KJ....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,18 +61,18 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 55 93 3e  |............ U.>|
-000002d0  dd fc 30 52 61 80 f3 e8  7e e2 fb f8 03 ab e4 86  |..0Ra...~.......|
-000002e0  bc 8b 69 5b f5 8c fd 4b  fc 12 2e 99 1a 08 04 00  |..i[...K........|
-000002f0  80 43 60 48 4c 88 e9 fc  78 36 5f a9 6a 61 54 7e  |.C`HL...x6_.jaT~|
-00000300  a8 a3 67 91 df ff 78 66  d6 b6 ce 95 26 af 8e ac  |..g...xf....&...|
-00000310  42 fa 95 e1 a3 c6 9b 73  bb 7b dc e6 aa ca 6f a0  |B......s.{....o.|
-00000320  17 6b ee 50 ff d9 20 ed  11 c4 e5 81 23 1d 6b 02  |.k.P.. .....#.k.|
-00000330  a8 e6 f6 ef fc 1f 69 9e  c1 28 d9 bd 36 98 ad f6  |......i..(..6...|
-00000340  f3 40 5a e8 a4 e9 3c 62  b2 8d 53 a1 88 06 e6 81  |.@Z....O,..C[d!....|
+000002f0  80 84 5e ca 36 b2 fa d0  29 47 1c c2 de 4e 1d 81  |..^.6...)G...N..|
+00000300  14 66 0a 26 6f 21 5f d5  b5 54 2e 37 f1 7e b1 90  |.f.&o!_..T.7.~..|
+00000310  a0 57 ab 40 81 cf e5 77  29 23 54 fa 12 76 1a 4a  |.W.@...w)#T..v.J|
+00000320  66 c0 52 08 07 3c 3c 56  06 08 02 df 9f 75 75 5e  |f.R..<>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 91 2c 24 55 e8  |.......... .,$U.|
-00000010  70 9e 88 07 53 e1 60 9e  86 af 53 d4 21 d9 99 ad  |p...S.`...S.!...|
-00000020  3a 2b 83 b0 bc f7 93 5e  63 04 50                 |:+.....^c.P|
+00000000  14 03 03 00 01 01 16 03  03 00 20 10 cb 1b e5 55  |.......... ....U|
+00000010  64 49 55 0a bf 25 e4 b0  d0 45 e1 47 b0 05 d0 f2  |dIU..%...E.G....|
+00000020  41 b7 f4 6a 84 4e 6a 66  8d 0e 43                 |A..j.Njf..C|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 e0 69 be  8e c5 4d 63 0e 77 88 42  |......i...Mc.w.B|
-00000010  4e a8 e9 8f f4 c5 05 56  99 92 70 15 03 03 00 12  |N......V..p.....|
-00000020  64 5c 05 8f 23 af e8 aa  f6 76 1b b6 90 36 d9 d5  |d\..#....v...6..|
-00000030  59 e6                                             |Y.|
+00000000  17 03 03 00 16 4a f3 ed  07 22 0d 7d 9b a6 a8 3c  |.....J...".}...<|
+00000010  88 58 f3 48 c2 f1 aa ea  c7 cd 14 15 03 03 00 12  |.X.H............|
+00000020  0b 1d 53 98 b3 69 99 e1  cd 4f 37 3c dc 63 17 9f  |..S..i...O7<.c..|
+00000030  00 7f                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384
index e9f6604b2f5cac..c6673f6dc0081c 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 bc b7 27 59 a9  |....]...Y....'Y.|
-00000010  a7 ac ce 8b f5 5b 13 56  60 19 70 2a a7 f0 a2 ea  |.....[.V`.p*....|
-00000020  1a ce 27 2a 67 53 e0 5c  7e 5e 80 20 d5 c6 de 6d  |..'*gS.\~^. ...m|
-00000030  d1 3c 6d cb c9 49 77 00  cc 31 87 0a 86 45 06 70  |...|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 8b ea d3  |............ ...|
-000002d0  e4 1f c2 21 cb 32 99 00  d2 a9 a4 f3 e4 9a d7 6e  |...!.2.........n|
-000002e0  f0 6e 7c 45 ca 41 51 60  a3 31 61 f0 34 08 04 00  |.n|E.AQ`.1a.4...|
-000002f0  80 96 62 58 0c b4 72 a7  49 1c b8 73 72 5a c7 ba  |..bX..r.I..srZ..|
-00000300  e2 fe dc a6 a4 54 3d 21  83 70 ab ef de d8 d8 db  |.....T=!.p......|
-00000310  82 56 22 4f 9d f6 04 c2  b6 f7 9d a0 41 88 53 c9  |.V"O........A.S.|
-00000320  2b 57 80 71 a2 bd d7 84  b6 4b cd 65 3d c3 10 cb  |+W.q.....K.e=...|
-00000330  5d 89 03 af 46 d5 b0 39  b8 c8 2d 74 1b 46 8d 0d  |]...F..9..-t.F..|
-00000340  ca 13 30 34 54 10 ea ec  77 ca 84 a6 2c 88 68 d6  |..04T...w...,.h.|
-00000350  69 e6 f3 95 aa 65 af 05  7d e0 c2 84 48 f5 fa ae  |i....e..}...H...|
-00000360  d5 90 2a 79 0c 45 c6 7d  d3 b7 de 85 e8 b5 2b 68  |..*y.E.}......+h|
-00000370  bf 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 85 c8 0e  |............ ...|
+000002d0  fb 1e b3 4a ec c1 b2 3a  b8 4e bb a1 ca 80 8e 13  |...J...:.N......|
+000002e0  f5 08 b5 9a b8 3e c4 6c  23 cf 17 a0 31 08 04 00  |.....>.l#...1...|
+000002f0  80 28 db ec 9d f9 f4 9a  06 12 8a 32 89 11 4a e5  |.(.........2..J.|
+00000300  b6 68 98 21 ec f1 75 9c  f9 28 bc b1 99 5b ec 77  |.h.!..u..(...[.w|
+00000310  37 8b 6b 05 ad b3 10 de  24 05 84 a4 16 fe 1d 84  |7.k.....$.......|
+00000320  af 5d 28 7d d7 bc de 2f  81 da a3 79 fb c0 a5 43  |.](}.../...y...C|
+00000330  b6 3b 8d 90 30 00 80 98  16 83 ac 50 43 c7 3e 76  |.;..0......PC.>v|
+00000340  c5 dc 85 c2 19 75 a6 90  f8 2f 71 40 d9 a0 73 7e  |.....u.../q@..s~|
+00000350  fe 3b 1c d7 66 73 0f f0  42 c5 00 b1 2b be 41 2b  |.;..fs..B...+.A+|
+00000360  40 da 8f b0 f1 9e b0 0a  83 23 04 80 fb 4c fe 7e  |@........#...L.~|
+00000370  b4 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
 00000380  04 03 05 03 06 03 08 07  08 08 08 09 08 0a 08 0b  |................|
 00000390  08 04 08 05 08 06 04 01  05 01 06 01 03 03 02 03  |................|
 000003a0  03 01 02 01 03 02 02 02  04 02 05 02 06 02 00 00  |................|
@@ -114,26 +113,26 @@
 00000200  e5 35 16 03 03 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 03 00  |......._X.;t....|
-00000230  88 0f 00 00 84 08 04 00  80 48 ae 01 b6 4e e2 f0  |.........H...N..|
-00000240  6b d9 58 e9 95 fb 93 56  10 8f 15 dc e8 3e c7 49  |k.X....V.....>.I|
-00000250  b3 26 c2 06 91 4a 02 27  36 6b 21 cd aa 4a 62 6a  |.&...J.'6k!..Jbj|
-00000260  9d 44 6a b7 6c 16 d4 52  23 12 20 9d e5 5c 83 04  |.Dj.l..R#. ..\..|
-00000270  d8 38 45 61 8b 30 5b 7b  6b 77 be 47 5a f8 fe 4d  |.8Ea.0[{kw.GZ..M|
-00000280  c8 e7 83 97 44 b4 fb 71  89 30 f2 cf d2 49 82 e8  |....D..q.0...I..|
-00000290  d4 a8 73 86 44 29 30 17  7b b6 0e 4f 5f 6b 0c 33  |..s.D)0.{..O_k.3|
-000002a0  43 7f 9b 84 a4 9b c6 30  18 ff 1b 85 a7 a9 17 23  |C......0.......#|
-000002b0  2e 08 d3 57 10 af 49 95  2a 14 03 03 00 01 01 16  |...W..I.*.......|
-000002c0  03 03 00 28 00 00 00 00  00 00 00 00 43 b8 4c 8a  |...(........C.L.|
-000002d0  84 1e 6c 41 02 fb b6 74  1e 4d 69 0d c0 f8 fc 8b  |..lA...t.Mi.....|
-000002e0  ce 64 53 95 40 c8 e8 52  31 5f a3 65              |.dS.@..R1_.e|
+00000230  88 0f 00 00 84 08 04 00  80 41 83 55 9b 3c 8d 29  |.........A.U.<.)|
+00000240  ed 6c 58 91 85 cb 9b 19  df 61 09 d0 d3 73 fb 2b  |.lX......a...s.+|
+00000250  3b 4b 4b bd 64 7e e6 53  87 cb 6d 2f 78 1c 67 cf  |;KK.d~.S..m/x.g.|
+00000260  13 21 e0 ec 1b d7 d8 aa  06 a0 0e d5 86 6f ba 1e  |.!...........o..|
+00000270  97 e2 8c 9b 86 e2 8a 4d  62 1a bd 35 0e 2d 63 18  |.......Mb..5.-c.|
+00000280  a1 1f 7c ed fc 3b 89 c2  00 6d da 01 42 0a 47 95  |..|..;...m..B.G.|
+00000290  12 8e 01 82 62 58 f9 96  eb a9 aa c3 f8 96 ec 20  |....bX......... |
+000002a0  e1 65 a9 46 a8 af 4b 7c  aa 29 ee 9c 48 18 b3 4a  |.e.F..K|.)..H..J|
+000002b0  00 7f 79 97 87 27 92 ca  45 14 03 03 00 01 01 16  |..y..'..E.......|
+000002c0  03 03 00 28 00 00 00 00  00 00 00 00 da f3 01 f2  |...(............|
+000002d0  76 e2 df 95 82 0d cc 0c  7e b0 cc 15 69 ba 8c 64  |v.......~...i..d|
+000002e0  ac dc f3 45 58 a3 8f ed  f0 2a 43 ce              |...EX....*C.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 04 f3 da a1 b9  |..........(.....|
-00000010  b9 1a cf f3 a8 19 aa 23  12 65 8d 68 dc 37 09 9a  |.......#.e.h.7..|
-00000020  e4 0c cd e5 d4 3d cb 42  89 e4 ad 9e 49 34 de 05  |.....=.B....I4..|
-00000030  74 f0 33                                          |t.3|
+00000000  14 03 03 00 01 01 16 03  03 00 28 e4 27 5e 80 00  |..........(.'^..|
+00000010  ee db 03 4c 17 d1 9c bf  f5 68 5f eb a6 fb 0c 3f  |...L.....h_....?|
+00000020  4f c4 38 84 3e c2 e9 f4  9b 06 39 5f 89 06 3a bd  |O.8.>.....9_..:.|
+00000030  77 db 25                                          |w.%|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 00 33 c0  |..............3.|
-00000010  3f 9c 56 3e 9b ed bb 5e  81 0c 4a 01 65 91 f5 da  |?.V>...^..J.e...|
-00000020  f6 4b 62 15 03 03 00 1a  00 00 00 00 00 00 00 02  |.Kb.............|
-00000030  55 6f 8d 18 50 1f aa 00  94 9b 79 26 f0 3e 0a c6  |Uo..P.....y&.>..|
-00000040  45 b0                                             |E.|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 2b 98 2b  |.............+.+|
+00000010  d6 dc d2 69 03 c9 0e 44  46 d1 5e d2 5a 14 89 7b  |...i...DF.^.Z..{|
+00000020  60 ab 62 15 03 03 00 1a  00 00 00 00 00 00 00 02  |`.b.............|
+00000030  b9 7a 17 4b 10 5f 25 90  14 75 bb aa 42 de 7b 63  |.z.K._%..u..B.{c|
+00000040  69 e8                                             |i.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA
index 25120914e850cd..7b2a3631768e72 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 80 e4 9b 9d a9  |....]...Y.......|
-00000010  59 27 7f 44 b9 4b 90 31  c7 66 03 90 d6 9b ef 17  |Y'.D.K.1.f......|
-00000020  f8 fb e5 63 04 68 f6 ce  a1 a6 f4 20 cb 84 55 fa  |...c.h..... ..U.|
-00000030  41 77 48 0f 0a 5a 24 92  e3 59 b2 d9 91 0c 18 4a  |AwH..Z$..Y.....J|
-00000040  bf af ad db 64 db cb 57  d8 0b de 46 c0 09 00 00  |....d..W...F....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 6d b7 f7 cf 1d  |....]...Y..m....|
+00000010  f9 c0 02 cb ee 90 23 93  41 8e 26 24 3e 74 31 ce  |......#.A.&$>t1.|
+00000020  4f 53 f8 9d 0f 94 02 b2  66 c9 87 20 d6 5c 35 52  |OS......f.. .\5R|
+00000030  4b b1 f2 bb 2e 1d 95 ff  7d 83 f0 58 a8 0a ed b1  |K.......}..X....|
+00000040  54 25 03 ca ea 7b 8d 1a  8f 9f 43 51 c0 09 00 00  |T%...{....CQ....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -58,17 +57,17 @@
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
 00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
-00000280  1d 20 2f 6b 4c 95 75 59  25 2f f7 fd b1 1f d2 9e  |. /kL.uY%/......|
-00000290  2f 38 5e 57 1a 7c 36 99  1e 11 4a 3f f7 13 5b 0b  |/8^W.|6...J?..[.|
-000002a0  90 33 04 03 00 8a 30 81  87 02 42 01 b4 34 3f d0  |.3....0...B..4?.|
-000002b0  41 09 00 12 f4 79 20 f4  b7 80 5c d1 35 9d 8b d2  |A....y ...\.5...|
-000002c0  fa c9 4a a9 44 6b 05 95  c5 a7 50 08 0d 73 66 3e  |..J.Dk....P..sf>|
-000002d0  dd 49 e4 a4 c6 c0 12 ca  0b 4a df bc c1 3e ec 88  |.I.......J...>..|
-000002e0  ec 9a 0e 71 15 4d 45 98  04 3a 51 7a 67 02 41 15  |...q.ME..:Qzg.A.|
-000002f0  17 de b0 5c 03 a5 74 0e  0f 2b 53 6e 55 17 73 b8  |...\..t..+SnU.s.|
-00000300  ac 16 70 1a 95 f9 25 b1  fc 4b 9d c7 b1 f4 71 f6  |..p...%..K....q.|
-00000310  86 2d 5b 74 9e d3 4e 1b  40 67 f4 a6 62 2e c8 4d  |.-[t..N.@g..b..M|
-00000320  66 f7 32 e9 05 df d5 b0  e8 1a b7 b1 48 c4 1c 91  |f.2.........H...|
+00000280  1d 20 04 b4 79 b4 2c 1d  0f b3 4b ff 67 e7 24 88  |. ..y.,...K.g.$.|
+00000290  d6 db 4f 1e 66 da 0e f2  89 5a 53 ed 4e ba ad 4c  |..O.f....ZS.N..L|
+000002a0  81 0a 04 03 00 8a 30 81  87 02 42 01 fb 16 53 43  |......0...B...SC|
+000002b0  2b 86 61 0a 58 a0 68 c1  cd 2c ff ec 79 7f 83 fa  |+.a.X.h..,..y...|
+000002c0  cc 0b 24 9d 98 54 d0 dc  90 55 e1 b3 e6 48 69 1a  |..$..T...U...Hi.|
+000002d0  55 62 f4 da 8f 60 db f7  76 80 d5 4d 37 f6 43 49  |Ub...`..v..M7.CI|
+000002e0  95 3d 96 f6 e2 fd a4 07  ae 24 8c fa bd 02 41 20  |.=.......$....A |
+000002f0  a1 50 78 a3 dd 99 c0 cf  74 f1 c0 79 b1 13 9d bc  |.Px.....t..y....|
+00000300  0b 37 cf 7c 09 11 b8 a4  71 65 e8 be ff 3a b9 85  |.7.|....qe...:..|
+00000310  cd b4 30 f8 1f d6 2e 83  96 6c 01 3e d2 00 a7 5b  |..0......l.>...[|
+00000320  23 c6 d0 69 eb 90 49 e3  46 ed 45 96 3b 07 d4 a8  |#..i..I.F.E.;...|
 00000330  16 03 03 00 3a 0d 00 00  36 03 01 02 40 00 2e 04  |....:...6...@...|
 00000340  03 05 03 06 03 08 07 08  08 08 09 08 0a 08 0b 08  |................|
 00000350  04 08 05 08 06 04 01 05  01 06 01 03 03 02 03 03  |................|
@@ -110,31 +109,31 @@
 00000200  e5 35 16 03 03 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 03 00  |......._X.;t....|
-00000230  88 0f 00 00 84 08 04 00  80 70 66 f2 ac fb f7 29  |.........pf....)|
-00000240  15 31 a2 12 de 37 3f cc  97 74 5c 5b 7e 6d e4 f8  |.1...7?..t\[~m..|
-00000250  b0 b3 3d 9c ee 32 bf d7  64 90 d7 af ad 8f 61 77  |..=..2..d.....aw|
-00000260  f2 c0 7e 6f 91 1d 4e 95  92 3e ab 23 f0 ac d8 de  |..~o..N..>.#....|
-00000270  32 69 cd bc 04 4c d1 a3  77 7a af ac f0 64 41 aa  |2i...L..wz...dA.|
-00000280  a0 53 f0 89 89 a4 6f 1f  67 21 16 55 4e dc cb a8  |.S....o.g!.UN...|
-00000290  12 7d cb a0 5c a9 48 48  d9 af 03 f0 75 ed 32 72  |.}..\.HH....u.2r|
-000002a0  d5 da 34 a3 ea 82 08 8f  00 fc 7d 1d b8 11 ff f7  |..4.......}.....|
-000002b0  09 52 a8 cc a8 66 b0 06  1e 14 03 03 00 01 01 16  |.R...f..........|
+00000230  88 0f 00 00 84 08 04 00  80 3f 4a c2 4f 36 85 f0  |.........?J.O6..|
+00000240  d0 c6 b6 8f f1 cc 45 c1  2f f2 c7 24 1e 0f 04 dc  |......E./..$....|
+00000250  f5 af 6e 38 eb aa a6 6f  36 f4 80 dd 78 78 a7 d4  |..n8...o6...xx..|
+00000260  50 3a df e1 23 c4 3f 58  df 1a c0 1d 57 a5 46 3b  |P:..#.?X....W.F;|
+00000270  5d 09 ac 62 63 28 8a a2  b5 d4 9b 88 7c b9 4d b4  |]..bc(......|.M.|
+00000280  66 b2 9d 53 6e 15 9c f2  9b c7 14 ca 19 7f 00 38  |f..Sn..........8|
+00000290  81 a3 7b 44 e8 3d 6d 54  0f b3 81 fd 82 07 4d a1  |..{D.=mT......M.|
+000002a0  3e 8c 30 34 cd 6e 55 96  58 bf 86 8b 9c f6 be 94  |>.04.nU.X.......|
+000002b0  f4 a8 7e 4d 7f 03 07 7e  98 14 03 03 00 01 01 16  |..~M...~........|
 000002c0  03 03 00 40 00 00 00 00  00 00 00 00 00 00 00 00  |...@............|
-000002d0  00 00 00 00 9c 7d d4 9e  59 53 e7 66 64 63 9c cb  |.....}..YS.fdc..|
-000002e0  58 03 03 26 fe d9 15 eb  03 1c 8f a7 9c 5a 86 4a  |X..&.........Z.J|
-000002f0  6c 4e 06 4a 80 91 94 00  6f 7d 38 6a ea a3 68 df  |lN.J....o}8j..h.|
-00000300  17 08 14 ed                                       |....|
+000002d0  00 00 00 00 c7 88 1e 15  dd 36 31 22 0f 30 d1 4d  |.........61".0.M|
+000002e0  40 2e 3a dd 05 cc fd a8  d2 ea f8 d9 79 1d 07 46  |@.:.........y..F|
+000002f0  2c 80 ab ab 54 3c 10 5a  a7 79 d2 1c 16 18 94 eb  |,...T<.Z.y......|
+00000300  46 69 cc 03                                       |Fi..|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 40 7e 6d 15 90 c5  |..........@~m...|
-00000010  99 96 ca bb 16 b5 5a 55  3e b0 ef 3f ab e5 b6 8c  |......ZU>..?....|
-00000020  51 1d 18 c7 c2 25 86 e0  db c1 d0 38 85 51 4e 8d  |Q....%.....8.QN.|
-00000030  37 51 92 cc d0 64 37 b7  67 7b 2c fc e7 1e 16 f6  |7Q...d7.g{,.....|
-00000040  76 3a 94 48 68 eb dc cc  cf 2a 4d                 |v:.Hh....*M|
+00000000  14 03 03 00 01 01 16 03  03 00 40 9e 65 27 5b 92  |..........@.e'[.|
+00000010  1e 2b 1a bc 81 ab 85 29  51 c1 38 04 b6 97 e5 4b  |.+.....)Q.8....K|
+00000020  b1 7d a5 e2 6d e7 b1 1a  33 6c f1 3d a4 9c de 2d  |.}..m...3l.=...-|
+00000030  b3 8a 01 da cc f1 d7 83  b1 1e 84 cb b7 e7 fe e6  |................|
+00000040  26 83 b0 2d 6f a9 77 46  55 44 7a                 |&..-o.wFUDz|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 db 14 ae  78 62 50 37 42 b8 fc c6  |........xbP7B...|
-00000020  f1 84 40 75 7c e4 3f 8a  57 b8 1c 12 4a 6f 11 f2  |..@u|.?.W...Jo..|
-00000030  ba 1a a6 9b 20 15 03 03  00 30 00 00 00 00 00 00  |.... ....0......|
-00000040  00 00 00 00 00 00 00 00  00 00 09 93 aa 80 fd b2  |................|
-00000050  66 e2 83 0e f8 83 45 3d  e1 39 06 5d a3 12 9e 12  |f.....E=.9.]....|
-00000060  fd f5 cb 32 c4 3b ce 20  e4 10                    |...2.;. ..|
+00000010  00 00 00 00 00 e2 55 06  b8 6f 63 c4 63 78 76 4b  |......U..oc.cxvK|
+00000020  c8 63 8b 4b c6 11 2c ff  dc fc 20 f7 52 fe fa 5f  |.c.K..,... .R.._|
+00000030  e3 45 3a f2 a1 15 03 03  00 30 00 00 00 00 00 00  |.E:......0......|
+00000040  00 00 00 00 00 00 00 00  00 00 0e cb 88 2f 1f be  |............./..|
+00000050  9c 76 4d db 75 7f eb 01  ae bd 76 28 07 41 49 6c  |.vM.u.....v(.AIl|
+00000060  4c 82 84 d5 fc d3 75 f4  4b 81                    |L.....u.K.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA
index 3bfb4aaabd829a..25fc245b650812 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 c0 dd 18 ad 41  |....]...Y......A|
-00000010  2b ee fd 45 1f c0 c1 10  75 a7 1d 80 74 3e 8e 66  |+..E....u...t>.f|
-00000020  18 c8 64 c2 b4 89 4f 19  ff e0 0c 20 be c6 2a 8e  |..d...O.... ..*.|
-00000030  73 0a 1e 7a 2a d2 81 71  11 ba e9 de 02 0a aa 52  |s..z*..q.......R|
-00000040  76 b7 43 a3 49 a0 81 24  9c 57 4c 26 c0 2f 00 00  |v.C.I..$.WL&./..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 5f da ab 10 86  |....]...Y.._....|
+00000010  4c 91 60 4c ec 28 20 d4  37 84 c4 d0 87 bb 9d a9  |L.`L.( .7.......|
+00000020  5a c0 86 81 d9 91 38 5a  ef 3f ae 20 ec 14 b6 de  |Z.....8Z.?. ....|
+00000030  b7 cf 59 09 43 dc 59 3f  74 89 10 f2 82 ea 60 46  |..Y.C.Y?t.....`F|
+00000040  8f a3 6a 0f 61 0f 2d 66  24 c3 fb 7f c0 2f 00 00  |..j.a.-f$..../..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,18 +61,18 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 5a f3 c3  |............ Z..|
-000002d0  1b 34 9a 1a 01 68 65 fd  25 e5 e4 62 f4 17 d6 00  |.4...he.%..b....|
-000002e0  88 ae 5e fa 6b ef 60 96  e9 96 1e 33 0f 08 04 00  |..^.k.`....3....|
-000002f0  80 74 91 43 7a 3e 02 93  c6 6c 6d 36 86 2f 74 51  |.t.Cz>...lm6./tQ|
-00000300  50 84 a2 0b 1c b4 90 71  72 2b f9 7d 35 2a a6 fc  |P......qr+.}5*..|
-00000310  56 b1 fa 36 e0 cb ea 5a  4e 89 71 3f 28 d3 fc 90  |V..6...ZN.q?(...|
-00000320  de 21 0c 03 84 d9 23 78  b6 58 f2 03 02 27 48 f9  |.!....#x.X...'H.|
-00000330  6d 6c 2b eb 62 36 47 66  55 fc d9 77 42 1e 9b 93  |ml+.b6GfU..wB...|
-00000340  00 0f 5a 71 76 af 2c d9  b7 c3 6e e8 7a 64 34 0f  |..Zqv.,...n.zd4.|
-00000350  78 36 d7 cf a1 bb 3d 0a  23 64 c4 70 f0 78 8e 42  |x6....=.#d.p.x.B|
-00000360  80 42 1f 0f 1d 7f c9 b6  7b 9c 2a 30 6c 7a ef 0c  |.B......{.*0lz..|
-00000370  2f 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |/....:...6...@..|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 2c c4 b9  |............ ,..|
+000002d0  13 19 85 99 cb 09 f3 5c  3a a1 b2 16 ee 77 6a cd  |.......\:....wj.|
+000002e0  23 6c 08 00 7e 6b c0 67  a8 cd 8b 62 64 08 04 00  |#l..~k.g...bd...|
+000002f0  80 90 74 bf ce f7 94 f1  94 b1 95 04 4a ab d6 08  |..t.........J...|
+00000300  23 11 8d ce 4e 7b 36 ee  67 d2 26 af 11 0e 33 58  |#...N{6.g.&...3X|
+00000310  12 cb e5 3b 5b 5c f3 d1  82 19 2e 55 6b 98 05 6e  |...;[\.....Uk..n|
+00000320  3c 5e 04 f5 3e df 76 c3  e5 46 e7 a6 bb f7 d4 d5  |<^..>.v..F......|
+00000330  e8 fd 20 d3 ce 3e 9d a0  90 9a 10 52 a7 04 c9 e9  |.. ..>.....R....|
+00000340  28 6f 3f ff e1 0a 10 d0  25 04 ea e4 84 4c b7 80  |(o?.....%....L..|
+00000350  e4 fe a7 a6 da db cc b0  e0 62 80 10 fc 03 16 94  |.........b......|
+00000360  f2 dd 0d 3f aa 11 45 af  e3 e4 7b e6 bc d6 75 91  |...?..E...{...u.|
+00000370  99 16 03 03 00 3a 0d 00  00 36 03 01 02 40 00 2e  |.....:...6...@..|
 00000380  04 03 05 03 06 03 08 07  08 08 08 09 08 0a 08 0b  |................|
 00000390  08 04 08 05 08 06 04 01  05 01 06 01 03 03 02 03  |................|
 000003a0  03 01 02 01 03 02 02 02  04 02 05 02 06 02 00 00  |................|
@@ -114,26 +113,26 @@
 00000200  e5 35 16 03 03 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 03 00  |......._X.;t....|
-00000230  88 0f 00 00 84 08 04 00  80 56 a2 bb f3 05 94 90  |.........V......|
-00000240  46 bc ef 79 ea 74 f9 a4  5c 27 59 dd 93 53 c3 9f  |F..y.t..\'Y..S..|
-00000250  07 b0 bf c1 e2 dc 39 b9  0d 63 62 d1 d0 88 65 e4  |......9..cb...e.|
-00000260  2b 28 d3 ad b1 78 60 4c  0d a6 1f 2e a1 bc 36 81  |+(...x`L......6.|
-00000270  31 f0 aa 0b 52 e6 04 69  ba 8a 9d c1 fd 25 d3 50  |1...R..i.....%.P|
-00000280  43 5b ed fc 78 21 2b cc  13 f8 db f1 8b e7 57 d8  |C[..x!+.......W.|
-00000290  59 f3 cf 54 ab d0 ea d6  8c 61 32 79 b8 be a6 c7  |Y..T.....a2y....|
-000002a0  87 0a 35 88 70 f7 3f 2d  bd 1b 7c 57 35 32 1b 81  |..5.p.?-..|W52..|
-000002b0  87 08 e3 b0 1f a1 2b 13  fb 14 03 03 00 01 01 16  |......+.........|
-000002c0  03 03 00 28 00 00 00 00  00 00 00 00 49 94 ed a1  |...(........I...|
-000002d0  a3 13 e0 f4 20 2a 63 4d  ef 24 d3 6c 8d 6c de b3  |.... *cM.$.l.l..|
-000002e0  92 16 21 0d b0 6c 64 df  1b 32 ca dc              |..!..ld..2..|
+00000230  88 0f 00 00 84 08 04 00  80 4d c1 8a 3d 2b 1f a0  |.........M..=+..|
+00000240  ad 6f 1c b6 44 7c cc 0d  21 6f e8 31 51 58 51 fe  |.o..D|..!o.1QXQ.|
+00000250  84 f3 41 40 12 48 29 0d  20 16 d1 6a 4b 38 0b c8  |..A@.H). ..jK8..|
+00000260  b3 70 3f 4a ca 17 da 05  30 ec 6c 4f 55 e2 ee e5  |.p?J....0.lOU...|
+00000270  9a 8c a7 9f c1 96 79 cf  53 b6 67 c8 cb 67 d3 23  |......y.S.g..g.#|
+00000280  07 8a 3f ef df e5 e6 84  f6 5f 5e 23 57 89 cc 77  |..?......_^#W..w|
+00000290  99 ed 3d 58 8a ec eb bb  64 62 d1 44 7f b6 45 85  |..=X....db.D..E.|
+000002a0  89 06 90 56 48 98 8a 43  93 64 53 df 3a 8c b3 93  |...VH..C.dS.:...|
+000002b0  91 81 7b 60 95 8f 99 99  eb 14 03 03 00 01 01 16  |..{`............|
+000002c0  03 03 00 28 00 00 00 00  00 00 00 00 dd 93 96 02  |...(............|
+000002d0  47 0e 1d 2f 6a 76 12 e5  56 53 8f 7f c1 cd f3 5e  |G../jv..VS.....^|
+000002e0  3c 94 35 1b fe d5 33 97  b2 5b a3 29              |<.5...3..[.)|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 b9 2c 96 43 03  |..........(.,.C.|
-00000010  f9 8c 28 34 4e 8b 58 ba  d7 1a c4 87 d8 67 5c 0f  |..(4N.X......g\.|
-00000020  36 36 67 54 4e f4 6c 9c  0c 0e 1f df ca a3 8d ab  |66gTN.l.........|
-00000030  31 f2 84                                          |1..|
+00000000  14 03 03 00 01 01 16 03  03 00 28 de 60 8a ea b5  |..........(.`...|
+00000010  74 66 35 35 39 bb 62 ab  17 7d 91 c3 1a 5a e5 6c  |tf559.b..}...Z.l|
+00000020  49 14 c8 bc bd d6 b6 7e  2f 8e d4 40 5a ae ee 89  |I......~/..@Z...|
+00000030  89 ae af                                          |...|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 de 90 16  |................|
-00000010  8e ec 2c 60 b8 a7 4f b6  26 8a c9 78 ff e0 73 19  |..,`..O.&..x..s.|
-00000020  b3 01 c1 15 03 03 00 1a  00 00 00 00 00 00 00 02  |................|
-00000030  8a 4b 2c 4b 99 51 81 27  34 28 63 00 15 24 e1 47  |.K,K.Q.'4(c..$.G|
-00000040  4a 2f                                             |J/|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 3c 92 2d  |.............<.-|
+00000010  44 23 5b eb 34 dc 9a 4d  c2 fe a7 88 cb 6f 8d 62  |D#[.4..M.....o.b|
+00000020  4b 2a bf 15 03 03 00 1a  00 00 00 00 00 00 00 02  |K*..............|
+00000030  90 82 82 54 5d 63 6e 8b  50 71 6e e8 fd 75 96 9e  |...T]cn.Pqn..u..|
+00000040  d0 0d                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15
index b933f592befe72..6500aec8b01514 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 0e 33 06 1f 9d  |....]...Y...3...|
-00000010  3d 0e 59 21 38 7d 4c ea  a2 2a 2a c7 99 7b e9 bf  |=.Y!8}L..**..{..|
-00000020  61 e2 44 a1 10 5e 5d a1  e4 fd 90 20 c1 f0 1c 8e  |a.D..^].... ....|
-00000030  00 2f d9 a0 45 23 76 35  e0 01 2e 49 b8 4d b4 76  |./..E#v5...I.M.v|
-00000040  08 65 3f cd 8b dc 80 ea  fd 31 9f 47 c0 2f 00 00  |.e?......1.G./..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 7b 21 bd ee 4b  |....]...Y..{!..K|
+00000010  af e3 88 cb 18 15 e5 f3  ef a5 a7 b3 a1 66 06 b2  |.............f..|
+00000020  f1 cc d7 36 7e 18 d1 f6  2e 3e cd 20 34 09 01 9f  |...6~....>. 4...|
+00000030  c6 80 10 43 c1 ed e6 c1  29 1c ed ac 61 36 37 4f  |...C....)...a67O|
+00000040  8e 00 44 9d b9 cb 51 0b  a2 9c 64 be c0 2f 00 00  |..D...Q...d../..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,18 +61,18 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 09 ce 63  |............ ..c|
-000002d0  9c 52 37 83 ef 21 78 60  eb 8b dd 22 91 fb 34 4f  |.R7..!x`..."..4O|
-000002e0  ee 04 ef 48 75 2f 49 7e  3f 0b 00 62 15 04 01 00  |...Hu/I~?..b....|
-000002f0  80 a0 11 99 d2 bc a9 fd  59 ad 38 20 bb 44 85 8e  |........Y.8 .D..|
-00000300  89 35 2e 42 ff a2 87 81  86 f5 e3 6c 9d 84 2a cf  |.5.B.......l..*.|
-00000310  0d cc 6a c0 ce 31 01 91  48 78 75 23 24 3e 3d 93  |..j..1..Hxu#$>=.|
-00000320  bf ad c9 49 9d 63 66 cd  4b cc 92 0f 6d 64 2c 80  |...I.cf.K...md,.|
-00000330  71 22 bf 6d 62 8e 8a f7  19 6f 50 2a 86 46 e4 46  |q".mb....oP*.F.F|
-00000340  71 73 df 8c 25 84 6f 28  a7 8c bd 78 01 22 a2 91  |qs..%.o(...x."..|
-00000350  f4 17 ef 88 55 9d d5 ac  42 5a 8a c8 7a 1b bf d1  |....U...BZ..z...|
-00000360  d9 6d 15 42 b9 37 16 7b  2b 3c c7 58 99 da ab 98  |.m.B.7.{+<.X....|
-00000370  f3 16 03 03 00 0c 0d 00  00 08 01 01 00 02 04 01  |................|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 d3 22 bb  |............ .".|
+000002d0  c4 42 90 54 0a 43 f6 26  06 c1 ad 71 c8 82 ba 03  |.B.T.C.&...q....|
+000002e0  9b cd be a4 a8 04 5a 30  69 ec b5 c9 79 04 01 00  |......Z0i...y...|
+000002f0  80 ab c7 ca 24 9b db 7d  8c 81 c4 c4 46 49 2a 45  |....$..}....FI*E|
+00000300  69 31 1b dc ef 01 ce 9f  e4 da cf 6c 04 4c e3 4e  |i1.........l.L.N|
+00000310  16 84 05 fe 48 f4 21 60  fc d4 e1 6c 48 8c 87 2d  |....H.!`...lH..-|
+00000320  1f 56 2c ad 88 2b 5c 8d  4f 36 93 d6 a3 b1 32 4a  |.V,..+\.O6....2J|
+00000330  ef 0f e6 db 82 1c f2 ea  38 08 2a 62 8b a3 bd 4e  |........8.*b...N|
+00000340  8b 2a ae eb 0e e5 f1 88  ff 3c de f8 ed d7 c3 07  |.*.......<......|
+00000350  05 92 bb e5 6d 15 23 c8  54 19 a6 cf d1 4f e2 b1  |....m.#.T....O..|
+00000360  a3 4d ff 6f 22 32 5b 58  f7 58 c1 9f 58 59 b5 e2  |.M.o"2[X.X..XY..|
+00000370  7b 16 03 03 00 0c 0d 00  00 08 01 01 00 02 04 01  |{...............|
 00000380  00 00 16 03 03 00 04 0e  00 00 00                 |...........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 01 fd 0b 00 01  f9 00 01 f6 00 01 f3 30  |...............0|
@@ -111,26 +110,26 @@
 00000200  e5 35 16 03 03 00 25 10  00 00 21 20 2f e5 7d a3  |.5....%...! /.}.|
 00000210  47 cd 62 43 15 28 da ac  5f bb 29 07 30 ff f6 84  |G.bC.(.._.).0...|
 00000220  af c4 cf c2 ed 90 99 5f  58 cb 3b 74 16 03 03 00  |......._X.;t....|
-00000230  88 0f 00 00 84 04 01 00  80 01 83 0b 8b bf a3 50  |...............P|
-00000240  03 89 e8 24 9b 9e 2e f5  7b 72 58 b1 b1 ba b2 64  |...$....{rX....d|
-00000250  9f a9 e2 b4 00 78 79 50  ec 55 18 43 e5 c4 a4 76  |.....xyP.U.C...v|
-00000260  c8 21 bc 7e e0 c4 2d 78  85 d7 33 ca d7 4d e0 f1  |.!.~..-x..3..M..|
-00000270  cd 6d bd 17 2f a0 b9 39  93 29 ba d7 09 4f bb 08  |.m../..9.)...O..|
-00000280  b0 b0 05 f1 83 de d0 db  39 f9 b4 34 a3 ca d3 76  |........9..4...v|
-00000290  97 35 f6 ea cd 53 fe bb  94 99 30 e3 a2 0a 29 1a  |.5...S....0...).|
-000002a0  5f f4 28 0e 8c 80 fc 75  84 a4 e2 3a 29 a9 50 be  |_.(....u...:).P.|
-000002b0  11 99 bb a5 12 64 5c af  5f 14 03 03 00 01 01 16  |.....d\._.......|
-000002c0  03 03 00 28 00 00 00 00  00 00 00 00 8e 51 58 0e  |...(.........QX.|
-000002d0  1a fd 8e 01 f1 6b 59 94  54 ab 00 be 45 8b 4c ae  |.....kY.T...E.L.|
-000002e0  70 c3 db 53 de 82 12 6c  cb df 32 72              |p..S...l..2r|
+00000230  88 0f 00 00 84 04 01 00  80 8f 22 b5 46 ab 82 02  |..........".F...|
+00000240  f8 a8 f8 63 d9 0f eb d4  2b 8d 02 de ce 79 d5 a1  |...c....+....y..|
+00000250  20 bb 70 7a b2 36 6a b5  52 81 f5 ea f7 23 b5 41  | .pz.6j.R....#.A|
+00000260  86 35 90 cc 64 4a 68 7e  e3 ae c1 97 32 3b c2 a9  |.5..dJh~....2;..|
+00000270  e0 f0 07 14 63 d5 08 15  59 46 f5 ea a6 39 5c 98  |....c...YF...9\.|
+00000280  39 7e 17 d8 74 ae 05 a3  f5 3a 71 74 e8 b4 c9 a4  |9~..t....:qt....|
+00000290  1c 82 04 ca fe 5f 97 23  8a c1 f9 ce d1 5d 0e 81  |....._.#.....]..|
+000002a0  da 5f e1 b6 76 80 3c cf  9f 19 79 cf 33 d0 0a fe  |._..v.<...y.3...|
+000002b0  19 fc 2d 9a bb 24 cd d4  79 14 03 03 00 01 01 16  |..-..$..y.......|
+000002c0  03 03 00 28 00 00 00 00  00 00 00 00 28 78 b8 0b  |...(........(x..|
+000002d0  59 d8 a8 11 21 ed 45 74  02 00 50 33 42 b9 0a d2  |Y...!.Et..P3B...|
+000002e0  8c 9c a3 45 6e b5 9d 3e  5b 30 a9 2e              |...En..>[0..|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 7b 7f 81 c9 d7  |..........({....|
-00000010  1d 3a 32 48 da 92 d6 9f  78 6e 2f d3 e9 7e 9f 12  |.:2H....xn/..~..|
-00000020  9b 0b e1 00 e8 2f 4b 63  2c 3d 94 e4 f8 1e 06 7d  |...../Kc,=.....}|
-00000030  a7 7e 6a                                          |.~j|
+00000000  14 03 03 00 01 01 16 03  03 00 28 f8 f5 85 19 36  |..........(....6|
+00000010  be 6e 58 45 66 04 c4 f9  e7 fd 50 55 3b 07 6c 50  |.nXEf.....PU;.lP|
+00000020  16 8c 2e 72 cf be 78 0a  8a 82 91 ed c1 72 10 d3  |...r..x......r..|
+00000030  cf 42 b5                                          |.B.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 ee 21 1b  |..............!.|
-00000010  45 15 6a 0c 79 12 4d 79  d2 26 db fc e4 da 0f e4  |E.j.y.My.&......|
-00000020  20 7e c7 15 03 03 00 1a  00 00 00 00 00 00 00 02  | ~..............|
-00000030  2a 46 62 6b 5e c3 14 56  e1 fb d0 61 f5 e8 7b 2f  |*Fbk^..V...a..{/|
-00000040  cc fd                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 53 4b a2  |.............SK.|
+00000010  e4 5f 51 70 46 3d e3 41  28 8b 82 02 e2 27 8d eb  |._QpF=.A(....'..|
+00000020  42 65 7f 15 03 03 00 1a  00 00 00 00 00 00 00 02  |Be..............|
+00000030  f3 31 ed 2c ca e5 13 e8  93 cd d7 51 4b c5 16 88  |.1.,.......QK...|
+00000040  c0 a4                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS
index 646026793f0a58..b4c5102535dcee 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS
+++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 cd 47 5d a7 66  |....]...Y...G].f|
-00000010  aa b1 e1 bd ed 83 bd 3d  4a b7 b2 08 b8 79 08 c5  |.......=J....y..|
-00000020  22 7b 8d be fe 55 4c 2d  b5 4c b9 20 13 26 2a e6  |"{...UL-.L. .&*.|
-00000030  ab 60 4c 53 8c b7 27 c4  d5 12 ff 38 64 b1 a2 1d  |.`LS..'....8d...|
-00000040  4f a4 c7 28 53 95 01 8f  7e 4a 7b 02 c0 2f 00 00  |O..(S...~J{../..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 0d 73 c5 43 a1  |....]...Y...s.C.|
+00000010  71 b6 21 da 7a f6 76 44  60 8a 84 ec 6b 1d 70 01  |q.!.z.vD`...k.p.|
+00000020  d8 b2 29 48 db 5d ea da  ea 79 bb 20 3f b9 66 fe  |..)H.]...y. ?.f.|
+00000030  73 db fc 90 18 3f ac e5  1f 5d 86 24 80 75 ec a3  |s....?...].$.u..|
+00000040  c6 aa e9 05 c1 47 21 bd  30 f6 41 43 c0 2f 00 00  |.....G!.0.AC./..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 66 0b  00 02 62 00 02 5f 00 02  |......f...b.._..|
 00000070  5c 30 82 02 58 30 82 01  8d a0 03 02 01 02 02 11  |\0..X0..........|
@@ -63,17 +62,17 @@
 000002a0  fa b1 3f 14 11 89 66 79  d1 8e 88 0e 0b a0 9e 30  |..?...fy.......0|
 000002b0  2a c0 67 ef ca 46 02 88  e9 53 81 22 69 22 97 ad  |*.g..F...S."i"..|
 000002c0  80 93 d4 f7 dd 70 14 24  d7 70 0a 46 a1 16 03 03  |.....p.$.p.F....|
-000002d0  00 ac 0c 00 00 a8 03 00  1d 20 a8 94 95 94 cc 16  |......... ......|
-000002e0  f1 dc 11 b6 c5 52 b3 fe  95 4d 28 34 1f 2d 87 ec  |.....R...M(4.-..|
-000002f0  8d 56 51 0e 5b 92 03 f9  60 0d 08 04 00 80 09 3a  |.VQ.[...`......:|
-00000300  99 39 d8 3f 63 b4 86 12  ba ce e6 6d d6 22 aa d8  |.9.?c......m."..|
-00000310  31 60 86 eb 48 cc c0 87  97 a5 0d c7 42 86 cc f8  |1`..H.......B...|
-00000320  f7 f9 d5 1a 34 86 ec 41  02 08 99 c2 93 9b d1 b5  |....4..A........|
-00000330  57 a4 84 3c a8 93 0a c9  f7 1e a1 33 07 ca 60 c4  |W..<.......3..`.|
-00000340  4b 40 32 20 a6 22 3f 6d  4e 28 22 3b 52 70 9a 4d  |K@2 ."?mN(";Rp.M|
-00000350  fa 84 67 88 ba b5 0d 92  eb 23 94 90 00 e2 68 74  |..g......#....ht|
-00000360  5f 13 a3 d4 2d fb 24 f2  32 09 b1 e3 63 15 39 b1  |_...-.$.2...c.9.|
-00000370  9e 1e a6 61 fd 8d c6 cf  1f f7 f7 43 0c 64 16 03  |...a.......C.d..|
+000002d0  00 ac 0c 00 00 a8 03 00  1d 20 03 05 56 dd 40 c0  |......... ..V.@.|
+000002e0  b6 4d 5a df 26 e7 4a f1  a8 47 ef af 12 6e 5f 01  |.MZ.&.J..G...n_.|
+000002f0  2a 7a 19 1a 45 52 8c 47  d2 53 08 04 00 80 8a 6a  |*z..ER.G.S.....j|
+00000300  9d 8b 38 73 da 92 bc f6  05 79 90 af 7a 43 59 62  |..8s.....y..zCYb|
+00000310  bc 97 b6 af ef ce 5f 59  07 81 93 bc c5 3c 5f f9  |......_Y.....<_.|
+00000320  4e 04 45 74 5e cc 7a 6f  82 7a cf 86 0d 68 c9 35  |N.Et^.zo.z...h.5|
+00000330  1d 62 f0 3c ee 77 b5 4c  3a 40 ec 89 fc 97 ff a6  |.b.<.w.L:@......|
+00000340  34 13 8b bc 6b 83 92 e8  52 c5 c6 42 c9 25 ad 37  |4...k...R..B.%.7|
+00000350  41 e7 5a 52 d8 0f 7d fd  a8 9e 86 c6 1b b2 8b 50  |A.ZR..}........P|
+00000360  2a 1c 15 56 00 d8 a8 85  86 05 28 7f a1 3e ba f2  |*..V......(..>..|
+00000370  fe 92 07 c8 a4 4a 2a 5f  d1 53 82 09 9c 65 16 03  |.....J*_.S...e..|
 00000380  03 00 0c 0d 00 00 08 01  01 00 02 08 04 00 00 16  |................|
 00000390  03 03 00 04 0e 00 00 00                           |........|
 >>> Flow 3 (client to server)
@@ -119,26 +118,26 @@
 00000270  10 00 00 21 20 2f e5 7d  a3 47 cd 62 43 15 28 da  |...! /.}.G.bC.(.|
 00000280  ac 5f bb 29 07 30 ff f6  84 af c4 cf c2 ed 90 99  |._.).0..........|
 00000290  5f 58 cb 3b 74 16 03 03  00 88 0f 00 00 84 08 04  |_X.;t...........|
-000002a0  00 80 86 14 3f 28 40 db  2b 02 d6 56 d3 58 d0 77  |....?(@.+..V.X.w|
-000002b0  58 f8 a3 25 1f 18 d1 9c  0a d2 56 09 32 59 34 db  |X..%......V.2Y4.|
-000002c0  d9 2e 0a bf b4 c2 0a 86  ee 6e 29 56 53 aa 82 11  |.........n)VS...|
-000002d0  96 6d 86 29 7c 85 a4 71  56 04 71 5f e6 68 3f 3f  |.m.)|..qV.q_.h??|
-000002e0  71 54 13 a2 22 b4 3e 38  fa c2 96 a4 c4 ab 83 c6  |qT..".>8........|
-000002f0  f5 ca 7a ea 2c 8d 62 4d  76 d6 db 9c f0 0e 8c 2a  |..z.,.bMv......*|
-00000300  38 2f 9d 24 34 f4 33 73  54 a2 44 9a e3 4c 1f a7  |8/.$4.3sT.D..L..|
-00000310  ca 49 16 e8 35 29 29 d1  48 95 0a 38 19 64 4c e7  |.I..5)).H..8.dL.|
-00000320  0d a5 14 03 03 00 01 01  16 03 03 00 28 00 00 00  |............(...|
-00000330  00 00 00 00 00 09 7f fa  f5 c5 e5 b1 46 7e 3d e2  |............F~=.|
-00000340  d4 51 a7 b8 ae 0a 56 a3  8c 45 40 97 d4 c5 81 4e  |.Q....V..E@....N|
-00000350  6f 12 50 b3 f6                                    |o.P..|
+000002a0  00 80 2e 4c af b1 f2 9c  de 14 92 81 c4 7d d1 2f  |...L.........}./|
+000002b0  a3 ba ba df 6f 26 da 2d  86 b4 1f 60 cd fe e7 c1  |....o&.-...`....|
+000002c0  77 02 a5 58 3f 6a fc 1d  ef 93 23 0a 9c c9 70 93  |w..X?j....#...p.|
+000002d0  f8 0c 67 fd 58 83 96 85  62 da 31 e7 a6 78 9f 1c  |..g.X...b.1..x..|
+000002e0  dc 02 b3 b8 bc 05 26 92  e8 6a e7 3c db 5f 80 ee  |......&..j.<._..|
+000002f0  12 75 ff e6 36 36 e6 75  c2 77 d9 63 ef 60 89 db  |.u..66.u.w.c.`..|
+00000300  21 aa 27 85 11 9b 8c eb  be a3 e3 34 0e 01 93 ca  |!.'........4....|
+00000310  a6 65 e3 cd 0f b8 b5 c6  f0 d7 15 69 db 4b 57 d2  |.e.........i.KW.|
+00000320  05 0d 14 03 03 00 01 01  16 03 03 00 28 00 00 00  |............(...|
+00000330  00 00 00 00 00 b5 09 a0  c4 55 89 df 8a 60 83 f3  |.........U...`..|
+00000340  82 12 55 1d d5 50 11 81  74 0f cd b5 ed 9a 00 e7  |..U..P..t.......|
+00000350  58 f7 65 0e 8d                                    |X.e..|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 0b 0d 27 bb 5f  |..........(..'._|
-00000010  c5 fa 62 08 8f 7a 24 65  90 bc de be 28 ae a4 e2  |..b..z$e....(...|
-00000020  1f ac 18 7a 83 3e 90 bb  76 2f 73 ec 35 ca d3 e7  |...z.>..v/s.5...|
-00000030  d8 25 7f                                          |.%.|
+00000000  14 03 03 00 01 01 16 03  03 00 28 3f eb 87 50 b0  |..........(?..P.|
+00000010  ae c2 fd 68 30 95 94 61  1c 78 1e 60 3e 38 17 ef  |...h0..a.x.`>8..|
+00000020  ed 9b f1 10 26 5e 53 a3  8c 46 2e 6c 24 b2 ab a7  |....&^S..F.l$...|
+00000030  6c f0 ea                                          |l..|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 a7 07 a5  |................|
-00000010  b5 4c 26 d0 d1 6b 52 10  8f 7c 3a 4c 31 ce 74 fa  |.L&..kR..|:L1.t.|
-00000020  4a c7 9b 15 03 03 00 1a  00 00 00 00 00 00 00 02  |J...............|
-00000030  22 22 5a b9 ef 4f 05 9f  2e 1e 9c 11 e1 6c 0b 1e  |""Z..O.......l..|
-00000040  bd 10                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 fe de 40  |...............@|
+00000010  52 50 79 da 5f 31 52 52  d8 96 04 35 86 92 03 0b  |RPy._1RR...5....|
+00000020  6f 5f 04 15 03 03 00 1a  00 00 00 00 00 00 00 02  |o_..............|
+00000030  9c 85 24 b0 a9 17 24 cf  18 f6 ef f5 0d c6 77 6d  |..$...$.......wm|
+00000040  e0 b2                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES
index 6268dbcc7a4b61..774cb40e3dc931 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 61 e9 cc eb 72  |....]...Y..a...r|
-00000010  7c 11 18 0e 9d 6b 72 e9  be 84 f3 92 8d 5f e6 4c  ||....kr......_.L|
-00000020  ec 9e f0 00 ca 00 6f af  90 5b de 20 29 97 82 6d  |......o..[. )..m|
-00000030  57 ac 60 59 41 1d bb 29  b1 12 a4 ac 60 18 3b 51  |W.`YA..)....`.;Q|
-00000040  af 5c e7 80 1a dc 9d 72  ed 3a 74 96 c0 09 00 00  |.\.....r.:t.....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 15 ed ca 52 59  |....]...Y.....RY|
+00000010  e2 56 80 e2 f3 20 5b 7d  52 f3 67 1f 01 0d ad 30  |.V... [}R.g....0|
+00000020  36 a6 43 c2 ed 5e 34 c5  24 89 e1 20 c7 4c 5d 06  |6.C..^4.$.. .L].|
+00000030  01 7a 80 aa 84 0c 46 48  63 36 49 4a 9b 3f 8d ba  |.z....FHc6IJ.?..|
+00000040  78 1b cd f9 ef 03 df cd  ee 2c b1 79 c0 09 00 00  |x........,.y....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -57,39 +56,39 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 03  00 b7 0c 00 00 b3 03 00  |....*...........|
-00000280  1d 20 88 7d 69 d3 1b 2d  b5 dd 4e 0a f4 98 f3 8c  |. .}i..-..N.....|
-00000290  42 d7 ee e2 7c 28 dc f2  75 ec b0 9e ca ad cb 21  |B...|(..u......!|
-000002a0  59 34 04 03 00 8b 30 81  88 02 42 01 32 2c 84 f3  |Y4....0...B.2,..|
-000002b0  d8 7c 05 58 ac d0 25 46  42 11 b4 7c 0a cb ee 83  |.|.X..%FB..|....|
-000002c0  7f 68 36 b6 be f8 d2 0a  8d d7 bc 8a 95 d8 2d b3  |.h6...........-.|
-000002d0  fa 87 56 ae 4c 01 3f bf  29 d1 81 c1 5d e9 f0 93  |..V.L.?.)...]...|
-000002e0  f6 32 91 e7 da 18 84 dd  8d a4 94 3f 81 02 42 01  |.2.........?..B.|
-000002f0  70 96 e1 3c c9 aa b8 72  8d 8e 13 68 00 50 65 9c  |p..<...r...h.Pe.|
-00000300  cf c6 1e 5f 5a d0 80 e8  8b ff 24 df a9 55 42 d9  |..._Z.....$..UB.|
-00000310  75 83 67 d7 20 69 f1 29  2d 15 f4 83 f9 ff 3d c8  |u.g. i.)-.....=.|
-00000320  0e 79 a9 3e 86 38 4a c5  a2 93 f1 47 a2 43 41 a5  |.y.>.8J....G.CA.|
-00000330  bb 16 03 03 00 04 0e 00  00 00                    |..........|
+00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
+00000280  1d 20 b7 f5 92 bc 9b 4a  f9 62 3f 46 b8 b0 33 56  |. .....J.b?F..3V|
+00000290  1e 8d fc e9 68 af bf 67  9b a5 d0 9e a9 cc d9 65  |....h..g.......e|
+000002a0  7e 41 04 03 00 8a 30 81  87 02 41 08 b2 fe 6e 40  |~A....0...A...n@|
+000002b0  b7 5f 04 db eb 39 18 d5  e0 46 81 07 33 3a 29 fb  |._...9...F..3:).|
+000002c0  0b 19 76 ac 95 0d cd 4d  a4 f0 99 df 6d d6 73 79  |..v....M....m.sy|
+000002d0  ed 48 52 78 ea 7a 1d 4b  b1 67 d6 fd 21 3b c9 9d  |.HRx.z.K.g..!;..|
+000002e0  89 67 b7 b9 8e cf 35 28  62 28 3f 0b 02 42 01 7e  |.g....5(b(?..B.~|
+000002f0  4c a5 af 5b ba 3b d6 38  3b 34 b7 0c 69 27 92 ce  |L..[.;.8;4..i'..|
+00000300  34 ba bb 0d f6 32 65 fe  3c c0 9c 9d 92 88 b4 11  |4....2e.<.......|
+00000310  04 88 f5 b3 21 79 6c ed  6e f6 51 f5 e7 b1 3d 0d  |....!yl.n.Q...=.|
+00000320  bd d6 92 67 c8 90 71 7a  db cc cc 21 64 44 22 d4  |...g..qz...!dD".|
+00000330  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
 00000030  16 03 03 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000040  00 00 00 00 00 84 08 13  72 05 4e a7 cb ac c1 40  |........r.N....@|
-00000050  9e 31 9c a4 8f 7f f1 41  c6 63 19 39 3d d4 27 74  |.1.....A.c.9=.'t|
-00000060  f9 5c 59 88 15 c3 e2 a7  6a 6f 6d fb 52 6f 94 36  |.\Y.....jom.Ro.6|
-00000070  1e 8d 47 50 db                                    |..GP.|
+00000040  00 00 00 00 00 07 03 9e  fa a4 84 27 17 b8 dd 53  |...........'...S|
+00000050  12 4b 89 a1 47 98 22 e3  7b c8 d4 5c 18 bb 89 09  |.K..G.".{..\....|
+00000060  29 3a b9 af d3 38 4a 40  76 d6 15 37 80 19 9c ce  |):...8J@v..7....|
+00000070  32 5b 94 89 2e                                    |2[...|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 40 9f 65 82 54 e1  |..........@.e.T.|
-00000010  50 68 92 33 d1 f2 a1 1d  95 81 e1 df c3 b2 4c 9b  |Ph.3..........L.|
-00000020  f4 8d ee b2 4b 43 2f e9  e3 af 60 ae d4 4c 7a 4b  |....KC/...`..LzK|
-00000030  f5 03 22 f0 11 58 de 4d  ac 46 5a bf 98 da 01 1d  |.."..X.M.FZ.....|
-00000040  fa 19 ad a6 48 66 fa c1  25 4b a0                 |....Hf..%K.|
+00000000  14 03 03 00 01 01 16 03  03 00 40 2d 53 b0 b0 c1  |..........@-S...|
+00000010  05 78 e3 3c 5d 57 a5 04  9a 4b b9 f7 56 ce 5a 76  |.x.<]W...K..V.Zv|
+00000020  84 4d f2 46 2e fc c2 9c  ec 37 2b 4d 99 88 ab 30  |.M.F.....7+M...0|
+00000030  1b 83 7d d8 72 bf e7 c7  f7 cf b8 13 54 d5 a2 a2  |..}.r.......T...|
+00000040  dc 76 b3 01 a4 d0 a5 cc  eb 66 29                 |.v.......f)|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 b3 26 24  39 5d 7c fc 25 23 ee fc  |......&$9]|.%#..|
-00000020  3a 6a 38 08 f5 bf 5e cc  dc 34 83 1f 5e af b0 b4  |:j8...^..4..^...|
-00000030  ee 34 fc f5 e1 15 03 03  00 30 00 00 00 00 00 00  |.4.......0......|
-00000040  00 00 00 00 00 00 00 00  00 00 84 b2 cc 06 95 78  |...............x|
-00000050  de 1d a0 cc d3 15 32 b7  89 74 8d 99 70 13 37 c3  |......2..t..p.7.|
-00000060  e2 99 6e fe 8c 2d 69 77  cc 93                    |..n..-iw..|
+00000010  00 00 00 00 00 11 31 80  89 b8 32 e7 66 a6 eb c5  |......1...2.f...|
+00000020  ca 4b f7 2b 47 73 e9 cd  9f 4e 9a 5e 3f 99 5a 29  |.K.+Gs...N.^?.Z)|
+00000030  00 0d 4f 4e 93 15 03 03  00 30 00 00 00 00 00 00  |..ON.....0......|
+00000040  00 00 00 00 00 00 00 00  00 00 d9 18 f4 dd 64 64  |..............dd|
+00000050  38 27 a7 96 d5 14 d1 b2  26 9c 14 96 54 2a cf d7  |8'......&...T*..|
+00000060  4c d0 b6 c3 20 fe 33 73  78 e5                    |L... .3sx.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM
index e235f27b75f992..86095340d40e2d 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 ac 28 cc 34 03  |....]...Y...(.4.|
-00000010  c8 91 48 22 79 a2 98 74  e4 55 df 72 6b 41 cb 40  |..H"y..t.U.rkA.@|
-00000020  58 ba 04 93 e7 f3 1c 8e  0a 19 d1 20 98 93 cb 7c  |X.......... ...||
-00000030  a3 57 a1 c7 ca 19 13 5c  e1 ac c4 44 17 30 cb a3  |.W.....\...D.0..|
-00000040  b2 83 81 90 82 1d 37 c3  71 ae b8 45 c0 2b 00 00  |......7.q..E.+..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 e1 ed 2c 5d 15  |....]...Y....,].|
+00000010  15 24 d2 e3 a0 58 fb 2f  89 a3 26 b1 c8 06 0f dc  |.$...X./..&.....|
+00000020  ef e1 a7 a4 81 4a 71 2c  1d a2 35 20 be ff 22 db  |.....Jq,..5 ..".|
+00000030  2d 33 1b 11 24 55 96 96  54 5f 62 c7 7f b5 ba 32  |-3..$U..T_b....2|
+00000040  e7 e6 7c 11 68 f8 97 d1  17 f7 8f 4f c0 2b 00 00  |..|.h......O.+..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -58,33 +57,33 @@
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
 00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
-00000280  1d 20 40 9c d1 ec 0a 11  08 c3 fa a0 33 80 00 62  |. @.........3..b|
-00000290  5b 65 59 c6 4f 4e 32 8a  79 fc df 63 2f ee f6 59  |[eY.ON2.y..c/..Y|
-000002a0  40 4a 04 03 00 8a 30 81  87 02 41 39 af 63 7a fa  |@J....0...A9.cz.|
-000002b0  dc e3 40 85 19 9d 1b 8f  ca 55 26 e4 00 a1 f5 01  |..@......U&.....|
-000002c0  73 e6 b5 6f ab bb c3 f3  b4 e0 c2 a1 33 37 ae ec  |s..o........37..|
-000002d0  e7 90 f6 dd b4 a4 c8 f1  3c 51 67 94 c1 ee d7 f3  |........>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 28 00 00 00  00 00 00 00 00 50 16 81  |....(........P..|
-00000040  fe 51 5b ac de d7 31 1b  9a 09 4f 1e d4 de a4 af  |.Q[...1...O.....|
-00000050  c9 62 5d 38 85 23 84 8c  ae 4f 55 5d 0d           |.b]8.#...OU].|
+00000030  16 03 03 00 28 00 00 00  00 00 00 00 00 6b 3d 83  |....(........k=.|
+00000040  88 db aa b0 62 30 8d 4a  6c b2 f1 14 d3 99 43 65  |....b0.Jl.....Ce|
+00000050  4c ef 26 a4 ba 46 2f 75  9a 05 0c f2 91           |L.&..F/u.....|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 d3 0d f6 53 0f  |..........(...S.|
-00000010  c8 3e f0 e6 c0 2c ed ec  bc 8f cc 19 5e 33 30 69  |.>...,......^30i|
-00000020  3c d9 55 8b e4 14 e2 0e  3a f9 89 39 fc a7 89 70  |<.U.....:..9...p|
-00000030  58 16 44                                          |X.D|
+00000000  14 03 03 00 01 01 16 03  03 00 28 d5 c2 de 26 c1  |..........(...&.|
+00000010  ed 28 f1 d8 81 b3 9a 4f  3d 82 ad 22 d0 2c 41 61  |.(.....O=..".,Aa|
+00000020  8b 15 a3 72 01 94 44 ff  8f 01 c1 05 e6 84 56 0a  |...r..D.......V.|
+00000030  8b 1d c4                                          |...|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 0b 26 61  |..............&a|
-00000010  e6 d8 6a 6d db c6 2d 8a  c3 8e f4 17 1a f7 8e f3  |..jm..-.........|
-00000020  ce 04 ce 15 03 03 00 1a  00 00 00 00 00 00 00 02  |................|
-00000030  fa f7 0a 81 bb 8d 83 f3  82 05 ee 26 69 22 90 b2  |...........&i"..|
-00000040  bb b1                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 c7 7d a7  |..............}.|
+00000010  c4 a5 a1 21 94 7a 23 bc  05 44 7d 4a 2f 16 dc 95  |...!.z#..D}J/...|
+00000020  25 6e 17 15 03 03 00 1a  00 00 00 00 00 00 00 02  |%n..............|
+00000030  77 fa b6 34 7e 60 77 f9  a5 09 d1 39 b0 1e 66 86  |w..4~`w....9..f.|
+00000040  50 41                                             |PA|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256
index f81845ab3d91d6..ac5d07e69d6e3a 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 be 62 2f ca 91  |....]...Y...b/..|
-00000010  8b 79 1d ce e3 3f 2e 37  bc 74 da c8 7d de a5 85  |.y...?.7.t..}...|
-00000020  58 c8 04 55 4e c6 51 f2  18 60 33 20 2f 33 8b c1  |X..UN.Q..`3 /3..|
-00000030  b6 be 54 3e 3f 78 12 1b  d9 d0 db 71 fa 0c ee f9  |..T>?x.....q....|
-00000040  60 fb 49 08 a1 83 a4 f6  22 e8 dc 2c c0 23 00 00  |`.I....."..,.#..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 36 c3 50 72 b9  |....]...Y..6.Pr.|
+00000010  0d e9 d9 76 1d 31 72 e6  61 ec 3e 13 93 d7 f1 52  |...v.1r.a.>....R|
+00000020  a7 36 5c 16 9a cc c5 c0  da 7e f3 20 31 79 7a ec  |.6\......~. 1yz.|
+00000030  1d db f7 cd 0a fe b3 86  6f 43 12 f4 9d 19 16 51  |........oC.....Q|
+00000040  e2 42 1b 94 43 13 71 67  2d 52 7a 86 c0 23 00 00  |.B..C.qg-Rz..#..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -57,43 +56,43 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
-00000280  1d 20 72 d6 7b c0 ab ad  36 11 45 d6 b8 4a ea be  |. r.{...6.E..J..|
-00000290  bd ad 7a f6 29 f8 9d 0e  ac d8 fc 67 f7 9c d7 63  |..z.)......g...c|
-000002a0  32 22 04 03 00 8a 30 81  87 02 42 01 09 a3 3e 2b  |2"....0...B...>+|
-000002b0  e8 b6 0b c9 76 80 60 6f  9a c5 4c 6e 7c d8 53 00  |....v.`o..Ln|.S.|
-000002c0  56 c7 f9 37 36 32 2d dc  82 d8 0c 67 7a 96 5c 34  |V..762-....gz.\4|
-000002d0  db 10 71 4e f4 29 e0 20  84 01 09 9a dc 74 76 39  |..qN.). .....tv9|
-000002e0  63 e3 b2 c5 b4 7b cc 20  92 77 f1 3b a0 02 41 5d  |c....{. .w.;..A]|
-000002f0  36 ae 86 8c 27 7f 9e 0d  17 8e 16 48 20 2a 43 ac  |6...'......H *C.|
-00000300  d4 ce c6 9b 6a 95 47 5a  47 5c 13 b6 eb db 0b a6  |....j.GZG\......|
-00000310  fa 23 fe 0c 76 e0 a9 b2  97 76 02 ff 68 3d 68 c5  |.#..v....v..h=h.|
-00000320  17 08 54 25 1a 22 c0 a3  06 bd a3 f6 7c 68 07 9e  |..T%."......|h..|
-00000330  16 03 03 00 04 0e 00 00  00                       |.........|
+00000270  95 12 07 8f 2a 16 03 03  00 b7 0c 00 00 b3 03 00  |....*...........|
+00000280  1d 20 d2 2d 0f 11 29 eb  b4 23 67 1c 40 84 7f 7e  |. .-..)..#g.@..~|
+00000290  cd 8c 3d c2 62 ed 9b 0f  08 01 5b a5 fd 86 31 c5  |..=.b.....[...1.|
+000002a0  d2 76 04 03 00 8b 30 81  88 02 42 01 a4 ea c8 67  |.v....0...B....g|
+000002b0  c0 0a 93 23 7c d9 41 17  ba 91 02 78 c7 16 28 85  |...#|.A....x..(.|
+000002c0  b8 d6 5c ed ed 20 1e 8b  90 e0 19 db 67 72 7e d3  |..\.. ......gr~.|
+000002d0  2c 2e 84 6a d7 bc b7 53  74 8b 1b ef a8 bc 39 d8  |,..j...St.....9.|
+000002e0  e0 75 29 6b 1d 89 c3 12  c2 3c 51 25 84 02 42 01  |.u)k.....>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
 00000030  16 03 03 00 50 00 00 00  00 00 00 00 00 00 00 00  |....P...........|
-00000040  00 00 00 00 00 27 1a a1  cf 9d f5 8f 91 e4 7f dc  |.....'..........|
-00000050  2f 81 3f 1e 3a c3 40 21  c2 6d dd dd 8f f6 9c 4b  |/.?.:.@!.m.....K|
-00000060  0b da 8d 10 f6 83 da 35  bb b9 a4 bf 2f 29 27 a5  |.......5..../)'.|
-00000070  12 52 6a 74 6e 15 8d 82  cf 86 df f0 52 26 32 ca  |.Rjtn.......R&2.|
-00000080  02 91 8c 03 f7                                    |.....|
+00000040  00 00 00 00 00 98 8d 15  68 8c 12 3e 4a 88 64 7c  |........h..>J.d||
+00000050  69 46 25 16 66 20 d7 f5  7e 08 d8 9d c4 89 c1 cf  |iF%.f ..~.......|
+00000060  ac 86 b7 ce 3a 9c 95 0c  5d d1 a2 c2 bf fd 7c e1  |....:...].....|.|
+00000070  b5 f4 04 7e 71 ae 3c fc  d2 c1 2a ec 81 e4 62 a6  |...~q.<...*...b.|
+00000080  e6 05 72 d8 9e                                    |..r..|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 50 1f 1c 35 9b 6c  |..........P..5.l|
-00000010  a8 9f 58 0d bf 0f db b5  91 c6 74 de b1 b7 68 b6  |..X.......t...h.|
-00000020  05 0d 39 68 87 7d b3 b0  8b 86 15 67 ba 7e 54 0c  |..9h.}.....g.~T.|
-00000030  0d 4f 6e f3 ad d8 27 e8  1d fa 43 31 be 30 67 d2  |.On...'...C1.0g.|
-00000040  bc 0a 30 37 78 3e 30 62  bf 81 2e 53 da b3 88 73  |..07x>0b...S...s|
-00000050  17 42 79 ee ef 0e d3 3c  87 c8 85                 |.By....<...|
+00000000  14 03 03 00 01 01 16 03  03 00 50 27 94 9b d3 f1  |..........P'....|
+00000010  6c 59 bb fa b7 73 8b d6  fa b2 ca c1 0c d3 60 cf  |lY...s........`.|
+00000020  50 18 a6 6f 3d b3 46 a1  06 a2 b1 62 4c ea 88 2f  |P..o=.F....bL../|
+00000030  95 bc 35 6f 55 a6 8a 52  69 6c 5b a5 fc 94 2a b6  |..5oU..Ril[...*.|
+00000040  27 7c d7 95 27 72 d4 c1  f2 f9 9c a5 b3 2a 85 52  |'|..'r.......*.R|
+00000050  ae bf 14 52 54 51 6a fe  a1 99 05                 |...RTQj....|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000010  00 00 00 00 00 2c 39 43  06 0a c3 81 10 24 e8 bb  |.....,9C.....$..|
-00000020  de b8 74 00 a9 a3 ab 9a  2a a7 8a 0e 62 b8 2a 23  |..t.....*...b.*#|
-00000030  10 46 1b 76 dc a7 81 2d  37 2e e8 5f b5 75 5e 65  |.F.v...-7.._.u^e|
-00000040  73 11 ef 71 16 15 03 03  00 40 00 00 00 00 00 00  |s..q.....@......|
-00000050  00 00 00 00 00 00 00 00  00 00 a5 24 00 67 c6 ae  |...........$.g..|
-00000060  7f 05 91 ab 17 c9 ea eb  5a f8 8f 07 f3 e5 9b 9c  |........Z.......|
-00000070  20 41 63 21 69 3e f1 bb  66 7e 0b 3d c0 0a 14 b1  | Ac!i>..f~.=....|
-00000080  a3 de 2e d9 10 23 37 84  4d 88                    |.....#7.M.|
+00000010  00 00 00 00 00 9b b4 f6  7e 49 48 09 cd 4f ed 22  |........~IH..O."|
+00000020  68 db 19 94 ad af de d1  9b b6 bc f5 d6 7f c6 b2  |h...............|
+00000030  ff b1 0e b4 0e dd 77 19  e8 9e ff 68 1a 04 fc e5  |......w....h....|
+00000040  f2 3b 5b 34 aa 15 03 03  00 40 00 00 00 00 00 00  |.;[4.....@......|
+00000050  00 00 00 00 00 00 00 00  00 00 f7 95 04 54 94 ff  |.............T..|
+00000060  f7 86 df 0a 2e 5b e9 54  fe 13 30 2a 97 f9 21 8e  |.....[.T..0*..!.|
+00000070  83 8b ba 86 77 67 92 33  5e a8 ea b7 64 65 63 59  |....wg.3^...decY|
+00000080  44 2e 65 60 9a 0a 7c 78  97 a4                    |D.e`..|x..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384
index bf3f0192605d4a..ad5fa501469a5f 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 45 43 2c 7b 07  |....]...Y..EC,{.|
-00000010  6e 76 10 6b f3 9c 7c 2e  b8 c9 6b 8d a0 b6 7b be  |nv.k..|...k...{.|
-00000020  79 7a 52 ab 8d f8 c6 cb  00 f6 48 20 a3 a7 3c ca  |yzR.......H ..<.|
-00000030  d7 57 be c7 6e 45 d6 75  c1 70 e0 86 1e 58 14 a3  |.W..nE.u.p...X..|
-00000040  b4 7d 78 2c ca 82 2f 38  b8 96 ef c4 c0 2c 00 00  |.}x,../8.....,..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 54 28 b4 3e d3  |....]...Y..T(.>.|
+00000010  f8 21 2a 34 c9 6b 54 76  aa d2 cf 5e 07 7a aa e2  |.!*4.kTv...^.z..|
+00000020  10 cb 3e ed 87 f4 3e 70  44 d0 35 20 6e b4 f0 71  |..>...>pD.5 n..q|
+00000030  76 96 1e 2a 57 74 4b db  9a 11 0a af 06 ea 3b 20  |v..*WtK.......; |
+00000040  a8 81 51 9d 41 ef f1 f9  23 87 18 cb c0 2c 00 00  |..Q.A...#....,..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -57,34 +56,34 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 03  00 b5 0c 00 00 b1 03 00  |....*...........|
-00000280  1d 20 2c 21 c0 1d 0f 62  0d 25 60 02 a2 5f 10 5b  |. ,!...b.%`.._.[|
-00000290  68 fb b8 74 a5 2f 33 d6  1e 3f 05 43 19 6d 1c 74  |h..t./3..?.C.m.t|
-000002a0  ce 5b 04 03 00 89 30 81  86 02 41 4c 6b 04 c2 3f  |.[....0...ALk..?|
-000002b0  98 87 0d 54 5a d5 1f 4c  77 1b b6 e5 f8 1f 35 29  |...TZ..Lw.....5)|
-000002c0  e9 72 13 34 ba f8 f9 b3  0f 49 ed b5 69 bd 03 3e  |.r.4.....I..i..>|
-000002d0  10 7d a5 0f 7a aa a6 c5  e0 48 24 2a 61 85 17 5d  |.}..z....H$*a..]|
-000002e0  ac 93 35 47 41 60 f6 3b  d6 41 32 20 02 41 02 4b  |..5GA`.;.A2 .A.K|
-000002f0  b7 28 37 9d 5d f3 fe 87  7b 13 9a 71 b0 59 7b f0  |.(7.]...{..q.Y{.|
-00000300  50 e2 87 aa 9a ef 0e e8  47 bd 85 60 d5 41 32 00  |P.......G..`.A2.|
-00000310  aa 26 e4 f3 c9 4c 9d df  6c dc 6a de 2b fc 76 b2  |.&...L..l.j.+.v.|
-00000320  99 28 41 1c d3 04 a2 e0  71 92 41 97 0a b3 4b 16  |.(A.....q.A...K.|
-00000330  03 03 00 04 0e 00 00 00                           |........|
+00000270  95 12 07 8f 2a 16 03 03  00 b7 0c 00 00 b3 03 00  |....*...........|
+00000280  1d 20 de df 32 23 35 b3  79 a9 49 c2 b3 ad 0c d6  |. ..2#5.y.I.....|
+00000290  23 a6 6a 9b 0f e3 52 51  7b bc f2 79 00 c9 a4 a0  |#.j...RQ{..y....|
+000002a0  94 02 04 03 00 8b 30 81  88 02 42 01 8c 12 91 28  |......0...B....(|
+000002b0  d4 6d cd 39 62 75 9a e0  e5 dd ea 31 45 f5 cd 8b  |.m.9bu.....1E...|
+000002c0  28 82 14 f5 e9 61 0e 9d  af 42 06 17 42 e9 24 1c  |(....a...B..B.$.|
+000002d0  2b 1a c8 77 e4 7a 82 2b  b0 dd 28 3f 76 5d dd fd  |+..w.z.+..(?v]..|
+000002e0  20 53 87 e6 77 26 be 45  e4 6d 31 e3 bf 02 42 01  | S..w&.E.m1...B.|
+000002f0  70 c5 97 3a e4 7b 80 2b  1b eb c9 b2 0a 79 92 2e  |p..:.{.+.....y..|
+00000300  3d b1 4d 13 69 d2 60 a9  fd e9 66 56 83 e4 f5 6a  |=.M.i.`...fV...j|
+00000310  ae cd 8b 94 9f 0b 70 81  b1 ed c6 0d 5f 33 42 04  |......p....._3B.|
+00000320  3d f7 b6 d3 e9 09 b8 bf  43 8c 19 d5 7d 60 d6 a9  |=.......C...}`..|
+00000330  f7 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 28 00 00 00  00 00 00 00 00 5a b1 f1  |....(........Z..|
-00000040  5a c2 32 50 dd 2b 6c 8a  0b de b7 04 cd 69 de 3a  |Z.2P.+l......i.:|
-00000050  45 3c 72 94 80 e2 f6 6c  66 98 c3 2d 4d           |E>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 be d2 0b b0 a2  |..........(.....|
-00000010  ac 18 1e dc 59 4f b4 85  be 3a 81 bd 73 51 47 35  |....YO...:..sQG5|
-00000020  b3 2b b2 84 45 3a 08 11  a3 40 13 0e 5d ef 4b 26  |.+..E:...@..].K&|
-00000030  9d e6 83                                          |...|
+00000000  14 03 03 00 01 01 16 03  03 00 28 07 4e 69 71 66  |..........(.Niqf|
+00000010  75 a0 bb b4 fd 86 8d 74  40 7e 0d e9 a5 95 d0 2d  |u......t@~.....-|
+00000020  ca eb 12 2f 7b 09 22 7c  8e bf da 97 18 d9 bd 74  |.../{."|.......t|
+00000030  cd 08 6b                                          |..k|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 0f 8d 3a  |...............:|
-00000010  5b dd b2 49 18 84 73 e7  a5 c0 46 c0 ad fa cc 44  |[..I..s...F....D|
-00000020  60 0d 8c 15 03 03 00 1a  00 00 00 00 00 00 00 02  |`...............|
-00000030  f6 4c c6 95 ff e5 01 3a  3b a9 46 23 f3 bc 24 29  |.L.....:;.F#..$)|
-00000040  6d 52                                             |mR|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 44 26 54  |.............D&T|
+00000010  a3 37 94 7a 3d 93 6a 06  35 fe 9a d4 7b 54 ab d4  |.7.z=.j.5...{T..|
+00000020  33 fd 93 15 03 03 00 1a  00 00 00 00 00 00 00 02  |3...............|
+00000030  bf ff c7 9e 4b db ee a4  a2 b9 a5 91 cd 09 97 a2  |....K...........|
+00000040  55 a5                                             |U.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305
index db53e96a01e48f..9982121ef8c2ea 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305
@@ -1,26 +1,24 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ee 01 00 00  ea 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 d4 01 00 00  d0 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 08 cc a9  |................|
-00000050  13 03 13 01 13 02 01 00  00 99 00 0b 00 02 01 00  |................|
+00000050  13 03 13 01 13 02 01 00  00 7f 00 0b 00 02 01 00  |................|
 00000060  ff 01 00 01 00 00 17 00  00 00 12 00 00 00 05 00  |................|
 00000070  05 01 00 00 00 00 00 0a  00 0a 00 08 00 1d 00 17  |................|
-00000080  00 18 00 19 00 0d 00 16  00 14 08 04 04 03 08 07  |................|
-00000090  08 05 08 06 04 01 05 01  06 01 05 03 06 03 00 32  |...............2|
-000000a0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000b0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
-000000c0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
-000000d0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
-000000e0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
-000000f0  cb 3b 74                                          |.;t|
+00000080  00 18 00 19 00 0d 00 1a  00 18 08 04 04 03 08 07  |................|
+00000090  08 05 08 06 04 01 05 01  06 01 05 03 06 03 02 01  |................|
+000000a0  02 03 00 2b 00 09 08 03  04 03 03 03 02 03 01 00  |...+............|
+000000b0  33 00 26 00 24 00 1d 00  20 2f e5 7d a3 47 cd 62  |3.&.$... /.}.G.b|
+000000c0  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
+000000d0  c2 ed 90 99 5f 58 cb 3b  74                       |...._X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 74 9e c0 76 74  |....]...Y..t..vt|
-00000010  c1 54 da a1 cf ad 75 4c  fe 91 3b e2 06 e9 fb 1a  |.T....uL..;.....|
-00000020  9c 69 ee bf 30 1f 5c 0c  92 ca 58 20 a9 bb 64 3d  |.i..0.\...X ..d=|
-00000030  1e 8a 19 db 31 25 15 f2  65 5a 78 ad 7e d2 98 90  |....1%..eZx.~...|
-00000040  8a 8b 0f 0e 77 53 db a2  93 b4 76 6d cc a9 00 00  |....wS....vm....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 4f ed 35 28 41  |....]...Y..O.5(A|
+00000010  4a 0f a2 da 57 ef 60 69  32 00 a5 82 22 3d d9 ea  |J...W.`i2..."=..|
+00000020  36 28 20 31 e3 4a b6 d1  b6 b4 49 20 97 f3 45 59  |6( 1.J....I ..EY|
+00000030  e7 9c f5 40 57 51 b8 f8  5a 8d f2 eb ce 83 18 2d  |...@WQ..Z......-|
+00000040  e3 28 55 6f 17 08 23 88  57 b1 a0 e4 cc a9 00 00  |.(Uo..#.W.......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 0e 0b  00 02 0a 00 02 07 00 02  |................|
 00000070  04 30 82 02 00 30 82 01  62 02 09 00 b8 bf 2d 47  |.0...0..b.....-G|
@@ -55,32 +53,32 @@
 00000240  8c 25 c1 33 13 83 0d 94  06 bb d4 37 7a f6 ec 7a  |.%.3.......7z..z|
 00000250  c9 86 2e dd d7 11 69 7f  85 7c 56 de fb 31 78 2b  |......i..|V..1x+|
 00000260  e4 c7 78 0d ae cb be 9e  4e 36 24 31 7b 6a 0f 39  |..x.....N6$1{j.9|
-00000270  95 12 07 8f 2a 16 03 03  00 b6 0c 00 00 b2 03 00  |....*...........|
-00000280  1d 20 6b 7f 5e 5e cd 37  8e 2a cf 07 bf 99 89 93  |. k.^^.7.*......|
-00000290  05 be e6 3c 1d a8 67 07  b4 0d 28 22 be 3f 57 88  |...<..g...(".?W.|
-000002a0  e4 41 04 03 00 8a 30 81  87 02 42 00 ce 0f 5f f7  |.A....0...B..._.|
-000002b0  52 8c 44 e3 58 4c ed 4a  4f bf 2d 14 77 0f 3c a7  |R.D.XL.JO.-.w.<.|
-000002c0  8a 7b fc 2d 0f 94 6e 51  01 51 e0 8c 58 b0 72 e4  |.{.-..nQ.Q..X.r.|
-000002d0  57 cd ab ad fd a9 8c c2  e7 92 f3 0e e0 a0 22 64  |W............."d|
-000002e0  a0 36 f9 e1 a3 f5 19 c8  8a b8 25 f6 0b 02 41 5d  |.6........%...A]|
-000002f0  d3 7c a0 42 5b f9 5d b8  f9 c2 a3 d4 8f 0e 4c c7  |.|.B[.].......L.|
-00000300  d4 61 11 73 f0 35 7e b1  73 29 0f 97 52 75 8a 1f  |.a.s.5~.s)..Ru..|
-00000310  00 e9 6e 59 25 bb ca 72  bd 1e 4f 34 fc 55 ef 66  |..nY%..r..O4.U.f|
-00000320  33 3d 5f fc e2 8d ac 09  7f 20 85 ca b3 a4 b3 ca  |3=_...... ......|
-00000330  16 03 03 00 04 0e 00 00  00                       |.........|
+00000270  95 12 07 8f 2a 16 03 03  00 b7 0c 00 00 b3 03 00  |....*...........|
+00000280  1d 20 64 49 59 eb a9 80  c3 0a 9e 13 f4 09 04 6b  |. dIY..........k|
+00000290  1f e5 3b 0b 77 84 fe 2e  1f ea 7e d4 64 2a 7f 3f  |..;.w.....~.d*.?|
+000002a0  dc 0f 04 03 00 8b 30 81  88 02 42 00 a4 62 9b d1  |......0...B..b..|
+000002b0  ed 60 b7 2d 05 48 64 b6  94 3b a1 75 cb 41 78 e5  |.`.-.Hd..;.u.Ax.|
+000002c0  e0 12 70 d9 90 4d c0 34  39 f3 52 13 75 4b fa 10  |..p..M.49.R.uK..|
+000002d0  19 6f a6 2d b4 c3 8f 45  0c 7f 34 fb 82 01 e6 a1  |.o.-...E..4.....|
+000002e0  be 73 72 3b e5 04 80 70  7d bd 4a f9 e5 02 42 01  |.sr;...p}.J...B.|
+000002f0  69 3d 53 e9 8d 70 6d 07  84 7e 56 3f ce 53 b9 6c  |i=S..pm..~V?.S.l|
+00000300  43 0f 70 74 f1 52 ce d4  95 55 13 8c 07 e7 20 d7  |C.pt.R...U.... .|
+00000310  61 2e b7 f4 5b 34 6e 5d  9c d8 73 66 89 a1 f6 7e  |a...[4n]..sf...~|
+00000320  01 bb 9a 5e 52 59 3f fc  3e 24 fc e7 49 10 83 9d  |...^RY?.>$..I...|
+00000330  fb 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 1a fc 19  6c ef eb a5 d1 28 d9 aa  |.... ...l....(..|
-00000040  56 3f b7 12 a0 18 eb 76  16 be 6d 1e d9 3b 6f 14  |V?.....v..m..;o.|
-00000050  51 68 9c 63 b3                                    |Qh.c.|
+00000030  16 03 03 00 20 cf f9 90  26 e8 2c 00 99 ae 0e e6  |.... ...&.,.....|
+00000040  a8 d9 66 6b 23 e7 c9 73  1c f7 e9 af e1 71 1d f3  |..fk#..s.....q..|
+00000050  34 60 ee 16 9d                                    |4`...|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 38 c9 5f c3 6f  |.......... 8._.o|
-00000010  1b 84 54 77 40 98 70 cb  f1 d1 5f 9e 11 16 24 c6  |..Tw@.p..._...$.|
-00000020  c4 7e f0 44 32 2c ce 29  dd 8e 20                 |.~.D2,.).. |
+00000000  14 03 03 00 01 01 16 03  03 00 20 39 9f 39 3a 22  |.......... 9.9:"|
+00000010  0b 27 cb 75 0d 43 98 11  06 dd 7e 73 17 e0 8a 19  |.'.u.C....~s....|
+00000020  6d eb a8 33 c6 42 b4 e9  cb dd b1                 |m..3.B.....|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 86 12 a2  e2 ae df 03 ed e4 a4 74  |...............t|
-00000010  d0 8b 8c 17 92 20 4d bd  c2 29 ac 15 03 03 00 12  |..... M..)......|
-00000020  e1 66 4e 21 16 24 34 9f  0f 95 63 80 d6 22 52 c4  |.fN!.$4...c.."R.|
-00000030  67 ac                                             |g.|
+00000000  17 03 03 00 16 24 1f 08  49 ef 32 16 8d 76 c7 34  |.....$..I.2..v.4|
+00000010  e0 08 cb d9 e7 72 aa 0f  fb c4 94 15 03 03 00 12  |.....r..........|
+00000020  38 0b 8c e0 0b 61 20 e8  a6 7c 77 69 fb 00 96 39  |8....a ..|wi...9|
+00000030  b9 a7                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES
index 70b43803f15ce5..e2e935cc2e7981 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 c7 61 5d 9b a7  |....]...Y...a]..|
-00000010  9f 27 4f de 56 2b 83 b8  dc 21 7d 27 e5 23 c0 b4  |.'O.V+...!}'.#..|
-00000020  a7 b1 61 3c 7c b7 af 1a  b0 c6 ed 20 82 8c 08 27  |..a<|...... ...'|
-00000030  79 99 c6 a7 dd 7e 33 bb  6c d0 4b 4a 02 e7 2e 87  |y....~3.l.KJ....|
-00000040  69 24 05 ac 32 6f 40 4f  dc 2e 11 3f c0 13 00 00  |i$..2o@O...?....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 8d 69 e3 6e 69  |....]...Y...i.ni|
+00000010  45 96 8b 0d c8 7d 9c dc  b6 75 24 ee 61 44 95 99  |E....}...u$.aD..|
+00000020  cb a8 da df 35 ac c3 36  02 3f b9 20 2d c2 47 c9  |....5..6.?. -.G.|
+00000030  f0 47 80 9a c6 bd e4 1b  ca d6 62 17 59 ec c9 83  |.G........b.Y...|
+00000040  d5 ed 3f 2c 13 b0 30 0a  5e 1f 0e db c0 13 00 00  |..?,..0.^.......|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,38 +61,38 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 5c ce 07  |............ \..|
-000002d0  a8 0b 8f ff 08 19 e7 d7  38 62 98 bf c1 f7 92 27  |........8b.....'|
-000002e0  cb 7b 5e 50 36 51 83 61  8d b4 d6 29 1c 08 04 00  |.{^P6Q.a...)....|
-000002f0  80 98 88 66 48 81 8b 9d  9b e0 6e 6e c4 c4 99 fb  |...fH.....nn....|
-00000300  63 46 fd 8c 7e e1 d0 dd  01 e6 bb 23 97 b8 21 2e  |cF..~......#..!.|
-00000310  53 06 e0 5d 58 c8 79 c3  01 a5 01 e2 81 7b c7 a9  |S..]X.y......{..|
-00000320  04 15 98 9b 53 98 42 0b  3d 4e 97 93 b9 88 80 2c  |....S.B.=N.....,|
-00000330  78 fd 9b 99 12 7f a8 de  a0 c0 c4 1d 15 59 d4 d8  |x............Y..|
-00000340  ef 0d bd 0b 46 c3 6e e6  4b 04 69 91 c0 db 74 ca  |....F.n.K.i...t.|
-00000350  99 2e 6f 47 8b 9b 22 3f  b3 4a e3 10 47 2d dd 47  |..oG.."?.J..G-.G|
-00000360  d5 e1 9b 66 8f d9 b2 fb  b7 52 ae 6a 14 74 32 2d  |...f.....R.j.t2-|
-00000370  6e 16 03 03 00 04 0e 00  00 00                    |n.........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 0f 4e 12  |............ .N.|
+000002d0  ab ce 7e 62 68 64 e0 1d  7e 33 a2 ee 5d e7 2d d5  |..~bhd..~3..].-.|
+000002e0  d2 dc d0 ce b2 7e 9b be  33 8d 9c 56 7a 08 04 00  |.....~..3..Vz...|
+000002f0  80 44 b8 9b 87 5f 84 f6  8a 99 af e9 f7 f8 88 fd  |.D..._..........|
+00000300  f7 12 02 48 a1 fa 66 9c  89 a2 dc bf fd 41 08 fa  |...H..f......A..|
+00000310  6f e4 44 09 8e c1 45 bb  2a e9 e3 45 19 a3 81 50  |o.D...E.*..E...P|
+00000320  99 46 5f 86 5b 6b c0 29  d1 e5 21 4b 56 af f4 d0  |.F_.[k.)..!KV...|
+00000330  63 c4 75 ac f6 75 61 ca  fe 1a b9 70 4d 14 50 b1  |c.u..ua....pM.P.|
+00000340  12 7f 29 2d c5 d7 78 da  06 3e 4c 47 75 8a a6 01  |..)-..x..>LGu...|
+00000350  37 17 1c e8 ef 94 85 d0  e2 ee d5 25 ae 8d f8 e6  |7..........%....|
+00000360  90 10 12 37 b4 0f f5 c7  a2 85 1a 83 8a 38 e6 32  |...7.........8.2|
+00000370  98 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
 00000030  16 03 03 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000040  00 00 00 00 00 99 c9 2d  35 8b 96 18 36 f4 db a4  |.......-5...6...|
-00000050  9a 56 67 6a 6b 9d ee b1  cb 95 54 43 93 7c 0e ff  |.Vgjk.....TC.|..|
-00000060  c0 54 84 83 14 bf d5 95  85 a1 b5 c5 2c fe c3 29  |.T..........,..)|
-00000070  81 7b 1e 16 2e                                    |.{...|
+00000040  00 00 00 00 00 6c 72 1c  47 f9 89 fa 2b 0e cf 69  |.....lr.G...+..i|
+00000050  bf 95 e4 ea b8 74 e7 99  d4 c4 53 f5 97 f5 08 f9  |.....t....S.....|
+00000060  ef 03 e7 76 b8 2c 31 f6  9b 2c cd 27 c8 42 6a a8  |...v.,1..,.'.Bj.|
+00000070  c0 e0 b9 5e cd                                    |...^.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 40 8b 6e b0 cb bf  |..........@.n...|
-00000010  35 8d c3 7e 48 27 92 77  20 8a 38 c6 81 94 17 d4  |5..~H'.w .8.....|
-00000020  b8 18 4e 23 e7 8b 0a 89  7b d1 72 58 aa b9 9b bb  |..N#....{.rX....|
-00000030  c9 40 c7 c4 8e 74 77 f3  3e 90 9c b0 19 04 6c ea  |.@...tw.>.....l.|
-00000040  87 85 f1 fd d9 fd 2d 57  57 f1 c9                 |......-WW..|
+00000000  14 03 03 00 01 01 16 03  03 00 40 89 35 48 2e 99  |..........@.5H..|
+00000010  7c 13 76 5e 7f 07 a6 44  d9 95 1c 9f 25 59 3d f5  ||.v^...D....%Y=.|
+00000020  df d6 5e cb 85 3e 0c f7  48 69 95 77 29 95 88 1c  |..^..>..Hi.w)...|
+00000030  1e 76 8a c3 ea 69 07 75  46 68 09 50 fa 30 0a 57  |.v...i.uFh.P.0.W|
+00000040  84 e3 c7 d9 34 c4 40 32  7b f4 95                 |....4.@2{..|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-00000010  00 00 00 00 00 b9 8c 86  6d 84 db d0 60 f7 11 22  |........m...`.."|
-00000020  97 52 b3 fe bb 1c 0c bd  26 9c a1 84 51 3d a2 2b  |.R......&...Q=.+|
-00000030  c0 79 e5 a5 96 15 03 03  00 30 00 00 00 00 00 00  |.y.......0......|
-00000040  00 00 00 00 00 00 00 00  00 00 7a 42 27 d5 ae 30  |..........zB'..0|
-00000050  81 b5 94 05 55 c9 93 e0  11 98 6d f8 aa 18 92 f4  |....U.....m.....|
-00000060  32 8f d1 aa a6 86 cd df  11 c2                    |2.........|
+00000010  00 00 00 00 00 24 6d d9  23 68 ad 8d 64 2e 3a d5  |.....$m.#h..d.:.|
+00000020  ed eb 4c e9 cb 9d 13 49  4c 44 b9 00 af af 2c e7  |..L....ILD....,.|
+00000030  22 c0 bb 31 4e 15 03 03  00 30 00 00 00 00 00 00  |"..1N....0......|
+00000040  00 00 00 00 00 00 00 00  00 00 c8 60 b8 c1 66 9b  |...........`..f.|
+00000050  52 44 3c 26 7f ff 96 a6  21 c7 eb 33 71 f8 40 23  |RD<&....!..3q.@#|
+00000060  7c 5b ef b2 e1 b4 3f 84  82 48                    ||[....?..H|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256
index 9081031e737b02..f8f04ac13b58c4 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 7b 18 cc 97 f2  |....]...Y..{....|
-00000010  59 62 62 18 bc ee e1 09  0c 7b 8c 3e f0 36 3d 8b  |Ybb......{.>.6=.|
-00000020  96 54 26 93 c8 ac bb 7c  19 63 6a 20 96 8e 51 d2  |.T&....|.cj ..Q.|
-00000030  18 6d 8a 72 6b 5d d2 5e  2b 53 4e a5 43 cf 75 4f  |.m.rk].^+SN.C.uO|
-00000040  e6 9c 3a 30 f5 23 3f bf  66 bc fe a2 c0 27 00 00  |..:0.#?.f....'..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 8f cc 68 50 60  |....]...Y....hP`|
+00000010  11 c8 c3 ce e7 e9 e1 3c  fb 29 d7 4f df 44 16 65  |.......<.).O.D.e|
+00000020  1d 3b 25 5b 32 59 f1 8e  be d8 49 20 c2 89 a7 d5  |.;%[2Y....I ....|
+00000030  cb 2c a2 05 19 6b 65 64  9b 71 2b d3 d2 19 cb 66  |.,...ked.q+....f|
+00000040  61 c1 6f 19 b4 7a 15 41  76 14 85 fc c0 27 00 00  |a.o..z.Av....'..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,42 +61,42 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 e4 05 36  |............ ..6|
-000002d0  05 47 cf b0 62 f8 f6 d6  e0 ce a5 f9 45 f6 28 f9  |.G..b.......E.(.|
-000002e0  d2 58 47 6c 0a 58 9d 85  74 52 d3 0d 17 08 04 00  |.XGl.X..tR......|
-000002f0  80 d0 8b 12 95 dd 2a 7f  b2 55 33 e0 13 28 41 47  |......*..U3..(AG|
-00000300  06 38 fe fb 11 b3 3f 66  c4 62 db 1c f9 29 9e ea  |.8....?f.b...)..|
-00000310  2f e4 62 22 4f 99 36 05  fb 89 8f d5 29 bf a6 e0  |/.b"O.6.....)...|
-00000320  fc 12 88 d8 60 9a 4d 82  eb 64 ba 99 1c 1c 82 ff  |....`.M..d......|
-00000330  df 57 a9 b9 14 d5 a7 ad  57 45 1d e0 91 db 61 90  |.W......WE....a.|
-00000340  ca 15 9b 0c 49 f8 a9 40  5f 34 6b d2 fe 00 48 e5  |....I..@_4k...H.|
-00000350  ea 1e 3b ae 1f 81 a9 d7  91 ff 46 e9 af 48 04 b3  |..;.......F..H..|
-00000360  83 0c 95 91 ea 5f 1f 5b  48 98 2a 9c f6 80 2a db  |....._.[H.*...*.|
-00000370  d2 16 03 03 00 04 0e 00  00 00                    |..........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 88 db 33  |............ ..3|
+000002d0  96 fb ae 63 de f8 2b 4b  94 fa da c2 8e 75 fa 63  |...c..+K.....u.c|
+000002e0  0a 54 2b 68 01 76 2a 76  4f e7 91 e9 2a 08 04 00  |.T+h.v*vO...*...|
+000002f0  80 d9 47 dd dd b9 94 b8  1c 1b dc 1f 79 bd f1 26  |..G.........y..&|
+00000300  66 19 52 0b 0a 2e ea 0d  69 bf 93 a0 29 0f 6a 30  |f.R.....i...).j0|
+00000310  2c 1b 44 25 13 e3 b7 03  db b3 fc 37 9c 3f bb e7  |,.D%.......7.?..|
+00000320  c7 4d 65 8f af bb 39 fa  6e 77 09 bb 08 09 7e d1  |.Me...9.nw....~.|
+00000330  0f ad 57 78 a6 cb a8 3f  2e 70 fc 38 75 2f a0 23  |..Wx...?.p.8u/.#|
+00000340  0b 0c 6c 28 0a 71 51 dc  10 8f 85 fd 97 0f c4 84  |..l(.qQ.........|
+00000350  80 cf 70 0a a9 56 9a af  2f ab 12 c7 8b d1 82 1c  |..p..V../.......|
+00000360  f0 6c 08 00 73 18 dd 6e  5a 66 ed a5 f7 7a 3d 73  |.l..s..nZf...z=s|
+00000370  88 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
 00000030  16 03 03 00 50 00 00 00  00 00 00 00 00 00 00 00  |....P...........|
-00000040  00 00 00 00 00 c0 4e 63  30 1d 23 c8 dc ef 03 e9  |......Nc0.#.....|
-00000050  29 7c 61 b8 7a a4 52 c3  09 f4 aa 97 30 3c 5a 7c  |)|a.z.R.....0>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 50 bd 21 3f c1 94  |..........P.!?..|
-00000010  2f 3e 00 3c 43 00 17 39  90 74 b2 4f 40 5d 0c 2b  |/>.."..|
+00000050  fe e3 77 9f 8c 05 f8 cc  08 4b 6b                 |..w......Kk|
 >>> Flow 5 (client to server)
 00000000  17 03 03 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
-00000010  00 00 00 00 00 ad 41 d8  27 7d f4 06 b7 6c 89 f4  |......A.'}...l..|
-00000020  e3 c5 de 6d 06 80 0c 2e  f8 42 5a 2c da f1 e2 b6  |...m.....BZ,....|
-00000030  e6 e8 6f 5c ee e0 aa 4b  d6 8a 7a 04 6a 5e 8c 99  |..o\...K..z.j^..|
-00000040  1b 36 be f9 d0 15 03 03  00 40 00 00 00 00 00 00  |.6.......@......|
-00000050  00 00 00 00 00 00 00 00  00 00 f1 cf 76 91 15 bd  |............v...|
-00000060  33 f3 96 25 c7 d9 77 30  a6 84 1a 06 c1 96 96 27  |3..%..w0.......'|
-00000070  70 ff d2 ce 82 1e 39 8f  19 75 c7 f2 0f cb de bc  |p.....9..u......|
-00000080  9a ef 4c 93 e3 3c 0c 2f  97 ad                    |..L..<./..|
+00000010  00 00 00 00 00 f8 39 8e  57 60 18 1c ef 19 c8 da  |......9.W`......|
+00000020  f4 3b dc 42 85 44 e3 59  28 ea 29 11 60 ba 2b 2b  |.;.B.D.Y(.).`.++|
+00000030  dc 6a 5d 3a ed ce f2 10  34 17 6e 10 67 00 f0 43  |.j]:....4.n.g..C|
+00000040  3e 0f e1 a1 c8 15 03 03  00 40 00 00 00 00 00 00  |>........@......|
+00000050  00 00 00 00 00 00 00 00  00 00 13 0d fa 71 e4 df  |.............q..|
+00000060  76 f3 c9 01 d5 60 b4 34  d4 6f 68 f5 cd af d6 0b  |v....`.4.oh.....|
+00000070  e6 af ab ec 64 75 38 d6  17 d4 27 81 96 e5 71 74  |....du8...'...qt|
+00000080  d5 cd 39 30 35 4a ef 92  56 6e                    |..905J..Vn|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305
index 30ea8ec568a905..2ea5debf2d67f9 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305
+++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305
@@ -1,26 +1,24 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ee 01 00 00  ea 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 d4 01 00 00  d0 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 08 cc a8  |................|
-00000050  13 03 13 01 13 02 01 00  00 99 00 0b 00 02 01 00  |................|
+00000050  13 03 13 01 13 02 01 00  00 7f 00 0b 00 02 01 00  |................|
 00000060  ff 01 00 01 00 00 17 00  00 00 12 00 00 00 05 00  |................|
 00000070  05 01 00 00 00 00 00 0a  00 0a 00 08 00 1d 00 17  |................|
-00000080  00 18 00 19 00 0d 00 16  00 14 08 04 04 03 08 07  |................|
-00000090  08 05 08 06 04 01 05 01  06 01 05 03 06 03 00 32  |...............2|
-000000a0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000b0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
-000000c0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
-000000d0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
-000000e0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
-000000f0  cb 3b 74                                          |.;t|
+00000080  00 18 00 19 00 0d 00 1a  00 18 08 04 04 03 08 07  |................|
+00000090  08 05 08 06 04 01 05 01  06 01 05 03 06 03 02 01  |................|
+000000a0  02 03 00 2b 00 09 08 03  04 03 03 03 02 03 01 00  |...+............|
+000000b0  33 00 26 00 24 00 1d 00  20 2f e5 7d a3 47 cd 62  |3.&.$... /.}.G.b|
+000000c0  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
+000000d0  c2 ed 90 99 5f 58 cb 3b  74                       |...._X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 1b 61 37 54 ad  |....]...Y...a7T.|
-00000010  7e 92 6a 93 df 5e f8 16  be e7 06 12 3f e7 23 84  |~.j..^......?.#.|
-00000020  be 2a 30 78 98 cf 60 8a  8a 2d 26 20 44 fb 40 31  |.*0x..`..-& D.@1|
-00000030  88 38 6e fc ce 1d af 07  e3 c0 49 05 ff bc 92 ae  |.8n.......I.....|
-00000040  58 79 51 ec a7 24 82 75  9a 16 45 fa cc a8 00 00  |XyQ..$.u..E.....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 01 ce 8f f1 84  |....]...Y.......|
+00000010  65 dc 47 4e 43 f2 cd 85  6c 98 40 a7 5c 7f ed 53  |e.GNC...l.@.\..S|
+00000020  78 63 03 dd 50 3e a4 27  20 21 bf 20 d9 93 9d f6  |xc..P>.' !. ....|
+00000030  1f e8 0e 72 fc 64 e0 dd  8e ef b3 ea ff 5b ad 60  |...r.d.......[.`|
+00000040  a5 f0 68 ff 7e 35 46 a4  28 71 31 fd cc a8 00 00  |..h.~5F.(q1.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -60,31 +58,31 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 8b cc 79  |............ ..y|
-000002d0  1e 8e 20 61 5d 00 97 27  cb 24 5c 7c 5f 3f df db  |.. a]..'.$\|_?..|
-000002e0  2d ba 3b f4 a1 1d 3e 3c  08 da 98 22 68 08 04 00  |-.;...><..."h...|
-000002f0  80 10 fc 5b 90 af a6 8e  d4 1b 5e 63 13 55 88 55  |...[......^c.U.U|
-00000300  f3 bb ad 7a 5b 14 95 55  6b 2f 01 eb 22 88 fb 21  |...z[..Uk/.."..!|
-00000310  40 88 d1 7f 52 b2 a2 ff  51 f9 05 8c c8 28 70 77  |@...R...Q....(pw|
-00000320  3c 7a b0 48 28 f0 34 19  cc 8e c8 c9 43 93 aa fa  |..a...4..r}..|
-00000360  98 f2 bb c0 ae 5f b8 8e  00 6a 47 9c 8d cf 91 eb  |....._...jG.....|
-00000370  e7 16 03 03 00 04 0e 00  00 00                    |..........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 ea 03 c7  |............ ...|
+000002d0  b0 eb 76 ba 86 25 18 e5  0d b3 70 2a 41 72 4d 88  |..v..%....p*ArM.|
+000002e0  55 6d 91 2b 65 fe e0 64  12 69 42 eb 27 08 04 00  |Um.+e..d.iB.'...|
+000002f0  80 0f 00 0a b0 35 db 39  fa ba a1 27 44 e0 9b d4  |.....5.9...'D...|
+00000300  b8 aa b3 4f 93 46 ed 09  f8 3e 1b c8 47 6e 52 8a  |...O.F...>..GnR.|
+00000310  8f fd b1 67 f6 05 87 68  de 7b 25 1b 40 df 1e f2  |...g...h.{%.@...|
+00000320  04 2b 4f 39 3d 6f a8 f7  25 37 26 34 87 84 06 c4  |.+O9=o..%7&4....|
+00000330  0e 31 bc 46 8a d2 99 14  6d 5d 14 32 a2 32 fc 10  |.1.F....m].2.2..|
+00000340  5e fb d9 f8 06 d4 05 17  5d 59 f4 38 c5 13 1c 91  |^.......]Y.8....|
+00000350  5a 5f cb dd 3e 27 78 10  2c 0c 9b 7f 1a ec 4c da  |Z_..>'x.,.....L.|
+00000360  fb d7 52 eb 76 83 75 87  d2 a3 7f e9 25 a5 8a 22  |..R.v.u.....%.."|
+00000370  dd 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 af 23 75  51 f1 3c 68 f8 87 2e 2b  |.... .#uQ.>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 c0 52 cb d5 de  |.......... .R...|
-00000010  b1 43 8a 0b 75 a6 a4 d4  8f af 85 63 71 1d 3b 4f  |.C..u......cq.;O|
-00000020  7a ad 9b 77 85 1a 1d 7e  4b 42 13                 |z..w...~KB.|
+00000000  14 03 03 00 01 01 16 03  03 00 20 b9 72 f6 07 40  |.......... .r..@|
+00000010  0b 2f 67 8a 97 fa 17 24  81 e5 6f 5b 09 90 72 8d  |./g....$..o[..r.|
+00000020  48 59 14 00 34 e8 3c 82  b8 2f 87                 |HY..4.<../.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 30 b8 0e  dd 42 64 a4 17 ee f5 70  |.....0...Bd....p|
-00000010  1e 00 e8 da a7 f6 8e 73  c7 70 32 15 03 03 00 12  |.......s.p2.....|
-00000020  57 be 7b cf bb 7b fe cb  7e b2 bb 38 9f 31 65 07  |W.{..{..~..8.1e.|
-00000030  ba 61                                             |.a|
+00000000  17 03 03 00 16 f6 cf b1  93 64 54 56 f3 35 3d 8f  |.........dTV.5=.|
+00000010  31 5e 66 62 56 aa e9 81  47 4c 8b 15 03 03 00 12  |1^fbV...GL......|
+00000020  de 0b 32 2b 58 2c b5 4e  80 2a 66 e7 a0 a9 28 d9  |..2+X,.N.*f...(.|
+00000030  db 11                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-Ed25519 b/src/crypto/tls/testdata/Client-TLSv12-Ed25519
index 40b2f35137dc42..d43ee07eeab5e0 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-Ed25519
+++ b/src/crypto/tls/testdata/Client-TLSv12-Ed25519
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 cc 3c fc d0 c6  |....]...Y...<...|
-00000010  b8 3e 6b cb 59 8d 68 04  0b 94 10 28 ad 71 06 14  |.>k.Y.h....(.q..|
-00000020  08 6c 10 12 aa 8d e4 f9  aa 7d 9b 20 a0 b8 96 40  |.l.......}. ...@|
-00000030  1a ce 65 ae a6 a2 4d 4d  92 41 8e 2c 8d 94 d1 02  |..e...MM.A.,....|
-00000040  c1 cb bd 6d 8b ee 36 ae  c5 ec 6a 40 cc a9 00 00  |...m..6...j@....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 93 8a a3 77 84  |....]...Y.....w.|
+00000010  fd 41 3d a5 ad b5 eb 91  63 a6 b5 3a 5f 21 08 df  |.A=.....c..:_!..|
+00000020  72 07 be 1f df d7 4e 6f  f3 f8 cb 20 ae d3 e5 fe  |r.....No... ....|
+00000030  53 a3 c7 84 6c 3e c6 1d  d5 65 5d a6 a5 7d f7 5c  |S...l>...e]..}.\|
+00000040  34 65 a7 df 1e 28 3f 7d  20 08 81 2c cc a9 00 00  |4e...(?} ..,....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 01 3c 0b  00 01 38 00 01 35 00 01  |......<...8..5..|
 00000070  32 30 82 01 2e 30 81 e1  a0 03 02 01 02 02 10 0f  |20...0..........|
@@ -45,26 +44,26 @@
 00000180  fc ab 7d 4d d4 e0 93 13  d0 a9 42 e0 b6 6b fe 5d  |..}M......B..k.]|
 00000190  67 48 d7 9f 50 bc 6c cd  4b 03 83 7c f2 08 58 cd  |gH..P.l.K..|..X.|
 000001a0  ac cf 0c 16 03 03 00 6c  0c 00 00 68 03 00 1d 20  |.......l...h... |
-000001b0  fd f1 12 74 21 62 15 da  36 af d5 6c f3 0a cd 1e  |...t!b..6..l....|
-000001c0  09 37 aa 55 32 1a 27 a7  5b 37 34 32 35 36 f5 14  |.7.U2.'.[74256..|
-000001d0  08 07 00 40 3d 7c 51 33  98 02 91 19 da 47 1a 1a  |...@=|Q3.....G..|
-000001e0  fe 03 4e 1b e8 5c 5e a7  12 9c e6 8a c2 74 18 dd  |..N..\^......t..|
-000001f0  18 9a 9d d6 60 f3 c8 63  00 33 d8 81 3e 2e 40 0f  |....`..c.3..>.@.|
-00000200  c5 98 fc a8 1c 6b 0c 19  70 f5 16 a5 25 ce 7b b8  |.....k..p...%.{.|
-00000210  f2 f5 87 04 16 03 03 00  04 0e 00 00 00           |.............|
+000001b0  e9 e7 75 b4 4c 42 14 7a  e0 50 0a 95 f1 d7 35 aa  |..u.LB.z.P....5.|
+000001c0  39 05 9e 59 73 5e cd d2  ec 56 18 f0 ee 1f 81 3c  |9..Ys^...V.....<|
+000001d0  08 07 00 40 44 e9 19 b6  00 49 f7 c8 06 62 cb c1  |...@D....I...b..|
+000001e0  b5 7c b6 cd 32 47 c9 05  82 3b f0 af d1 cd 75 8b  |.|..2G...;....u.|
+000001f0  82 8b 47 dd 85 13 78 69  5d 40 7e 9b 91 24 2e ce  |..G...xi]@~..$..|
+00000200  3e be e0 12 1e ec 56 0b  ff 25 21 92 6f 24 12 10  |>.....V..%!.o$..|
+00000210  30 33 cf 04 16 03 03 00  04 0e 00 00 00           |03...........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 91 a7 c4  90 65 85 ce 63 66 fa 8b  |.... ....e..cf..|
-00000040  5c 22 e1 1d fb 14 c2 6c  86 7c 52 7c d1 96 3b 41  |\".....l.|R|..;A|
-00000050  20 0d bf 09 e8                                    | ....|
+00000030  16 03 03 00 20 69 ac be  cf f1 3d 8a 4e f3 3a 54  |.... i....=.N.:T|
+00000040  05 d8 20 3a f0 67 40 3f  5b 94 cf a4 3e ec 8e 4e  |.. :.g@?[...>..N|
+00000050  75 c9 92 2c af                                    |u..,.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 d0 3e 15 0e 08  |.......... .>...|
-00000010  5b fd a8 b7 5f 01 7f ca  6d af 78 6e 33 7a 93 42  |[..._...m.xn3z.B|
-00000020  aa 6e e4 f4 a1 bb 9a 2d  bb 17 6f                 |.n.....-..o|
+00000000  14 03 03 00 01 01 16 03  03 00 20 70 c5 f8 c7 7c  |.......... p...||
+00000010  4a 34 6f b0 eb 1b 13 c7  e0 21 32 cf ce 89 aa 53  |J4o......!2....S|
+00000020  5f 67 b8 a7 3e 10 bb a3  5f fa 2f                 |_g..>..._./|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 7b f9 2f  ce ac bc 43 3c 6b 10 3b  |.....{./...C>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 ad 2d c6 4e 13  |....]...Y...-.N.|
-00000010  72 ea 19 e0 65 33 ec cb  aa 5c 70 bd f5 70 e0 b4  |r...e3...\p..p..|
-00000020  ca 7e 64 da 5e 5f cb a6  69 d4 8c 20 79 45 e2 0a  |.~d.^_..i.. yE..|
-00000030  c7 b2 be 37 28 b5 c6 35  f9 0c c9 34 39 4d 38 3b  |...7(..5...49M8;|
-00000040  c0 47 31 44 e2 47 f7 6f  70 0f 8b 2d cc a8 00 00  |.G1D.G.op..-....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 18 47 80 ab 8d  |....]...Y...G...|
+00000010  42 c7 73 06 75 ef 28 ff  87 46 49 af 3a 3b cb bb  |B.s.u.(..FI.:;..|
+00000020  ff 6e e3 60 11 40 2c b8  40 87 5c 20 86 3d de c2  |.n.`.@,.@.\ .=..|
+00000030  18 41 ff 1a dc 00 77 4e  17 0b 36 f3 69 92 d7 04  |.A....wN..6.i...|
+00000040  c4 c6 39 ad ed f7 06 23  8c 52 50 da cc a8 00 00  |..9....#.RP.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,31 +61,31 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 f4 07 0a  |............ ...|
-000002d0  38 0a 4e 5d 59 90 98 e7  19 02 7b 51 76 59 2e 3d  |8.N]Y.....{QvY.=|
-000002e0  d2 f5 2f 1c 87 29 61 94  a0 ad 95 8b 4b 08 04 00  |../..)a.....K...|
-000002f0  80 22 b1 ac 42 df 30 4f  ea 41 75 a5 28 2e a7 50  |."..B.0O.Au.(..P|
-00000300  2a 4f c8 f4 1f c3 35 82  88 47 78 de fe 00 43 ed  |*O....5..Gx...C.|
-00000310  84 48 52 8b bf 77 22 00  fd 92 c4 e0 67 66 28 5c  |.HR..w".....gf(\|
-00000320  8a 7f 32 21 c2 5a bd b2  8f d5 72 48 3a 83 3b d7  |..2!.Z....rH:.;.|
-00000330  c8 c0 fb 54 52 28 41 49  3f 6d b4 4c ef 87 3a e5  |...TR(AI?m.L..:.|
-00000340  30 db e2 c8 5c ed f1 46  a8 f4 04 0b 02 2b 93 03  |0...\..F.....+..|
-00000350  de dc 41 88 50 f6 22 c5  2a 30 ac 47 f2 db 00 5c  |..A.P.".*0.G...\|
-00000360  7e 14 25 fd 72 de 81 ed  30 c8 62 1c 6d 44 4e 90  |~.%.r...0.b.mDN.|
-00000370  3f 16 03 03 00 04 0e 00  00 00                    |?.........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 c5 28 44  |............ .(D|
+000002d0  4a 31 d9 b6 53 90 8e 41  3c 67 2c 6f 9d b0 a6 d3  |J1..S..A>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 e1 88 c9  ef 40 26 52 ca d2 d9 31  |.... ....@&R...1|
-00000040  9c 51 a6 fa b3 40 6b 62  7e ad 00 ea da 8f 54 bf  |.Q...@kb~.....T.|
-00000050  f5 89 4b c9 a9                                    |..K..|
+00000030  16 03 03 00 20 9f 16 49  2a d8 cc 0a 45 92 8d c2  |.... ..I*...E...|
+00000040  25 3c b1 5c a8 f2 c4 9b  c4 2a 66 fe 7f 87 df 35  |%<.\.....*f....5|
+00000050  77 a4 b0 05 f5                                    |w....|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 6f e3 54 91 aa  |.......... o.T..|
-00000010  00 b4 8e f3 b2 51 1e 76  48 91 49 b9 ba dc 5f e4  |.....Q.vH.I..._.|
-00000020  9f 0e 49 b5 54 f5 e3 9d  25 75 38                 |..I.T...%u8|
+00000000  14 03 03 00 01 01 16 03  03 00 20 37 55 d5 05 71  |.......... 7U..q|
+00000010  a0 00 44 56 32 c3 c8 e6  68 5e de d4 e7 65 56 d3  |..DV2...h^...eV.|
+00000020  2d 93 07 e6 72 17 e9 49  74 4d c0                 |-...r..ItM.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 7b 2a af  79 d3 1c 0d cf 0f 83 04  |.....{*.y.......|
-00000010  9e 96 63 69 0c ec f7 98  02 33 12 15 03 03 00 12  |..ci.....3......|
-00000020  58 d3 1a 60 74 2c 92 91  61 2c 13 23 6d e9 5f de  |X..`t,..a,.#m._.|
-00000030  65 42                                             |eB|
+00000000  17 03 03 00 16 27 a6 31  16 5c 7e bd 05 0a 2c 05  |.....'.1.\~...,.|
+00000010  ba 37 06 00 d7 8d 66 a7  8e 16 7b 15 03 03 00 12  |.7....f...{.....|
+00000020  70 38 bc 7e 6b 83 83 e1  61 3b bb a5 d9 dc f7 e7  |p8.~k...a;......|
+00000030  5e 12                                             |^.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE b/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE
index 0cac7e7545cb29..7a0a53c03a097c 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE
+++ b/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 33 01 00 01  2f 03 03 00 00 00 00 00  |....3.../.......|
+00000000  16 03 01 01 19 01 00 01  15 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,24 +7,22 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 b4 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 9a 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
-000000a0  00 0a 00 04 00 02 00 17  00 0d 00 16 00 14 08 04  |................|
+000000a0  00 0a 00 04 00 02 00 17  00 0d 00 1a 00 18 08 04  |................|
 000000b0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000c0  06 03 00 32 00 1a 00 18  08 04 04 03 08 07 08 05  |...2............|
-000000d0  08 06 04 01 05 01 06 01  05 03 06 03 02 01 02 03  |................|
-000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
-000000f0  47 00 45 00 17 00 41 04  1e 18 37 ef 0d 19 51 88  |G.E...A...7...Q.|
-00000100  35 75 71 b5 e5 54 5b 12  2e 8f 09 67 fd a7 24 20  |5uq..T[....g..$ |
-00000110  3e b2 56 1c ce 97 28 5e  f8 2b 2d 4f 9e f1 07 9f  |>.V...(^.+-O....|
-00000120  6c 4b 5b 83 56 e2 32 42  e9 58 b6 d7 49 a6 b5 68  |lK[.V.2B.X..I..h|
-00000130  1a 41 03 56 6b dc 5a 89                           |.A.Vk.Z.|
+000000c0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
+000000d0  02 03 01 00 33 00 47 00  45 00 17 00 41 04 1e 18  |....3.G.E...A...|
+000000e0  37 ef 0d 19 51 88 35 75  71 b5 e5 54 5b 12 2e 8f  |7...Q.5uq..T[...|
+000000f0  09 67 fd a7 24 20 3e b2  56 1c ce 97 28 5e f8 2b  |.g..$ >.V...(^.+|
+00000100  2d 4f 9e f1 07 9f 6c 4b  5b 83 56 e2 32 42 e9 58  |-O....lK[.V.2B.X|
+00000110  b6 d7 49 a6 b5 68 1a 41  03 56 6b dc 5a 89        |..I..h.A.Vk.Z.|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 d9 70 61 62 c5  |....]...Y...pab.|
-00000010  f4 b4 22 c6 ea f6 e9 8c  fc 29 e8 8c 24 2d 4b c4  |.."......)..$-K.|
-00000020  04 57 01 ae e5 41 7e 7f  6f ec c3 20 86 6b 38 a9  |.W...A~.o.. .k8.|
-00000030  ea cd 51 3b 0f 05 5c a3  98 0c 4d ba 46 d6 99 f3  |..Q;..\...M.F...|
-00000040  67 da f2 62 56 29 f7 e6  8c 14 8a 7a c0 2f 00 00  |g..bV).....z./..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 1c ad ae e9 64  |....]...Y......d|
+00000010  35 80 c6 04 f5 69 05 bb  5c 38 78 d3 99 2f ad e6  |5....i..\8x../..|
+00000020  56 20 d4 79 89 1a 51 54  14 ac 6d 20 06 6d 1a bd  |V .y..QT..m .m..|
+00000030  04 cf 4f 42 3d aa 31 3b  fb dc c1 85 42 c3 6d 12  |..OB=.1;....B.m.|
+00000040  27 98 be 4b 88 93 45 0e  78 ba d8 13 c0 2f 00 00  |'..K..E.x..../..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -64,37 +62,37 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 cd 0c 00 00  c9 03 00 17 41 04 a0 b7  |............A...|
-000002d0  0f 94 44 46 c4 72 5a 3c  b8 5c cd f1 9e b0 49 17  |..DF.rZ<.\....I.|
-000002e0  ea a0 ca 1d 17 d8 85 5f  0a e3 4a 85 5d f4 bb 52  |......._..J.]..R|
-000002f0  23 79 24 a9 50 81 9f 8a  5e e4 2f 5d cc 7d e2 10  |#y$.P...^./].}..|
-00000300  db 42 f0 26 98 61 b7 f5  39 16 46 d6 04 f7 08 04  |.B.&.a..9.F.....|
-00000310  00 80 05 70 60 b3 39 e0  61 6e 72 b3 13 2c 8c 2d  |...p`.9.anr..,.-|
-00000320  e1 d9 37 8e cd 13 64 2f  4b 65 4f 7c a0 2a 7e 91  |..7...d/KeO|.*~.|
-00000330  e1 fd 7d 3b e3 35 dd 5a  c8 ab 56 13 c3 c6 07 90  |..};.5.Z..V.....|
-00000340  fb d3 cf 22 dd 78 4c 33  c7 d3 6e 64 7e 65 ba 02  |...".xL3..nd~e..|
-00000350  ca 04 50 77 08 65 d5 80  c9 4f c3 b3 5b 97 b2 80  |..Pw.e...O..[...|
-00000360  3d 48 37 20 ab 28 15 0c  f2 86 dd b6 19 66 46 e3  |=H7 .(.......fF.|
-00000370  23 69 e2 5d fb 70 65 fb  c6 ae fc a4 02 42 9f fe  |#i.].pe......B..|
-00000380  b4 5c f0 4b 23 92 2a 4f  a4 1a f4 86 3b 5c 25 9d  |.\.K#.*O....;\%.|
-00000390  86 e2 16 03 03 00 04 0e  00 00 00                 |...........|
+000002c0  16 03 03 00 cd 0c 00 00  c9 03 00 17 41 04 3a 1c  |............A.:.|
+000002d0  84 6b e6 cb 7d 3f bd ea  d7 7a c3 63 43 77 f7 14  |.k..}?...z.cCw..|
+000002e0  a7 98 52 86 49 4d 05 b2  70 e2 d3 44 c9 05 eb 83  |..R.IM..p..D....|
+000002f0  b4 11 c5 3e 9d 3b 3b cd  de d0 df 78 83 0f 0c d8  |...>.;;....x....|
+00000300  76 e7 19 9d 1f 5a 3d 2a  54 19 16 a0 c2 55 08 04  |v....Z=*T....U..|
+00000310  00 80 09 ee 97 8a d1 82  fc 4a fc f2 89 d2 a3 c7  |.........J......|
+00000320  8c 25 74 98 cf b5 67 c6  fd f6 0d 3b 62 ba 31 ca  |.%t...g....;b.1.|
+00000330  d1 67 aa c3 32 89 ee 83  22 d2 b7 3c f8 98 af 16  |.g..2..."..<....|
+00000340  dd 05 06 2c c4 57 dd fc  22 3a 2e 80 f9 84 6a ee  |...,.W..":....j.|
+00000350  f2 a1 21 d1 0f db 17 50  a1 35 94 b3 0a b7 62 ca  |..!....P.5....b.|
+00000360  2c b3 0b 68 0c 58 d7 24  83 82 d8 34 64 3f a4 61  |,..h.X.$...4d?.a|
+00000370  0e b1 ca 93 67 b3 51 11  dc 49 f2 df 26 89 8b ea  |....g.Q..I..&...|
+00000380  22 09 1a be 62 27 61 c8  93 4b dd 95 31 6a ba e2  |"...b'a..K..1j..|
+00000390  c3 2b 16 03 03 00 04 0e  00 00 00                 |.+.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 46 10 00 00  42 41 04 1e 18 37 ef 0d  |....F...BA...7..|
 00000010  19 51 88 35 75 71 b5 e5  54 5b 12 2e 8f 09 67 fd  |.Q.5uq..T[....g.|
 00000020  a7 24 20 3e b2 56 1c ce  97 28 5e f8 2b 2d 4f 9e  |.$ >.V...(^.+-O.|
 00000030  f1 07 9f 6c 4b 5b 83 56  e2 32 42 e9 58 b6 d7 49  |...lK[.V.2B.X..I|
 00000040  a6 b5 68 1a 41 03 56 6b  dc 5a 89 14 03 03 00 01  |..h.A.Vk.Z......|
-00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 3f 54  |.....(........?T|
-00000060  35 c8 33 70 66 0f 9d 3d  57 d7 a8 7f 57 45 63 a4  |5.3pf..=W...WEc.|
-00000070  67 a2 83 c4 17 5b 22 8f  1c 89 78 1c 43 8d        |g....["...x.C.|
+00000050  01 16 03 03 00 28 00 00  00 00 00 00 00 00 fa c4  |.....(..........|
+00000060  4e 47 d1 de 6d 60 fc af  59 43 7f 2f 4c b3 6e aa  |NG..m`..YC./L.n.|
+00000070  6f c3 bc 8a 40 5e e9 9c  d9 b0 87 c5 92 41        |o...@^.......A|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 25 5d 63 2d f3  |..........(%]c-.|
-00000010  a5 91 45 d0 7d 68 39 f6  0e 04 6f 4b c9 dd 4a 54  |..E.}h9...oK..JT|
-00000020  f5 a2 04 54 d2 57 4b 40  75 4d 2f b3 5d 00 5b 11  |...T.WK@uM/.].[.|
-00000030  89 0e 92                                          |...|
+00000000  14 03 03 00 01 01 16 03  03 00 28 eb 92 83 02 be  |..........(.....|
+00000010  89 55 4e 77 b2 45 1d 15  fd e0 6a 36 ab 0c 7b 4a  |.UNw.E....j6..{J|
+00000020  5d 50 e2 5a f3 c6 10 e2  ac ac a4 d3 4c 2e d8 31  |]P.Z........L..1|
+00000030  84 31 17                                          |.1.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 0c 9c ab  |................|
-00000010  24 e8 b2 cf a2 6f f9 8e  54 ed 35 43 07 4d 8f 89  |$....o..T.5C.M..|
-00000020  5c 08 15 15 03 03 00 1a  00 00 00 00 00 00 00 02  |\...............|
-00000030  f8 65 48 1e a4 03 c0 3b  2f 23 c7 9e 92 59 f6 be  |.eH....;/#...Y..|
-00000040  b4 a2                                             |..|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 90 44 33  |..............D3|
+00000010  cf be 4e 29 fc 6f 2f 30  c1 ef aa 8e cb 10 0e f9  |..N).o/0........|
+00000020  8f 60 fc 15 03 03 00 1a  00 00 00 00 00 00 00 02  |.`..............|
+00000030  80 cb 52 6b e7 c9 45 af  69 6b e8 ee 88 23 61 20  |..Rk..E.ik...#a |
+00000040  74 33                                             |t3|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4
index faa48c784371b6..24a9b8e4155228 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4
+++ b/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 55 02 00 00  51 03 03 c4 5b d6 0f d4  |....U...Q...[...|
-00000010  64 3a 37 34 a3 84 9d 3d  1b 33 c3 d4 4f 42 f7 3a  |d:74...=.3..OB.:|
-00000020  e8 da 8c 8b 97 1a e5 f4  56 a4 bd 20 03 30 25 fd  |........V.. .0%.|
-00000030  d9 01 7a 7c b8 9d 63 f0  a3 7a 1c 00 6b 75 16 d8  |..z|..c..z..ku..|
-00000040  68 5c 7a 8d 4a ae ed 52  fc 92 e5 03 00 05 00 00  |h\z.J..R........|
+00000000  16 03 03 00 55 02 00 00  51 03 03 7c f1 44 f1 2a  |....U...Q..|.D.*|
+00000010  6f 7f 62 66 08 15 dd c8  bd 4a 30 b5 a3 73 53 82  |o.bf.....J0..sS.|
+00000020  93 78 6b f2 c6 70 70 1e  4d 8f 48 20 24 b3 17 46  |.xk..pp.M.H $..F|
+00000030  37 c0 0f 79 af f4 48 43  17 6b ea df 6b 73 07 cf  |7..y..HC.k..ks..|
+00000040  5f 95 c5 5c 8d b2 99 5c  fd 30 e5 1b 00 05 00 00  |_..\...\.0......|
 00000050  09 ff 01 00 01 00 00 17  00 00 16 03 03 02 59 0b  |..............Y.|
 00000060  00 02 55 00 02 52 00 02  4f 30 82 02 4b 30 82 01  |..U..R..O0..K0..|
 00000070  b4 a0 03 02 01 02 02 09  00 e8 f0 9d 3f e2 5b ea  |............?.[.|
@@ -73,15 +72,15 @@
 00000060  c5 70 0f 08 83 48 e9 48  ef 6e 50 8b 05 7e e5 84  |.p...H.H.nP..~..|
 00000070  25 fa 55 c7 ae 31 02 27  00 ef 3f 98 86 20 12 89  |%.U..1.'..?.. ..|
 00000080  91 59 28 b4 f7 d7 af d2  69 61 35 14 03 03 00 01  |.Y(.....ia5.....|
-00000090  01 16 03 03 00 24 83 66  73 cf 08 6f c7 29 1b ea  |.....$.fs..o.)..|
-000000a0  86 aa 02 66 2d d9 d4 7b  19 0d cc e5 9e dc e9 20  |...f-..{....... |
-000000b0  d9 62 82 59 bd e9 91 6b  90 62                    |.b.Y...k.b|
+00000090  01 16 03 03 00 24 fd 67  40 11 7e 4d 8f bb 87 e8  |.....$.g@.~M....|
+000000a0  c3 1f e8 b0 15 17 3a f4  6f 5f 87 b2 50 c5 92 e4  |......:.o_..P...|
+000000b0  ac c0 c0 98 aa 6f be bc  fc 77                    |.....o...w|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 24 ef bb 0c 3b fb  |..........$...;.|
-00000010  4e 36 53 b9 fa d4 c3 d0  37 5e 2b 22 a2 12 b6 9e  |N6S.....7^+"....|
-00000020  1c a3 f7 93 74 60 38 18  f1 cc 72 e4 ba 1a 3d     |....t`8...r...=|
+00000000  14 03 03 00 01 01 16 03  03 00 24 e8 ea 6f 8a 0c  |..........$..o..|
+00000010  79 70 73 a9 7b 2c a8 0a  e5 f8 26 f3 eb 05 20 65  |yps.{,....&... e|
+00000020  58 9b 0c 8e 28 3d c7 ee  cf 57 85 06 a5 d7 46     |X...(=...W....F|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1a 62 a3 b3  3a 89 25 05 89 bc 5a 21  |.....b..:.%...Z!|
-00000010  30 61 84 b0 97 52 26 a2  18 87 25 43 17 1a 52 15  |0a...R&...%C..R.|
-00000020  03 03 00 16 97 d6 18 0c  30 b3 9b 8f 2b f1 f9 3f  |........0...+..?|
-00000030  c7 8d a2 e1 ff 36 0c d6  c2 f1                    |.....6....|
+00000000  17 03 03 00 1a 2d 7a c5  d0 12 79 e8 a2 05 d3 a4  |.....-z...y.....|
+00000010  51 80 8f 28 37 b9 75 64  f3 11 4c 78 de 0c f3 15  |Q..(7.ud..Lx....|
+00000020  03 03 00 16 43 89 2c 8b  9e dc c5 5d 4c ca 7b 4e  |....C.,....]L.{N|
+00000030  15 e4 e5 62 01 02 b4 d4  6f 1c                    |...b....o.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce
index 868b527396bd00..0510d5e2d33e46 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce
+++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 9e b0 dd 2b 97  |....]...Y.....+.|
-00000010  86 13 76 2e 65 fc 27 bc  fd 01 c0 05 86 b9 e3 bd  |..v.e.'.........|
-00000020  b9 46 3b 09 37 2a fe 3a  eb ee e0 20 65 ad 7c 0b  |.F;.7*.:... e.|.|
-00000030  1a 0b 9b da b0 8d 56 86  b6 e1 04 1b dd 5d 93 8e  |......V......]..|
-00000040  a9 ea b6 b7 17 c9 75 26  58 5a c5 37 cc a8 00 00  |......u&XZ.7....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 55 71 df 37 76  |....]...Y..Uq.7v|
+00000010  48 bb 86 62 66 f1 58 0d  92 f4 c8 bd 17 6c 00 43  |H..bf.X......l.C|
+00000020  a9 da f1 6f 19 2c 76 81  6d aa eb 20 4f c7 eb 3f  |...o.,v.m.. O..?|
+00000030  b8 48 89 7f d8 61 bc e8  3c e6 a0 3d 6c 29 fd 60  |.H...a..<..=l).`|
+00000040  7c 0a 09 1c 71 41 07 04  24 dc e7 27 cc a8 00 00  ||...qA..$..'....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,188 +61,186 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 41 0e e9  |............ A..|
-000002d0  28 d0 77 ab a1 9e 93 62  b1 ec d9 e4 17 7d cb 29  |(.w....b.....}.)|
-000002e0  25 28 6f 7d de fa 2e 89  8c 02 f7 22 25 08 04 00  |%(o}......."%...|
-000002f0  80 c9 63 f4 f2 99 a9 c3  dd 81 1b 3a c2 85 0a e7  |..c........:....|
-00000300  0f a6 5d 71 54 42 9e b9  68 35 5f ff b5 f3 51 9f  |..]qTB..h5_...Q.|
-00000310  16 46 c3 55 44 15 34 22  6d 68 15 6f 86 60 36 27  |.F.UD.4"mh.o.`6'|
-00000320  29 b1 f5 f3 21 5a c5 bc  95 b9 18 f3 57 7b f7 90  |)...!Z......W{..|
-00000330  20 c1 41 f2 53 d2 a0 a6  4a c8 3b 2b 75 7d 27 84  | .A.S...J.;+u}'.|
-00000340  fb 90 1c 9c 29 26 91 71  e8 25 0b 2a f1 76 b5 5c  |....)&.q.%.*.v.\|
-00000350  7f df 02 86 1c a9 ba 5a  4a 6c 25 95 1d 3c 51 21  |.......ZJl%..>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 5b d2 2a  ad 40 50 6f a8 b8 70 d0  |.... [.*.@Po..p.|
-00000040  b9 aa ab d5 d7 2a f1 2b  f7 d7 9b cd 10 a5 80 e9  |.....*.+........|
-00000050  d3 15 3f 4f 00                                    |..?O.|
+00000030  16 03 03 00 20 bf 35 ae  8c b4 63 82 40 e8 5d d4  |.... .5...c.@.].|
+00000040  bb 3d 0a 0f 07 28 3a 74  2c 5b a8 d0 a6 ab 88 ba  |.=...(:t,[......|
+00000050  7d 5c 1c 42 c7                                    |}\.B.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 dd 90 d8 8a 0a  |.......... .....|
-00000010  11 a6 30 9b b0 29 50 c8  b1 70 36 bc fb 84 6e 6d  |..0..)P..p6...nm|
-00000020  a9 5e 67 3c e2 2e 0b 09  b2 44 38                 |.^g<.....D8|
+00000000  14 03 03 00 01 01 16 03  03 00 20 e7 86 48 6c 00  |.......... ..Hl.|
+00000010  0a 1e f5 5f b8 ff ad 1c  9d 74 24 c5 6e d4 c6 6e  |..._.....t$.n..n|
+00000020  25 27 7d 6e 18 44 96 29  eb db b0                 |%'}n.D.)...|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 9f e0 6a  fc e9 a2 bf cf b4 df 07  |.......j........|
-00000010  ba b4 8b 8b 08 ca bd a7  d5 02 2a                 |..........*|
+00000000  17 03 03 00 16 64 9d 31  09 a1 ce 5a 6d ec 6f c4  |.....d.1...Zm.o.|
+00000010  e5 09 df 92 5f d2 1c 7d  62 c4 e7                 |...._..}b..|
 >>> Flow 6 (server to client)
-00000000  16 03 03 00 14 ed 9b 22  44 dd b2 e2 c3 7e ab 0c  |......."D....~..|
-00000010  69 98 d0 7b 40 9e da e2  67                       |i..{@...g|
+00000000  16 03 03 00 14 9b cb 75  61 99 76 30 9c 14 a5 12  |.......ua.v0....|
+00000010  92 de b7 95 cc 8f fe ad  f1                       |.........|
 >>> Flow 7 (client to server)
-00000000  16 03 03 01 34 0d de 90  41 3c 76 1d 54 9d c2 7e  |....4...A?J..}......|
-00000070  4c 1c fb 2c 88 4c 13 8d  c8 d0 e3 7f f6 cb 2e ca  |L..,.L..........|
-00000080  cb 92 ae 30 fe ea 3c 3e  ae 57 51 6a d6 98 5c d6  |...0..<>.WQj..\.|
-00000090  19 85 72 bd 62 56 fa c2  ea 08 eb b4 d9 75 ac de  |..r.bV.......u..|
-000000a0  a5 40 8d 8b 1f c4 8f f6  6d b2 5f d1 6d fb 14 fa  |.@......m._.m...|
-000000b0  e2 92 9e 04 37 d3 60 83  28 4a f9 92 8c b3 4a d2  |....7.`.(J....J.|
-000000c0  ce 6d 95 e4 40 79 7c 3d  98 11 e7 da 5c 56 0a 95  |.m..@y|=....\V..|
-000000d0  e0 6f 36 80 07 da 29 ef  88 44 db cd 2b 5a a5 27  |.o6...)..D..+Z.'|
-000000e0  56 5a 94 49 aa 51 ae 48  f9 12 8d df e0 2a a7 67  |VZ.I.Q.H.....*.g|
-000000f0  7f 55 3e 7a b6 bb 28 e3  a8 d9 44 67 e9 03 8f e5  |.U>z..(...Dg....|
-00000100  2b 40 a3 37 fb e4 51 0a  18 8f bb 14 2e 5b 62 93  |+@.7..Q......[b.|
-00000110  ab a4 40 d7 5f 15 12 cf  93 74 37 d0 ec 14 d3 a3  |..@._....t7.....|
-00000120  eb 6f 61 35 4a c4 b5 d7  d1 bb ae fe 11 6d 04 ac  |.oa5J........m..|
-00000130  58 72 a6 72 b6 06 9d 93  a5                       |Xr.r.....|
+00000000  16 03 03 01 1a c7 9a be  e1 2a 62 9f 01 59 e9 6a  |.........*b..Y.j|
+00000010  5f d6 32 88 bd 39 76 1b  34 fd 39 8d c7 31 cb 97  |_.2..9v.4.9..1..|
+00000020  c6 09 8b 00 c9 f3 f9 00  c5 b6 48 e1 28 ae b8 8b  |..........H.(...|
+00000030  b2 f0 eb 8b cb e8 68 30  50 b5 23 ba cf f3 8d f3  |......h0P.#.....|
+00000040  47 5f 94 ac fb 5e 56 9e  5a f8 e7 12 60 13 83 9c  |G_...^V.Z...`...|
+00000050  34 ca 45 a7 63 5f 2c 6e  46 c8 5a a0 d3 5b 9a a6  |4.E.c_,nF.Z..[..|
+00000060  70 be da df 9e 79 21 98  bd fb 94 01 6d 14 f4 5c  |p....y!.....m..\|
+00000070  2a 13 56 26 47 33 7d 4f  ab 5a fc 9c 9e 8d f4 75  |*.V&G3}O.Z.....u|
+00000080  d0 64 16 ba f2 0d 04 ca  5d 94 6b da a8 09 b1 29  |.d......].k....)|
+00000090  70 a9 37 1e ac 94 e3 81  60 c3 19 f3 a9 99 6a 11  |p.7.....`.....j.|
+000000a0  b1 e7 23 45 8a f5 42 f5  50 76 9f 1e 9e a8 e7 75  |..#E..B.Pv.....u|
+000000b0  4a 18 84 80 da 10 ed 83  9a 14 a9 a1 90 54 8e 8b  |J............T..|
+000000c0  d1 32 83 6d e7 7e be 59  f4 66 59 53 75 37 c6 82  |.2.m.~.Y.fYSu7..|
+000000d0  15 aa 56 0a 01 e1 11 ba  64 0c 8e 44 93 60 29 a4  |..V.....d..D.`).|
+000000e0  cc 9f b0 b9 d5 df 9c aa  64 2c ef 0c 9a 18 2a 97  |........d,....*.|
+000000f0  e1 20 07 37 35 28 97 9d  00 53 61 11 81 22 45 9e  |. .75(...Sa.."E.|
+00000100  c3 d7 b2 b3 4c f2 05 5b  e6 a4 de 11 7f a7 a2 82  |....L..[........|
+00000110  88 1c cb d9 24 80 3d 34  0c fc 22 58 32 28 1b     |....$.=4.."X2(.|
 >>> Flow 8 (server to client)
-00000000  16 03 03 00 85 8b 8d 61  42 37 50 ee 69 d8 fb e9  |.......aB7P.i...|
-00000010  89 a4 04 63 5d 87 a4 31  cc 22 26 c0 2c 22 1a 73  |...c]..1."&.,".s|
-00000020  cc f0 9f be 65 c4 e0 ad  6d b0 b5 d3 86 2c 0b 59  |....e...m....,.Y|
-00000030  e6 ae 58 38 b5 5f 4f 6e  7c ec e9 27 23 5f 4a 92  |..X8._On|..'#_J.|
-00000040  78 5f cc 9f 7f 2b bb 2c  dd 04 17 ea d4 87 b9 6d  |x_...+.,.......m|
-00000050  d0 1e 35 01 b4 4d 5d 73  6a 9f de 1d 71 47 78 d6  |..5..M]sj...qGx.|
-00000060  89 dc c2 d6 5c 69 0c dc  bb 7b 59 60 56 47 e9 5c  |....\i...{Y`VG.\|
-00000070  04 3e 3c 93 18 9b 40 4b  95 1f 20 e3 17 c6 ab 35  |.><...@K.. ....5|
-00000080  db 3f 88 d7 4b 89 5a 53  b7 a9 16 03 03 02 69 85  |.?..K.ZS......i.|
-00000090  49 cc 00 5a 45 40 9d be  80 06 97 16 a0 c0 dc bb  |I..ZE@..........|
-000000a0  32 62 18 88 31 3b 14 ec  9d f2 3f ed c0 36 ad bb  |2b..1;....?..6..|
-000000b0  69 fa 32 f5 13 54 2b 77  f3 db 6e 20 0a 2b 5c a5  |i.2..T+w..n .+\.|
-000000c0  d8 aa 5a 63 8d c1 51 50  41 f6 6c f7 ef 2f 15 81  |..Zc..QPA.l../..|
-000000d0  85 af 6e e5 01 95 9a 5e  70 26 cb c1 c8 89 3f b8  |..n....^p&....?.|
-000000e0  3d 5a 1b 68 a6 25 08 48  ad dd 29 db bf ce 75 44  |=Z.h.%.H..)...uD|
-000000f0  ca cd 92 79 47 d8 25 f1  23 9a 63 62 15 05 d8 2c  |...yG.%.#.cb...,|
-00000100  c0 30 a4 65 a7 f9 89 a4  fe 87 32 21 07 24 d9 16  |.0.e......2!.$..|
-00000110  64 26 48 75 ab a7 00 e1  9b 48 5c 77 3d 66 18 69  |d&Hu.....H\w=f.i|
-00000120  35 a9 4c 03 f5 9f 42 ff  50 98 73 b1 82 16 fd ff  |5.L...B.P.s.....|
-00000130  94 fd aa 3c 46 1f b5 99  fd de ab 2e 6a 24 00 5a  |.........."|
-00000300  3d 8d 48 5d 28 cd ae 94  db 95 2e a6 44 77 da d5  |=.H](.......Dw..|
-00000310  a1 09 7c a3 4c 3f a6 18  80 92 cf 5c 77 9d 18 5d  |..|.L?.....\w..]|
-00000320  43 78 05 bb cb 8e 27 7c  cc 2e 9c 54 95 ff 1c 74  |Cx....'|...T...t|
-00000330  48 fb df 47 e8 e1 24 94  94 5d cc 2c b2 df 48 6c  |H..G..$..].,..Hl|
-00000340  22 1e 61 f1 e3 c6 56 fb  79 70 b0 ab c5 70 ca 7f  |".a...V.yp...p..|
-00000350  c0 32 8d 6d a5 55 6d 94  8c 7b 9d da 0b 35 d1 da  |.2.m.Um..{...5..|
-00000360  77 85 01 66 15 be 10 c3  3c 9b 80 61 b3 c0 1a 29  |w..f....<..a...)|
-00000370  22 d1 d1 ba 4a ea 01 58  72 94 79 f0 6e 5f 36 23  |"...J..Xr.y.n_6#|
-00000380  8a cf 16 fa 2c 5f 6d dd  54 61 df bc 6f 91 d4 df  |....,_m.Ta..o...|
-00000390  e7 6f 50 8f 9c 27 04 04  19 80 10 a2 8d a5 61 81  |.oP..'........a.|
-000003a0  06 1f b0 79 87 c0 95 87  f7 d8 87 22 75 a5 87 30  |...y......."u..0|
-000003b0  f4 33 6d cb 59 f7 18 75  0f 16 03 03 00 4a d3 e9  |.3m.Y..u.....J..|
-000003c0  2e 47 65 f2 29 70 4c 74  3f e9 13 88 e7 66 c6 73  |.Ge.)pLt?....f.s|
-000003d0  0f e4 7a 8f 0e 49 49 39  90 e7 ff d4 1f 8a d6 c6  |..z..II9........|
-000003e0  91 16 f6 a6 fe 60 d8 ba  26 a6 5e 44 f5 76 88 63  |.....`..&.^D.v.c|
-000003f0  10 d0 89 2f 6b ae 55 64  13 0c 63 76 69 df 6a 4a  |.../k.Ud..cvi.jJ|
-00000400  74 15 51 0b 4d 74 db 49  16 03 03 00 14 f2 0f e7  |t.Q.Mt.I........|
-00000410  38 90 33 ff 5e 20 60 42  32 40 72 2c c8 70 d7 ba  |8.3.^ `B2@r,.p..|
-00000420  a1                                                |.|
+00000000  16 03 03 00 85 ba 55 5d  15 b8 6d 8a b6 82 a8 e1  |......U]..m.....|
+00000010  88 ea fe c0 a6 a8 fe 78  ed 8b ae 44 eb 7b 6c cc  |.......x...D.{l.|
+00000020  0f ad a1 da da 86 fb 60  07 4a 0e 5c ba 36 09 8b  |.......`.J.\.6..|
+00000030  95 3f f0 87 26 0f 7a e7  7c 1f af c7 67 42 c9 39  |.?..&.z.|...gB.9|
+00000040  39 6a 4d 8d 87 00 3b 14  76 4a 86 87 46 1e d4 04  |9jM...;.vJ..F...|
+00000050  2d ea c1 44 1f e8 87 71  da 1e 26 72 a2 e9 40 0c  |-..D...q..&r..@.|
+00000060  33 6e 6f 06 43 ed 7f fc  8f 4c d4 f4 0f 83 19 cb  |3no.C....L......|
+00000070  52 a9 94 f3 6a 64 db dd  20 d1 a7 d4 c7 6e 86 ed  |R...jd.. ....n..|
+00000080  6e ea 5c 66 d1 34 a6 92  7e b1 16 03 03 02 69 48  |n.\f.4..~.....iH|
+00000090  13 97 82 60 46 e1 c9 02  d2 e1 f3 62 da d6 3a c1  |...`F......b..:.|
+000000a0  2a a7 47 bd c2 ee 09 d5  2d 7e 5e 35 09 79 88 35  |*.G.....-~^5.y.5|
+000000b0  96 50 09 68 79 e9 de e1  71 97 11 60 c5 4e 84 54  |.P.hy...q..`.N.T|
+000000c0  03 78 69 84 e3 7f 02 1a  58 04 ed 53 47 01 b6 9e  |.xi.....X..SG...|
+000000d0  bd 5f 77 34 e7 52 3b 73  45 e1 10 3f c8 6e 4c 09  |._w4.R;sE..?.nL.|
+000000e0  d0 4b 79 f8 de 0f 15 e7  2d 42 5d 7a 89 80 1f fb  |.Ky.....-B]z....|
+000000f0  f9 02 6f a1 72 d4 8d 65  8e d0 a8 43 41 4c 48 57  |..o.r..e...CALHW|
+00000100  71 21 b3 14 45 e5 b1 f5  55 7a dd 89 c3 0f af 27  |q!..E...Uz.....'|
+00000110  03 d6 5c 2d bc 24 5b 51  fa ae 34 7b f9 56 e8 41  |..\-.$[Q..4{.V.A|
+00000120  cd 77 1c 3d c8 45 f5 a5  4a 97 92 ff bb cd 5b ff  |.w.=.E..J.....[.|
+00000130  d5 33 d6 02 9b 2a 5a 3a  e4 1b fb 48 34 b3 0b ce  |.3...*Z:...H4...|
+00000140  d7 34 5c 4a b4 4b bd 87  b6 72 40 ab 29 b0 65 25  |.4\J.K...r@.).e%|
+00000150  c7 1d 71 b6 e2 d7 b1 23  b1 96 a6 bd 74 eb ad 69  |..q....#....t..i|
+00000160  59 0c 0f af 8a 64 be e4  a7 27 c2 95 11 05 55 a1  |Y....d...'....U.|
+00000170  d6 44 df ad 1d 9c 3a 88  24 52 52 9d 42 f2 74 98  |.D....:.$RR.B.t.|
+00000180  08 9f 55 1b 2f 79 ca b4  63 38 e4 f2 fa 99 ce 66  |..U./y..c8.....f|
+00000190  77 ac 8d 31 91 05 1c bc  51 0a 31 df 5d 3e f8 69  |w..1....Q.1.]>.i|
+000001a0  b7 fa f2 35 af 57 6d 7b  c3 bf 1d 98 21 40 dd 02  |...5.Wm{....!@..|
+000001b0  1c de ac 02 40 c8 d6 04  23 30 71 16 d0 0a 26 29  |....@...#0q...&)|
+000001c0  66 e9 f1 a8 76 f8 52 18  3e 3f c5 66 c9 11 04 6c  |f...v.R.>?.f...l|
+000001d0  32 1b 35 cc 9a 34 70 07  da db 12 51 78 77 dc bc  |2.5..4p....Qxw..|
+000001e0  7a bb b8 b9 06 79 bb 04  dd d4 46 8e b5 69 d5 39  |z....y....F..i.9|
+000001f0  5e 34 8e 37 dd a2 3e 31  be 28 19 45 21 76 5b dc  |^4.7..>1.(.E!v[.|
+00000200  7d 25 a2 41 98 16 1b 5b  69 f0 90 f9 28 a8 e9 b5  |}%.A...[i...(...|
+00000210  6f 00 e3 3e eb f6 f3 e4  c9 0f bb 74 ce 40 23 df  |o..>.......t.@#.|
+00000220  12 c6 78 b0 2e bb 68 96  04 a3 e3 43 6b 4b c3 37  |..x...h....CkK.7|
+00000230  6d 97 c6 79 1a ff 4f 00  c7 76 64 5c b8 b3 17 20  |m..y..O..vd\... |
+00000240  3c 3e 6b d5 2b 72 88 11  73 1e 63 a7 6f 1e ae 83  |<>k.+r..s.c.o...|
+00000250  10 77 6f d1 96 86 84 63  fd 27 8e b9 54 da 4b b5  |.wo....c.'..T.K.|
+00000260  56 f0 50 8a aa c7 e1 b3  cb 9c 36 9e ec 38 31 39  |V.P.......6..819|
+00000270  78 ec ea 34 8a 87 cf 6b  34 fd 5e 81 92 81 61 f1  |x..4...k4.^...a.|
+00000280  88 e7 50 62 2e 58 0b d9  b9 ca f3 ed 79 a9 9a 01  |..Pb.X......y...|
+00000290  80 9d 7f 84 ae de fb 51  ac 0f 6b b9 76 fd 68 d4  |.......Q..k.v.h.|
+000002a0  f4 8d c3 92 6b 5e 9e 99  ff 7a f4 b7 0e ec 0d e7  |....k^...z......|
+000002b0  6b 24 75 fb 21 49 6f 5b  31 12 f2 88 8e 3b b4 34  |k$u.!Io[1....;.4|
+000002c0  f2 f7 c6 e7 48 0e d6 1d  81 11 32 16 01 cb b7 7f  |....H.....2.....|
+000002d0  a6 bd 9c 87 8c 0f 12 b2  dc 73 5d a0 46 fd f3 e8  |.........s].F...|
+000002e0  b8 6f e4 38 ab 94 96 a8  bd ed 90 0e 31 1f fc 2f  |.o.8........1../|
+000002f0  8f 50 e2 97 6a f5 5c b4  16 03 03 00 bc 65 bb 7c  |.P..j.\......e.||
+00000300  42 03 0d 42 46 e3 ac 9f  8a 96 b6 a3 f4 cf a5 30  |B..BF..........0|
+00000310  5b 02 17 dc 20 7d 18 19  21 a4 70 f4 4b 99 bf b5  |[... }..!.p.K...|
+00000320  cd d7 07 59 a5 82 ed 85  03 06 5c 34 3f c8 c3 4d  |...Y......\4?..M|
+00000330  c3 fb 96 05 bf b5 bd bf  e2 28 07 7e 51 a6 84 90  |.........(.~Q...|
+00000340  bf 9e 2e f6 b5 04 8e 06  7a 63 c8 00 84 a1 a3 2c  |........zc.....,|
+00000350  f3 6f 52 52 c4 ce 4a 59  31 1f d4 ab 2e f4 75 90  |.oRR..JY1.....u.|
+00000360  a5 3b ff ab 20 be 51 92  c5 f4 4d 8b f2 2a a7 ff  |.;.. .Q...M..*..|
+00000370  90 07 40 3e d6 9c cf 23  54 d1 65 d3 74 79 af 51  |..@>...#T.e.ty.Q|
+00000380  31 35 40 aa 29 42 32 7e  42 2d af 79 e8 59 6a 10  |15@.)B2~B-.y.Yj.|
+00000390  c5 55 6b 70 53 53 ab 02  48 ba 1f df 07 59 f8 34  |.UkpSS..H....Y.4|
+000003a0  ee 1d d3 e9 12 86 8b 37  2b cc 27 78 fe e1 65 2b  |.......7+.'x..e+|
+000003b0  c3 1e f2 25 a4 6d 3c b1  d4 16 03 03 00 4a 50 98  |...%.m<......JP.|
+000003c0  cd ee ab 2c 94 95 d6 46  06 ef 63 65 5c aa 6d 6e  |...,...F..ce\.mn|
+000003d0  fb a0 99 62 23 af 7a 7d  17 dc a3 c6 2b 9a 56 2e  |...b#.z}....+.V.|
+000003e0  b8 60 87 1e 88 5d 58 27  3f 02 b4 f5 2f 3b 17 8c  |.`...]X'?.../;..|
+000003f0  f9 93 0c a9 58 af 11 ed  27 9d af a5 0a 2b d6 55  |....X...'....+.U|
+00000400  7e c4 54 4a 36 51 b7 7b  16 03 03 00 14 c1 c4 d7  |~.TJ6Q.{........|
+00000410  ea 2d f0 8c 54 0e 19 33  e1 7e a8 ae 49 7c 5e 05  |.-..T..3.~..I|^.|
+00000420  23                                                |#|
 >>> Flow 9 (client to server)
-00000000  16 03 03 02 69 78 39 27  1a 64 94 f7 9c 64 ac 37  |....ix9'.d...d.7|
-00000010  28 be d0 a4 74 98 34 51  8e 3b c7 14 02 83 ee a5  |(...t.4Q.;......|
-00000020  05 55 59 f8 04 43 59 cd  33 e6 c4 44 57 30 68 db  |.UY..CY.3..DW0h.|
-00000030  b2 cb 50 db c1 e6 c4 04  a3 79 22 40 15 f9 89 57  |..P......y"@...W|
-00000040  7b 7a 68 d6 d1 15 c9 7f  6b d8 3a 6c dc 32 4f 72  |{zh.....k.:l.2Or|
-00000050  97 57 32 25 f9 78 e6 07  91 f4 45 67 b1 41 dd f9  |.W2%.x....Eg.A..|
-00000060  5b fd 76 53 d5 7d 0f 74  6e 2e ea d9 9c 2d 00 39  |[.vS.}.tn....-.9|
-00000070  2f 7f 49 97 24 bf e4 f2  c7 7e 21 f9 dd 30 3a 78  |/.I.$....~!..0:x|
-00000080  3c 53 41 58 5c 97 3a ff  6f 60 f4 b6 d6 23 a9 ad  |.c....|
-000000e0  6c b5 0d 0c d3 c6 6d 47  2e a8 3a d8 ec fd d3 42  |l.....mG..:....B|
-000000f0  ef 8b e8 75 a6 04 06 3b  5e 57 ae a3 10 2e 6d 01  |...u...;^W....m.|
-00000100  0e ea 94 e6 78 1b 91 f0  a0 1e 55 d3 25 13 15 ac  |....x.....U.%...|
-00000110  eb a4 7c c3 66 83 62 00  a3 d2 f5 7c 64 c6 39 fb  |..|.f.b....|d.9.|
-00000120  6d ee 01 50 d4 13 5d 10  5f 31 30 09 90 91 64 ad  |m..P..]._10...d.|
-00000130  f1 c5 4b ed 9d ef 2a 71  e5 7a b2 5d a8 57 bc b8  |..K...*q.z.].W..|
-00000140  1f 32 c6 f0 61 f0 08 9e  07 9b d3 99 5b 5e a5 32  |.2..a.......[^.2|
-00000150  1f 8a f7 30 1f e9 e6 39  b1 5a c6 a5 22 c8 98 49  |...0...9.Z.."..I|
-00000160  04 f2 58 4d e2 15 e6 cd  d1 2b 05 54 81 cc b8 33  |..XM.....+.T...3|
-00000170  5d 26 52 65 95 32 84 01  f6 05 fa 19 58 c6 57 53  |]&Re.2......X.WS|
-00000180  c8 d7 3d ef 56 4e 6e e4  17 45 1c bc 40 ee 06 32  |..=.VNn..E..@..2|
-00000190  60 74 9e 62 02 47 52 a8  92 57 26 1f ba 2d 93 67  |`t.b.GR..W&..-.g|
-000001a0  94 46 0f c4 0d f5 df 75  b0 d9 27 02 56 f3 82 e1  |.F.....u..'.V...|
-000001b0  da 1c 3b 3e 97 93 c8 2d  12 bd b4 5b 36 7a 5c bf  |..;>...-...[6z\.|
-000001c0  27 9a 75 11 f9 4d 9b c0  ae 6b be 71 5f 37 33 b5  |'.u..M...k.q_73.|
-000001d0  4e d4 5a fb 98 71 c5 77  8c fc e2 f3 91 73 35 f4  |N.Z..q.w.....s5.|
-000001e0  e7 13 b1 ea bd c2 a9 46  b9 ea 88 06 58 a2 49 a2  |.......F....X.I.|
-000001f0  97 2b cf 1b 25 a3 71 a0  22 95 4c 54 81 eb 41 7f  |.+..%.q.".LT..A.|
-00000200  80 15 82 ec 19 0c f8 a3  21 fe 37 2e e1 ca 34 02  |........!.7...4.|
-00000210  5d ec 78 d9 eb 99 93 5d  96 26 cd 4c 56 3a 35 6a  |].x....].&.LV:5j|
-00000220  7f d0 0c c7 b7 c3 80 c6  fe d0 04 54 00 8c 4c 8b  |...........T..L.|
-00000230  43 f4 36 b8 ea 51 35 3c  5e b5 b9 45 dc d2 19 bd  |C.6..Q5<^..E....|
-00000240  d2 2a 95 bc 7f 22 43 4f  84 be bd 7b ab a8 5c 4d  |.*..."CO...{..\M|
-00000250  28 99 e6 e5 05 33 05 38  be 17 55 80 2d e1 de cf  |(....3.8..U.-...|
-00000260  39 4e 5b 7d 89 b4 a6 d3  0a e3 fd 47 e1 2c 16 03  |9N[}.......G.,..|
-00000270  03 00 35 f3 2d 2c 7b fa  06 39 06 40 27 5b ea 9e  |..5.-,{..9.@'[..|
-00000280  2f 4a 6c 32 df 62 c3 bc  af ed 21 6a 1a 34 82 cf  |/Jl2.b....!j.4..|
-00000290  73 e5 b9 1d 8d 42 3d 8e  b7 e6 1c 0a e0 81 3e cd  |s....B=.......>.|
-000002a0  88 23 f3 56 55 09 e2 6e  16 03 03 00 98 73 0f 59  |.#.VU..n.....s.Y|
-000002b0  0e 1b 1b d1 db db 6d 47  d9 05 f8 e1 29 32 e5 16  |......mG....)2..|
-000002c0  f9 f6 24 2b 0f 2d bb 74  da fd 75 9b ec 6a 3f 02  |..$+.-.t..u..j?.|
-000002d0  c8 3a ab 23 ec cb 77 c6  d7 7b ba ce 29 85 66 54  |.:.#..w..{..).fT|
-000002e0  ab df c9 74 2a 50 b5 cd  45 03 e2 ce 6f d3 d0 f1  |...t*P..E...o...|
-000002f0  1a 3e e4 c0 34 72 e1 53  1e 69 9a d7 41 4f d4 3a  |.>..4r.S.i..AO.:|
-00000300  31 af 1a 0b 83 82 e7 6c  4f f6 9a d5 84 bb 9a 14  |1......lO.......|
-00000310  e3 ec 04 12 c8 83 9c c8  d9 81 c1 c9 16 db 35 6e  |..............5n|
-00000320  0f af a0 b3 e6 a9 2b ad  a5 1f cd a0 fb 45 01 84  |......+......E..|
-00000330  ae b5 42 49 21 d8 29 06  0a 0e e8 26 8e f4 f1 56  |..BI!.)....&...V|
-00000340  c2 7c 8f d6 4a 14 03 03  00 11 c6 06 37 68 e0 2b  |.|..J.......7h.+|
-00000350  dd 32 2a b5 c7 b6 ad e2  c8 7c d8 16 03 03 00 20  |.2*......|..... |
-00000360  1d 80 95 df 2d d3 38 50  a2 2d bc 09 50 e4 e8 47  |....-.8P.-..P..G|
-00000370  5f 3e 26 03 5e d3 9b 5a  ee ed d4 bb cb da 05 5b  |_>&.^..Z.......[|
+00000000  16 03 03 02 69 83 ef 87  6b aa f1 2a cc c1 b8 5d  |....i...k..*...]|
+00000010  47 e4 2d da c5 91 62 e4  7d 49 da 54 a3 79 fb 1d  |G.-...b.}I.T.y..|
+00000020  59 49 e8 a6 ab 79 c0 9f  51 f9 d2 63 0d 8c 6b 7f  |YI...y..Q..c..k.|
+00000030  b6 77 2d f3 b3 3e 78 86  3a 14 1a ab 3b 5e 23 b2  |.w-..>x.:...;^#.|
+00000040  d3 5c b1 2b 5c f4 f0 9d  e2 87 08 d0 2f 24 30 d3  |.\.+\......./$0.|
+00000050  05 eb f8 a6 b2 d1 52 00  c3 9e 0b 82 34 3e fd 5a  |......R.....4>.Z|
+00000060  46 d5 b6 b2 f0 a0 96 11  e1 35 c2 32 57 d6 dd b2  |F........5.2W...|
+00000070  a8 ad b2 71 a2 6f 83 05  d6 f1 83 38 a0 3c 13 ff  |...q.o.....8.<..|
+00000080  c1 c1 b0 1e b5 40 5b b5  05 31 65 0b 81 a6 b0 37  |.....@[..1e....7|
+00000090  7d 16 3b 7b cb e7 58 7f  81 25 e3 39 37 98 87 b0  |}.;{..X..%.97...|
+000000a0  e1 8f c0 d5 de 33 fe de  15 37 41 25 d8 97 5d 84  |.....3...7A%..].|
+000000b0  28 12 b4 a5 b0 15 f1 f4  cf 41 28 e9 26 5d ba 36  |(........A(.&].6|
+000000c0  da b6 a6 cb 21 92 21 30  4b 21 4d 44 28 4d 76 d1  |....!.!0K!MD(Mv.|
+000000d0  61 65 fa 02 05 67 50 ec  7d 98 78 21 46 5d fe 75  |ae...gP.}.x!F].u|
+000000e0  78 8e 9d 41 6a 0a d7 0e  27 22 d0 a1 21 57 3d 23  |x..Aj...'"..!W=#|
+000000f0  d1 7d 08 f4 0b 1b 90 ec  63 74 4c e7 df c8 8f 8b  |.}......ctL.....|
+00000100  b8 cd 2b 06 a5 35 f5 c1  62 d5 46 f3 d5 19 5b ce  |..+..5..b.F...[.|
+00000110  c8 d2 f4 c1 51 5f cd b2  51 23 61 bf 93 7f 5d bd  |....Q_..Q#a...].|
+00000120  61 f2 b2 e0 ad be ab d7  c9 77 26 c2 61 fb 25 8d  |a........w&.a.%.|
+00000130  46 38 7a 30 48 9f b5 5c  47 6b ce 10 1d 03 d0 68  |F8z0H..\Gk.....h|
+00000140  7f 00 c0 94 f4 35 eb 41  e8 91 f6 d9 5c 44 d6 79  |.....5.A....\D.y|
+00000150  72 9f 22 a4 08 fd 74 1b  42 dc 49 06 34 8f b6 f5  |r."...t.B.I.4...|
+00000160  12 1c 09 f0 d4 eb e4 6e  d5 9a 31 f9 1a 88 c1 bf  |.......n..1.....|
+00000170  37 42 90 5f c8 e1 38 2b  8b 4b c1 cd 66 72 e6 49  |7B._..8+.K..fr.I|
+00000180  d3 19 0e 01 19 60 f7 7d  d3 66 b2 bf bd 94 30 c9  |.....`.}.f....0.|
+00000190  3a 01 aa b6 dc 2a d6 1a  68 cf a6 31 5e 9a 1d 5b  |:....*..h..1^..[|
+000001a0  90 bb 77 33 31 f2 28 5a  70 a5 c5 ef 91 91 27 22  |..w31.(Zp.....'"|
+000001b0  59 33 d5 22 78 8e 8f 07  91 3c 69 ec b9 81 be e8  |Y3."x.........G...NWQ.Y|
+00000250  05 84 dc 4d fd fb d1 11  33 b6 e5 5e df 65 d4 ed  |...M....3..^.e..|
+00000260  04 af 89 b3 f0 90 9b 7c  5e 83 b1 66 71 b1 16 03  |.......|^..fq...|
+00000270  03 00 35 5b 37 fa e1 97  11 25 7c fd da 7e e8 2a  |..5[7....%|..~.*|
+00000280  9b 28 fa 20 a6 9b 9b ca  99 ed a2 eb 5b 84 df a0  |.(. ........[...|
+00000290  b9 14 c2 fe 38 a8 54 06  e4 54 38 87 2a 24 8b 1e  |....8.T..T8.*$..|
+000002a0  3e ba 0a bb c2 1d a4 74  16 03 03 00 98 8b 39 c7  |>......t......9.|
+000002b0  ac e5 80 bf 49 95 ad f4  c0 cf c9 7c 86 bf 11 65  |....I......|...e|
+000002c0  53 40 f3 64 3e 04 ad c9  8d 33 8a 10 4a f5 2e c5  |S@.d>....3..J...|
+000002d0  22 18 59 1c 81 65 8a 51  47 b4 8d b1 94 57 3c f8  |".Y..e.QG....W<.|
+000002e0  d0 06 60 ce 04 f9 50 8f  6c 43 d8 6e b0 9e d9 da  |..`...P.lC.n....|
+000002f0  4b e5 b5 05 b7 1b 4b 46  59 d6 ad 20 bb 4c fc aa  |K.....KFY.. .L..|
+00000300  9a 9b ef fd 59 4b 2a 63  01 b0 1b 2d ed b1 f4 5b  |....YK*c...-...[|
+00000310  bb ca cd fa 13 06 06 7e  1d a5 cd c3 ca 4e bf 7b  |.......~.....N.{|
+00000320  7e 92 92 09 61 35 68 a2  38 f9 13 41 f4 a9 a5 0f  |~...a5h.8..A....|
+00000330  42 63 e4 15 e8 86 00 48  90 2b 43 30 da 05 b6 fc  |Bc.....H.+C0....|
+00000340  8e 7f 52 d3 b8 14 03 03  00 11 82 73 be a9 08 9d  |..R........s....|
+00000350  5b 2f fe bd 1f 2c fb e2  f3 94 f3 16 03 03 00 20  |[/...,......... |
+00000360  d0 47 0f 2d 7e ce 8f 01  e2 7d 01 3c 32 79 a0 26  |.G.-~....}.<2y.&|
+00000370  fe 00 ce d3 37 46 20 b4  f8 af 21 81 0f 1e ba 2d  |....7F ...!....-|
 >>> Flow 10 (server to client)
-00000000  14 03 03 00 11 13 75 b3  44 ec 4c 6b 24 d3 52 90  |......u.D.Lk$.R.|
-00000010  28 c1 47 92 5c 0d 16 03  03 00 20 c2 61 ed 34 d2  |(.G.\..... .a.4.|
-00000020  c5 cf fd b3 31 3d 1d 5f  30 87 18 65 01 47 da 0f  |....1=._0..e.G..|
-00000030  d9 eb 4f 0f 50 2e 02 86  fe eb 13 17 03 03 00 19  |..O.P...........|
-00000040  3f ac 26 1c 16 0e 16 bf  b1 d3 80 86 dd c6 e2 b6  |?.&.............|
-00000050  3f 5a 0b 0c 3e 7d 3b a8  d5                       |?Z..>};..|
+00000000  14 03 03 00 11 53 7f 72  ce 10 f4 0e a3 ed ed 8d  |.....S.r........|
+00000010  3a ad 2d 57 c8 e1 16 03  03 00 20 11 e9 69 5e ff  |:.-W...... ..i^.|
+00000020  22 0d f6 a3 e1 e5 3f 14  34 a0 33 d7 d5 0a 7f bc  |".....?.4.3.....|
+00000030  7c 69 9b 9a d2 aa 41 87  fe da de 17 03 03 00 19  ||i....A.........|
+00000040  bd a1 83 5d 27 9f cc 0b  40 02 23 6e 6f 18 4c bc  |...]'...@.#no.L.|
+00000050  48 c4 02 7d 45 08 71 ac  d7                       |H..}E.q..|
 >>> Flow 11 (client to server)
-00000000  15 03 03 00 12 ea 81 9d  df ec c1 0c 3d 21 8b fe  |............=!..|
-00000010  b5 24 d8 92 43 1d 3d                              |.$..C.=|
+00000000  15 03 03 00 12 80 ae fb  45 cb a1 2d 1f c8 b6 02  |........E..-....|
+00000010  3a 28 62 d6 13 48 2c                              |:(b..H,|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice
index e83ad4b285c310..7ff58763c5b54a 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice
+++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 36 29 60 e0 b5  |....]...Y..6)`..|
-00000010  ee 59 a6 3b 1a de 96 8a  51 0c c1 15 30 ce 6a 70  |.Y.;....Q...0.jp|
-00000020  ca 5b fa a5 86 f4 59 79  44 cd 73 20 ad b7 a9 d5  |.[....YyD.s ....|
-00000030  c1 aa a6 49 6d a8 36 a9  bf 40 1e 3a d4 2c 21 4a  |...Im.6..@.:.,!J|
-00000040  5d aa fa 75 80 d4 cb fc  be 2b 41 36 cc a8 00 00  |]..u.....+A6....|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 25 9f b0 d0 c5  |....]...Y..%....|
+00000010  56 c8 79 6a 1a ff 0e e9  8b 41 b6 be c7 36 0b 58  |V.yj.....A...6.X|
+00000020  c0 9e 9d 6c 4c b4 39 1f  95 ff 8f 20 32 27 d2 39  |...lL.9.... 2'.9|
+00000030  ac f6 33 f9 48 a4 0b 0f  e1 f9 5f 0a 83 7b 75 95  |..3.H....._..{u.|
+00000040  23 55 14 ba 55 2f 47 42  e8 df 09 39 cc a8 00 00  |#U..U/GB...9....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,290 +61,286 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 f1 5a 89  |............ .Z.|
-000002d0  7f 84 c0 86 59 fb ca 59  19 b9 7b e8 96 ba 5a fc  |....Y..Y..{...Z.|
-000002e0  3f 2d b5 0f 2f 0e a3 5c  4a 04 1f 55 1a 08 04 00  |?-../..\J..U....|
-000002f0  80 c9 fe 35 a0 c1 cc a5  ea f9 5a 8d 92 b8 e6 cd  |...5......Z.....|
-00000300  5e 56 70 9c e1 de fe 69  73 b8 3c 97 86 6f e1 2a  |^Vp....is.<..o.*|
-00000310  e7 f4 12 fb b8 32 fd 5b  09 80 f8 0f ba 59 ed c4  |.....2.[.....Y..|
-00000320  86 07 33 e9 57 01 49 f8  cb 2d b4 16 07 e7 78 12  |..3.W.I..-....x.|
-00000330  3f e6 b4 d1 21 99 bc d5  cf 93 76 2c 24 18 d1 4d  |?...!.....v,$..M|
-00000340  c4 6c 3f 1c c6 1a fe 04  5a 3e 7b 57 cd 8b 84 2a  |.l?.....Z>{W...*|
-00000350  85 0d b0 5f bf a5 8e 74  55 72 dc 2c 5c 60 52 93  |..._...tUr.,\`R.|
-00000360  1e 28 9d 36 9f fd da a5  3b 51 96 4e 12 d6 d4 ca  |.(.6....;Q.N....|
-00000370  d3 16 03 03 00 04 0e 00  00 00                    |..........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 2b 66 1d  |............ +f.|
+000002d0  80 f2 60 32 0f af 6f d3  03 db 28 c1 33 18 1c 5d  |..`2..o...(.3..]|
+000002e0  71 fd 2a 24 f9 3c 4d 76  ca e3 93 8d 25 08 04 00  |q.*$.>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 e4 80 79  12 42 80 88 c3 66 6b 9b  |.... ..y.B...fk.|
-00000040  a2 03 59 f9 a3 54 2f 7f  03 de 90 97 1d cb 48 08  |..Y..T/.......H.|
-00000050  19 a4 bb 13 64                                    |....d|
+00000030  16 03 03 00 20 7b de 6f  c8 b7 f1 69 89 0b 29 af  |.... {.o...i..).|
+00000040  62 1b 92 47 e9 44 f7 26  91 93 9c 3b e2 77 0e d0  |b..G.D.&...;.w..|
+00000050  c5 af fd e5 59                                    |....Y|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 9e 59 22 68 f2  |.......... .Y"h.|
-00000010  3c 38 7d cf 43 eb 77 73  94 6c 35 e5 3f 3e 7e 03  |<8}.C.ws.l5.?>~.|
-00000020  29 96 e8 c6 f7 5c b4 39  c3 77 61                 |)....\.9.wa|
+00000000  14 03 03 00 01 01 16 03  03 00 20 94 da e2 2e f3  |.......... .....|
+00000010  65 59 31 4f 58 42 57 b5  1f e6 c1 5a c6 07 97 12  |eY1OXBW....Z....|
+00000020  f6 6c 20 cc 91 50 76 42  70 dd 2c                 |.l ..PvBp.,|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 ec 02 9b  89 68 8b 8a c6 e1 36 f1  |.........h....6.|
-00000010  4a b7 c4 d5 63 0a e8 d9  2c 1f ce                 |J...c...,..|
+00000000  17 03 03 00 16 fe 0d 78  61 f9 fe 65 3c 42 c0 98  |.......xa..e>> Flow 6 (server to client)
-00000000  16 03 03 00 14 a8 ab 9e  3c 00 e4 6f b3 26 dd 3a  |........<..o.&.:|
-00000010  67 ab ee 28 a0 a1 65 83  91                       |g..(..e..|
+00000000  16 03 03 00 14 e0 bb 6e  cc 69 fc a7 02 46 c4 5e  |.......n.i...F.^|
+00000010  a5 b1 1e ce e9 c7 7a d9  76                       |......z.v|
 >>> Flow 7 (client to server)
-00000000  16 03 03 01 34 d8 7e 6c  f6 7b d5 eb 3f 49 63 78  |....4.~l.{..?Icx|
-00000010  28 92 1c 8b 67 f2 70 a7  ff e2 91 42 43 d8 90 4e  |(...g.p....BC..N|
-00000020  01 47 0a 12 bb 9d a2 9a  e1 a2 d6 ee 5e 91 8c 4d  |.G..........^..M|
-00000030  86 8e 29 d4 e0 b3 67 0f  c4 5e a9 02 c9 e3 8f f0  |..)...g..^......|
-00000040  e6 ea 24 50 da 57 70 35  58 98 81 3e ff b8 8d ea  |..$P.Wp5X..>....|
-00000050  b3 e0 f0 a1 91 39 69 33  40 bc 0f 67 21 10 67 f4  |.....9i3@..g!.g.|
-00000060  93 66 0c f2 66 aa fd a5  2c 8d 2b 38 31 30 b3 50  |.f..f...,.+810.P|
-00000070  71 09 de ce 22 59 c3 96  5a 07 84 c0 1f 96 5c e3  |q..."Y..Z.....\.|
-00000080  7e 6b c8 7e 3f a5 32 77  20 3c 7b 92 df bc 11 57  |~k.~?.2w <{....W|
-00000090  86 e5 a1 03 78 9c 08 ea  49 bc a7 1b 6b fb 47 6d  |....x...I...k.Gm|
-000000a0  9a 86 14 fa cc 98 e6 9a  f8 39 18 57 36 fb 1b ff  |.........9.W6...|
-000000b0  ae ce 1e 96 20 9d 16 be  c6 00 45 51 2a 5a 7b 46  |.... .....EQ*Z{F|
-000000c0  9c c9 c1 eb fb fc 37 52  8d b2 22 e3 58 6a d1 fe  |......7R..".Xj..|
-000000d0  71 55 18 4b ff 92 e1 16  62 29 cb fb d0 0d 94 22  |qU.K....b)....."|
-000000e0  13 ee 8e bb 75 2e 1c ae  11 61 3d 37 69 0d 51 b0  |....u....a=7i.Q.|
-000000f0  61 e3 7f 94 08 54 3a 49  68 94 b5 64 da ac a9 a4  |a....T:Ih..d....|
-00000100  e2 3f 65 ad d7 42 8e 0b  70 5f 4f 6d 6e 0c 27 51  |.?e..B..p_Omn.'Q|
-00000110  5a 48 57 71 6e 9b 58 e0  6e 05 40 48 a8 20 36 98  |ZHWqn.X.n.@H. 6.|
-00000120  f8 71 a3 ef 2d db 8c ae  fa a5 14 d8 1f ff ad 7b  |.q..-..........{|
-00000130  2a 15 0d fb 3d e8 1b fe  48                       |*...=...H|
+00000000  16 03 03 01 1a a7 03 1c  ef 27 0a 04 9b 31 b0 c6  |.........'...1..|
+00000010  17 00 1f 6c d5 91 ae 7c  77 87 98 05 67 9a ea ea  |...l...|w...g...|
+00000020  6c 79 28 da 2c 91 6d a0  c6 9a e9 f3 85 a0 7f 7d  |ly(.,.m........}|
+00000030  ae 89 ac 0d 01 7f d8 34  dd fb ba c3 d8 ba ff 9b  |.......4........|
+00000040  75 dc d6 5e 8a fa ad 9c  ea fa 15 63 55 85 98 26  |u..^.......cU..&|
+00000050  65 7a 19 17 c4 99 98 85  83 c4 06 39 30 d5 63 51  |ez.........90.cQ|
+00000060  ff 22 e8 cd 55 6e fc 88  5e d5 54 24 79 52 7e b0  |."..Un..^.T$yR~.|
+00000070  71 e4 e6 cb a6 06 24 14  1a c2 a8 52 85 e9 fc e4  |q.....$....R....|
+00000080  66 47 9c 9c d1 f3 56 11  47 16 4b 7c a5 f1 81 1e  |fG....V.G.K|....|
+00000090  00 78 98 8f 70 ae 47 6d  45 3b c4 af fc 88 bd 88  |.x..p.GmE;......|
+000000a0  7b cc 8a 78 86 ff 86 25  2d 21 28 f2 c5 d7 4b 61  |{..x...%-!(...Ka|
+000000b0  c0 ea 67 38 4c d0 d6 6f  fc a0 69 62 98 6f ac 29  |..g8L..o..ib.o.)|
+000000c0  29 13 34 7a f0 2d 1b 7e  52 42 6f f1 64 ed 7f 47  |).4z.-.~RBo.d..G|
+000000d0  69 82 9b 9d 19 7b 3a c5  54 51 c8 8f 4c 9e 42 a7  |i....{:.TQ..L.B.|
+000000e0  0f 9e 05 1d 4f 85 11 05  97 42 fa 24 37 1c 4e ec  |....O....B.$7.N.|
+000000f0  55 dc e1 4e f6 e2 dd c6  63 b0 dd 60 11 93 23 8a  |U..N....c..`..#.|
+00000100  eb 68 76 21 ec 19 cf 59  c8 78 80 f0 fa 39 6a 09  |.hv!...Y.x...9j.|
+00000110  f8 7f 9d c0 e7 51 3d 75  17 e3 cf a5 bf 1c 10     |.....Q=u.......|
 >>> Flow 8 (server to client)
-00000000  16 03 03 00 85 1b 2d 33  65 c9 76 7a 52 fc bf 49  |......-3e.vzR..I|
-00000010  7f 21 89 e6 3d 0e 79 55  83 8d 2e de b9 c4 57 08  |.!..=.yU......W.|
-00000020  fc 79 f5 32 95 9f 97 fe  a9 40 3a e6 c6 ec 2a e2  |.y.2.....@:...*.|
-00000030  92 4c cc 48 0b ac bc 66  58 c6 0f 5c b6 62 3d a6  |.L.H...fX..\.b=.|
-00000040  86 9f 4c f5 0d 2e 4b 69  cb 7a 62 25 08 04 de 51  |..L...Ki.zb%...Q|
-00000050  6c 78 99 ff b2 96 5f 3d  85 60 34 28 2e b4 64 ec  |lx...._=.`4(..d.|
-00000060  33 d8 c1 09 49 cf 10 ee  19 6c 89 67 28 b1 4d 00  |3...I....l.g(.M.|
-00000070  08 43 33 8e 8e b9 bf 25  73 a9 88 5d 0d 97 09 26  |.C3....%s..]...&|
-00000080  d3 3d 7f 7e fa da e4 89  16 a5 16 03 03 02 69 3c  |.=.~..........i<|
-00000090  8b c1 7c 1e a4 46 7d 21  40 ed 6f 45 c2 c0 19 d3  |..|..F}!@.oE....|
-000000a0  18 e3 b7 e1 a4 d0 c0 ad  4f cf a7 0f d3 39 ad 0f  |........O....9..|
-000000b0  6a 70 28 d2 ab 8e 26 93  e1 f4 4d 25 65 1a 7e 44  |jp(...&...M%e.~D|
-000000c0  63 30 3c 54 8a 2f 1e 31  f6 d2 e2 26 66 43 91 df  |c0...d...V*.h|
-000001e0  45 68 13 da c6 eb 5d f2  7b 51 bd b4 8e 25 0d b7  |Eh....].{Q...%..|
-000001f0  f0 03 dd 2b cd 93 7f 00  96 ca 75 c1 1b c7 d0 95  |...+......u.....|
-00000200  0f 08 52 e0 d6 c9 2c b2  42 b3 0b 0c ed e1 01 e3  |..R...,.B.......|
-00000210  7d ef b1 fb 80 76 c8 08  ec 9f c2 13 a5 04 05 fe  |}....v..........|
-00000220  33 c2 b7 2e 1a 2b 4a 74  f5 f5 92 ad e8 cf f7 76  |3....+Jt.......v|
-00000230  3e 7c 69 4b 2d be 9b 08  3b 80 97 66 63 e5 df db  |>|iK-...;..fc...|
-00000240  1a a4 aa 8a bd 43 2a 65  44 6d f1 e6 60 92 cd 98  |.....C*eDm..`...|
-00000250  a9 ac 81 de fb 22 06 f4  ca 90 4a 67 64 3f 25 ab  |....."....Jgd?%.|
-00000260  3c db 77 cb bc 32 55 bc  2d 48 4e 32 c7 48 d1 2f  |<.w..2U.-HN2.H./|
-00000270  bf 80 03 7e 27 92 8b 6a  90 35 ab 8e 93 dd 27 c7  |...~'..j.5....'.|
-00000280  7d d6 a7 ea d8 1f 6a 43  57 34 d2 a9 7c c3 23 55  |}.....jCW4..|.#U|
-00000290  62 5b 98 80 a1 ec 61 53  63 b9 a7 89 85 7e a8 0e  |b[....aSc....~..|
-000002a0  31 e9 9f 82 e9 1a b3 25  b8 d3 bf 4b f7 da 40 ce  |1......%...K..@.|
-000002b0  30 95 8f 41 75 9e 99 f5  3f fd 90 57 77 ee ad b7  |0..Au...?..Ww...|
-000002c0  56 1e fd a6 d6 98 ae d3  a0 36 8a e0 19 a5 64 63  |V........6....dc|
-000002d0  8f 08 d3 e6 2b c3 8a 29  90 8d e0 d7 1d 8b 84 6d  |....+..).......m|
-000002e0  a8 7a 0d 8b 6d 0e d5 fa  bd c1 31 13 c7 39 61 f6  |.z..m.....1..9a.|
-000002f0  e8 b3 fd 4d fe 49 a0 2c  16 03 03 00 bc 6d 99 1c  |...M.I.,.....m..|
-00000300  76 24 e6 f4 79 ac da e5  71 78 32 8d df a7 74 a4  |v$..y...qx2...t.|
-00000310  e1 22 43 86 62 7a 99 34  9e c1 c7 82 82 f2 ad c0  |."C.bz.4........|
-00000320  cb e5 54 c7 2d 3f bd 00  ba 4f 9f 6b 90 c2 2c bf  |..T.-?...O.k..,.|
-00000330  d5 d1 20 48 28 f0 bc 21  d4 1f 8d a9 89 82 ce 3d  |.. H(..!.......=|
-00000340  b2 52 bd 91 57 65 da 07  74 d9 56 b3 54 a7 2c 20  |.R..We..t.V.T., |
-00000350  93 5e 79 59 d0 d3 33 95  a9 de f6 a4 48 37 11 10  |.^yY..3.....H7..|
-00000360  a7 34 2a 2b 30 a5 24 03  5b d5 63 78 1f ad ca 70  |.4*+0.$.[.cx...p|
-00000370  ff f9 22 ca bc 23 ac 4d  eb 5a d7 de af 31 72 25  |.."..#.M.Z...1r%|
-00000380  84 24 72 b7 b8 c0 a5 7a  b6 7e a9 95 42 bb 5e 52  |.$r....z.~..B.^R|
-00000390  6c 13 87 c2 b5 17 04 a8  0a 43 d0 b4 96 12 12 4b  |l........C.....K|
-000003a0  1e d1 0b ab a1 5d 1a bc  48 15 ec 88 e6 7b 57 aa  |.....]..H....{W.|
-000003b0  da 3b 7f 0b cc 11 93 8f  ee 16 03 03 00 4a 35 4e  |.;...........J5N|
-000003c0  5f 82 88 e9 d5 24 cc 81  3c 0a cc 49 63 13 ea 0c  |_....$..<..Ic...|
-000003d0  e6 d7 a9 f2 7b 4f 7f d4  c1 d8 71 4e 1d e6 68 e6  |....{O....qN..h.|
-000003e0  7e ba 73 f8 23 a5 af 1a  05 35 4c bf 88 8d 8a 90  |~.s.#....5L.....|
-000003f0  09 26 34 1d b6 88 92 2d  60 92 52 2c cb 45 02 a4  |.&4....-`.R,.E..|
-00000400  78 54 3d a3 44 d3 f9 46  16 03 03 00 14 58 29 f7  |xT=.D..F.....X).|
-00000410  44 f4 a0 9f 65 d8 47 1a  01 7e 1b 95 3b 5f 1f 4a  |D...e.G..~..;_.J|
-00000420  12                                                |.|
+00000000  16 03 03 00 85 14 4e 8e  de d0 5b 59 2d f6 a3 b0  |......N...[Y-...|
+00000010  c0 ff 4a ff 8b cf af 2f  09 f1 ee 03 0f b9 70 5e  |..J..../......p^|
+00000020  1b e4 ef b4 3e e7 c1 43  fb ea a8 68 4c 66 0a 55  |....>..C...hLf.U|
+00000030  e8 51 a6 30 bb e3 f5 0e  df 11 f2 e0 51 94 14 f6  |.Q.0........Q...|
+00000040  1e c6 e8 9d 10 a2 20 9f  f2 f6 1e f0 3c f3 ba ff  |...... .....<...|
+00000050  65 d1 f4 df 9e e6 18 9f  a1 a5 9c 5f 4b 4f 20 98  |e.........._KO .|
+00000060  4a f6 0b 95 da 01 1f ea  c0 c4 39 39 8b fd 19 40  |J.........99...@|
+00000070  8d 14 da 45 fd 51 3d a7  36 23 a0 b2 bb cb 81 6b  |...E.Q=.6#.....k|
+00000080  79 0a 02 71 50 84 ac d6  7b ad 16 03 03 02 69 b8  |y..qP...{.....i.|
+00000090  a9 6c 87 d7 23 6b c6 1a  4c 08 dd fa 58 e8 e8 d5  |.l..#k..L...X...|
+000000a0  44 16 3b de 77 60 33 2a  47 a5 3c e0 cb c3 1a 38  |D.;.w`3*G.<....8|
+000000b0  1d 1f 69 8e 33 a3 ba ac  55 b5 77 9b e1 fc a4 21  |..i.3...U.w....!|
+000000c0  99 90 01 5e 99 36 a3 cf  74 b4 1f 96 b7 96 1e 4b  |...^.6..t......K|
+000000d0  cf 0b 92 5f 6b 1f 1c b0  70 80 2e 87 57 ef 52 b0  |..._k...p...W.R.|
+000000e0  2b 7d 66 06 cb a1 78 a7  5a e2 af 4c fc a4 8b 99  |+}f...x.Z..L....|
+000000f0  af 6c 6d 0e 07 7e da 11  5a b7 89 af 3c ce 1e 22  |.lm..~..Z...<.."|
+00000100  1f 7d 97 d5 d4 78 09 c4  e7 fb 33 bf 36 ee 6e 5a  |.}...x....3.6.nZ|
+00000110  af f0 5b 0f 00 eb cc 3d  76 35 41 98 4c 65 81 34  |..[....=v5A.Le.4|
+00000120  74 d9 d7 ba 04 fc c8 c6  c9 ca 4b b0 8e b1 7e 87  |t.........K...~.|
+00000130  9d 69 2e d5 68 54 96 48  37 42 ae ff 18 d0 08 b2  |.i..hT.H7B......|
+00000140  dc 26 1c c1 99 f1 c3 02  3f 48 51 a8 92 10 18 01  |.&......?HQ.....|
+00000150  f3 3b 96 4b de 80 29 27  87 da f4 89 23 1b 49 b8  |.;.K..)'....#.I.|
+00000160  5b f5 50 ec 99 b0 c3 48  e2 d3 fe fb a0 95 c3 c6  |[.P....H........|
+00000170  83 fe d9 87 ef 0c cf 67  8f e7 52 3d 17 7d c0 ab  |.......g..R=.}..|
+00000180  02 1a 33 78 c8 d6 13 8b  8e 82 be 0d 5e d4 22 e8  |..3x........^.".|
+00000190  63 c3 84 a9 05 12 d3 b7  e2 36 96 a2 22 0a 77 df  |c........6..".w.|
+000001a0  20 06 5c 0d 8b c1 d6 ac  73 b0 b2 a0 be db 59 17  | .\.....s.....Y.|
+000001b0  05 60 68 b9 18 85 d5 73  9b c9 41 b9 c1 f2 02 47  |.`h....s..A....G|
+000001c0  ca 95 c8 47 e2 de 04 75  08 d4 b7 a2 41 d7 e2 6b  |...G...u....A..k|
+000001d0  ad 8c ba c5 fc f8 b1 fe  d3 23 c0 22 ec d0 2f a7  |.........#."../.|
+000001e0  d9 ed 0e da 71 18 c0 d0  1f 40 8d eb 79 ea 5f aa  |....q....@..y._.|
+000001f0  07 4f 65 81 c1 9e ea 36  7f 0d 8b 07 8b 71 81 5a  |.Oe....6.....q.Z|
+00000200  0e cb d4 0f 98 c8 5c 69  d0 61 6e b5 ef 2a dd 5f  |......\i.an..*._|
+00000210  63 92 b4 3e 6e f4 b8 fc  45 bf 58 79 08 a4 95 6f  |c..>n...E.Xy...o|
+00000220  34 01 9b 8a 19 a5 e4 11  3f d4 97 47 66 e8 42 ef  |4.......?..Gf.B.|
+00000230  92 72 01 f4 6f 07 a4 35  81 83 ee 26 d0 96 cc de  |.r..o..5...&....|
+00000240  42 2a 65 64 cc a9 0c 39  31 d5 7c 2f 42 e5 ce 36  |B*ed...91.|/B..6|
+00000250  0b bf b5 22 2a 4f 3c 56  27 29 cd fb 8e 9f 8f ab  |..."*O>> Flow 9 (client to server)
-00000000  16 03 03 02 69 ef e7 da  35 77 b6 d6 09 a1 71 43  |....i...5w....qC|
-00000010  1c 2b 72 d6 65 ea b4 38  e4 13 c1 85 c3 36 bb f4  |.+r.e..8.....6..|
-00000020  ef 1a b8 94 de 11 22 6e  b8 28 14 05 88 2a 5d 7a  |......"n.(...*]z|
-00000030  7c 0a 00 ac 74 ce 4f f8  b3 94 5d 5c a1 aa 3e 20  ||...t.O...]\..> |
-00000040  ee 0b e3 50 3d e7 4f 4d  ad 5c 9e 6e 8e 75 26 b4  |...P=.OM.\.n.u&.|
-00000050  80 e1 85 3f ae 76 6f 95  6e f0 79 98 3d 86 17 9c  |...?.vo.n.y.=...|
-00000060  e9 d6 35 1d f5 15 ea c5  29 67 15 9d 03 4b 41 9d  |..5.....)g...KA.|
-00000070  25 b3 ab 3a b0 12 d1 ff  fc 9e 25 af ff 8a c8 1c  |%..:......%.....|
-00000080  4b 4e f0 10 9d d3 98 6e  66 0a 13 82 b9 04 d7 39  |KN.....nf......9|
-00000090  b2 2c c5 f9 cf be 4b 8b  8a 28 e9 24 db c8 fe d6  |.,....K..(.$....|
-000000a0  a1 b1 3c 9e 19 92 0b 5d  2e c8 5f 56 35 dc 16 46  |..<....].._V5..F|
-000000b0  7b a1 d2 43 d9 ee 3f a7  74 c1 4c ed 2a 84 4a ad  |{..C..?.t.L.*.J.|
-000000c0  76 a2 bc 90 8d 19 06 11  1a 6d b8 e0 3a 8e 0d 33  |v........m..:..3|
-000000d0  f2 ad 06 d7 e5 a3 16 8c  14 07 4c 84 8a 47 13 c1  |..........L..G..|
-000000e0  b1 cb 81 8b d7 5b fb 04  2b da 3c 7f d1 0f 2b 8b  |.....[..+.<...+.|
-000000f0  23 ad f5 f1 09 82 24 80  5c bc f7 68 69 c0 90 5f  |#.....$.\..hi.._|
-00000100  fa 96 b4 9d 51 0e 96 1e  06 2a d1 98 5d 96 95 68  |....Q....*..]..h|
-00000110  de df 40 f9 f6 b1 f2 ef  a7 c4 0c 05 ee b3 63 8d  |..@...........c.|
-00000120  3a 1e a2 d8 34 2a b2 99  c3 17 03 60 18 4f 43 21  |:...4*.....`.OC!|
-00000130  99 4f 81 c1 11 8e a4 45  79 d8 fa fc b2 9a f8 d0  |.O.....Ey.......|
-00000140  95 10 79 38 45 1b 82 42  f0 bb 75 27 6b a2 53 d3  |..y8E..B..u'k.S.|
-00000150  e6 dd 2d 43 f5 80 fd 9a  59 ec 07 42 ee b0 9d bd  |..-C....Y..B....|
-00000160  33 dd 58 c8 57 e8 16 de  a4 21 c9 92 51 d2 e5 8b  |3.X.W....!..Q...|
-00000170  48 f5 cb a8 3a d8 f6 a3  b2 00 90 9e f0 e0 ca c7  |H...:...........|
-00000180  fe 79 70 f7 8e 5c 4b 3c  86 c8 cc ca b1 b6 05 e2  |.yp..\K<........|
-00000190  90 66 db 85 fc 7c 87 6f  e0 44 ed 2a c9 66 b7 de  |.f...|.o.D.*.f..|
-000001a0  c5 f0 d2 80 dd f2 c2 26  5b 84 cf b0 c4 78 7e 65  |.......&[....x~e|
-000001b0  66 d9 d8 c5 fe 97 b9 27  6e 55 11 c0 0b 3e e2 c9  |f......'nU...>..|
-000001c0  ce 4d dd 27 28 6f 62 45  70 b3 e4 0c 18 31 f1 b2  |.M.'(obEp....1..|
-000001d0  33 8f 7d 34 7c f6 f3 50  d9 a9 6b ec a7 cf c2 7b  |3.}4|..P..k....{|
-000001e0  36 21 d7 76 68 c1 0e 90  8d af 2e c5 d5 26 c7 c1  |6!.vh........&..|
-000001f0  0b 1c 43 85 a6 43 3e 96  67 46 2d 1e 0a c8 90 99  |..C..C>.gF-.....|
-00000200  0f 71 cc 60 49 68 2c df  17 68 e4 fa 79 05 50 ac  |.q.`Ih,..h..y.P.|
-00000210  16 d0 26 1f 7e 58 a2 dc  73 e9 05 8d 92 f6 8c 56  |..&.~X..s......V|
-00000220  db 08 0a b7 99 64 f7 5b  d0 5f f3 88 f5 02 f5 d0  |.....d.[._......|
-00000230  66 55 e3 db f4 d1 c9 d3  c1 f4 ab 8c 5c 39 fd 64  |fU..........\9.d|
-00000240  ec cd ab 63 da 7b 3e 64  1a b4 c3 d9 79 bd 92 e3  |...c.{>d....y...|
-00000250  97 68 a4 83 b5 f1 fa f5  05 04 84 39 e9 82 a6 84  |.h.........9....|
-00000260  e5 a0 6f a2 6d ea 6b ab  4c f8 a5 87 9c 9c 16 03  |..o.m.k.L.......|
-00000270  03 00 35 08 0b 50 f9 90  d3 e9 58 e5 5b df a1 99  |..5..P....X.[...|
-00000280  89 ea 0b 1a f1 4d e3 fd  a6 79 2c 61 ac 6f da 7c  |.....M...y,a.o.||
-00000290  2a 78 e1 38 05 35 2e 8b  db eb 25 fd eb 2f d7 a3  |*x.8.5....%../..|
-000002a0  27 9d 27 f2 b3 ff 20 8a  16 03 03 00 98 95 42 7e  |'.'... .......B~|
-000002b0  d5 86 40 42 dc 93 fe 80  ef 70 cc fb 2f b1 51 bd  |..@B.....p../.Q.|
-000002c0  ca 5f 1e 0d a0 3f c6 e0  c9 69 0e d4 dc 18 25 52  |._...?...i....%R|
-000002d0  5c c2 8c 37 f6 a8 e6 4d  48 27 81 4d 7a f3 49 5c  |\..7...MH'.Mz.I\|
-000002e0  92 92 68 a9 e0 dc d6 c5  b5 ea 99 5c 51 df 93 a1  |..h........\Q...|
-000002f0  36 2d 65 a8 cb ca 72 76  53 92 7d c7 81 5f 19 2c  |6-e...rvS.}.._.,|
-00000300  3e 83 29 16 41 65 4f 81  d7 3f 5c 15 f0 36 d9 75  |>.).AeO..?\..6.u|
-00000310  a7 c8 52 6f 5b b6 98 46  5e 39 31 83 1c 99 3f f9  |..Ro[..F^91...?.|
-00000320  9e 28 d7 94 ae a7 b4 f7  c9 ce 5b 74 2f 88 9e fd  |.(........[t/...|
-00000330  3c 1c 1e eb f4 b3 39 65  39 07 14 8e 3e 95 87 b2  |<.....9e9...>...|
-00000340  b8 4c e8 7d 3b 14 03 03  00 11 cc eb 21 2a 7c 9a  |.L.};.......!*|.|
-00000350  5c 35 9f 35 e3 09 dd f8  7a 4f 43 16 03 03 00 20  |\5.5....zOC.... |
-00000360  0b ff 00 c0 96 43 18 d9  9d ad 51 55 44 40 11 2f  |.....C....QUD@./|
-00000370  cd 1c bd ae ea 0a c9 eb  de 57 95 c2 81 63 79 4c  |.........W...cyL|
+00000000  16 03 03 02 69 8a dc ce  d1 c0 85 30 95 6c da 57  |....i......0.l.W|
+00000010  23 05 39 c1 4c 20 08 25  a2 96 f1 55 a1 77 3b 42  |#.9.L .%...U.w;B|
+00000020  9f 3d 69 9b 56 49 b4 94  8a 3c d5 85 43 f1 b4 4b  |.=i.VI...<..C..K|
+00000030  cd e0 67 95 83 34 90 89  81 f0 18 87 28 c0 42 88  |..g..4......(.B.|
+00000040  b0 1c d1 cc 0a f0 bb 67  91 55 0b e4 ed 22 52 09  |.......g.U..."R.|
+00000050  92 0b 56 ac d0 3f c9 41  05 8a 19 7d e7 9a d7 ff  |..V..?.A...}....|
+00000060  fa 85 f5 23 b0 98 a0 79  b1 8e 0f 90 0e c8 32 92  |...#...y......2.|
+00000070  4b 6a 37 47 45 31 70 be  8b cd 7a 26 3a 3c 0b 63  |Kj7GE1p...z&:<.c|
+00000080  a7 8c 00 2c 1d be eb 5c  1f 16 90 76 2b d7 82 5e  |...,...\...v+..^|
+00000090  31 93 40 7a e0 9a e0 4c  7d 2e e3 84 0f cb 06 7d  |1.@z...L}......}|
+000000a0  8d 76 41 ea 27 52 4a 77  e5 91 02 ab 11 cc 8c f0  |.vA.'RJw........|
+000000b0  fe 8e ee b2 f1 ba 1e ab  0d 5c e2 2d da d5 8d f9  |.........\.-....|
+000000c0  7c 22 32 e9 50 1d 88 db  af c0 82 51 e0 31 14 71  ||"2.P......Q.1.q|
+000000d0  ad c9 05 5d 8e 2b 75 4b  9e 74 b0 3a a9 e4 7c 82  |...].+uK.t.:..|.|
+000000e0  ac 75 39 31 0a dc dc 0a  5c f4 ee 55 f2 09 c2 d2  |.u91....\..U....|
+000000f0  81 c8 70 2e 8f 37 6b 90  79 5c 18 6e 38 21 c6 00  |..p..7k.y\.n8!..|
+00000100  08 be ad 21 e9 40 b6 54  06 f0 61 f9 2c 71 25 0e  |...!.@.T..a.,q%.|
+00000110  13 6c 66 ef b6 a9 61 d0  d0 42 56 58 32 3c 9c 5a  |.lf...a..BVX2<.Z|
+00000120  ee 13 1d 42 8b 94 41 9c  d1 2e c9 ac d4 ed 0f 04  |...B..A.........|
+00000130  1c 6f 5c 30 80 12 37 c6  43 07 7e 03 50 86 24 84  |.o\0..7.C.~.P.$.|
+00000140  34 2a 70 82 65 67 35 cd  5e 7c 0e 49 30 35 d4 ee  |4*p.eg5.^|.I05..|
+00000150  43 b7 7a c3 88 30 e5 ba  98 7f 8d 9e 08 a2 8c bb  |C.z..0..........|
+00000160  48 44 c2 1a 8d 7b 41 de  b6 68 ae d2 8a 64 9b 6b  |HD...{A..h...d.k|
+00000170  8a 47 88 04 49 05 8a 94  66 da d3 90 78 6d 81 64  |.G..I...f...xm.d|
+00000180  4e 6b a5 6f d2 9d 1d 36  6f a2 a3 83 0c f5 69 10  |Nk.o...6o.....i.|
+00000190  37 c8 b8 59 c7 b1 5b 91  fc e3 26 37 da 14 80 8f  |7..Y..[...&7....|
+000001a0  d4 1e 63 51 1d 77 85 67  af 7a 7d e4 5a 27 f9 3f  |..cQ.w.g.z}.Z'.?|
+000001b0  75 b0 9e 2a 1d 42 29 ac  d4 29 c6 0d 2f ee 35 38  |u..*.B)..)../.58|
+000001c0  38 91 a4 f1 60 1b d6 49  b2 eb c4 df b6 01 99 69  |8...`..I.......i|
+000001d0  06 7c ca 2d aa 15 e8 c5  4f 48 5f 77 87 4b fd 41  |.|.-....OH_w.K.A|
+000001e0  cf aa 7d 96 b9 12 ee b7  b3 a2 86 5e 4f 79 08 a1  |..}........^Oy..|
+000001f0  00 43 12 93 92 99 07 44  23 48 78 46 c8 fc 4a 96  |.C.....D#HxF..J.|
+00000200  88 72 45 2a f4 ff 92 41  7b e5 a0 74 93 ff b8 f6  |.rE*...A{..t....|
+00000210  3e e0 6a 3b 3b 12 68 50  89 d1 d3 22 e0 a1 3f ef  |>.j;;.hP..."..?.|
+00000220  da 18 15 5b c2 48 0e 78  d0 af ae d7 81 af 23 16  |...[.H.x......#.|
+00000230  ab 71 07 9d 26 b2 8b 34  7e b2 1a 1e f4 fb 02 9a  |.q..&..4~.......|
+00000240  f4 15 78 a9 d2 19 94 bb  9f b0 ba 2a 21 20 dd 87  |..x........*! ..|
+00000250  57 73 e7 01 08 bc 38 ce  2d 9e dc 3f f7 c4 75 aa  |Ws....8.-..?..u.|
+00000260  00 9d 28 43 e5 de aa 82  fb e5 ca 87 4e 6c 16 03  |..(C........Nl..|
+00000270  03 00 35 e0 37 f9 95 cd  96 f9 ba 36 12 6b 35 c5  |..5.7......6.k5.|
+00000280  02 9d 71 8a e5 07 d6 1c  77 6a 86 17 d0 01 9b 79  |..q.....wj.....y|
+00000290  74 6b 14 27 33 2f 6d c2  af cb dd 47 71 b3 73 4d  |tk.'3/m....Gq.sM|
+000002a0  7f 42 3e 7f 86 6e 63 ed  16 03 03 00 98 7f ba 78  |.B>..nc........x|
+000002b0  bf a3 d4 02 cb 19 0d 1f  48 bf 4d 9f d0 37 3a c9  |........H.M..7:.|
+000002c0  c1 76 6e fb 9a 69 63 0a  a1 76 13 2d ea 52 38 18  |.vn..ic..v.-.R8.|
+000002d0  71 89 9a f5 02 2e 44 94  72 6d 08 e1 89 9a e1 4c  |q.....D.rm.....L|
+000002e0  ee 2f 15 9c 0d b6 67 1e  0c 17 b0 e9 03 7d 66 1c  |./....g......}f.|
+000002f0  28 6b 57 6d c8 49 5d ef  ca 4c 51 59 ae 17 55 97  |(kWm.I]..LQY..U.|
+00000300  54 f1 f5 64 19 ec 36 27  96 33 0e fd 65 42 ac 50  |T..d..6'.3..eB.P|
+00000310  bb cf f9 da fe 98 3d 83  79 a0 24 0d 9f 91 5c b0  |......=.y.$...\.|
+00000320  5c c5 04 b4 90 53 c3 8b  b5 29 c5 73 7f 04 c6 55  |\....S...).s...U|
+00000330  93 4a 08 67 8f f7 a8 ba  a8 e2 62 09 85 d3 47 b9  |.J.g......b...G.|
+00000340  27 bd 6c 81 95 14 03 03  00 11 88 9b 21 1e 06 0a  |'.l.........!...|
+00000350  fa 8a 9e 4e d9 7a b3 a5  45 7a 96 16 03 03 00 20  |...N.z..Ez..... |
+00000360  6f a0 f0 cf 0b 2b c2 d1  36 d8 64 2b 72 86 7b ab  |o....+..6.d+r.{.|
+00000370  c7 86 5d c3 67 ec d6 c0  32 4d b8 1f fa d9 3a af  |..].g...2M....:.|
 >>> Flow 10 (server to client)
-00000000  14 03 03 00 11 d8 35 87  10 ce 65 af f6 19 4d 34  |......5...e...M4|
-00000010  6c 01 68 91 74 2d 16 03  03 00 20 70 df d4 bd c1  |l.h.t-.... p....|
-00000020  29 ac f3 f8 70 a4 5b ca  cb 7e 20 d4 1b 7e 2f 4b  |)...p.[..~ ..~/K|
-00000030  79 0b ea a3 ff 41 4a 5c  ff 5b 16 17 03 03 00 19  |y....AJ\.[......|
-00000040  4b 34 71 05 b5 b8 40 44  d4 2a ec f1 dc e1 ee 6a  |K4q...@D.*.....j|
-00000050  4f e6 c2 bf 44 98 0c 25  9b 16 03 03 00 14 98 20  |O...D..%....... |
-00000060  3c 7a 9f ba ba fd 6e 1f  a1 b9 4b d5 b9 d0 4c 75  |>> Flow 11 (client to server)
-00000000  16 03 03 01 34 82 8c 60  3d d0 8e d7 cd d6 37 37  |....4..`=.....77|
-00000010  d8 18 6f b1 8c b5 81 f3  0a bf 4f ca 6d 04 9e 6a  |..o.......O.m..j|
-00000020  4f ee bb a0 6c 40 40 96  96 94 b7 44 3d 56 1b 86  |O...l@@....D=V..|
-00000030  eb 52 55 5d 4d da eb 99  85 fb 28 b6 20 33 1c ec  |.RU]M.....(. 3..|
-00000040  95 d9 23 1d 69 fa 40 8f  3f 2b ae 5f 08 c9 eb 71  |..#.i.@.?+._...q|
-00000050  24 b8 4f b0 20 9f db 3d  cb d1 9e d7 7f f0 2e e9  |$.O. ..=........|
-00000060  c0 b5 81 ea 67 3f 70 cc  51 db 8c 00 6b 30 87 61  |....g?p.Q...k0.a|
-00000070  aa 75 dc 1e bc 19 33 82  c2 d4 6e 47 9c c8 ce 60  |.u....3...nG...`|
-00000080  01 73 f2 a9 73 c4 49 da  2e 69 4e 38 66 d8 ab 05  |.s..s.I..iN8f...|
-00000090  39 6b 42 13 43 22 26 ad  bd d7 78 f4 c6 81 b4 8a  |9kB.C"&...x.....|
-000000a0  73 52 6c b8 02 4c 08 fd  7c 79 3b 04 73 61 66 5b  |sRl..L..|y;.saf[|
-000000b0  59 98 50 7d d0 25 89 39  70 b0 e2 b4 3f c6 f1 ce  |Y.P}.%.9p...?...|
-000000c0  83 4b 4a a4 88 7b c5 59  c7 9e 3a e0 a9 d5 95 57  |.KJ..{.Y..:....W|
-000000d0  6f f0 ce 33 c6 58 69 30  04 8b 98 7d 80 74 35 2a  |o..3.Xi0...}.t5*|
-000000e0  a5 40 fe 3b e8 9b c7 2e  30 8c 61 9d e9 f5 56 b2  |.@.;....0.a...V.|
-000000f0  b7 a5 cd 9b a7 91 87 05  ee da e1 5e c7 00 c3 ae  |...........^....|
-00000100  1d c0 71 5d 02 03 15 e6  1b bc a5 da 04 78 89 c6  |..q].........x..|
-00000110  aa 3e 97 31 00 ff e9 12  23 9e 86 74 45 7b 8a db  |.>.1....#..tE{..|
-00000120  d8 c8 c0 8b 00 72 ee d8  a9 64 b8 1b 48 77 98 b9  |.....r...d..Hw..|
-00000130  20 61 b8 23 17 b5 65 7c  fb                       | a.#..e|.|
+00000000  16 03 03 01 1a a4 4c dc  47 09 04 ab bb ca 49 f2  |......L.G.....I.|
+00000010  63 36 35 fb e3 3f ad ae  82 2a 9b 87 cc 0c 2e ea  |c65..?...*......|
+00000020  18 af ad e9 ea 7a c8 45  de c6 9b 0e e0 32 26 95  |.....z.E.....2&.|
+00000030  ba e3 57 9e 27 ce ff 36  43 a3 bd 79 47 6c 02 86  |..W.'..6C..yGl..|
+00000040  81 44 ac b3 c6 21 d8 fa  8c 69 43 b7 66 70 ea 24  |.D...!...iC.fp.$|
+00000050  12 1b ac 44 d2 49 e3 5a  d1 0e 50 76 46 4f 58 51  |...D.I.Z..PvFOXQ|
+00000060  21 4c f8 20 63 60 c0 20  3a 12 e5 0b 86 e3 03 2c  |!L. c`. :......,|
+00000070  e1 fc 63 e4 44 d4 67 95  aa af 22 3d 40 7b 4e 12  |..c.D.g..."=@{N.|
+00000080  98 7d 05 00 57 50 d5 3a  d7 af dd 96 0f ac 77 63  |.}..WP.:......wc|
+00000090  f8 1c b0 9c d0 96 9f 20  a1 48 55 aa dc 69 fb b7  |....... .HU..i..|
+000000a0  67 58 ff 27 de 22 ea 66  48 32 56 1f ef 12 3f 44  |gX.'.".fH2V...?D|
+000000b0  38 af ae 4b c2 16 bb c8  f1 fe 13 d7 05 66 de 08  |8..K.........f..|
+000000c0  f3 4d 5c a6 e1 2d 0d c3  ce 50 7b 01 40 49 0f 83  |.M\..-...P{.@I..|
+000000d0  97 c0 37 a2 6c 2b 64 a9  40 0e e1 7b f4 6e e1 cc  |..7.l+d.@..{.n..|
+000000e0  1a 5f 0b c5 69 dc dc db  0e a2 22 7b cf ca 73 81  |._..i....."{..s.|
+000000f0  fc 47 47 c7 76 18 8e ae  55 6c fe 5e 5e 33 84 9c  |.GG.v...Ul.^^3..|
+00000100  4c 1b f8 21 29 3c 47 1b  c8 01 38 7d c2 50 45 1c  |L..!)>> Flow 12 (server to client)
-00000000  16 03 03 00 85 93 93 97  db ec 52 74 ce 78 ca e6  |..........Rt.x..|
-00000010  95 19 ac 68 2c 81 ad 6b  c3 6d d5 f7 84 a1 00 d0  |...h,..k.m......|
-00000020  15 4c ae 2d 10 6a 07 d3  82 af af f8 d9 5d 9d 65  |.L.-.j.......].e|
-00000030  8d c9 1e 8c 61 3e b3 67  71 89 41 7e 94 1e 4a 27  |....a>.gq.A~..J'|
-00000040  73 53 83 d4 70 44 9a 4f  8d e7 62 af 9b 71 9e 83  |sS..pD.O..b..q..|
-00000050  72 9a a1 e2 03 47 5f c3  11 4f 56 b9 6f 02 b5 b8  |r....G_..OV.o...|
-00000060  8b 4a cb 99 ed 62 58 45  2d 0f f1 25 ce e9 de 7d  |.J...bXE-..%...}|
-00000070  3f 17 a8 35 d5 73 06 6e  d6 bc 77 2a 82 27 d7 92  |?..5.s.n..w*.'..|
-00000080  91 67 68 07 52 4b ed a0  3c 95 16 03 03 02 69 11  |.gh.RK..<.....i.|
-00000090  73 93 d5 ad 00 17 11 3b  83 81 68 6d 3a 8a 02 1b  |s......;..hm:...|
-000000a0  90 df 84 f6 2b 4a b8 98  cf 50 0d dd 29 22 9d 58  |....+J...P..)".X|
-000000b0  ea 7b 2c 30 2d e7 e2 d1  ae ad 00 9e 01 f6 ef 96  |.{,0-...........|
-000000c0  ae a4 48 58 29 63 1d 2c  19 f3 c2 49 6f cf c9 7b  |..HX)c.,...Io..{|
-000000d0  e3 ca 5c e7 30 a0 b5 72  a9 3d 61 a2 0f 96 e4 d6  |..\.0..r.=a.....|
-000000e0  8f 93 66 f1 de 24 88 14  9f 8b 14 9a b5 94 f7 70  |..f..$.........p|
-000000f0  79 e4 94 68 b7 e0 f1 8e  d0 1b 56 da d0 ce 90 b2  |y..h......V.....|
-00000100  13 b3 4b b5 20 99 77 4a  a4 83 47 4e 1b 1f db 35  |..K. .wJ..GN...5|
-00000110  96 16 f0 d8 2b 7e 18 bf  0c b7 a3 da 44 fe 4c 96  |....+~......D.L.|
-00000120  86 06 52 81 f9 a1 f4 ab  43 6d a3 fd 50 f6 83 08  |..R.....Cm..P...|
-00000130  ba b5 d5 15 55 16 aa 84  95 77 1d 9e cd d6 53 d0  |....U....w....S.|
-00000140  d3 c7 1c 9a 12 4d 8d 7a  b5 0b 02 34 3f cf b5 0f  |.....M.z...4?...|
-00000150  98 56 cc 6e 15 ef 60 88  e0 71 2e 47 46 ce 19 11  |.V.n..`..q.GF...|
-00000160  81 21 fe c6 80 86 d7 be  d9 a7 6f a1 8c 8d ff ba  |.!........o.....|
-00000170  fb 8b 8b 8f 35 95 03 cb  10 e6 f5 71 18 d5 3c e0  |....5......q..<.|
-00000180  60 e7 a2 47 36 41 a0 a3  c4 a3 c1 23 6c da 55 6a  |`..G6A.....#l.Uj|
-00000190  5f ef cd 58 e7 5d d3 cf  50 7b 3d b5 c6 7c 73 d9  |_..X.]..P{=..|s.|
-000001a0  ce c3 ae 6a 46 4a 9a e6  10 57 53 b3 6c e5 ec 9d  |...jFJ...WS.l...|
-000001b0  f0 25 3c a4 a6 f0 42 1a  1e 8c 2b 40 79 e5 51 84  |.%<...B...+@y.Q.|
-000001c0  79 6b c5 8a 3d 25 11 38  97 ca 15 11 e7 51 74 29  |yk..=%.8.....Qt)|
-000001d0  66 9e 4d 4d 50 6a ec 1d  94 6b 4d c9 e9 a7 f8 4e  |f.MMPj...kM....N|
-000001e0  5b c3 06 74 ba 1d a1 79  3c 24 94 c9 3b b0 b1 16  |[..t...y<$..;...|
-000001f0  fe 42 31 fe d0 4b e4 51  e6 06 63 89 2d 3b 56 6a  |.B1..K.Q..c.-;Vj|
-00000200  cf 89 4c 45 49 fd 10 58  9b 6b 4b 35 eb d8 c9 9d  |..LEI..X.kK5....|
-00000210  c0 31 b6 3e 33 da 7e 87  39 e3 c0 6a f8 7f bd 9a  |.1.>3.~.9..j....|
-00000220  26 4f 42 51 86 40 fb f7  fb cc 50 80 b6 0a 63 f4  |&OBQ.@....P...c.|
-00000230  41 62 68 c0 b8 99 7d 8e  ab e1 8a 15 92 f2 35 a4  |Abh...}.......5.|
-00000240  cc 0e e7 9e 74 2d c1 b4  44 be 25 10 92 02 4f e3  |....t-..D.%...O.|
-00000250  e7 ea c4 77 83 18 62 36  ba 9c 77 a6 d4 c1 6f 66  |...w..b6..w...of|
-00000260  fc 07 4b 1a 00 98 a4 10  5e bc d5 93 07 e7 0c e3  |..K.....^.......|
-00000270  34 05 32 23 c7 60 22 a8  52 fa 6e de 3f f9 c6 cc  |4.2#.`".R.n.?...|
-00000280  c2 54 08 d4 2a 98 39 20  09 f4 1d 8e d5 18 77 5a  |.T..*.9 ......wZ|
-00000290  f0 f4 08 a4 66 a7 8e fe  f5 25 50 16 ca 4a 8d f0  |....f....%P..J..|
-000002a0  b4 9f f1 37 e6 9b db 24  25 d0 a0 57 06 74 e2 14  |...7...$%..W.t..|
-000002b0  46 51 e9 9c 03 f0 e0 16  17 d0 c9 54 54 29 e6 04  |FQ.........TT)..|
-000002c0  9a c3 47 93 69 78 1a de  ca f1 d4 b1 52 ff c0 5c  |..G.ix......R..\|
-000002d0  9f 5f 16 a9 35 01 f9 18  47 7b ee 06 f4 f3 3a 1d  |._..5...G{....:.|
-000002e0  94 b9 d5 2c 29 a0 80 85  b0 31 55 37 63 bc a6 e6  |...,)....1U7c...|
-000002f0  67 66 21 5f eb 1c 17 15  16 03 03 00 bc 93 4b d6  |gf!_..........K.|
-00000300  07 b0 12 ca 98 9f 52 b8  14 c3 6e d4 3b f2 74 e4  |......R...n.;.t.|
-00000310  f5 6f 51 40 04 cd 1a 5f  69 fb 3d 68 2b 4e 09 df  |.oQ@..._i.=h+N..|
-00000320  c8 c9 6f c2 87 ae b6 f9  14 6a 41 fa 59 08 0b b0  |..o......jA.Y...|
-00000330  d9 0b d0 61 fd 64 c6 52  3e 40 f2 96 75 b0 82 7a  |...a.d.R>@..u..z|
-00000340  8e 68 11 d2 bc 22 a0 bc  30 d8 a6 1a 88 26 00 d5  |.h..."..0....&..|
-00000350  b5 26 49 c2 5d f3 19 c5  c0 9d 75 c3 f4 3e 95 85  |.&I.].....u..>..|
-00000360  d0 8b de 31 79 b5 5c 27  6e 99 ab 50 fe ef 3a 07  |...1y.\'n..P..:.|
-00000370  a0 a9 ce b7 4b 29 6b 93  42 6d db 34 6b 14 03 a9  |....K)k.Bm.4k...|
-00000380  a8 1f c2 57 65 64 c3 95  ff 2a f8 39 de c3 36 f4  |...Wed...*.9..6.|
-00000390  dd 77 b0 cf 86 be c4 9c  1d d5 ea 88 3c 8c ed 81  |.w..........<...|
-000003a0  51 fc a9 80 78 bc 59 7d  d1 e4 48 d5 d6 07 88 e1  |Q...x.Y}..H.....|
-000003b0  d7 85 80 81 3a 35 9c 57  21 16 03 03 00 14 d9 b1  |....:5.W!.......|
-000003c0  fb 95 82 67 c4 35 92 cd  47 cb 7b 0f 63 1a e0 32  |...g.5..G.{.c..2|
-000003d0  43 75                                             |Cu|
+00000000  16 03 03 00 85 bb 34 66  c0 a3 8c 2b 2c fe fe 82  |......4f...+,...|
+00000010  53 a1 07 1f 06 db 41 94  ac 21 f2 c4 23 0e b6 48  |S.....A..!..#..H|
+00000020  4d 16 97 2a 79 dd 95 4c  93 7f e4 8c 94 90 d4 02  |M..*y..L........|
+00000030  3c 44 b4 80 80 7b 45 84  53 3f 6b 9f f6 b6 d3 0c  |.c....>TP..alX |
+00000200  da a8 5a f7 46 9d a3 57  a1 60 72 59 82 dd f7 08  |..Z.F..W.`rY....|
+00000210  9e 48 16 8d b1 c0 f4 d2  e0 4e 5d 3c bf 23 88 0f  |.H.......N]<.#..|
+00000220  99 90 b0 a9 7e df 0b f5  1a 31 9e 59 e1 05 43 4e  |....~....1.Y..CN|
+00000230  4f d9 a5 b1 00 2e f2 c8  10 2c 73 ec c4 62 b8 c3  |O........,s..b..|
+00000240  59 53 ce 38 37 9d c3 f6  77 36 34 f2 07 a6 21 1f  |YS.87...w64...!.|
+00000250  62 56 08 d3 ed ae 51 05  4d ed ef 7e 77 c5 7d ae  |bV....Q.M..~w.}.|
+00000260  b6 aa 74 e9 9a df 5d 89  c2 9f 07 75 a0 c2 35 2d  |..t...]....u..5-|
+00000270  cc 13 c5 a9 17 85 79 b6  45 0c 82 56 0d 19 9e bc  |......y.E..V....|
+00000280  e7 1a a6 cc 20 6f f9 7c  29 54 2f 5a 92 1f c0 8b  |.... o.|)T/Z....|
+00000290  9c a7 a3 85 43 f2 4c e7  c5 e3 af 6e 40 f4 14 d4  |....C.L....n@...|
+000002a0  b8 26 5f ac d7 44 16 6d  40 d5 80 c5 49 df 8d fe  |.&_..D.m@...I...|
+000002b0  06 1c 7c 19 49 94 50 6f  e8 8c e0 59 80 9a a0 0e  |..|.I.Po...Y....|
+000002c0  50 3f 03 de c9 30 88 15  91 83 4e a8 df c3 65 75  |P?...0....N...eu|
+000002d0  cd 30 3e 7d 32 4a d9 ff  72 1e 1d 90 50 f3 67 8a  |.0>}2J..r...P.g.|
+000002e0  6a 94 c3 92 9a d4 0b 20  7e 61 98 6e db d0 71 4a  |j...... ~a.n..qJ|
+000002f0  8b 43 82 7e 76 e6 93 f7  16 03 03 00 bc e6 e6 85  |.C.~v...........|
+00000300  a8 2c 74 47 10 a3 27 26  f7 46 fb da fa 6a 93 2c  |.,tG..'&.F...j.,|
+00000310  b1 14 b2 90 d3 4e 94 42  c4 37 6d 4d 43 73 b4 a7  |.....N.B.7mMCs..|
+00000320  17 c1 3c 62 5d e4 c4 04  7c f7 13 39 9f a8 3f 05  |....d....|
+00000390  e5 f8 f3 75 54 65 f4 6f  e9 c8 eb a2 6c 06 98 fd  |...uTe.o....l...|
+000003a0  e9 bb a2 93 ab ee 0b fa  c7 b4 fa e1 91 34 a9 a7  |.............4..|
+000003b0  b9 14 16 25 32 88 09 3e  b1 16 03 03 00 14 d0 c0  |...%2..>........|
+000003c0  54 b2 37 35 9b cf 51 71  28 b2 d6 86 05 16 ad a0  |T.75..Qq(.......|
+000003d0  18 e7                                             |..|
 >>> Flow 13 (client to server)
-00000000  16 03 03 00 35 36 32 d0  64 c8 ba 33 1d 4f 31 73  |....562.d..3.O1s|
-00000010  68 35 f2 76 0c b1 52 12  f5 4b 8a ea 74 0a 7f c2  |h5.v..R..K..t...|
-00000020  a4 90 75 1f 24 0a 76 77  1f 01 15 9d 59 fa 16 56  |..u.$.vw....Y..V|
-00000030  cc fd f9 08 74 76 31 cc  f4 4c 14 03 03 00 11 c0  |....tv1..L......|
-00000040  12 9b 35 78 94 a3 4e c3  b2 30 aa c7 fa 44 20 e6  |..5x..N..0...D .|
-00000050  16 03 03 00 20 c6 a5 79  48 7b c3 2b 2d 6a 73 0a  |.... ..yH{.+-js.|
-00000060  83 a9 2b a7 ba 90 ea 6f  b5 c2 c1 13 d7 7a 86 37  |..+....o.....z.7|
-00000070  5a 24 8e f9 b3                                    |Z$...|
+00000000  16 03 03 00 35 e8 18 a5  be 6e 3b 37 5b d3 81 d3  |....5....n;7[...|
+00000010  ad 0b 90 2e e0 df 2b 7f  c4 ec 54 58 ef 85 e3 13  |......+...TX....|
+00000020  41 07 50 d1 06 9b 3e a3  71 30 bf 7d 0c 7a bd 1e  |A.P...>.q0.}.z..|
+00000030  b6 e9 1e 10 0d 18 e3 b3  1c 38 14 03 03 00 11 bf  |.........8......|
+00000040  b3 65 ae 3b e6 c2 ad 30  83 75 65 c0 2b 0d 4b 11  |.e.;...0.ue.+.K.|
+00000050  16 03 03 00 20 c6 cb f8  69 c3 bc 36 74 ff 8a 1f  |.... ...i..6t...|
+00000060  02 ef 32 37 fe 4f 14 51  d2 11 6a 98 05 4c 8c f6  |..27.O.Q..j..L..|
+00000070  75 05 f9 39 2c                                    |u..9,|
 >>> Flow 14 (server to client)
-00000000  14 03 03 00 11 c4 0e 59  d8 5e f6 5b 1d e6 20 7b  |.......Y.^.[.. {|
-00000010  45 4f 89 cd 2b a9 16 03  03 00 20 58 ff 80 6c f2  |EO..+..... X..l.|
-00000020  fd 94 e7 66 b3 6d e3 37  57 8a 8c 35 98 4e bb c3  |...f.m.7W..5.N..|
-00000030  42 87 32 b7 3b 6f ee 0f  f1 7d 08 17 03 03 00 19  |B.2.;o...}......|
-00000040  8a f6 02 17 4e 8a 1e 2b  db 44 24 d4 aa c6 d4 af  |....N..+.D$.....|
-00000050  ef 5a a3 17 ba 77 f4 54  6e                       |.Z...w.Tn|
+00000000  14 03 03 00 11 a0 fa 14  67 3f 54 1b 61 89 ed db  |........g?T.a...|
+00000010  9c 66 9f 49 77 2d 16 03  03 00 20 ca 47 f0 57 8c  |.f.Iw-.... .G.W.|
+00000020  3e 52 e6 e2 6c 01 cb 16  05 68 5e 19 12 ca 80 48  |>R..l....h^....H|
+00000030  dc e9 ed 41 33 08 01 ef  6e b0 a3 17 03 03 00 19  |...A3...n.......|
+00000040  d9 c8 68 e8 27 3d cf c0  33 71 55 a9 6a b4 6d a5  |..h.'=..3qU.j.m.|
+00000050  da 8d bb 34 94 4f b1 c6  22                       |...4.O.."|
 >>> Flow 15 (client to server)
-00000000  15 03 03 00 12 84 3f 11  0b 00 bd 12 5e be 74 4d  |......?.....^.tM|
-00000010  04 e4 44 b2 01 73 66                              |..D..sf|
+00000000  15 03 03 00 12 15 66 43  1e 60 21 d1 f6 94 34 3e  |......fC.`!...4>|
+00000010  ee 90 fc 87 45 2a f5                              |....E*.|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected
index 62b6831a47b7a5..7698b6791dac41 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected
+++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 a1 1a ae 12 c9  |....]...Y.......|
-00000010  55 34 c9 23 81 cb 4f b0  d8 35 97 8e d5 b7 ac 67  |U4.#..O..5.....g|
-00000020  e1 9c fd ec 35 61 48 7b  d5 c8 8b 20 e1 e9 61 af  |....5aH{... ..a.|
-00000030  0b 5c 69 7b cb f9 7a ee  73 31 20 07 c3 b9 27 47  |.\i{..z.s1 ...'G|
-00000040  07 e1 c0 34 7c c5 8f 31  ac 9d cd 8c cc a8 00 00  |...4|..1........|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 e3 fe 9a 75 3b  |....]...Y.....u;|
+00000010  82 ac ff 66 ee c2 e9 75  d9 29 cc 89 6d e0 27 19  |...f...u.)..m.'.|
+00000020  62 07 0b 0b c0 49 df 17  26 af 63 20 2a 95 69 54  |b....I..&.c *.iT|
+00000030  3c 5d d9 67 05 4c 45 77  d0 d9 46 29 ed 25 fd 7d  |<].g.LEw..F).%.}|
+00000040  b4 ef 39 d2 ee 3b a3 88  85 c5 78 9a cc a8 00 00  |..9..;....x.....|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,191 +61,189 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 95 6f d7  |............ .o.|
-000002d0  37 b9 49 ff 98 39 6f 25  c5 c0 e0 89 61 23 2d 22  |7.I..9o%....a#-"|
-000002e0  5b 86 d6 7f a1 19 07 f7  12 4d 01 e6 1b 08 04 00  |[........M......|
-000002f0  80 ca fd 6e 23 09 33 a7  0c 9b 4b 2b 38 37 a0 32  |...n#.3...K+87.2|
-00000300  21 a4 e4 fe 56 b6 4e c6  d1 e6 86 fa d9 13 b4 f3  |!...V.N.........|
-00000310  72 bf 31 ef c3 33 e9 99  a1 bf a4 e5 10 46 44 7d  |r.1..3.......FD}|
-00000320  cb ea 38 99 d0 bc 1f 16  81 fb ad 09 7e 9e 54 99  |..8.........~.T.|
-00000330  40 c2 44 65 94 53 88 c3  28 db 7f 1b fa 52 f1 63  |@.De.S..(....R.c|
-00000340  9a e9 f2 43 7f 19 2b 3e  02 3d 53 ed a1 f9 9a ff  |...C..+>.=S.....|
-00000350  aa af 8d 4c ab bf d2 7a  b4 ea 1e f9 22 fe ee 7e  |...L...z...."..~|
-00000360  a1 3e dc d4 f1 76 d1 4e  7b 1b 84 f6 b3 a7 f7 a9  |.>...v.N{.......|
-00000370  37 16 03 03 00 04 0e 00  00 00                    |7.........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 ca 74 42  |............ .tB|
+000002d0  03 67 f2 31 ac 68 dd 2c  db 23 7d 2c 84 df e9 50  |.g.1.h.,.#},...P|
+000002e0  ff ef d4 a1 fa a4 5b 0b  0b 73 20 b7 0e 08 04 00  |......[..s .....|
+000002f0  80 41 60 3d b1 1c 1d 14  8a 0a 3e 5c ea ca ce 07  |.A`=......>\....|
+00000300  d4 45 18 6c 16 52 40 6f  b0 f4 33 38 d7 cf 11 75  |.E.l.R@o..38...u|
+00000310  08 4e 7d 8b cc 64 8c 79  dd 42 fa 43 2c 9e 84 91  |.N}..d.y.B.C,...|
+00000320  e9 d5 bc 9f 84 2d 10 4b  db 4e a6 be 37 e9 2e 34  |.....-.K.N..7..4|
+00000330  d7 3e a7 17 80 b5 cd 37  04 2a 6c 2a cc 5f 0c a1  |.>.....7.*l*._..|
+00000340  ff c2 31 86 17 50 3a 47  4d 99 49 94 9c 11 12 e2  |..1..P:GM.I.....|
+00000350  70 fa d1 f4 7e 3a f2 3a  df 16 34 45 0a b2 7b 73  |p...~:.:..4E..{s|
+00000360  fa 59 23 85 88 74 2b e6  1e cb c7 00 f5 96 c8 8a  |.Y#..t+.........|
+00000370  02 16 03 03 00 04 0e 00  00 00                    |..........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 d0 64 37  7c 81 1c cd 86 e7 ab 97  |.... .d7|.......|
-00000040  25 1d c5 ee bd 5a 49 44  69 c8 3e db 37 6a dc 9a  |%....ZIDi.>.7j..|
-00000050  fd e2 5e 82 16                                    |..^..|
+00000030  16 03 03 00 20 0a a7 0c  5f 47 d1 7c 5e ea 63 82  |.... ..._G.|^.c.|
+00000040  83 27 6c bc 29 20 25 ec  3d 15 2d 59 94 e7 9d 2c  |.'l.) %.=.-Y...,|
+00000050  8b 4e 95 85 fc                                    |.N...|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 18 71 b3 67 a3  |.......... .q.g.|
-00000010  98 36 20 8f e4 17 30 e4  73 de 91 88 ef f7 f3 8a  |.6 ...0.s.......|
-00000020  c6 0e 5e b2 1f e2 e6 5a  52 f6 72                 |..^....ZR.r|
+00000000  14 03 03 00 01 01 16 03  03 00 20 03 84 99 6b f7  |.......... ...k.|
+00000010  3e 44 b1 96 6a 09 75 bf  26 4b 67 30 c4 e9 86 74  |>D..j.u.&Kg0...t|
+00000020  4d e1 e3 9b fa 15 8e 1e  72 f9 5a                 |M.......r.Z|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 20 c3 2a  be 39 d2 7c 1c 83 30 cc  |..... .*.9.|..0.|
-00000010  7b cd 44 ae 2b e8 d4 19  50 69 81                 |{.D.+...Pi.|
+00000000  17 03 03 00 16 68 29 2f  1b 1c 9d 28 6e b6 e5 09  |.....h)/...(n...|
+00000010  4a 77 96 23 20 da 67 9e  14 ec 6b                 |Jw.# .g...k|
 >>> Flow 6 (server to client)
-00000000  16 03 03 00 14 96 2f 3a  b5 b5 56 c9 d5 38 c0 1a  |....../:..V..8..|
-00000010  eb 35 c5 b9 dd 1c 5b e6  50                       |.5....[.P|
+00000000  16 03 03 00 14 66 e8 13  d1 b5 13 cf 5c 71 7b d9  |.....f......\q{.|
+00000010  63 29 3d be 68 9f f4 ad  7b                       |c)=.h...{|
 >>> Flow 7 (client to server)
-00000000  16 03 03 01 34 ae 4f 4c  78 20 df 3b 9e f3 c1 82  |....4.OLx .;....|
-00000010  37 6b ca fc 48 2a 2c 9a  71 7e c3 20 a0 e8 f7 d5  |7k..H*,.q~. ....|
-00000020  76 af 11 81 dd 69 e9 93  58 df 58 8c fb f1 82 ad  |v....i..X.X.....|
-00000030  35 0e fb 6c a9 58 7a 5d  79 38 cb d7 77 1f 93 34  |5..l.Xz]y8..w..4|
-00000040  7e bb 88 61 9e 19 1a 98  bb 6f ad 78 2c a6 73 ab  |~..a.....o.x,.s.|
-00000050  a4 7e 4b d7 75 69 7b 92  47 68 3d 7b 40 03 60 59  |.~K.ui{.Gh={@.`Y|
-00000060  2e 04 bc cd fc ca 45 2c  2c f7 e5 0a 66 49 0b 86  |......E,,...fI..|
-00000070  c5 ec 86 e6 ae c9 39 4b  05 1f 21 db 78 8d 51 e6  |......9K..!.x.Q.|
-00000080  5d fe be 6a 1d 85 e1 15  23 56 86 4c ba 09 bf 7b  |]..j....#V.L...{|
-00000090  9e 36 e9 7a 8f 06 af 10  7b 4a 4b af 58 db f9 4e  |.6.z....{JK.X..N|
-000000a0  13 36 61 f4 e3 a9 c6 37  11 d4 ed 9e 6a c7 bf 16  |.6a....7....j...|
-000000b0  ea a4 ae 01 99 4a b5 3e  9c ca 6c ce e8 a2 3d b8  |.....J.>..l...=.|
-000000c0  81 ef 60 7b 51 79 81 22  87 49 ad ab fb c6 f6 48  |..`{Qy.".I.....H|
-000000d0  c0 ba e0 2b d7 90 42 f7  a8 0d f0 cf 2c 7a 55 7d  |...+..B.....,zU}|
-000000e0  be 65 a6 67 bd 96 7f 01  6f ce db f6 50 2f 45 b6  |.e.g....o...P/E.|
-000000f0  6f cc 74 ba 6f 57 3b e3  a4 08 34 92 e6 ac e4 99  |o.t.oW;...4.....|
-00000100  2e b6 9b 29 4d 26 dd 7f  5c f5 1b 7e 5e 5c fd f7  |...)M&..\..~^\..|
-00000110  d4 da 81 47 51 8c 3f 94  e1 95 5b de b9 6e 4a 76  |...GQ.?...[..nJv|
-00000120  bc 59 6a bb 1f 1c 79 02  93 2e 21 b3 6d be ae b4  |.Yj...y...!.m...|
-00000130  95 6b 8a 48 cb 84 fb ab  b3                       |.k.H.....|
+00000000  16 03 03 01 1a cb 21 91  08 de 08 87 fc 63 10 93  |......!......c..|
+00000010  24 a3 83 e8 99 07 d5 03  19 61 4e 8e df dd d0 f6  |$........aN.....|
+00000020  50 3c fd 14 23 67 cd 74  ad 87 9b b7 8f ee a2 23  |P<..#g.t.......#|
+00000030  6c 2f 90 18 f4 01 6b 31  fe ca f7 65 f9 64 5a bc  |l/....k1...e.dZ.|
+00000040  49 3b 25 4c 35 59 50 f2  bc 70 cb 24 2f ec 47 12  |I;%L5YP..p.$/.G.|
+00000050  b6 16 22 9e ce 3b fb 17  f9 59 4e 2f 5c 03 90 47  |.."..;...YN/\..G|
+00000060  d5 e8 e9 eb d9 55 bf 8f  28 e8 72 e5 15 21 42 ba  |.....U..(.r..!B.|
+00000070  86 65 ac b4 f5 53 7e 98  38 39 b5 7d 2a 14 d6 7b  |.e...S~.89.}*..{|
+00000080  3e 69 9d dc 43 33 ed 0b  8a 77 14 54 9d b0 da 88  |>i..C3...w.T....|
+00000090  3b 75 50 01 07 02 99 36  39 4f 01 ee 02 cf 05 a5  |;uP....69O......|
+000000a0  71 75 03 3a a5 5c c4 ce  0e 1d ba dd 9d 79 c1 84  |qu.:.\.......y..|
+000000b0  81 69 7c cd 63 a4 20 a3  a2 13 8e 6e d7 01 29 8d  |.i|.c. ....n..).|
+000000c0  35 e2 fa 3d 74 ea 40 06  7e 0b 2d ab 3c 54 73 ef  |5..=t.@.~.-....&.FU........|
+00000110  43 bd e5 9f 5c 35 02 25  54 17 89 c0 be ab bc     |C...\5.%T......|
 >>> Flow 8 (server to client)
-00000000  16 03 03 00 85 60 c6 c2  9b 61 f1 1f 81 6f f1 0b  |.....`...a...o..|
-00000010  87 2d f2 93 a6 4e 7e 74  c2 61 cf 1d a1 00 32 8f  |.-...N~t.a....2.|
-00000020  f7 3d 93 da 91 cc 5b d5  21 c6 ba 4c 1b eb 81 a9  |.=....[.!..L....|
-00000030  a1 2a fe 88 6d 3e 1d 1f  57 22 9c ff fe 6c 85 ca  |.*..m>..W"...l..|
-00000040  0b 13 f3 9f 63 55 b9 49  61 2b dd 5e 2b e1 fd ec  |....cU.Ia+.^+...|
-00000050  1d 0d 94 06 42 dc 2c 6f  88 22 cb 30 4f 66 6f 16  |....B.,o.".0Ofo.|
-00000060  3a a0 c0 23 12 82 46 38  70 68 e5 12 b9 16 12 e7  |:..#..F8ph......|
-00000070  38 6b 50 64 55 f0 47 a9  e0 cd 19 01 8e d5 12 96  |8kPdU.G.........|
-00000080  09 db 5c 52 4b db 9b 26  43 37 16 03 03 02 69 41  |..\RK..&C7....iA|
-00000090  52 a8 ca e5 8f e0 33 4b  52 93 74 ef bb 42 20 d1  |R.....3KR.t..B .|
-000000a0  cc 24 79 ce df 51 90 e0  19 b1 11 fb e9 ef b5 e4  |.$y..Q..........|
-000000b0  ae da 72 e1 35 a8 41 88  a8 4b 68 d2 50 58 ba ef  |..r.5.A..Kh.PX..|
-000000c0  b0 1e 20 26 a3 c2 86 a7  68 60 84 2d 23 14 38 21  |.. &....h`.-#.8!|
-000000d0  12 60 05 2f 79 9e c0 08  4c 87 a7 41 b3 d3 84 9a  |.`./y...L..A....|
-000000e0  f1 45 bd 2d ff 7c b5 bd  c4 3a b1 48 10 9a d8 cf  |.E.-.|...:.H....|
-000000f0  ce 58 47 75 e1 6d 01 b6  18 bd 78 6b 86 a1 f2 1b  |.XGu.m....xk....|
-00000100  c8 03 4d 0a ce ce d4 68  8f 9a 54 1e 83 83 89 2c  |..M....h..T....,|
-00000110  36 a2 3a b5 95 09 de c5  8e 8c d0 a4 95 59 7e d6  |6.:..........Y~.|
-00000120  f8 5f 96 e9 c5 cb 9b 6c  c0 b7 55 15 b3 b4 d0 ea  |._.....l..U.....|
-00000130  bf 11 1c 89 1a 5c f2 09  74 9a 43 73 4f 6f 00 33  |.....\..t.CsOo.3|
-00000140  b9 e0 6a 99 b9 e0 02 86  dd cd 07 68 72 63 0d 8b  |..j........hrc..|
-00000150  e0 e8 12 68 4d f6 3b dc  0a 93 82 48 ce f7 96 ba  |...hM.;....H....|
-00000160  7f c5 90 07 45 66 3d 47  b8 8d 5f 0d 41 8d 88 76  |....Ef=G.._.A..v|
-00000170  bf ce 9c 2a 2e 25 7c 47  f6 96 73 0b 43 42 73 2c  |...*.%|G..s.CBs,|
-00000180  d5 b3 bc 82 c5 19 2f 5d  c4 69 21 7d c8 7b 1b b8  |....../].i!}.{..|
-00000190  b6 d1 37 89 92 a6 b7 44  cd e6 23 1f a1 03 08 05  |..7....D..#.....|
-000001a0  1e cf 54 78 e9 af 04 bc  e3 94 aa 12 ce 67 62 ce  |..Tx.........gb.|
-000001b0  f4 2f ef f7 2b 8d 65 06  08 07 2f c6 fa b2 d2 c8  |./..+.e.../.....|
-000001c0  f1 d7 c4 1f cc 8b 0e b8  f2 b2 1d fb 09 19 5a b0  |..............Z.|
-000001d0  a3 23 6e 05 20 9a 28 39  16 05 0e c4 7d d0 59 f5  |.#n. .(9....}.Y.|
-000001e0  9a de 88 da a2 c0 fb 7b  84 19 05 7d 80 6f 9a 03  |.......{...}.o..|
-000001f0  0a f8 5f 97 a2 b4 c0 d9  6d 79 f5 c0 51 d3 63 d2  |.._.....my..Q.c.|
-00000200  b8 ee a6 b0 76 59 7f 92  6d ad 3c bb 96 34 ac 0c  |....vY..m.<..4..|
-00000210  81 61 c5 07 7e 65 f1 c3  dd 3e 69 ad ee 7f 56 8d  |.a..~e...>i...V.|
-00000220  d7 92 48 5c 23 be 94 44  2e 8a 13 76 ce a3 cb d2  |..H\#..D...v....|
-00000230  86 d5 eb 2c 48 55 fd 31  c1 94 08 55 69 8c 20 cd  |...,HU.1...Ui. .|
-00000240  65 fa 47 5e 8e 7f 04 a4  a0 54 c3 cf 4e b5 a0 61  |e.G^.....T..N..a|
-00000250  3a 66 fd 21 5d 42 ab b3  46 d8 2a 64 69 1a d3 da  |:f.!]B..F.*di...|
-00000260  41 65 2c 36 50 f1 79 c3  83 01 d2 87 41 d9 10 1d  |Ae,6P.y.....A...|
-00000270  75 a2 74 de 48 e3 9c 9e  c8 96 58 45 43 82 dd d6  |u.t.H.....XEC...|
-00000280  e1 46 66 2f 13 e4 1d fe  81 8f ea 3d 6d 83 d7 97  |.Ff/.......=m...|
-00000290  4d ed c6 67 0e 4b e5 a1  ca 2b 24 c5 b1 24 af df  |M..g.K...+$..$..|
-000002a0  7a 0e 44 b9 c1 5f 07 43  c1 6f 94 d3 22 fb 14 df  |z.D.._.C.o.."...|
-000002b0  a3 23 38 c9 91 ff 12 41  fa 47 f7 83 fb b6 ca ea  |.#8....A.G......|
-000002c0  19 01 22 8a ba d7 86 c5  d2 82 2f ac f5 4c a4 e9  |.."......./..L..|
-000002d0  90 f5 52 c7 88 96 ae f3  0a 91 53 1c db bf 4b a9  |..R.......S...K.|
-000002e0  42 43 0d 2d cc f2 6a 79  1e 9a 3a bd 55 da 5d 6c  |BC.-..jy..:.U.]l|
-000002f0  a3 84 79 76 7d 96 62 5e  16 03 03 00 bc 51 62 b9  |..yv}.b^.....Qb.|
-00000300  26 c9 f7 dd 55 83 aa cd  90 5d e9 9a 29 92 8c 6f  |&...U....]..)..o|
-00000310  b1 df 4c b7 be 75 89 2b  dc b1 ad ae 01 38 27 0f  |..L..u.+.....8'.|
-00000320  36 43 0b 04 69 6b a4 3a  52 b5 4f df 50 1d 04 ee  |6C..ik.:R.O.P...|
-00000330  4a f1 a0 6c 06 6f 24 2a  f3 dc 7c a4 96 12 e2 83  |J..l.o$*..|.....|
-00000340  9c d8 2d 63 2e 3b 1c 73  e6 32 ce 15 76 01 9a a9  |..-c.;.s.2..v...|
-00000350  3b a7 dc aa 40 82 4d 5a  68 24 78 4e fe 64 db a4  |;...@.MZh$xN.d..|
-00000360  ff 87 6d 90 bc d9 ec 0d  ed 8b 54 12 bd 74 16 1d  |..m.......T..t..|
-00000370  2c 30 57 8f 67 56 7c 09  e6 b1 12 f8 4a 9f e3 79  |,0W.gV|.....J..y|
-00000380  c1 8b fa 91 f7 1a 29 bd  a3 1f 59 59 16 26 04 10  |......)...YY.&..|
-00000390  e4 19 c9 91 a6 b3 c5 b5  df a3 b0 11 a5 87 29 4e  |..............)N|
-000003a0  5b 9f 96 cf 88 19 9e ae  b4 e6 63 19 6d c5 ee 7a  |[.........c.m..z|
-000003b0  c9 38 2d 0a fd f6 3b f8  f5 16 03 03 00 4a f5 3f  |.8-...;......J.?|
-000003c0  ef a3 f8 86 1b f5 ce 8e  48 f2 d0 cb 75 d6 80 b2  |........H...u...|
-000003d0  78 ef bc 77 a6 aa 91 cd  88 39 62 f8 42 78 7c f3  |x..w.....9b.Bx|.|
-000003e0  8b c7 86 71 9c a5 9f 1c  5f 40 25 e9 c6 69 82 a1  |...q...._@%..i..|
-000003f0  45 ee d1 9d f7 9c a0 b9  34 b8 82 72 f9 f8 1d fb  |E.......4..r....|
-00000400  a5 74 b5 a5 68 04 82 c4  16 03 03 00 14 07 9c 37  |.t..h..........7|
-00000410  77 ad 83 27 66 2c 3a ba  26 22 2f 72 b4 d1 c8 c1  |w..'f,:.&"/r....|
-00000420  06                                                |.|
+00000000  16 03 03 00 85 10 dc 85  7d 1e 66 b2 a4 86 68 a7  |........}.f...h.|
+00000010  31 f3 b1 d8 c7 c9 26 6d  74 0a c0 c0 c0 39 ad b5  |1.....&mt....9..|
+00000020  1b b1 dc d3 15 9f a4 96  27 dd 65 85 ad 83 2f 97  |........'.e.../.|
+00000030  42 6f 8a 9b 58 fc f8 1b  54 89 cd 9c 11 10 b9 1d  |Bo..X...T.......|
+00000040  c3 e1 8e 89 20 a5 2d 0b  31 b5 e0 16 54 ce 93 9b  |.... .-.1...T...|
+00000050  de cc b1 af 48 48 33 96  4d a6 00 78 7b 60 3f 7c  |....HH3.M..x{`?||
+00000060  cd 86 64 5e 38 e8 fd 60  d4 b1 89 cd e4 fb 42 b5  |..d^8..`......B.|
+00000070  82 8f e5 23 91 87 6d 54  9e 85 37 34 df ae 70 a5  |...#..mT..74..p.|
+00000080  cd 4c de 95 f7 9f a9 b4  87 0b 16 03 03 02 69 d1  |.L............i.|
+00000090  c2 87 4e c8 26 b3 89 88  da c0 b9 24 84 88 c0 76  |..N.&......$...v|
+000000a0  94 08 eb 56 5d fc 96 81  18 f3 5b 90 f1 38 e5 ae  |...V].....[..8..|
+000000b0  b5 4e 9a c1 19 19 1a b3  40 55 08 cb 0e 3b 93 b3  |.N......@U...;..|
+000000c0  d7 74 80 3a 7c 0d eb be  70 0e a9 50 88 d2 52 11  |.t.:|...p..P..R.|
+000000d0  2d 55 cf d9 9d aa 92 bd  15 ab 1a 62 b3 26 09 3f  |-U.........b.&.?|
+000000e0  50 2b b8 f2 00 a2 5a 2b  98 e3 bb e2 c7 0b 07 0e  |P+....Z+........|
+000000f0  5a e5 2e 08 27 87 f3 0b  1b f7 f7 82 49 cf 08 d6  |Z...'.......I...|
+00000100  7c 78 39 0e 92 e7 28 f4  8f 12 ac 6a c2 72 46 e8  ||x9...(....j.rF.|
+00000110  92 bf 36 c7 52 46 7a 01  92 6d a9 08 19 2a 07 70  |..6.RFz..m...*.p|
+00000120  8c b2 40 7d 7f 00 27 ea  fb e6 24 5c d2 d8 ae 99  |..@}..'...$\....|
+00000130  0b cc 2a 4b 35 12 de 85  e9 b5 e2 2d 80 39 6d 17  |..*K5......-.9m.|
+00000140  7a ca ef ca bb 58 1e 13  86 10 bc 4d 8a df 32 ba  |z....X.....M..2.|
+00000150  3b 7e f5 40 ec af 2e 63  be f3 38 02 a9 9d 30 1f  |;~.@...c..8...0.|
+00000160  c4 d2 04 93 df e1 8a bb  5d f0 6a a8 d9 b9 ad bf  |........].j.....|
+00000170  da d6 5e bd a1 a8 b8 20  91 26 ab 50 fd 2b bf e1  |..^.... .&.P.+..|
+00000180  56 33 e3 e4 4f 3f 21 ea  86 10 e9 35 84 03 70 0b  |V3..O?!....5..p.|
+00000190  bd dc 44 fc 58 1d bc 9e  3a 0d 3b 61 13 d6 33 1b  |..D.X...:.;a..3.|
+000001a0  97 a8 67 bf e6 d9 1d 34  69 70 93 4a 6c 28 88 01  |..g....4ip.Jl(..|
+000001b0  01 9d 78 59 c0 58 66 c3  70 e4 ba 74 e6 0f f7 27  |..xY.Xf.p..t...'|
+000001c0  8b dd 05 ac 0d 99 dc e9  c8 2f 16 ee 59 53 91 d7  |........./..YS..|
+000001d0  28 27 db ad 85 e6 d0 72  28 81 31 e1 e7 bf dd 95  |('.....r(.1.....|
+000001e0  75 ff d6 a9 dc 4f 30 37  52 07 87 cb 8d a7 4a 00  |u....O07R.....J.|
+000001f0  22 53 3c 6d 91 94 11 5d  0a a8 21 ea 1f 18 4e 42  |"S...A...|
+00000390  37 c3 62 b5 30 89 4d b6  6c 5c f2 8c ff 3c 2e 48  |7.b.0.M.l\...<.H|
+000003a0  bf 0f 5f 3e e0 b2 d7 64  2b dc 42 ad 2f 83 b5 6b  |.._>...d+.B./..k|
+000003b0  5a 04 51 f8 c4 07 c2 61  e4 16 03 03 00 4a a9 18  |Z.Q....a.....J..|
+000003c0  58 79 d8 ad 86 d7 b6 77  39 76 99 b4 0a 29 72 b1  |Xy.....w9v...)r.|
+000003d0  eb c3 ec 95 4d 30 4c 21  1a 7f 52 da 56 21 78 b7  |....M0L!..R.V!x.|
+000003e0  fe dd d3 0e fc a9 89 40  99 97 12 68 7e 28 6e 32  |.......@...h~(n2|
+000003f0  5b c0 e8 b4 42 eb ee 83  c2 ae 0d 28 99 48 46 a9  |[...B......(.HF.|
+00000400  64 38 60 59 c2 dc 5c 7b  16 03 03 00 14 78 72 cf  |d8`Y..\{.....xr.|
+00000410  ac 5d 53 7e 73 b1 6e e2  0a 8e 12 33 be 03 86 6a  |.]S~s.n....3...j|
+00000420  ce                                                |.|
 >>> Flow 9 (client to server)
-00000000  16 03 03 02 69 70 78 66  7a 28 3b 50 a6 21 b2 cc  |....ipxfz(;P.!..|
-00000010  52 a6 74 f7 29 8a dc fd  c0 1c 79 d0 20 23 d0 74  |R.t.).....y. #.t|
-00000020  d3 16 a6 4c 6d df 6e 32  2e 69 46 dd 8d 22 9e 8e  |...Lm.n2.iF.."..|
-00000030  cb 75 44 75 7e 24 69 ed  ce cf 5c 4b a9 a2 b5 d0  |.uDu~$i...\K....|
-00000040  48 bf 08 d8 1d 16 d9 9f  6d b4 24 ee f1 f3 58 79  |H.......m.$...Xy|
-00000050  4c 19 4c 99 7f 01 a8 80  b1 3c 4e 55 d1 64 75 89  |L.L......?.Pjad*Q...|
-00000120  01 2e 5a 1c 8b 12 58 c5  32 e1 3f ea 0b ac 4c 3b  |..Z...X.2.?...L;|
-00000130  1d 97 11 e9 92 6d 52 f0  1e f7 5a f8 71 5f f5 a6  |.....mR...Z.q_..|
-00000140  6b aa 30 4f 85 41 c6 49  83 37 3a 72 86 1a be 7a  |k.0O.A.I.7:r...z|
-00000150  1d bc d6 ad 67 6c 95 42  5d 74 10 8e ac 4b 8d b3  |....gl.B]t...K..|
-00000160  6e 3d 9c 8f 08 71 be ce  ce aa 64 26 62 2a 58 8c  |n=...q....d&b*X.|
-00000170  e4 7b 75 e9 61 90 38 b2  c2 a0 8d c7 a9 11 cf 5b  |.{u.a.8........[|
-00000180  30 a7 33 3b 2b c2 fd 2a  6b db 3d cf 35 6c 23 28  |0.3;+..*k.=.5l#(|
-00000190  14 e4 7b 10 50 e8 00 9f  af 60 69 cf a9 d9 93 f3  |..{.P....`i.....|
-000001a0  8f 7d 39 49 97 5b 92 4a  35 2a 6c 68 3b 48 25 77  |.}9I.[.J5*lh;H%w|
-000001b0  6e d0 57 76 c4 94 83 10  e3 3d 00 e8 b9 fe da d9  |n.Wv.....=......|
-000001c0  a5 56 22 61 e0 f4 33 dd  c8 dd 4d 2f 39 51 35 12  |.V"a..3...M/9Q5.|
-000001d0  9a cb dd e1 03 d3 27 9f  41 71 83 5c c7 6c a3 38  |......'.Aq.\.l.8|
-000001e0  9f db 39 1c 2a f6 4b e0  48 44 61 1b 34 3c bc ed  |..9.*.K.HDa.4<..|
-000001f0  7a 31 c9 9f 8e 82 2d fb  b6 bd 6e 4c 57 76 23 f5  |z1....-...nLWv#.|
-00000200  7d 68 ff 02 75 42 10 e7  2d 24 83 4a 04 7a 78 d7  |}h..uB..-$.J.zx.|
-00000210  60 b2 70 07 3f e4 bc 54  42 65 22 c3 2e aa 35 85  |`.p.?..TBe"...5.|
-00000220  df fa e5 c9 c9 f5 ee 6a  50 82 7a bf 92 96 78 5e  |.......jP.z...x^|
-00000230  a8 ac 2a d1 5e e2 f0 20  6b 51 97 3d 74 71 eb d8  |..*.^.. kQ.=tq..|
-00000240  40 5f 06 72 b6 8c 1c 2a  71 dd 53 38 fb de b6 31  |@_.r...*q.S8...1|
-00000250  53 8d 8f 4e 0f c1 a5 ea  bf 27 fa ed ff 0c 56 34  |S..N.....'....V4|
-00000260  55 88 e1 d2 65 a7 e5 10  02 4d ba 8e ad fa 16 03  |U...e....M......|
-00000270  03 00 35 94 36 93 c6 5e  c8 ec 8e 63 86 7b 13 d6  |..5.6..^...c.{..|
-00000280  78 b2 5d 2f 54 55 5a 41  1c 65 5e b2 69 ab c2 bd  |x.]/TUZA.e^.i...|
-00000290  d9 a3 55 42 d1 96 29 51  c4 38 c4 ec 1f d4 19 6c  |..UB..)Q.8.....l|
-000002a0  2b 82 75 81 37 07 79 35  16 03 03 00 98 d9 a2 ba  |+.u.7.y5........|
-000002b0  86 ca f4 24 e1 e0 72 0e  21 81 f6 c5 d7 0a 1c 17  |...$..r.!.......|
-000002c0  05 1f ce b8 4d d3 d8 e6  13 c8 a6 4d f3 da 0f 4d  |....M......M...M|
-000002d0  e3 21 29 84 78 90 fa 11  a5 06 19 3a cd ca f2 1f  |.!).x......:....|
-000002e0  a2 39 4d b3 03 8d 22 27  eb bc f4 8b b8 61 c0 f3  |.9M..."'.....a..|
-000002f0  70 34 56 80 28 a2 85 1e  21 7c 11 b8 c6 0c 0d bd  |p4V.(...!|......|
-00000300  02 56 8a b5 d5 7b 22 97  3e 70 20 31 00 a0 16 2d  |.V...{".>p 1...-|
-00000310  87 b5 c7 b0 5e 40 2d 08  82 97 38 64 c4 14 e3 16  |....^@-...8d....|
-00000320  0d 6f d1 b1 6b 5f 7c 14  18 66 67 aa 8a b6 6b 66  |.o..k_|..fg...kf|
-00000330  7d e3 68 ca 97 13 ad ca  0a 46 06 6b 4a a9 c0 ee  |}.h......F.kJ...|
-00000340  8b 61 6d 2d cc 14 03 03  00 11 93 6d 0b 63 c5 e2  |.am-.......m.c..|
-00000350  3f 0f da dd f4 7c ae 95  2a e8 65 16 03 03 00 20  |?....|..*.e.... |
-00000360  62 97 ee b8 34 aa be 0a  2c 24 30 6c 89 f2 80 08  |b...4...,$0l....|
-00000370  05 69 bb ad a8 5c 90 21  04 77 96 44 ae 5f d4 d5  |.i...\.!.w.D._..|
+00000000  16 03 03 02 69 33 a1 bb  7d ff 23 ba ad dc a0 1e  |....i3..}.#.....|
+00000010  3c 7c 1f 53 59 81 13 04  49 f7 6e bf 8f ef 11 92  |<|.SY...I.n.....|
+00000020  51 bf 8a e7 fe ef 76 e4  f8 88 27 95 f4 12 f2 ed  |Q.....v...'.....|
+00000030  cc ec a6 2d 10 87 19 5e  c9 fe cd 12 ae 1a 38 f9  |...-...^......8.|
+00000040  78 f1 42 f8 47 26 1b c2  5f 82 a5 aa 65 17 eb 06  |x.B.G&.._...e...|
+00000050  03 c8 22 9c 9f 8b 87 26  4a 64 18 93 9c f4 16 82  |.."....&Jd......|
+00000060  28 eb 8d 2d f8 51 60 3a  f4 bb a3 77 f5 97 2b 6a  |(..-.Q`:...w..+j|
+00000070  19 db 2e 46 8b d8 08 d8  28 88 bb bd d8 3b c2 bb  |...F....(....;..|
+00000080  8c 87 1b 17 a0 34 a8 c6  e8 a5 a0 e5 cb d6 9c 9d  |.....4..........|
+00000090  a6 a4 6c 06 6a 85 0c 5e  ef 0c 97 6f b6 11 e7 4d  |..l.j..^...o...M|
+000000a0  60 91 95 74 48 af 1b 0b  47 03 ed 47 e9 b9 28 36  |`..tH...G..G..(6|
+000000b0  74 0d 8a b8 1e 5d 1c cb  ea 7b b7 8f 18 e3 b9 b9  |t....]...{......|
+000000c0  43 ed 53 f2 bf 7e 8c 8f  e6 c0 2a f4 31 25 f5 e8  |C.S..~....*.1%..|
+000000d0  44 48 2d 36 4f a7 11 f6  ea 7c 3f d6 2d 5d 3e 39  |DH-6O....|?.-]>9|
+000000e0  fb 50 f1 c9 eb 25 be 7a  c5 af 54 f5 12 07 04 22  |.P...%.z..T...."|
+000000f0  ec 68 45 f1 fd d1 91 0a  cf 64 0f f3 58 4e e8 ce  |.hE......d..XN..|
+00000100  f6 9e c0 57 ea 3a bd a0  5d 26 d4 ab ed 1a 34 12  |...W.:..]&....4.|
+00000110  9f fa ec 73 d6 38 06 78  85 3c f9 cd aa fb fd 32  |...s.8.x.<.....2|
+00000120  cb e0 a7 d0 bb 71 b0 a3  d2 b9 89 5e a9 57 18 7e  |.....q.....^.W.~|
+00000130  c0 c9 2e e3 e5 07 65 6f  4c ad 22 78 50 f2 87 0f  |......eoL."xP...|
+00000140  cd 93 b3 19 a9 73 e2 1d  bf 38 a0 20 8d 3a 3a 4e  |.....s...8. .::N|
+00000150  b3 02 b7 11 1f df 12 60  dd 10 1c f8 75 4a 52 86  |.......`....uJR.|
+00000160  71 61 88 37 b3 bf f7 2d  45 6d 10 4a 9f 80 b3 fc  |qa.7...-Em.J....|
+00000170  36 d4 d3 9f 08 f2 bb ce  9c 3a 9a 59 f6 0a 0a aa  |6........:.Y....|
+00000180  7f 61 29 0b df 29 92 09  55 ec 1c 84 d6 1f 7c 68  |.a)..)..U.....|h|
+00000190  72 00 88 5e e3 6a ee 35  45 7a 0b 49 35 0e 2d 7c  |r..^.j.5Ez.I5.-||
+000001a0  ac 8b 9f 9c 94 48 2d 1e  74 24 68 14 8e 16 b4 06  |.....H-.t$h.....|
+000001b0  24 66 a3 18 f4 ff 21 31  4b 9b bb 09 8a 9d 57 e4  |$f....!1K.....W.|
+000001c0  a1 5c ae f1 e1 4b 5c 2a  be 64 3c 7a 61 10 3d 73  |.\...K\*.d....^O|
+000002f0  f7 4b 38 70 d0 82 42 f2  5a c9 34 d2 76 7b 8d e4  |.K8p..B.Z.4.v{..|
+00000300  0b c7 3d be 86 7d 21 8c  f8 9f 1a 4a dc 48 07 12  |..=..}!....J.H..|
+00000310  ab 4c 98 f7 8b 3e 02 49  c2 d1 b5 e9 9a e0 5a 74  |.L...>.I......Zt|
+00000320  58 ce a3 33 be 0f ca 12  54 a2 0e a9 e5 22 8f 82  |X..3....T...."..|
+00000330  df 1a 3e 21 bf 66 c6 13  39 77 83 95 b1 4b 1d d3  |..>!.f..9w...K..|
+00000340  32 69 24 c2 89 14 03 03  00 11 1c eb 63 31 c9 c9  |2i$.........c1..|
+00000350  8a e3 8b 25 7e e9 b7 7d  19 03 3c 16 03 03 00 20  |...%~..}..<.... |
+00000360  c6 41 57 04 ab e8 6c 55  0b dc cd 06 f5 b3 4b 95  |.AW...lU......K.|
+00000370  40 b5 04 47 da 71 d7 70  ce d6 2e 0b c7 66 16 3c  |@..G.q.p.....f.<|
 >>> Flow 10 (server to client)
-00000000  14 03 03 00 11 03 06 35  7b 36 e4 b2 df 80 68 80  |.......5{6....h.|
-00000010  df e3 d6 3c bb b7 16 03  03 00 20 08 9b ed a0 ae  |...<...... .....|
-00000020  e7 f9 42 9a f5 10 21 7a  38 dc a2 6d 27 a8 bc 00  |..B...!z8..m'...|
-00000030  58 85 6a 85 04 b9 3b 3f  ca 26 68 17 03 03 00 19  |X.j...;?.&h.....|
-00000040  d5 24 ff 37 e7 a2 5d eb  f2 45 ca 73 60 3b c3 8c  |.$.7..]..E.s`;..|
-00000050  87 10 d8 31 c3 a2 e5 3d  0f 16 03 03 00 14 31 8a  |...1...=......1.|
-00000060  c9 a6 3a 3e 36 e0 4f d6  f1 f5 67 70 34 8a ab dc  |..:>6.O...gp4...|
-00000070  82 e2                                             |..|
+00000000  14 03 03 00 11 c0 4e fd  fa 3a 1c 4a 19 ce 08 f6  |......N..:.J....|
+00000010  da 70 56 fa 39 42 16 03  03 00 20 0c bc c4 5e 24  |.pV.9B.... ...^$|
+00000020  e3 0e c9 23 8c cd f6 a2  45 07 e6 93 40 7c c8 02  |...#....E...@|..|
+00000030  6e 24 f7 4e 06 9a ad ba  de cd 10 17 03 03 00 19  |n$.N............|
+00000040  52 e0 85 b3 46 25 7d fd  8f d0 4c ca df fe 2f a6  |R...F%}...L.../.|
+00000050  14 d6 08 82 70 0f 93 78  bf 16 03 03 00 14 ff 68  |....p..x.......h|
+00000060  f1 6d 8d b4 5f 74 19 6b  e3 1e 6e ee 9d ee c2 34  |.m.._t.k..n....4|
+00000070  0f 44                                             |.D|
 >>> Flow 11 (client to server)
-00000000  15 03 03 00 12 be b2 bb  cf 44 91 f3 b9 71 00 af  |.........D...q..|
-00000010  9e b6 f5 07 64 36 7b 15  03 03 00 12 ae b2 33 16  |....d6{.......3.|
-00000020  de f1 45 31 a5 fd 07 97  6e 57 f8 22 cc b2        |..E1....nW."..|
+00000000  15 03 03 00 12 81 0d 63  a5 11 7a 03 ab 66 f6 c8  |.......c..z..f..|
+00000010  15 f3 d9 23 fa 67 6b 15  03 03 00 12 71 0e 3b 52  |...#.gk.....q.;R|
+00000020  1a 05 39 4c 8c 76 c3 a9  00 35 bd 66 80 a1        |..9L.v...5.f..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected b/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected
index c907c7cb2ea9cb..0be2e72bf3cfeb 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected
+++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 ea a3 8e 85 79  |....]...Y......y|
-00000010  9f 41 1f 7e 05 76 70 3d  bd f4 bb f4 dd 49 a6 fd  |.A.~.vp=.....I..|
-00000020  11 83 a9 70 89 86 87 36  2f 09 b9 20 1a 00 de fc  |...p...6/.. ....|
-00000030  6b e5 93 4e da 98 0b e1  a8 93 8d fc 4b c3 48 6b  |k..N........K.Hk|
-00000040  15 6d de fd e3 0f 36 67  61 1c 91 8e cc a8 00 00  |.m....6ga.......|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 21 15 e1 02 00  |....]...Y..!....|
+00000010  c6 0c e5 3f c9 6f a5 59  38 7e 13 81 1b 26 50 46  |...?.o.Y8~...&PF|
+00000020  bf 2b 95 0c eb a8 bc 72  97 bc 26 20 ad 6b 84 ac  |.+.....r..& .k..|
+00000030  8f 62 26 0b 4b d8 bf 1b  7d a5 27 3b 3e 45 a5 8f  |.b&.K...}.';>E..|
+00000040  37 fb b2 25 2c d3 82 69  ed d7 c9 f0 cc a8 00 00  |7..%,..i........|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,36 +61,36 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 6a e1 91  |............ j..|
-000002d0  5d 5d fe 77 50 be a5 52  f1 12 43 30 34 aa 46 87  |]].wP..R..C04.F.|
-000002e0  f9 6a 80 37 eb 46 fb 92  d6 ce 18 c4 0b 08 04 00  |.j.7.F..........|
-000002f0  80 46 10 ab ff 45 fe c5  88 5a da d0 07 b5 a1 30  |.F...E...Z.....0|
-00000300  03 d8 b0 5f 88 37 45 75  ef b7 96 5c c9 1f 47 14  |..._.7Eu...\..G.|
-00000310  24 28 de cf 1f c9 c6 a4  0c 41 1b 51 70 7a e6 e8  |$(.......A.Qpz..|
-00000320  88 1b 35 ce 63 e7 4f 2b  02 c9 35 0a 56 b2 2a 59  |..5.c.O+..5.V.*Y|
-00000330  e9 02 53 11 82 f2 f6 18  06 3a 3e 2e 8e 21 78 9d  |..S......:>..!x.|
-00000340  41 43 e2 ed 49 ce 87 cd  93 b7 13 6c 35 6e 4e 95  |AC..I......l5nN.|
-00000350  68 1b 4b 75 de fa ed 48  53 56 54 40 5f 3f 36 cb  |h.Ku...HSVT@_?6.|
-00000360  6b 57 de 3c fc 51 f4 fb  9d 8d 55 2e e9 ce fc 79  |kW.<.Q....U....y|
-00000370  08 16 03 03 00 04 0e 00  00 00                    |..........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 b2 3a 28  |............ .:(|
+000002d0  2e 2c 66 f1 9b 44 58 9a  92 03 42 81 f6 1c f4 67  |.,f..DX...B....g|
+000002e0  50 b5 92 f3 06 1b 1b 23  93 99 12 c5 6b 08 04 00  |P......#....k...|
+000002f0  80 44 05 ae 8d ed c6 82  3a 2a 19 05 9d 70 f9 ba  |.D......:*...p..|
+00000300  45 66 cb 45 75 9c da 92  cc bb 4a a5 ae 41 8c f8  |Ef.Eu.....J..A..|
+00000310  9b e7 06 73 88 9f f9 7d  95 ce 74 a6 05 e9 38 a5  |...s...}..t...8.|
+00000320  26 4b b2 26 31 5c e9 f9  a8 f8 6e 6b 05 e4 39 b5  |&K.&1\....nk..9.|
+00000330  fe b1 b1 cd 40 23 e9 68  f3 9c ed 91 71 d3 0b c5  |....@#.h....q...|
+00000340  91 c5 b2 91 69 a9 4b 2c  a7 0c 24 d6 a9 e7 74 89  |....i.K,..$...t.|
+00000350  9e ce 8b 00 72 9a c9 86  8b ca 8d 39 01 a0 71 3e  |....r......9..q>|
+00000360  46 ff a6 7d c6 da 0a af  f2 84 c4 01 1c 94 47 22  |F..}..........G"|
+00000370  71 16 03 03 00 04 0e 00  00 00                    |q.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 be b4 f9  49 91 3c c8 f8 7c da ef  |.... ...I.<..|..|
-00000040  06 bd d5 9e d3 b4 74 f6  22 2e b8 5c b6 e2 2d 01  |......t."..\..-.|
-00000050  cb d5 3f 94 7f                                    |..?..|
+00000030  16 03 03 00 20 80 26 44  1c a7 83 b7 12 29 9a 44  |.... .&D.....).D|
+00000040  7b c1 0b 96 53 c8 0e 9b  dd 8d 29 4b 4b b8 75 d7  |{...S.....)KK.u.|
+00000050  0a c7 86 c7 d9                                    |.....|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 21 a2 e6 72 21  |.......... !..r!|
-00000010  6d 45 36 87 6d 3f c9 70  89 1f b3 0a cc c2 5b 18  |mE6.m?.p......[.|
-00000020  27 37 d8 1f 4e 55 f9 9d  07 96 2f                 |'7..NU..../|
+00000000  14 03 03 00 01 01 16 03  03 00 20 2e d7 9e b0 66  |.......... ....f|
+00000010  f1 39 84 a9 d9 93 17 bd  94 5a 31 49 bb eb f0 a0  |.9.......Z1I....|
+00000020  7b af d0 3b ae 1a 5d f6  46 31 36                 |{..;..].F16|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 81 33 71  a4 ec a6 67 b2 17 ba 80  |......3q...g....|
-00000010  27 80 a1 62 fb 1e ab 3f  cd b9 fe                 |'..b...?...|
+00000000  17 03 03 00 16 cd 39 a7  64 3b 6a de 14 e0 26 ea  |......9.d;j...&.|
+00000010  66 b2 73 b1 8e b0 e3 a9  94 62 4f                 |f.s......bO|
 >>> Flow 6 (server to client)
-00000000  16 03 03 00 14 b3 2b 93  6f bc d1 11 45 fa 9a d3  |......+.o...E...|
-00000010  f3 82 75 6c ce 40 38 21  5e                       |..ul.@8!^|
+00000000  16 03 03 00 14 c5 d7 88  58 81 44 1f 8d e4 c2 19  |........X.D.....|
+00000010  15 3b 5c 43 76 82 fe 03  e1                       |.;\Cv....|
 >>> Flow 7 (client to server)
-00000000  15 03 03 00 12 48 45 72  03 40 44 98 c6 db 40 d4  |.....HEr.@D...@.|
-00000010  a6 9b 67 5d 8b c1 a9 15  03 03 00 12 21 d2 4b 7d  |..g]........!.K}|
-00000020  51 c7 3c 53 0b d9 67 90  aa e6 42 e2 8c 83        |Q.>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,21 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 01 ca 02 00 01  c6 03 03 28 44 55 f3 f5  |...........(DU..|
-00000010  c1 63 ac 0b fd 1c 29 d3  90 a5 5c 96 2a d9 13 20  |.c....)...\.*.. |
-00000020  fe 96 11 3f 30 0a e1 a9  8e d9 e6 20 ca 40 de 01  |...?0...... .@..|
-00000030  4f 00 88 88 41 0f df af  85 0e 0e 22 9d a7 46 e8  |O...A......"..F.|
-00000040  df 9c 8e 8c 47 5b 94 91  94 06 f4 14 cc a8 00 01  |....G[..........|
+00000000  16 03 03 01 ca 02 00 01  c6 03 03 da b0 57 a0 ee  |.............W..|
+00000010  bf 74 92 06 39 a6 9a 9b  80 71 7e 57 63 ab 31 74  |.t..9....q~Wc.1t|
+00000020  d3 22 c1 e3 a6 c6 cf 6f  47 57 49 20 86 52 fb 0a  |.".....oGWI .R..|
+00000030  fd aa 10 47 00 9a 5d ad  4c d8 90 f1 cf 13 10 73  |...G..].L......s|
+00000040  31 f1 df 22 f3 42 58 b0  10 25 43 eb cc a8 00 01  |1..".BX..%C.....|
 00000050  7e 00 12 01 69 01 67 00  75 00 a4 b9 09 90 b4 18  |~...i.g.u.......|
 00000060  58 14 87 bb 13 a2 cc 67  70 0a 3c 35 98 04 f9 1b  |X......gp.<5....|
 00000070  df b8 e3 77 cd 0e c8 0d  dc 10 00 00 01 47 97 99  |...w.........G..|
@@ -85,31 +84,31 @@
 00000400  43 77 8d 0c 1c f1 0f a1  d8 40 83 61 c9 4c 72 2b  |Cw.......@.a.Lr+|
 00000410  9d ae db 46 06 06 4d f4  c1 b3 3e c0 d1 bd 42 d4  |...F..M...>...B.|
 00000420  db fe 3d 13 60 84 5c 21  d3 3b e9 fa e7 16 03 03  |..=.`.\!.;......|
-00000430  00 ac 0c 00 00 a8 03 00  1d 20 26 24 4e d8 a6 cc  |......... &$N...|
-00000440  2f c9 0e 68 d8 20 e3 97  5b c1 08 72 1e 79 46 d9  |/..h. ..[..r.yF.|
-00000450  a6 00 9c e9 f8 21 9b cd  29 17 08 04 00 80 aa 6d  |.....!..)......m|
-00000460  36 bb 06 e6 11 66 82 44  87 5d 81 53 e2 9a 95 11  |6....f.D.].S....|
-00000470  54 a3 cc a7 c9 9c 19 f6  da 98 4f 91 a6 dd 9e 10  |T.........O.....|
-00000480  14 83 04 55 2d 6c 9a af  26 7c 5d f0 aa ca 69 83  |...U-l..&|]...i.|
-00000490  af fe a5 cb a4 1a d4 bd  86 91 52 11 03 4d 9a ca  |..........R..M..|
-000004a0  37 fd 01 48 e8 5d a8 ea  ad a2 a5 08 cb ce 5f 52  |7..H.]........_R|
-000004b0  92 30 83 de 77 2a 06 c2  f2 53 4d 47 40 b9 2f 61  |.0..w*...SMG@./a|
-000004c0  9c 41 c4 05 45 42 5e 42  d5 5e 30 95 30 4e a1 77  |.A..EB^B.^0.0N.w|
-000004d0  79 b5 50 5c df d6 e7 74  42 d8 2b 66 02 fa 16 03  |y.P\...tB.+f....|
+00000430  00 ac 0c 00 00 a8 03 00  1d 20 0e e6 72 88 cf d1  |......... ..r...|
+00000440  05 c7 8d 03 64 b9 db d8  c3 5e 36 80 67 67 36 94  |....d....^6.gg6.|
+00000450  5b b7 92 f9 77 1f 6f b2  44 7f 08 04 00 80 1d 3b  |[...w.o.D......;|
+00000460  70 d5 72 87 2f 58 20 da  29 e0 f8 e8 7c 8d e5 c7  |p.r./X .)...|...|
+00000470  bf da 3c 10 f8 b0 3e 38  7b 06 0b 8e 8f d7 40 b6  |..<...>8{.....@.|
+00000480  47 9f 1c 64 6e 80 ab 9d  51 92 8c 60 a2 88 c4 43  |G..dn...Q..`...C|
+00000490  7d dc 29 64 45 83 a7 9c  2a 39 e9 bb 2a d9 f5 96  |}.)dE...*9..*...|
+000004a0  4c fb fd 0d cc 0f 9b 48  f5 ee af 8f 7a 1c 39 3e  |L......H....z.9>|
+000004b0  cf 23 15 c6 ab c3 f2 29  fd 6c 4f 17 6b d4 be 1a  |.#.....).lO.k...|
+000004c0  23 6e 74 81 e5 e5 e8 c0  de 9b b0 ed d2 32 bc 2a  |#nt..........2.*|
+000004d0  b1 30 b2 eb ac 9e 23 f8  be ea 31 9a b4 55 16 03  |.0....#...1..U..|
 000004e0  03 00 04 0e 00 00 00                              |.......|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 20 93 c8 47  ed fd 9b 41 69 97 58 97  |.... ..G...Ai.X.|
-00000040  cc 31 9c 93 a6 77 41 36  7a 90 f0 73 13 4a 7d 85  |.1...wA6z..s.J}.|
-00000050  12 20 7d 91 fa                                    |. }..|
+00000030  16 03 03 00 20 a1 58 d5  1a a3 9f 85 4e b6 c8 b7  |.... .X.....N...|
+00000040  cb c1 b0 cc 0a 80 59 1d  81 41 cc 4d 0b d3 bd 38  |......Y..A.M...8|
+00000050  48 69 01 23 96                                    |Hi.#.|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 20 16 00 35 d2 e0  |.......... ..5..|
-00000010  ad f5 4c 10 98 fb 4f c7  81 1f 05 4b d6 7d 9c ac  |..L...O....K.}..|
-00000020  50 94 84 c8 35 80 ec 54  fc f3 ee                 |P...5..T...|
+00000000  14 03 03 00 01 01 16 03  03 00 20 83 ae fc 0d dd  |.......... .....|
+00000010  a1 3a 55 b0 2e 5e 21 9c  57 f3 1b 94 80 6c 0e bb  |.:U..^!.W....l..|
+00000020  78 ae f4 6c 20 d5 7e 23  11 1e 7d                 |x..l .~#..}|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 83 e6 0f  3a ad c2 28 6c 82 ee 4a  |........:..(l..J|
-00000010  38 47 cc 86 75 70 e2 94  77 e6 6e 15 03 03 00 12  |8G..up..w.n.....|
-00000020  13 c0 a0 4f 02 5e 6f 33  f6 ae d3 52 7d 72 72 a0  |...O.^o3...R}rr.|
-00000030  1e 8d                                             |..|
+00000000  17 03 03 00 16 d3 16 a3  f0 93 49 44 d4 82 60 35  |..........ID..`5|
+00000010  e3 63 08 c0 4e 66 99 37  31 90 6c 15 03 03 00 12  |.c..Nf.71.l.....|
+00000020  3c ea 2c 19 34 7b cc 6c  7a a9 15 31 6f 9c 3b b0  |<.,.4{.lz..1o.;.|
+00000030  b2 1f                                             |..|
diff --git a/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE b/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE
index 6f59dc6636b023..c851eb1a1f2a5e 100644
--- a/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE
+++ b/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 12 01 00 01  0e 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 f8 01 00 00  f4 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,22 +7,20 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 93 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 79 00 0b 00 02  01 00 ff 01 00 01 00 00  |...y............|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
-000000a0  00 0a 00 04 00 02 00 1d  00 0d 00 16 00 14 08 04  |................|
+000000a0  00 0a 00 04 00 02 00 1d  00 0d 00 1a 00 18 08 04  |................|
 000000b0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000c0  06 03 00 32 00 1a 00 18  08 04 04 03 08 07 08 05  |...2............|
-000000d0  08 06 04 01 05 01 06 01  05 03 06 03 02 01 02 03  |................|
-000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
-000000f0  26 00 24 00 1d 00 20 2f  e5 7d a3 47 cd 62 43 15  |&.$... /.}.G.bC.|
-00000100  28 da ac 5f bb 29 07 30  ff f6 84 af c4 cf c2 ed  |(.._.).0........|
-00000110  90 99 5f 58 cb 3b 74                              |.._X.;t|
+000000c0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
+000000d0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
+000000e0  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
+000000f0  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 5d 02 00 00  59 03 03 64 5a cc e0 63  |....]...Y..dZ..c|
-00000010  02 82 64 75 5e 2c b3 5f  23 c6 98 c8 95 07 40 00  |..du^,._#.....@.|
-00000020  3e ef fd f6 00 af 81 0c  3a 47 a0 20 a1 fc 21 83  |>.......:G. ..!.|
-00000030  cf 2b 34 5e b7 7b bd ec  bb 8f 26 6a f2 26 7f 8f  |.+4^.{....&j.&..|
-00000040  51 13 6f ba 0d 1a f5 b7  1c 9d 6d 91 c0 2f 00 00  |Q.o.......m../..|
+00000000  16 03 03 00 5d 02 00 00  59 03 03 e0 da ea 5e 09  |....]...Y.....^.|
+00000010  bb 30 4c 10 db 85 36 44  38 9e a4 83 74 5f 2f 94  |.0L...6D8...t_/.|
+00000020  a1 b4 45 61 73 2f 88 b3  ac ad e4 20 45 55 20 90  |..Eas/..... EU .|
+00000030  b0 b0 d4 70 e6 10 13 5c  f4 49 0e 9c 2a 52 5c 84  |...p...\.I..*R\.|
+00000040  b2 55 1a ea e3 4b 5a 9f  ac e9 7b 37 c0 2f 00 00  |.U...KZ...{7./..|
 00000050  11 ff 01 00 01 00 00 0b  00 04 03 00 01 02 00 17  |................|
 00000060  00 00 16 03 03 02 59 0b  00 02 55 00 02 52 00 02  |......Y...U..R..|
 00000070  4f 30 82 02 4b 30 82 01  b4 a0 03 02 01 02 02 09  |O0..K0..........|
@@ -62,33 +60,33 @@
 00000290  73 bb b3 43 77 8d 0c 1c  f1 0f a1 d8 40 83 61 c9  |s..Cw.......@.a.|
 000002a0  4c 72 2b 9d ae db 46 06  06 4d f4 c1 b3 3e c0 d1  |Lr+...F..M...>..|
 000002b0  bd 42 d4 db fe 3d 13 60  84 5c 21 d3 3b e9 fa e7  |.B...=.`.\!.;...|
-000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 15 d1 98  |............ ...|
-000002d0  53 f4 98 b6 58 a5 cd 89  bb 32 21 83 4a e5 ad ba  |S...X....2!.J...|
-000002e0  1f ba db d0 4c c5 a3 89  0e 96 9f 59 60 08 04 00  |....L......Y`...|
-000002f0  80 4e 14 a0 a7 33 e8 47  d5 7d 01 26 19 ff 1d 3c  |.N...3.G.}.&...<|
-00000300  2a f9 77 58 84 c0 07 b7  dc cc 82 85 a6 18 e9 33  |*.wX...........3|
-00000310  70 15 04 75 bb 59 59 9c  fa c0 cd b4 b7 f8 a3 0e  |p..u.YY.........|
-00000320  21 cd ac 7d 18 d2 34 e5  a9 c7 a1 5d 86 f3 74 2b  |!..}..4....]..t+|
-00000330  9b b0 21 5f cb 91 7f a0  d8 78 f0 7c 56 e3 69 ec  |..!_.....x.|V.i.|
-00000340  43 55 80 3f 02 d7 e0 10  52 15 4d 1b bc 2c 7f b7  |CU.?....R.M..,..|
-00000350  86 cd 07 5d b9 f1 21 7e  18 da fc f8 45 45 cf 39  |...]..!~....EE.9|
-00000360  62 3e c8 f1 6c 75 f4 fb  fe f8 23 89 6a 0d b5 2e  |b>..lu....#.j...|
-00000370  4d 16 03 03 00 04 0e 00  00 00                    |M.........|
+000002c0  16 03 03 00 ac 0c 00 00  a8 03 00 1d 20 ca 07 6e  |............ ..n|
+000002d0  67 12 8e f7 b4 55 c0 d4  88 73 35 f0 f1 ae c4 34  |g....U...s5....4|
+000002e0  59 dc 05 df 75 96 54 f1  4f 7f 79 93 25 08 04 00  |Y...u.T.O.y.%...|
+000002f0  80 d2 1d 65 15 23 74 e4  57 80 58 62 b5 6d ab 06  |...e.#t.W.Xb.m..|
+00000300  11 4c e0 a0 7b 7e b5 78  87 47 71 30 c3 d8 86 b2  |.L..{~.x.Gq0....|
+00000310  af 34 24 95 9c 2f 74 bb  6e c8 2a 8e 81 f8 fb d7  |.4$../t.n.*.....|
+00000320  06 06 dc e8 95 01 65 fe  5d cb 9e 7f 36 9b 29 40  |......e.]...6.)@|
+00000330  09 81 1b df 24 66 13 94  51 2a 48 31 e3 cb 3a 06  |....$f..Q*H1..:.|
+00000340  c9 9c f4 36 b8 c0 de c1  3e 5e 79 95 f8 11 4b d8  |...6....>^y...K.|
+00000350  0a b1 6c ef f4 ce 89 ba  df ad 24 3d 7c 48 aa 70  |..l.......$=|H.p|
+00000360  d8 0e 52 a8 12 1c 6b eb  5b c9 c3 a3 fa f0 60 d4  |..R...k.[.....`.|
+00000370  54 16 03 03 00 04 0e 00  00 00                    |T.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 25 10 00 00  21 20 2f e5 7d a3 47 cd  |....%...! /.}.G.|
 00000010  62 43 15 28 da ac 5f bb  29 07 30 ff f6 84 af c4  |bC.(.._.).0.....|
 00000020  cf c2 ed 90 99 5f 58 cb  3b 74 14 03 03 00 01 01  |....._X.;t......|
-00000030  16 03 03 00 28 00 00 00  00 00 00 00 00 e3 a2 01  |....(...........|
-00000040  72 d5 55 57 f7 1a da 10  9a 04 7d 33 f4 18 b1 9a  |r.UW......}3....|
-00000050  09 38 45 dd 74 13 21 70  52 9c cc c2 3f           |.8E.t.!pR...?|
+00000030  16 03 03 00 28 00 00 00  00 00 00 00 00 21 27 7f  |....(........!'.|
+00000040  32 c6 19 c4 a9 13 bf 5e  4b 53 5f c3 47 64 bb f8  |2......^KS_.Gd..|
+00000050  21 d5 10 12 12 60 5e d8  e8 cf 1e fe 18           |!....`^......|
 >>> Flow 4 (server to client)
-00000000  14 03 03 00 01 01 16 03  03 00 28 86 a1 0b 2b ef  |..........(...+.|
-00000010  13 8d 20 82 ad 17 92 64  0b 44 21 0f f0 dd 20 43  |.. ....d.D!... C|
-00000020  4c db 92 3c 25 3a 12 ca  27 56 86 16 ca 9f ba 46  |L..<%:..'V.....F|
-00000030  dc 96 86                                          |...|
+00000000  14 03 03 00 01 01 16 03  03 00 28 af e6 ee d0 75  |..........(....u|
+00000010  df 97 22 b0 ff 46 8e 51  bb 23 70 8d 4a 22 01 b6  |.."..F.Q.#p.J"..|
+00000020  13 34 68 fd 69 fe 0a 0f  df 0e e6 41 48 49 8c e7  |.4h.i......AHI..|
+00000030  d3 21 13                                          |.!.|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 20 7c 62  |............. |b|
-00000010  05 52 7a 91 a7 13 96 96  29 11 1b 1a fe fa ad 7f  |.Rz.....).......|
-00000020  d2 3a 26 15 03 03 00 1a  00 00 00 00 00 00 00 02  |.:&.............|
-00000030  c7 2b 60 1b 9c 6b cb 22  08 f1 e3 c0 44 ab 70 21  |.+`..k."....D.p!|
-00000040  68 48                                             |hH|
+00000000  17 03 03 00 1e 00 00 00  00 00 00 00 01 10 16 77  |...............w|
+00000010  99 da 71 ef 78 16 d7 cd  2c 7b 71 ba 8a 74 c1 65  |..q.x...,{q..t.e|
+00000020  f2 f6 be 15 03 03 00 1a  00 00 00 00 00 00 00 02  |................|
+00000030  72 d4 4a f6 6d 63 4c ad  02 46 36 18 61 47 61 7d  |r.J.mcL..F6.aGa}|
+00000040  50 08                                             |P.|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
index 3673b8da39367f..6c7c3d47119ff6 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
+++ b/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,86 +7,85 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 07 aa 6b aa b6  |....z...v....k..|
-00000010  ef a5 5c 62 d7 05 bb f8  9d ea 03 34 13 bf 00 1f  |..\b.......4....|
-00000020  e6 95 7b ef a5 2b ad e8  20 2f 21 20 00 00 00 00  |..{..+.. /! ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 63 fa e1 78 d5  |....z...v..c..x.|
+00000010  53 77 64 44 97 45 79 94  e7 79 dd da 70 81 46 66  |SwdD.Ey..y..p.Ff|
+00000020  ac 7c 77 a2 f9 29 ca 48  e6 53 56 20 00 00 00 00  |.|w..).H.SV ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 01 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 53  |..+.....3.$... S|
-00000060  3c 5e 7d 61 39 39 6c f7  ea 14 d3 f0 40 23 30 8b  |<^}a99l.....@#0.|
-00000070  7e 1f 41 86 f8 2e 12 0a  f5 67 13 28 46 6f 14 14  |~.A......g.(Fo..|
-00000080  03 03 00 01 01 17 03 03  00 17 a8 64 4a 9d f1 a0  |...........dJ...|
-00000090  3c 1b e3 20 a2 66 80 7f  13 b5 a9 f0 8f ee 5b 4b  |<.. .f........[K|
-000000a0  af 17 03 03 02 6d 26 d2  8f df b4 d5 d3 9a c8 92  |.....m&.........|
-000000b0  4c 32 63 80 6b 5f 99 11  0f 4b be 14 77 55 86 d1  |L2c.k_...K..wU..|
-000000c0  27 94 18 50 27 1c 84 9c  38 03 fb 11 d3 5a ea 64  |'..P'...8....Z.d|
-000000d0  d1 15 47 1d fc cc 6e bf  5e 4d 45 74 f2 ca 44 77  |..G...n.^MEt..Dw|
-000000e0  32 6d 02 3a 9f 44 aa 5c  5d 62 64 ee 44 0d 45 05  |2m.:.D.\]bd.D.E.|
-000000f0  de 40 d0 83 c9 b3 21 39  a0 8f 5b 5a e1 96 2f 0b  |.@....!9..[Z../.|
-00000100  4b 12 da a7 dc 7b 2a 73  14 7f cc 93 fd a8 47 1c  |K....{*s......G.|
-00000110  f7 88 76 5d 30 29 af 65  ac 52 25 04 13 be 96 92  |..v]0).e.R%.....|
-00000120  bb e4 86 a0 b7 c8 67 63  ef cb 1f 78 7e bf 3c 5f  |......gc...x~.<_|
-00000130  7a a6 89 4a 94 f3 2e 01  8b b9 81 21 57 00 5e 26  |z..J.......!W.^&|
-00000140  22 9b eb e0 73 87 cd 77  46 d4 c8 1d 0a 4f d8 83  |"...s..wF....O..|
-00000150  0b 0a 43 3f 37 53 e2 0a  4b bb ef e8 8d 2a dc 51  |..C?7S..K....*.Q|
-00000160  b0 b9 90 7e 1a c5 31 e0  1b 0f 0c 7e 96 7b aa 49  |...~..1....~.{.I|
-00000170  ad 84 b0 0a 75 d6 37 58  bd 7f f6 ac 50 c5 d7 93  |....u.7X....P...|
-00000180  70 ce b1 cd 00 7c 79 1a  e5 ec 04 7b 12 8f fb 80  |p....|y....{....|
-00000190  54 d0 2b a0 9e 83 0d 05  a7 f5 4b e8 b4 36 1c d0  |T.+.......K..6..|
-000001a0  88 34 a6 71 51 d6 cf 59  c9 ad 03 d8 38 f2 15 f0  |.4.qQ..Y....8...|
-000001b0  63 9d 34 a3 f4 bc de 8f  ae 26 97 c0 98 8e 59 4e  |c.4......&....YN|
-000001c0  1f 74 a1 d4 2c 1a 18 20  ef e8 06 58 74 dd ed 40  |.t..,.. ...Xt..@|
-000001d0  50 dd 8b a4 77 15 1b 9e  63 7e c7 11 63 1a a9 d5  |P...w...c~..c...|
-000001e0  16 c2 8f f5 6c ce cd 03  e6 2d cc da 75 1a ce cb  |....l....-..u...|
-000001f0  ea 41 de dd 59 e5 68 90  98 69 76 a3 d0 d4 ed d1  |.A..Y.h..iv.....|
-00000200  e9 9a cd b8 29 73 eb 9c  e6 6f ee 8d 91 84 9e 2e  |....)s...o......|
-00000210  b9 23 2b 04 a0 f6 5f 0b  16 07 49 ae 6f 33 b0 ee  |.#+..._...I.o3..|
-00000220  be ff 75 52 da 7b 06 05  6c 8f 87 1f 48 2f fb 59  |..uR.{..l...H/.Y|
-00000230  79 a6 99 cb a6 0b 73 fb  4c d0 cc eb ba 51 1a 6d  |y.....s.L....Q.m|
-00000240  9a 33 27 e3 f4 cf 16 bc  c0 82 da 21 04 4a 7b e0  |.3'........!.J{.|
-00000250  12 a5 5e de 22 d2 df b4  c4 c9 fa 11 97 7b 07 ea  |..^."........{..|
-00000260  11 c8 2c 55 b8 6d c2 64  6d fa e0 6f b8 5c 50 ae  |..,U.m.dm..o.\P.|
-00000270  a6 2e aa bf 2f 2a 74 2d  1c 11 c2 44 d7 28 b8 5e  |..../*t-...D.(.^|
-00000280  6a 2d bc 0d 2e a7 a2 b6  b6 ae 12 2c a2 c4 ba 5c  |j-.........,...\|
-00000290  0b 3f 17 2e 98 30 ce 6c  8e 88 3c f9 a8 e1 68 8d  |.?...0.l..<...h.|
-000002a0  52 c8 a1 b3 3f 12 e1 35  f0 eb ee 9f 0d bb 3c 90  |R...?..5......<.|
-000002b0  2c e2 2c 95 2e f3 e2 f6  f2 f1 be b8 03 02 84 69  |,.,............i|
-000002c0  56 8f 3b 1d 68 77 f1 52  eb 48 4f e8 c8 5b 0a df  |V.;.hw.R.HO..[..|
-000002d0  a1 74 1e e1 47 a2 9a 9a  83 6d c2 ea f3 1b fc 8f  |.t..G....m......|
-000002e0  b6 aa 18 7e 85 46 ff 33  0b 6e 1f 5b f1 70 c0 45  |...~.F.3.n.[.p.E|
-000002f0  f6 bb a0 da 74 e0 9a 3c  a7 e2 07 ef 0b e5 9a 5b  |....t..<.......[|
-00000300  6e 9b aa 6c a4 97 84 5d  77 f5 33 b8 e3 45 c0 00  |n..l...]w.3..E..|
-00000310  21 c7 91 17 03 03 00 99  ee bf d2 9c 82 9f 68 b4  |!.............h.|
-00000320  5e 15 09 1a 7a c1 f9 72  ff ca 0e d9 f1 9f 7f 8c  |^...z..r........|
-00000330  dc 4a 8d d3 37 7b 81 42  ef 9b 2b 5f 9a 4b 40 8e  |.J..7{.B..+_.K@.|
-00000340  6b 24 53 79 32 b0 d1 24  2a 6f c9 fb a8 82 c1 01  |k$Sy2..$*o......|
-00000350  1e 0b 11 7f 85 c7 ee d4  29 12 08 99 8f 00 ef af  |........).......|
-00000360  2c 5d c5 b1 25 a3 a9 f0  f1 a3 2b f8 7f e6 31 1b  |,]..%.....+...1.|
-00000370  51 20 af 3f a7 4e 5c 3d  73 21 04 0f 2c 5c cd f3  |Q .?.N\=s!..,\..|
-00000380  eb d1 01 ef b0 e3 64 f7  33 d3 05 82 9f a6 71 3b  |......d.3.....q;|
-00000390  b2 ab 08 61 57 ad 74 d1  e2 8f 2c c9 73 c3 e0 ac  |...aW.t...,.s...|
-000003a0  ed 18 4b 70 0d 9a bf ae  b4 db 07 7d 25 3e 7f 3d  |..Kp.......}%>.=|
-000003b0  14 17 03 03 00 35 db be  d2 61 e1 3f a3 0b fe 39  |.....5...a.?...9|
-000003c0  b2 86 42 72 a6 ee 02 90  c2 d1 d1 5c 3d 61 c8 28  |..Br.......\=a.(|
-000003d0  28 7c 01 40 26 f1 e1 f1  81 50 03 4c 6c 32 6d 8b  |(|.@&....P.Ll2m.|
-000003e0  dd 60 cf fc a9 3c fe e1  4d d0 d2                 |.`...<..M..|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 36  |..+.....3.$... 6|
+00000060  e2 c3 a0 14 f4 9c 50 9c  08 03 5e c2 b8 4b 66 85  |......P...^..Kf.|
+00000070  71 fb bb 20 6e 97 3a f6  74 be 02 31 29 8e 18 14  |q.. n.:.t..1)...|
+00000080  03 03 00 01 01 17 03 03  00 17 00 79 2a 2d 44 f4  |...........y*-D.|
+00000090  12 2d 7c d6 8c 7a 27 76  a5 3a 6b c1 2d 40 8f 20  |.-|..z'v.:k.-@. |
+000000a0  8b 17 03 03 02 6d 6e 16  f8 0f d2 67 3b e8 1a 95  |.....mn....g;...|
+000000b0  2a ce 16 7b 95 21 7e 03  65 bf 01 ce e9 43 83 f6  |*..{.!~.e....C..|
+000000c0  0e a9 d2 f2 d1 a3 2f d4  55 d2 27 83 44 3d f9 72  |....../.U.'.D=.r|
+000000d0  00 8d 41 44 eb 93 ca 68  09 d1 bd f3 1a cc a0 53  |..AD...h.......S|
+000000e0  a7 18 6e b7 27 d0 f5 e1  08 d8 9f 7b 37 bc 8f b9  |..n.'......{7...|
+000000f0  84 6d e0 20 cf 99 bf c1  67 c8 00 74 4c 76 3e 2d  |.m. ....g..tLv>-|
+00000100  63 48 11 f1 75 30 ab a5  5b a2 cb 13 e9 e0 65 36  |cH..u0..[.....e6|
+00000110  86 ce 8b 64 f6 dc e1 b7  0d 16 96 d1 ec 4b 93 d5  |...d.........K..|
+00000120  6c 10 0d b7 d8 a2 45 b2  f0 e0 aa ab ab 11 8d d0  |l.....E.........|
+00000130  2c fc 20 35 99 1b d6 3b  72 6d 88 03 80 5c 59 d4  |,. 5...;rm...\Y.|
+00000140  04 18 ee 7a ed fe fb 52  c1 3c 93 95 e2 00 23 0d  |...z...R.<....#.|
+00000150  cc c1 4e 0a fb 55 33 93  9f c8 31 33 29 f5 12 3e  |..N..U3...13)..>|
+00000160  39 62 62 27 05 cf d2 be  bd 7d 42 51 97 4f 71 95  |9bb'.....}BQ.Oq.|
+00000170  10 f8 eb 0f d8 d1 69 aa  22 13 a8 fe 24 f6 87 a1  |......i."...$...|
+00000180  9d ca cb 8f 99 39 2b fb  99 d9 18 8a fa fa 25 20  |.....9+.......% |
+00000190  df 6a b3 d1 ac ce 56 8b  76 5d a9 46 1c 0b c7 57  |.j....V.v].F...W|
+000001a0  90 02 10 55 85 49 48 89  d8 d6 4b 68 29 cb 28 66  |...U.IH...Kh).(f|
+000001b0  1c d1 97 e6 a0 10 90 63  83 96 33 ee 5a 5a 5b 66  |.......c..3.ZZ[f|
+000001c0  ca b3 0d be 6d 70 c5 de  fd 78 c8 f8 e1 c5 78 ef  |....mp...x....x.|
+000001d0  07 2e 60 06 28 86 ed e6  bd 7b 37 33 0e 06 5e 06  |..`.(....{73..^.|
+000001e0  fb 44 2b 96 16 fe 09 30  dc 03 53 bc c9 f9 6f 1e  |.D+....0..S...o.|
+000001f0  4b 79 a9 ac fe 20 3f 12  58 48 0c 40 a5 2f f2 6a  |Ky... ?.XH.@./.j|
+00000200  ea 44 69 93 54 4f 4d 6c  98 85 b1 c5 6f 50 83 b8  |.Di.TOMl....oP..|
+00000210  8a 20 e3 b9 da b7 7d e4  ec 33 28 96 29 d7 dc a3  |. ....}..3(.)...|
+00000220  d0 54 76 cd a6 99 17 e8  0f 14 d2 7c 4b 68 0a 80  |.Tv........|Kh..|
+00000230  4f 0b 2b b5 16 68 dc 25  42 b5 0b f7 13 6a c5 81  |O.+..h.%B....j..|
+00000240  c0 18 bc fb 40 86 cc 99  2e 70 2b 9a 72 eb be 57  |....@....p+.r..W|
+00000250  a0 43 92 83 3b 7e c8 02  43 ab 17 7a 73 87 1a a2  |.C..;~..C..zs...|
+00000260  1c 01 db b4 31 b1 d9 44  f1 c0 d9 de 27 bd 4c 8b  |....1..D....'.L.|
+00000270  1c f5 3d db d6 aa 98 7d  43 fe dd 64 85 8b c1 88  |..=....}C..d....|
+00000280  a9 1e f1 04 0b 5d 3b c2  fd 3f b2 27 a7 28 d1 82  |.....];..?.'.(..|
+00000290  13 fb 85 46 77 78 50 45  1b 4b c0 75 f2 32 8a 6d  |...FwxPE.K.u.2.m|
+000002a0  52 37 2e b1 80 e9 81 3b  60 c8 88 78 11 3f 0f 96  |R7.....;`..x.?..|
+000002b0  d1 4b 19 49 91 b5 70 44  2d 62 a1 04 8f 98 89 ab  |.K.I..pD-b......|
+000002c0  75 1f 8a 97 d5 28 dc 88  20 92 7f f2 90 16 1b de  |u....(.. .......|
+000002d0  54 7c 5f 05 8f c9 70 a1  f5 8c 99 09 43 ab 09 73  |T|_...p.....C..s|
+000002e0  dd 5e 62 c3 9f c8 e1 fa  9e 98 65 18 b5 5e 4e f9  |.^b.......e..^N.|
+000002f0  85 a4 cc dc b8 12 1b eb  0a bc bc bd 1c 2f 51 0e  |............./Q.|
+00000300  8f 55 f1 10 22 06 ca cb  f2 97 54 63 1c 98 36 9f  |.U..".....Tc..6.|
+00000310  1d 66 b0 17 03 03 00 99  f0 14 4d 69 84 b3 ca d4  |.f........Mi....|
+00000320  96 9c e2 3c a4 55 f4 b6  01 1f 1e 1f 77 98 c4 84  |...<.U......w...|
+00000330  5e ce 4c 0b bf ba 39 6b  36 a6 15 9c d1 90 87 d1  |^.L...9k6.......|
+00000340  13 39 1c dd 86 0f a0 06  f7 fc f7 c9 10 4e 46 0a  |.9...........NF.|
+00000350  03 12 a0 bf 3e f3 7d e6  1b b7 ce ec 16 84 52 8e  |....>.}.......R.|
+00000360  bc 9c 9a 4f 2f a7 d9 aa  f3 d6 be 0a f8 39 2d 18  |...O/........9-.|
+00000370  28 9e 35 6e 25 25 46 9b  49 61 a6 ee 6a 87 d2 5f  |(.5n%%F.Ia..j.._|
+00000380  54 e6 fb 96 a3 e9 8a 05  c2 fb 71 0b d7 13 2e 19  |T.........q.....|
+00000390  e5 5c a2 d0 f4 b3 34 95  e1 1d 24 ef 33 a2 0a d5  |.\....4...$.3...|
+000003a0  65 b2 5f 46 73 45 33 69  d6 c3 f6 49 20 e2 00 bd  |e._FsE3i...I ...|
+000003b0  16 17 03 03 00 35 89 2f  34 08 44 35 6a 52 1a fd  |.....5./4.D5jR..|
+000003c0  e4 be 2b 0e 0a dd 2d c1  e7 e3 20 7a 0a 3e 87 1d  |..+...-... z.>..|
+000003d0  2b 64 87 c5 11 54 46 1a  5c 89 e2 97 3f 83 b2 b4  |+d...TF.\...?...|
+000003e0  04 ed d2 c4 1d 3d 37 1f  e1 62 f2                 |.....=7..b.|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 bd 1e ca 07 84  |..........5.....|
-00000010  c8 ba 87 6d d3 ed 53 20  79 76 34 af 30 e6 bf c5  |...m..S yv4.0...|
-00000020  74 a0 d0 b3 13 17 a9 3c  c7 b3 47 5b e7 b4 6d 18  |t......<..G[..m.|
-00000030  e5 3f 12 5c ca c9 26 87  c4 96 c4 9b 45 23 7f f7  |.?.\..&.....E#..|
-00000040  17 03 03 00 17 28 0b 72  a0 6e ac 55 ec c0 b7 21  |.....(.r.n.U...!|
-00000050  3f 7a 16 98 40 76 7d 3c  95 24 98 3b 17 03 03 00  |?z..@v}<.$.;....|
-00000060  13 8e 23 e0 33 31 dc 39  fb 54 a6 a2 63 36 e4 2a  |..#.31.9.T..c6.*|
-00000070  5a 1c bc 09                                       |Z...|
+00000000  14 03 03 00 01 01 17 03  03 00 35 07 8e f6 0b 41  |..........5....A|
+00000010  be 74 45 99 5e 35 59 4f  2e 59 d4 37 77 ca 53 d4  |.tE.^5YO.Y.7w.S.|
+00000020  fd 33 bf dc 65 85 ee ad  c5 d6 94 7e 6e e8 02 cf  |.3..e......~n...|
+00000030  15 d2 04 cb e1 9f 5e 94  dd 5f 37 17 95 17 0c b7  |......^.._7.....|
+00000040  17 03 03 00 17 1f aa e9  7d 34 dc 12 da 3b cb dd  |........}4...;..|
+00000050  1c d3 b0 f1 79 ad cc 66  06 64 69 21 17 03 03 00  |....y..f.di!....|
+00000060  13 b7 c7 a2 01 48 27 3a  44 e6 c6 47 a9 19 5f d2  |.....H':D..G.._.|
+00000070  f8 96 98 70                                       |...p|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-AES256-SHA384 b/src/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
index 5fcaba0d4fd54a..c5bac350a6e3b4 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
+++ b/src/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,88 +7,87 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 76 2d 81 0b a9  |....z...v..v-...|
-00000010  70 b7 fe 52 ef d3 80 c4  1d bf f7 19 99 3c 4c aa  |p..R.............|.I+NU.t..|
-00000130  23 32 9d aa b1 17 15 3d  37 85 42 0e 5f 7c fa 5b  |#2.....=7.B._|.[|
-00000140  b8 ae f3 b9 4d b2 40 b5  e2 de e2 b3 f0 27 a6 f2  |....M.@......'..|
-00000150  0c 28 4b 77 ee 38 dc ec  17 28 18 03 13 85 60 2c  |.(Kw.8...(....`,|
-00000160  ab 16 e1 1c c6 e1 91 e0  5f f3 b6 f7 1c 3b 5f 03  |........_....;_.|
-00000170  6a d5 b0 a0 5b ab 6d 9c  b2 ee 8e 50 49 94 7d db  |j...[.m....PI.}.|
-00000180  3b fe 68 e2 79 3e 2d 33  06 a6 b2 9c 8b 7d 93 04  |;.h.y>-3.....}..|
-00000190  b4 9e 07 6d 15 80 63 38  8e 4b c5 e6 88 a0 6a f2  |...m..c8.K....j.|
-000001a0  11 60 11 7a f7 6e 7e 47  9f fd 77 12 c9 d5 8e 58  |.`.z.n~G..w....X|
-000001b0  84 51 2c f6 fd 2b d1 dc  a6 51 d8 20 3f 06 76 ad  |.Q,..+...Q. ?.v.|
-000001c0  dd 37 b6 e9 86 4e cb 31  76 79 60 26 c7 b4 d5 67  |.7...N.1vy`&...g|
-000001d0  2c 70 22 f4 4d b5 60 61  41 48 65 a8 d0 b5 d8 47  |,p".M.`aAHe....G|
-000001e0  08 bf 5b 67 e8 99 c4 a5  91 1e 36 6b 37 53 7b 65  |..[g......6k7S{e|
-000001f0  ac af 2d df 8e 77 e2 46  1a 65 45 0a 00 f2 8f 9d  |..-..w.F.eE.....|
-00000200  47 1c 93 64 52 c3 d9 91  47 41 88 7f 81 ea 8f 2b  |G..dR...GA.....+|
-00000210  a9 fa 4b d5 9d 6f 30 36  dc af e0 96 b3 f0 e4 6a  |..K..o06.......j|
-00000220  a3 10 cf 0e 53 64 e3 18  52 08 a9 16 e3 6d e9 0a  |....Sd..R....m..|
-00000230  ec 4d a4 f7 f1 ee 38 28  88 31 aa 38 a7 14 09 f4  |.M....8(.1.8....|
-00000240  1a 31 ac 40 46 dd f2 4f  7f ff f4 fc 71 42 61 73  |.1.@F..O....qBas|
-00000250  03 47 9f ec 69 7f 77 e3  91 29 cd 89 7f 45 6b 9d  |.G..i.w..)...Ek.|
-00000260  f5 33 66 8b 74 bc 53 ff  54 c3 af 48 8e d8 25 0a  |.3f.t.S.T..H..%.|
-00000270  99 49 08 29 f3 b2 a5 d0  5b ca 89 e2 d7 f5 5f 40  |.I.)....[....._@|
-00000280  72 6f b4 d6 20 39 79 4a  0e 7c 00 60 68 eb 1e ab  |ro.. 9yJ.|.`h...|
-00000290  ee 38 35 f2 db 83 9c 0b  52 80 15 14 ae 6b dc f5  |.85.....R....k..|
-000002a0  d5 f3 83 cb e7 5f 5c 98  e2 f2 d0 52 68 92 ff f6  |....._\....Rh...|
-000002b0  7a ce ff ae 96 6e ad 11  d2 5e bc 60 16 55 cd 81  |z....n...^.`.U..|
-000002c0  25 67 5b db 76 59 36 a8  48 d6 91 86 4f cb 87 5f  |%g[.vY6.H...O.._|
-000002d0  ea 96 e4 71 df ac 54 5a  a0 e1 0a bd 88 68 ff 0a  |...q..TZ.....h..|
-000002e0  97 be 9b da cf aa e1 b1  74 c9 8d 5f 19 f5 df 53  |........t.._...S|
-000002f0  a0 57 93 7d c3 fe 37 78  2a ba 6b c2 a1 51 41 f4  |.W.}..7x*.k..QA.|
-00000300  ee 57 ed d2 7d 48 14 31  4a f7 14 d4 0e 42 9e fb  |.W..}H.1J....B..|
-00000310  fb f4 cd 17 03 03 00 99  6b 70 ae fc d3 07 5e 7f  |........kp....^.|
-00000320  39 2a 27 34 54 8a b6 4d  39 36 d4 38 0c ed 8c 24  |9*'4T..M96.8...$|
-00000330  fc 29 1d 59 74 99 f1 e1  a1 23 4b 6d 27 31 f4 2d  |.).Yt....#Km'1.-|
-00000340  8b b3 23 aa 92 5f 01 3d  a1 f6 b5 24 8e 56 ea eb  |..#.._.=...$.V..|
-00000350  4e 0a dc 23 ae 32 1b 0d  cb bc 60 87 b7 35 32 5f  |N..#.2....`..52_|
-00000360  10 32 fb 89 32 3f 99 0e  30 0d 65 28 69 c4 3b f8  |.2..2?..0.e(i.;.|
-00000370  6c 04 a5 bf ec e9 aa c4  bc b4 55 e2 d0 09 a1 4b  |l.........U....K|
-00000380  82 f8 a5 37 ab ca 69 f4  bc 24 69 c4 ce 07 6c ee  |...7..i..$i...l.|
-00000390  d6 08 92 14 41 ca 8f c8  c9 37 ae b5 f3 29 ff 69  |....A....7...).i|
-000003a0  7a 18 4e 93 dd eb 52 58  d2 6b 22 6d b6 29 70 b3  |z.N...RX.k"m.)p.|
-000003b0  ea 17 03 03 00 45 10 35  86 2e d4 e3 92 35 a3 0e  |.....E.5.....5..|
-000003c0  a1 cd 79 11 05 cd 77 c4  93 f4 6a ba f8 fc 4b bd  |..y...w...j...K.|
-000003d0  63 5d c0 2d a0 c9 c2 2a  10 79 e9 0c bc 0b 18 c1  |c].-...*.y......|
-000003e0  15 18 c0 8a d7 05 39 f1  de 6e 8e cb dd 73 5f ee  |......9..n...s_.|
-000003f0  28 93 f9 92 35 56 1f c1  e4 8d 89                 |(...5V.....|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 10  |..+.....3.$... .|
+00000060  0e 84 6c ef b3 7e f7 93  33 67 0e d0 5e e4 c6 a8  |..l..~..3g..^...|
+00000070  5f c5 ac e7 85 06 86 a4  21 10 aa 56 18 3a 39 14  |_.......!..V.:9.|
+00000080  03 03 00 01 01 17 03 03  00 17 a8 c3 84 a3 a2 42  |...............B|
+00000090  ba c8 40 ef f8 53 02 58  d7 39 3f b2 34 2f 4e 71  |..@..S.X.9?.4/Nq|
+000000a0  54 17 03 03 02 6d e5 41  6d ac 46 4e 7c 71 5c b9  |T....m.Am.FN|q\.|
+000000b0  c5 aa 8d 7d f2 ef f3 40  22 9d db d3 83 49 45 94  |...}...@"....IE.|
+000000c0  96 c6 85 74 ac f1 64 e2  80 7a 47 1e c1 f7 45 bb  |...t..d..zG...E.|
+000000d0  6e 56 b5 5b 90 1f 11 6e  47 d5 52 b7 5d d3 02 80  |nV.[...nG.R.]...|
+000000e0  55 59 94 53 05 ab 5c aa  18 f8 7d d0 24 1d 6f 7a  |UY.S..\...}.$.oz|
+000000f0  c7 8e e9 80 61 dc b3 2b  c0 74 09 d3 58 be e9 cb  |....a..+.t..X...|
+00000100  8b 53 ec 68 d7 b4 4b 70  83 42 bb 24 78 05 3c 8c  |.S.h..Kp.B.$x.<.|
+00000110  a9 54 af 0b 55 e2 d3 35  73 56 9b 9a 19 fd 93 9a  |.T..U..5sV......|
+00000120  21 c3 5f f8 cf fe e0 a1  63 62 b8 58 bf 35 29 1d  |!._.....cb.X.5).|
+00000130  69 58 f6 d3 e8 60 66 1b  db 53 4b 26 0b 78 d9 5e  |iX...`f..SK&.x.^|
+00000140  73 d5 34 5a 11 57 98 8d  0c 9f 85 28 80 a4 ee 47  |s.4Z.W.....(...G|
+00000150  f8 23 ca 31 7a 24 d5 dd  9b 49 7b 62 ab e5 69 fa  |.#.1z$...I{b..i.|
+00000160  e7 cc 83 0c 6e e5 0f 98  4c 07 86 2b a9 97 eb c0  |....n...L..+....|
+00000170  78 1e 2b 83 7b 9a 6f 51  60 c0 b8 e1 99 f7 b0 e3  |x.+.{.oQ`.......|
+00000180  bf d8 ec 4e 9f 69 27 c8  89 fc 18 21 58 8a ba 87  |...N.i'....!X...|
+00000190  23 4c cd 95 b7 f1 a5 9a  79 5c d7 35 74 a5 4a 2c  |#L......y\.5t.J,|
+000001a0  fc c8 f4 b4 c4 de 3b 0e  08 12 e0 24 af 10 b3 e7  |......;....$....|
+000001b0  04 74 a9 b4 de ee 98 b5  f1 ed 50 9f eb 5f eb 14  |.t........P.._..|
+000001c0  56 6f d2 f2 b3 5e 40 34  0a f9 2d 44 de 0a 29 8f  |Vo...^@4..-D..).|
+000001d0  e5 86 dc 97 4f dd 26 b6  6a 8f 69 e9 5c 87 87 92  |....O.&.j.i.\...|
+000001e0  65 04 d6 aa d0 79 bf ab  85 20 ca e9 bf 50 5d a9  |e....y... ...P].|
+000001f0  80 2c 92 26 8e 19 ef 78  a7 68 64 ba 48 3c 24 2e  |.,.&...x.hd.H<$.|
+00000200  45 69 ce 94 17 e5 8a d7  81 02 de f1 d0 d8 c0 b8  |Ei..............|
+00000210  86 c1 fb 2c 6d fe 42 1a  ce e0 1c f0 29 15 ba fc  |...,m.B.....)...|
+00000220  8d 65 5e 6d ea 9e c3 95  f4 1b 15 bb 91 ac 9c 0b  |.e^m............|
+00000230  13 f0 fa ab 46 ed f1 c5  29 6e 45 db 4c cc 1e 45  |....F...)nE.L..E|
+00000240  4d fc f2 6c 2b 0a d0 f3  70 69 32 cd 2f 23 6d f2  |M..l+...pi2./#m.|
+00000250  5f f3 f4 f0 5c 1c d7 d3  a7 0c 8f 23 29 30 7a 8e  |_...\......#)0z.|
+00000260  c3 aa a8 71 21 5c ad b6  fb c6 bd 78 ac ab b1 a0  |...q!\.....x....|
+00000270  11 84 23 61 7b ec 90 e1  2c 23 ec 9b 21 c8 ab 01  |..#a{...,#..!...|
+00000280  e0 b9 5b 0b 4c ee a5 3c  5b c0 52 bd 60 7a b1 88  |..[.L..<[.R.`z..|
+00000290  67 e3 c9 60 b9 04 a8 31  3e 34 d7 33 49 38 d9 a7  |g..`...1>4.3I8..|
+000002a0  d1 04 b4 13 a8 5f 0b f2  41 77 d4 c8 b2 d3 0e d6  |....._..Aw......|
+000002b0  8c dc 34 ad 2a d9 4b 5f  4a e2 17 0a be 2a 55 4a  |..4.*.K_J....*UJ|
+000002c0  44 a7 b0 0f d1 39 b0 e5  9d 77 6b d7 44 15 99 bf  |D....9...wk.D...|
+000002d0  c8 02 57 90 5b 73 29 fe  ab 85 93 c3 dc 1c b0 b2  |..W.[s).........|
+000002e0  14 78 01 99 f5 d2 db ef  ae 0e 2a d9 17 1e 70 fa  |.x........*...p.|
+000002f0  bb 74 fe 93 a0 aa ff 79  cd 8b 6d 3d 79 66 d2 c8  |.t.....y..m=yf..|
+00000300  90 c7 2c e6 54 26 de f7  4d b8 a7 73 cd 92 fc 42  |..,.T&..M..s...B|
+00000310  ad 4e ff 17 03 03 00 99  c6 07 36 ce 58 9c fe 38  |.N........6.X..8|
+00000320  aa b4 5c c8 8e f5 11 19  82 4c 4b 2b 0a 08 be 3f  |..\......LK+...?|
+00000330  11 76 06 4b d3 1b b7 fc  66 d9 db de fb 6a ee 29  |.v.K....f....j.)|
+00000340  f6 a5 4b 96 f3 3c a0 67  44 73 d4 46 c5 d4 a1 f8  |..K..<.gDs.F....|
+00000350  71 36 7c a5 62 79 fc be  f9 34 55 85 31 8f fc e3  |q6|.by...4U.1...|
+00000360  46 be 64 1e 2d 1b 21 c3  89 8e 1c cc df 30 05 57  |F.d.-.!......0.W|
+00000370  2e d5 d5 67 11 10 46 1a  af 99 01 0e fd 40 53 1f  |...g..F......@S.|
+00000380  b0 f0 76 3e 8e c1 7a 6a  fe fe ef c1 08 6e ea 9b  |..v>..zj.....n..|
+00000390  75 6c 62 86 07 50 ee 1f  ef 3b 55 fd 68 44 47 27  |ulb..P...;U.hDG'|
+000003a0  07 c1 53 b5 13 c5 e0 a4  d6 9e 8a 3c 78 a0 04 b7  |..S........>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 45 2f 08 54 f6 2b  |..........E/.T.+|
-00000010  fd 13 5d 87 d3 b6 73 5e  20 88 af 53 db 7e 3c 37  |..]...s^ ..S.~<7|
-00000020  1d 52 a4 ae 91 3f 24 a7  30 26 02 da 13 f3 c5 60  |.R...?$.0&.....`|
-00000030  28 e6 eb 8f e1 1b 58 2d  bb d0 06 c4 67 33 1c a1  |(.....X-....g3..|
-00000040  03 cb 16 56 1b 91 06 08  b6 34 c5 de 97 04 ee f0  |...V.....4......|
-00000050  17 03 03 00 17 6c 7e 3d  5d 98 4e 42 81 42 c5 2c  |.....l~=].NB.B.,|
-00000060  b2 c2 d3 c9 58 bc 13 bc  61 cd 63 f2 17 03 03 00  |....X...a.c.....|
-00000070  13 83 c7 4a b6 10 69 b4  16 be 25 a1 db cb c9 94  |...J..i...%.....|
-00000080  8f a2 27 22                                       |..'"|
+00000000  14 03 03 00 01 01 17 03  03 00 45 ee 00 18 db 1e  |..........E.....|
+00000010  67 aa 0f 9e 5c 20 7d 25  27 49 e8 d5 60 02 78 7b  |g...\ }%'I..`.x{|
+00000020  23 58 70 67 67 93 ca 4d  50 69 b1 cf d9 dc 31 d3  |#Xpgg..MPi....1.|
+00000030  03 36 b0 07 39 59 52 e1  c7 36 6d 16 0b 56 03 c6  |.6..9YR..6m..V..|
+00000040  a0 ec 0e 6b ed de 7b ba  51 96 83 b6 b8 77 8f 6a  |...k..{.Q....w.j|
+00000050  17 03 03 00 17 77 f6 6f  83 00 ad eb be 16 26 3d  |.....w.o......&=|
+00000060  27 e8 58 73 a2 bc 11 ff  14 54 4a 15 17 03 03 00  |'.Xs.....TJ.....|
+00000070  13 bc 94 3f 6e ee 1b 40  b0 2e 03 13 47 28 38 4d  |...?n..@....G(8M|
+00000080  2d 26 5d 15                                       |-&].|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ALPN b/src/crypto/tls/testdata/Client-TLSv13-ALPN
index ff0989c567b149..f40340ac152182 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ALPN
+++ b/src/crypto/tls/testdata/Client-TLSv13-ALPN
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 2c 01 00 01  28 03 03 00 00 00 00 00  |....,...(.......|
+00000000  16 03 01 01 12 01 00 01  0e 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,89 +7,87 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 ad 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 93 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 10  00 10 00 0e 06 70 72 6f  |.............pro|
-000000f0  74 6f 32 06 70 72 6f 74  6f 31 00 2b 00 09 08 03  |to2.proto1.+....|
-00000100  04 03 03 03 02 03 01 00  33 00 26 00 24 00 1d 00  |........3.&.$...|
-00000110  20 2f e5 7d a3 47 cd 62  43 15 28 da ac 5f bb 29  | /.}.G.bC.(.._.)|
-00000120  07 30 ff f6 84 af c4 cf  c2 ed 90 99 5f 58 cb 3b  |.0.........._X.;|
-00000130  74                                                |t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 10 00 10  |................|
+000000d0  00 0e 06 70 72 6f 74 6f  32 06 70 72 6f 74 6f 31  |...proto2.proto1|
+000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
+000000f0  26 00 24 00 1d 00 20 2f  e5 7d a3 47 cd 62 43 15  |&.$... /.}.G.bC.|
+00000100  28 da ac 5f bb 29 07 30  ff f6 84 af c4 cf c2 ed  |(.._.).0........|
+00000110  90 99 5f 58 cb 3b 74                              |.._X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 bb 72 d9 b8 e5  |....z...v...r...|
-00000010  0b 80 14 4c 16 9b 86 ec  26 62 f2 f9 00 85 a6 ae  |...L....&b......|
-00000020  44 f4 27 c4 13 67 4a 2e  96 e6 33 20 00 00 00 00  |D.'..gJ...3 ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 c2 2e 95 0c cf  |....z...v.......|
+00000010  63 40 d8 a0 bd 51 27 e2  62 79 72 26 b1 d4 38 5b  |c@...Q'.byr&..8[|
+00000020  50 03 66 d2 2e 8e 46 b7  cf 40 0a 20 00 00 00 00  |P.f...F..@. ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 69  |..+.....3.$... i|
-00000060  d7 31 51 9b e6 1d 98 09  9f 5f 6c 05 10 ba 64 b5  |.1Q......_l...d.|
-00000070  b9 8f b8 c0 2a c1 7f 89  13 ed 04 38 e9 78 43 14  |....*......8.xC.|
-00000080  03 03 00 01 01 17 03 03  00 24 99 f3 d5 db e2 35  |.........$.....5|
-00000090  4b fb b2 05 e6 03 c2 f2  c4 ea 64 d2 e4 d3 17 e7  |K.........d.....|
-000000a0  72 34 e8 b2 d6 61 91 3b  b3 03 ea 1c 33 57 17 03  |r4...a.;....3W..|
-000000b0  03 02 6d 22 da 71 90 42  da 0a 03 52 98 42 e3 71  |..m".q.B...R.B.q|
-000000c0  db 57 e0 9d 70 89 4b 4c  a9 a5 4d 39 02 19 f1 09  |.W..p.KL..M9....|
-000000d0  5a 9c 33 c9 f2 8d 7e 78  c3 b3 ae 1b 2c 7b 73 ef  |Z.3...~x....,{s.|
-000000e0  3a ad d8 51 82 90 bc 6b  0d 6f a6 f0 46 8d 72 29  |:..Q...k.o..F.r)|
-000000f0  ca 84 d8 b1 27 e3 8d 8f  f5 ce f0 f0 d9 2f 9c 71  |....'......../.q|
-00000100  b9 bc 89 af 92 18 d2 c9  07 b2 eb 94 40 42 d2 7a  |............@B.z|
-00000110  c8 be 49 35 b6 b7 f3 b9  64 c1 56 fe fc d8 11 04  |..I5....d.V.....|
-00000120  6c d7 e9 18 98 29 eb d5  6f 59 0d fa 25 85 f7 3c  |l....)..oY..%..<|
-00000130  df 76 d9 52 10 72 59 d6  36 5b b0 54 01 1d ac 9e  |.v.R.rY.6[.T....|
-00000140  9b 86 5f 5b ee 18 74 ec  8e 8b da 0f df 71 50 e2  |.._[..t......qP.|
-00000150  cd 58 98 23 a0 21 94 ac  eb db 3a fe f6 8d aa cc  |.X.#.!....:.....|
-00000160  21 23 e6 35 f7 0e 42 0e  50 48 14 22 f3 83 91 3d  |!#.5..B.PH."...=|
-00000170  73 22 5b 74 e7 e8 d1 b5  ee cd 7e c3 ee 0d 13 a9  |s"[t......~.....|
-00000180  aa ae 0b 12 b0 3a 9d 6f  01 68 27 e4 62 e0 0e 67  |.....:.o.h'.b..g|
-00000190  e4 de 69 74 8d f1 7a 3b  16 bb 1d a0 ad bf c5 4b  |..it..z;.......K|
-000001a0  50 9e b0 dc 08 73 14 99  c9 ad de 04 df 75 09 de  |P....s.......u..|
-000001b0  e4 27 ec 2b 75 79 db 82  8c aa 42 af 40 df 32 0e  |.'.+uy....B.@.2.|
-000001c0  e6 1d 93 d1 00 f7 18 59  43 9c 03 6c f7 bf ac a2  |.......YC..l....|
-000001d0  8b 10 be b1 a8 b6 4e 84  2b c0 ff 87 4d 26 c2 8f  |......N.+...M&..|
-000001e0  63 64 7a 66 a6 12 0b e4  06 9e ff af fe 03 55 c7  |cdzf..........U.|
-000001f0  13 92 22 ec ed 89 76 2d  36 8a 4a 92 f1 a5 b6 ac  |.."...v-6.J.....|
-00000200  d4 19 46 9d f3 e0 52 6d  01 ee bf ab d5 17 c0 33  |..F...Rm.......3|
-00000210  b5 81 e1 81 a2 e9 44 b7  20 0e f4 f0 35 bb d4 8d  |......D. ...5...|
-00000220  bc 83 fc 59 fb 1d 5e e0  c4 4c 9e cc c3 72 b7 3d  |...Y..^..L...r.=|
-00000230  01 a4 f2 df e2 a7 44 d1  f1 20 90 31 53 09 50 eb  |......D.. .1S.P.|
-00000240  80 85 23 52 68 7d b2 51  60 0c 00 87 c3 42 88 07  |..#Rh}.Q`....B..|
-00000250  de 59 fd 3d 68 a3 22 50  cb 67 43 94 02 77 24 6a  |.Y.=h."P.gC..w$j|
-00000260  8d a4 4f 85 7f 19 a0 b5  10 76 2a 85 4c 84 12 e3  |..O......v*.L...|
-00000270  f7 ce b8 30 9f d0 9f 8a  26 42 28 f4 cb f7 c4 c2  |...0....&B(.....|
-00000280  aa 34 c2 72 64 dc 6d 9d  d4 26 2f 14 4d 97 2c 00  |.4.rd.m..&/.M.,.|
-00000290  2d 46 0f 07 9c 3d 76 d4  55 a7 15 13 b2 41 e3 f4  |-F...=v.U....A..|
-000002a0  33 ae 1b 26 68 43 62 de  c1 c2 61 26 08 1b 20 13  |3..&hCb...a&.. .|
-000002b0  bc 58 72 c2 16 fe 4d 2e  68 8b 31 61 ac c9 55 c5  |.Xr...M.h.1a..U.|
-000002c0  3c 5a 77 c2 61 47 4a d6  0d c4 8a bc bb 63 ca ea  |0....8bA.L94..|
-000003e0  ee 48 70 3c 23 65 90 cb  f9 4f 76 72 dd f3 64 83  |.Hp<#e...Ovr..d.|
-000003f0  23 38 79 13 d2 93 57 fb                           |#8y...W.|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 21  |..+.....3.$... !|
+00000060  18 6f 64 73 17 22 b0 11  60 92 ab 01 b3 fb 8a 2d  |.ods."..`......-|
+00000070  27 15 5a 46 ec 6c c3 0c  a7 73 00 b2 7e 9f 4f 14  |'.ZF.l...s..~.O.|
+00000080  03 03 00 01 01 17 03 03  00 24 68 7f 90 b2 66 74  |.........$h...ft|
+00000090  36 f5 fc 65 55 19 c1 78  65 d8 dc 46 fb ad b6 2c  |6..eU..xe..F...,|
+000000a0  89 f3 d1 fd 3e 46 c2 50  01 24 72 2a 64 98 17 03  |....>F.P.$r*d...|
+000000b0  03 02 6d 40 bc da 1a 9c  8b d7 15 24 4f d4 c1 9c  |..m@.......$O...|
+000000c0  8b 3c 8b 51 37 41 46 a8  cb b4 9c 50 c0 be 72 ef  |.<.Q7AF....P..r.|
+000000d0  81 d3 7f ed ec 96 e2 c2  08 0e 7e 23 95 c3 4f 79  |..........~#..Oy|
+000000e0  01 2d 26 81 c1 ba d0 58  61 d8 c5 b7 e7 79 4f 3e  |.-&....Xa....yO>|
+000000f0  d8 c1 07 ae de 6a 1e 78  eb 9d 8c a1 2a 57 9c 56  |.....j.x....*W.V|
+00000100  1f 6c 6e bb 2d 70 6d 55  92 10 3f 39 7e 8a d2 30  |.ln.-pmU..?9~..0|
+00000110  e5 1c 4b df c0 96 d0 de  16 09 c6 34 23 16 54 a8  |..K........4#.T.|
+00000120  f5 0a 1a af 9a 27 60 89  19 6a 3e 69 12 de 76 4c  |.....'`..j>i..vL|
+00000130  88 f2 ca 6c 0b 94 b8 d2  bc 09 f0 d3 86 74 3c 3f  |...l.........tq..|
+00000290  5c 9a b7 6b f2 d0 1e 55  2c 1c ac 5d 21 64 a2 d2  |\..k...U,..]!d..|
+000002a0  a9 dd a8 49 7c 22 26 8e  ca 75 a3 ef 52 42 d0 38  |...I|"&..u..RB.8|
+000002b0  f4 02 60 af ee 33 30 46  90 a5 b3 7a 66 c8 ab 10  |..`..30F...zf...|
+000002c0  3f 76 d1 76 aa 5d da c4  29 ca d7 22 c4 44 b4 e8  |?v.v.]..)..".D..|
+000002d0  64 b6 6d 0f 16 cd d9 e9  62 17 91 64 03 0f 99 8f  |d.m.....b..d....|
+000002e0  c6 97 c8 4b c9 45 c4 31  e4 1f a8 b0 aa 67 02 e7  |...K.E.1.....g..|
+000002f0  20 68 2a 89 f9 b8 e8 ce  93 d0 a3 1b 0d d1 4c 45  | h*...........LE|
+00000300  c2 19 ac aa 87 43 95 ae  c4 56 56 fe 4b 0e af db  |.....C...VV.K...|
+00000310  08 6a 14 8e 8b 7e 64 9d  6d 6e 0f 78 7c e4 f8 51  |.j...~d.mn.x|..Q|
+00000320  17 03 03 00 99 2d 7b fa  e6 dc da 89 93 da 93 91  |.....-{.........|
+00000330  9c 25 08 50 66 eb a7 e4  f1 20 da 33 e5 cd a5 89  |.%.Pf.... .3....|
+00000340  00 a7 47 9c 84 e6 cf 6d  e1 86 02 af fb 54 ff b3  |..G....m.....T..|
+00000350  b5 a4 e1 46 1a 3a 89 ad  f0 c4 63 fe d2 eb bb 6c  |...F.:....c....l|
+00000360  6e cc a9 95 b0 e4 df f8  44 46 16 43 07 d7 8e 6e  |n.......DF.C...n|
+00000370  9b ee 0b 22 7a 23 f4 b8  3e fd fe 99 13 9d 18 bc  |..."z#..>.......|
+00000380  77 99 2f 90 21 a1 5f cc  9f 08 e2 75 44 2f bf 58  |w./.!._....uD/.X|
+00000390  70 f2 95 b2 13 20 f3 ed  51 de e8 02 c6 ca 44 57  |p.... ..Q.....DW|
+000003a0  eb 0b 9f 3e 61 f1 1a 6e  6b 13 f5 14 f3 43 19 f6  |...>a..nk....C..|
+000003b0  7d 46 3a 73 49 2f fd 83  c3 68 c7 ba b4 e8 17 03  |}F:sI/...h......|
+000003c0  03 00 35 67 2b 2b 9b f0  f3 d9 09 c4 01 20 ea 22  |..5g++....... ."|
+000003d0  c9 7c e6 7a ce 3f 7f 84  c2 1f 6e eb d6 ce 85 b8  |.|.z.?....n.....|
+000003e0  2c 3c 9f 77 8b 37 11 dd  64 d1 ae ba 85 50 7e ba  |,<.w.7..d....P~.|
+000003f0  14 a9 05 ff 82 3b e5 7d                           |.....;.}|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 f1 1a 54 a4 02  |..........5..T..|
-00000010  59 df 81 64 1d 06 93 27  55 41 83 40 9c a0 fa 44  |Y..d...'UA.@...D|
-00000020  dd 80 16 6b ed fb 36 ec  0d 49 ee 93 99 84 55 30  |...k..6..I....U0|
-00000030  94 4c 46 7a b9 ba db f0  6a e5 90 ce 58 b1 95 2e  |.LFz....j...X...|
-00000040  17 03 03 00 17 ed 07 24  e5 f8 f3 91 4c f1 05 dc  |.......$....L...|
-00000050  d0 ea a5 c2 cd fb bf 14  45 99 69 53 17 03 03 00  |........E.iS....|
-00000060  13 d7 bf a6 c1 66 5d 7b  00 fb 5a 6e b8 81 99 3a  |.....f]{..Zn...:|
-00000070  30 08 a2 3c                                       |0..<|
+00000000  14 03 03 00 01 01 17 03  03 00 35 39 60 84 ac d0  |..........59`...|
+00000010  b9 47 4b 47 49 af 52 88  3c 12 50 0d 65 46 f7 a1  |.GKGI.R.<.P.eF..|
+00000020  50 39 c5 39 22 b3 45 e6  d3 25 44 a6 bc 3d bc 69  |P9.9".E..%D..=.i|
+00000030  35 1d 61 cf a0 3c 53 77  94 67 66 ae 37 7f 3f 84  |5.a..>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,86 +7,85 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 f9 23 d9 5d 6c  |....z...v...#.]l|
-00000010  ae 6b 63 2a d8 2c a0 27  8e 7b 39 29 35 04 0e a9  |.kc*.,.'.{9)5...|
-00000020  31 f7 a0 c5 77 a7 f3 c5  25 ca 2f 20 00 00 00 00  |1...w...%./ ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 3d 50 78 7e 02  |....z...v..=Px~.|
+00000010  dc 79 3a 32 6b 6a 50 24  90 65 72 5e cd fc 96 18  |.y:2kjP$.er^....|
+00000020  e1 47 21 43 50 5a 32 0f  cf e7 ae 20 00 00 00 00  |.G!CPZ2.... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 ba  |..+.....3.$... .|
-00000060  2b 6b 27 27 14 c0 42 b6  1f bc ad 77 f1 1f 4a b3  |+k''..B....w..J.|
-00000070  42 94 a6 3a 2c 7f e6 aa  72 8e d0 70 e8 0e 53 14  |B..:,...r..p..S.|
-00000080  03 03 00 01 01 17 03 03  00 17 33 bb 8a 47 b0 a9  |..........3..G..|
-00000090  29 d7 bf e4 94 7d 42 8a  19 95 4e d9 7c b7 9a 87  |)....}B...N.|...|
-000000a0  83 17 03 03 02 6d 86 a7  6c 3c 4e 45 95 f6 f6 66  |.....m..l.`.`~.....r|
-000001d0  a4 bc 66 a7 bd 46 83 88  6e 9f b3 db de e7 b3 04  |..f..F..n.......|
-000001e0  62 4c 61 d6 d0 89 84 e4  30 d7 4d a0 61 4f 56 ad  |bLa.....0.M.aOV.|
-000001f0  51 c6 1f 10 01 9e 8d 75  55 fb 89 b8 d0 57 e3 ce  |Q......uU....W..|
-00000200  40 72 41 27 96 e0 5b f4  cc ba d0 ec 8c d4 91 ca  |@rA'..[.........|
-00000210  8f f0 db 11 86 d5 8e 02  6a 1f 29 00 f6 ff 42 a2  |........j.)...B.|
-00000220  7c c9 e7 18 38 39 c9 e4  2b 0e e9 36 40 d3 dd bc  ||...89..+..6@...|
-00000230  f7 e3 7c 2d e9 f0 52 31  16 85 b4 e2 a8 54 cd d0  |..|-..R1.....T..|
-00000240  d6 e2 ed f4 fc 91 9f 50  68 a0 74 af 37 c7 4c bd  |.......Ph.t.7.L.|
-00000250  de 9e c7 78 06 41 6b 62  07 8c 8b f4 f5 ea ab 16  |...x.Akb........|
-00000260  b0 16 b9 ea 06 2c ee 66  d5 da b3 2c 0f 03 d2 f6  |.....,.f...,....|
-00000270  ae f7 11 85 d8 b6 b8 bf  7e a5 c8 ff 0d 41 29 86  |........~....A).|
-00000280  94 e4 32 58 6c 0e 05 47  b8 c5 77 de d1 81 8d 72  |..2Xl..G..w....r|
-00000290  d4 e0 64 66 f7 17 8a 96  88 bf 1c 04 22 40 e0 cf  |..df........"@..|
-000002a0  28 6d f5 4f 89 e2 4a 23  4b 71 e1 15 3b da 45 0b  |(m.O..J#Kq..;.E.|
-000002b0  13 ee 1f 7f 4e 45 3d 8e  d2 f3 bd 23 e7 4c f3 d2  |....NE=....#.L..|
-000002c0  0f 4b 6e 6a 3d 6a f1 26  b7 ae f6 1d 39 73 cd fd  |.Knj=j.&....9s..|
-000002d0  1c c8 c7 45 fa e0 67 d5  2c eb e9 2b 32 8e 65 7b  |...E..g.,..+2.e{|
-000002e0  c5 32 cc e6 01 91 fc fd  92 6e ab 9a 13 f6 63 81  |.2.......n....c.|
-000002f0  e5 b9 25 6d ce 73 39 9e  82 ae 18 89 a5 32 cb d3  |..%m.s9......2..|
-00000300  a3 85 55 f5 cd 26 96 18  91 1c 41 36 69 49 93 f2  |..U..&....A6iI..|
-00000310  aa 05 ab 17 03 03 00 99  9c 1d 79 c5 7b 73 b9 f9  |..........y.{s..|
-00000320  00 2d ea ff c2 8d f6 57  65 7c 92 fa ba 22 18 03  |.-.....We|..."..|
-00000330  69 69 e9 05 e0 74 1a e5  9d f9 30 9f 1c 39 86 30  |ii...t....0..9.0|
-00000340  aa 1b 86 fa 20 26 20 13  ea 8d eb 8b 4e 8b c1 50  |.... & .....N..P|
-00000350  86 ef a3 c5 8e 48 b2 a1  5a ac 05 e7 8f 23 8a 34  |.....H..Z....#.4|
-00000360  ab 1f 8e 90 b1 e5 9a d3  d7 28 90 b6 12 35 dc cb  |.........(...5..|
-00000370  c5 3c 8d 3d fc e2 99 2a  8b f0 6a f4 8b a9 62 3f  |.<.=...*..j...b?|
-00000380  b6 19 29 fd 79 b9 35 72  b0 89 59 ab 78 c6 c9 f0  |..).y.5r..Y.x...|
-00000390  68 bc 0d f5 9a 45 dd 4f  d2 40 75 19 47 af e9 6f  |h....E.O.@u.G..o|
-000003a0  56 ec 73 ce cd 19 31 c0  39 08 b1 63 e0 ac d4 49  |V.s...1.9..c...I|
-000003b0  e5 17 03 03 00 35 0d 34  de e9 22 e4 56 18 4a 33  |.....5.4..".V.J3|
-000003c0  d1 05 c4 d4 f2 64 24 62  d7 da 6a 8e 34 3b 51 13  |.....d$b..j.4;Q.|
-000003d0  27 69 88 37 4b ba 29 9d  c5 78 af 62 2b 62 6e 5a  |'i.7K.)..x.b+bnZ|
-000003e0  28 7a 93 c5 9a f3 84 1d  50 9a 94                 |(z......P..|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 cd  |..+.....3.$... .|
+00000060  e6 a0 65 6b 1c 9e 5c f0  b7 f9 82 8e 37 d1 c4 35  |..ek..\.....7..5|
+00000070  31 c1 3f df 4a 70 33 ba  38 d9 3f 74 0c c2 61 14  |1.?.Jp3.8.?t..a.|
+00000080  03 03 00 01 01 17 03 03  00 17 63 c3 02 95 17 f4  |..........c.....|
+00000090  a8 76 8d 54 ad 3c 10 c7  cc e8 08 13 d6 9b 0b 0f  |.v.T.<..........|
+000000a0  db 17 03 03 02 6d 0f ec  8d 0d e5 1a 85 02 3f 92  |.....m........?.|
+000000b0  44 09 ac e6 da 2d c8 d7  14 68 00 9d 22 bf 05 1d  |D....-...h.."...|
+000000c0  cd 07 b5 8b b9 84 3f cf  cc c5 48 40 00 2e e1 c9  |......?...H@....|
+000000d0  0b 41 6d 39 cb 05 00 d6  7a 10 4a ba 96 e1 96 a9  |.Am9....z.J.....|
+000000e0  70 d8 20 76 2f d2 70 83  cb a0 d1 72 43 db 09 cd  |p. v/.p....rC...|
+000000f0  2d e5 89 11 e8 81 15 13  dd 29 2a c8 88 4a d8 73  |-........)*..J.s|
+00000100  35 3d 8e 8a 03 ca ed 32  a9 16 bb 71 88 d5 5f a1  |5=.....2...q.._.|
+00000110  1b ec ee 9e 3d 8c f4 d0  c2 5b 72 84 3c 75 aa de  |....=....[r......).@..|
+00000130  3c f4 32 90 c0 25 b7 f0  fc 6b 16 c1 ab 80 69 79  |<.2..%...k....iy|
+00000140  5e dd 95 5a ba e4 5a 68  64 a6 44 f5 a2 3a d6 30  |^..Z..Zhd.D..:.0|
+00000150  7e b1 27 b1 79 44 ef 79  95 51 75 02 24 2c ea ab  |~.'.yD.y.Qu.$,..|
+00000160  d5 e1 fd aa 81 55 89 cf  bc 9c 11 2b 0b 4a 99 9f  |.....U.....+.J..|
+00000170  50 93 68 a1 c8 79 3d d8  aa d8 54 e3 d5 1a 97 90  |P.h..y=...T.....|
+00000180  33 87 a9 70 1d 9d ba 78  d0 87 8a 98 6f 1b 1e b0  |3..p...x....o...|
+00000190  e8 92 78 df 21 61 88 36  fa 14 4b c9 b1 a4 93 88  |..x.!a.6..K.....|
+000001a0  b4 26 9a 13 1b 8f 6c 84  bc b1 78 a8 a1 e7 64 4b  |.&....l...x...dK|
+000001b0  d4 56 37 b6 d1 80 6d 8d  0f c2 2f 0c 0b 9e 42 8e  |.V7...m.../...B.|
+000001c0  37 e0 9b 73 e4 ab cf 24  43 86 bc d0 40 fd db 4a  |7..s...$C...@..J|
+000001d0  c1 f6 55 56 e9 54 5c c7  3c 17 36 44 7b 99 7e 03  |..UV.T\.<.6D{.~.|
+000001e0  48 f7 a9 cc 4d b9 b4 bf  09 dd 96 37 8c b5 d5 f0  |H...M......7....|
+000001f0  bd af 19 0e 82 6c 5d b6  96 ca 98 a2 56 d3 68 f2  |.....l].....V.h.|
+00000200  94 cd 7a 94 8d b3 97 16  03 3d 6a 94 5d 66 32 5d  |..z......=j.]f2]|
+00000210  11 28 d9 7b c1 8e b1 c4  ec b7 54 94 3b 80 f9 b3  |.(.{......T.;...|
+00000220  9d 2d 74 3c 02 55 a0 4a  02 b7 61 19 b0 a2 e6 44  |.-t<.U.J..a....D|
+00000230  3e c8 81 e3 a4 18 d7 4c  16 d2 fb e3 90 2c 61 71  |>......L.....,aq|
+00000240  a0 82 28 48 de 7c 7c bd  ba 27 85 e1 fd c9 df ac  |..(H.||..'......|
+00000250  b2 61 0f 80 f3 86 31 8f  c1 a3 dc b6 43 98 c9 0e  |.a....1.....C...|
+00000260  73 dd 1d cf 61 f6 25 23  44 ca 5a 4c 12 6c bb 35  |s...a.%#D.ZL.l.5|
+00000270  32 c4 32 0d cc 8c 11 b9  4a ee 88 92 d6 27 d4 a8  |2.2.....J....'..|
+00000280  25 59 1e fe ba 41 63 50  1e b1 e2 c5 75 95 7d 56  |%Y...AcP....u.}V|
+00000290  60 ed 81 d0 e7 12 05 e7  0f b4 5d 6f 27 98 76 72  |`.........]o'.vr|
+000002a0  e7 8a e1 ff 5d 6b 29 9f  75 24 a5 fd 6d 1f bc 58  |....]k).u$..m..X|
+000002b0  f8 b8 67 d1 b0 21 25 f1  09 c7 f9 41 f5 85 1b eb  |..g..!%....A....|
+000002c0  56 f6 14 83 bb 08 d5 3e  ed 22 e1 c5 9c 14 cc de  |V......>."......|
+000002d0  d3 45 e1 0e e3 cb 61 b5  ab f6 03 41 bc 71 5d 17  |.E....a....A.q].|
+000002e0  99 c6 8f 13 41 f8 78 e8  da 3d 40 1c 1a 47 a9 b2  |....A.x..=@..G..|
+000002f0  e7 22 90 2f d8 8f 6f 0d  36 02 b1 36 fa 6d 26 6f  |."./..o.6..6.m&o|
+00000300  82 e2 54 74 a0 26 3c 0c  57 bb d7 01 ff ee 6f 16  |..Tt.&<.W.....o.|
+00000310  63 92 00 17 03 03 00 99  ea 68 e4 08 10 2d 6f b6  |c........h...-o.|
+00000320  a2 f8 f5 03 35 00 63 c8  da 23 4c 96 b8 2a 5c f5  |....5.c..#L..*\.|
+00000330  9d 24 6f 5a 5b c3 aa d2  df d9 16 b6 9a 91 79 39  |.$oZ[.........y9|
+00000340  18 35 65 28 80 97 fe 76  26 79 45 80 4c 8a 7c cc  |.5e(...v&yE.L.|.|
+00000350  a2 36 1a 8a ad aa f3 06  08 1f b7 4a 9b 22 7f 37  |.6.........J.".7|
+00000360  62 3a ae 13 c0 f4 22 05  6f fc 92 5a e0 ed f1 5b  |b:....".o..Z...[|
+00000370  c6 6b 4f 18 83 a6 39 a7  5c 1c 53 32 08 76 25 03  |.kO...9.\.S2.v%.|
+00000380  20 d5 47 57 76 06 38 4e  bd b8 dd 7f 0e 37 b3 4e  | .GWv.8N.....7.N|
+00000390  f1 f3 b1 98 d4 f0 d6 00  ea 6a e9 ec a4 b0 fd 20  |.........j..... |
+000003a0  2d 67 20 c8 ef 9f a1 97  00 cd 15 c2 8e c2 ba 46  |-g ............F|
+000003b0  76 17 03 03 00 35 d0 f3  18 d0 71 4c 66 8c 40 ef  |v....5....qLf.@.|
+000003c0  57 92 f3 56 5a 42 1e 4c  e6 13 5a cc ab 26 90 6a  |W..VZB.L..Z..&.j|
+000003d0  9b ca 49 b0 81 ec 38 30  44 27 5a fa ac d6 1f 5c  |..I...80D'Z....\|
+000003e0  bc 64 4b 0b c3 69 b2 5b  ef 7f 4a                 |.dK..i.[..J|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 4f 9c 2d 01 8b  |..........5O.-..|
-00000010  4a 31 16 77 b4 f2 2b 40  cb 8e d5 7d 93 bd 66 59  |J1.w..+@...}..fY|
-00000020  f8 f1 f4 45 69 fd f7 9b  88 5a e5 0a 40 67 e2 17  |...Ei....Z..@g..|
-00000030  72 de b0 1d 02 ba b5 a7  58 35 4a 3e b6 2a 0c e8  |r.......X5J>.*..|
-00000040  17 03 03 00 17 4a 50 b7  f1 94 a4 64 9e a2 95 0a  |.....JP....d....|
-00000050  6c f6 93 7f d6 6d 12 10  7a 69 8a d2 17 03 03 00  |l....m..zi......|
-00000060  13 10 60 24 3f 6e c9 ee  c6 27 50 72 5e 19 22 e0  |..`$?n...'Pr^.".|
-00000070  76 12 45 e5                                       |v.E.|
+00000000  14 03 03 00 01 01 17 03  03 00 35 ef 3b a2 4d 0f  |..........5.;.M.|
+00000010  69 53 f2 a3 80 a0 06 a9  99 a9 15 1e bc 8b 4a 08  |iS............J.|
+00000020  de 87 e7 b6 10 d6 b3 fc  89 f8 24 f9 2d 04 a1 fd  |..........$.-...|
+00000030  c2 ce eb 14 e9 df bf ab  80 8e f1 00 53 60 88 82  |............S`..|
+00000040  17 03 03 00 17 22 aa a9  e0 1f f8 55 03 22 9b 0f  |.....".....U."..|
+00000050  b2 6d 73 be 10 5d 6c c6  d8 0e 5e 0d 17 03 03 00  |.ms..]l...^.....|
+00000060  13 45 f2 81 7f ea ae 0d  77 bb d4 05 1e 55 af a8  |.E......w....U..|
+00000070  3e 0d 10 0f                                       |>...|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
index 6611cdfed22fae..db13bd638760f2 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
+++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,135 +7,134 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 ea 4e 78 a5 f4  |....z...v...Nx..|
-00000010  71 78 37 5b 2c e4 69 b2  00 4d 49 8c 8b 86 4c 80  |qx7[,.i..MI...L.|
-00000020  f9 db 03 3f cc 1e 42 f9  87 ff 7b 20 00 00 00 00  |...?..B...{ ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 37 0c 23 2f 26  |....z...v..7.#/&|
+00000010  2a b0 8d 47 84 3b 9b 9c  7e 0f 0a cd 77 39 6c c2  |*..G.;..~...w9l.|
+00000020  7b c0 56 a8 9d 07 a0 ec  b6 e5 79 20 00 00 00 00  |{.V.......y ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 f1  |..+.....3.$... .|
-00000060  bf 65 1e fd e0 5d 1b ca  02 b5 9e 3f a8 82 e0 5a  |.e...].....?...Z|
-00000070  97 eb af b5 f1 f7 77 3f  46 a8 66 93 de a8 39 14  |......w?F.f...9.|
-00000080  03 03 00 01 01 17 03 03  00 17 16 a7 f6 48 b9 11  |.............H..|
-00000090  59 75 3d d8 cf eb ba 72  6c f7 0d 26 50 ab 2d 2a  |Yu=....rl..&P.-*|
-000000a0  61 17 03 03 00 42 00 0f  78 f4 5a 62 c5 56 bd f5  |a....B..x.Zb.V..|
-000000b0  4a df d3 78 76 bd 90 71  49 69 8a b3 60 5b 24 8b  |J..xv..qIi..`[$.|
-000000c0  45 fb c7 e0 ff 04 d8 7b  c6 1f 93 c9 f9 b8 0d 38  |E......{.......8|
-000000d0  53 d1 2e 95 99 32 52 2e  45 b2 11 08 45 c7 bc 64  |S....2R.E...E..d|
-000000e0  6a c2 32 db 70 96 77 6f  17 03 03 02 6d ba 3e 97  |j.2.p.wo....m.>.|
-000000f0  ea d7 dd c1 c5 39 9a c4  b1 eb 8b df 35 57 43 35  |.....9......5WC5|
-00000100  31 7a 4c 71 ab 57 79 80  f9 48 96 67 5f 3b fe 98  |1zLq.Wy..H.g_;..|
-00000110  0b 5d d0 ce 8c 0c 5a 03  28 8f 64 b4 3e 74 75 51  |.]....Z.(.d.>tuQ|
-00000120  81 b3 09 a7 8e 33 45 92  49 72 91 b7 2c 45 68 5c  |.....3E.Ir..,Eh\|
-00000130  ee 27 e8 5b fd b0 80 e3  43 35 2f a2 bd e5 cf d6  |.'.[....C5/.....|
-00000140  c3 fc 43 03 1e aa c9 c4  67 db ef 0c c3 aa 46 18  |..C.....g.....F.|
-00000150  39 69 31 26 7f 0a 7a b2  e7 c4 cb 09 3a f1 8e a0  |9i1&..z.....:...|
-00000160  05 70 87 a9 12 c6 f2 a1  25 87 72 0a 2d fb d5 51  |.p......%.r.-..Q|
-00000170  ce 93 8e f8 08 0e 86 90  04 00 9b 76 fd 57 23 cb  |...........v.W#.|
-00000180  bc 78 23 07 8a 35 92 6e  d6 cd f5 b5 2e e1 8f 33  |.x#..5.n.......3|
-00000190  7a bb 61 54 65 4f 4d 12  4b ca db 19 4b 30 6e 2c  |z.aTeOM.K...K0n,|
-000001a0  56 62 b5 32 7a 98 b6 a4  10 98 5a 16 6b 26 8e 7c  |Vb.2z.....Z.k&.||
-000001b0  e0 88 77 a6 20 60 c9 fb  c5 e2 66 c3 6d 0d df dd  |..w. `....f.m...|
-000001c0  21 22 10 da 88 24 21 92  74 3b d8 92 c0 ec 2f 57  |!"...$!.t;..../W|
-000001d0  79 d7 42 bd d7 b0 e0 23  d2 a0 45 7f 2a 2a ff df  |y.B....#..E.**..|
-000001e0  a4 61 53 ec 44 e2 3a 7a  06 15 8a ce 02 84 e7 78  |.aS.D.:z.......x|
-000001f0  9b ef 15 0e 84 16 fe 0f  dd 36 de 0f 69 14 e4 35  |.........6..i..5|
-00000200  90 e4 a0 15 a6 97 e5 c9  a1 3c ed 79 c6 03 ae 39  |.........<.y...9|
-00000210  f2 36 1e ca 20 4f 20 59  e6 6f c7 15 ba 90 ac 4a  |.6.. O Y.o.....J|
-00000220  11 ad 3e f5 48 df 94 fe  f8 48 2f 12 25 01 6c 9a  |..>.H....H/.%.l.|
-00000230  e6 ee 41 7b 13 4c 2f cc  3a 2d 8d b8 e7 d5 62 88  |..A{.L/.:-....b.|
-00000240  88 5d d4 6e c4 64 c5 32  0a e7 86 08 64 2c 0a 11  |.].n.d.2....d,..|
-00000250  8e 51 63 f9 81 30 00 b1  29 fa b8 1c ab 87 88 22  |.Qc..0..)......"|
-00000260  f0 ef 79 04 8c 85 78 df  72 6c 99 d6 c7 3a 9f 2a  |..y...x.rl...:.*|
-00000270  6d c6 24 05 e7 e5 d7 d0  c7 e5 7c 87 50 f9 b7 69  |m.$.......|.P..i|
-00000280  6d 1f 39 77 5d 4c f2 98  35 f7 07 b6 30 0d d6 25  |m.9w]L..5...0..%|
-00000290  40 cb a4 2d b2 f1 22 ca  26 5d 92 22 97 0a 65 a9  |@..-..".&]."..e.|
-000002a0  a0 46 58 be 0d af a1 1c  da c8 bf 98 28 72 ea ee  |.FX.........(r..|
-000002b0  46 f9 c0 0d b3 f1 11 12  5f b7 69 75 ea dd 60 d0  |F......._.iu..`.|
-000002c0  53 51 01 ec 7c ff ef 41  68 04 ec a4 6b 51 bb 89  |SQ..|..Ah...kQ..|
-000002d0  8b 8d a2 89 05 6f 78 81  16 f8 7a c2 f6 c3 0d ef  |.....ox...z.....|
-000002e0  b3 12 e2 57 54 95 a6 cd  5d 04 32 88 70 f9 db db  |...WT...].2.p...|
-000002f0  b3 45 75 32 6f ac 9a fa  ad 54 e5 a5 82 ae 3e 73  |.Eu2o....T....>s|
-00000300  2d 07 f4 48 83 e2 10 7d  cb 2f 4c 18 94 75 37 24  |-..H...}./L..u7$|
-00000310  cd 13 dc 3a 56 93 e8 80  a3 ba de b1 0d 14 79 48  |...:V.........yH|
-00000320  08 69 a6 f3 2e 9f 7a 78  6e 9c de 16 ba 73 0b a6  |.i....zxn....s..|
-00000330  f2 6c 04 e6 e6 89 3d 46  7d db a4 8f 9a e7 5d 0e  |.l....=F}.....].|
-00000340  b9 6b 05 59 4d 4d e9 48  1a 18 e9 59 7b 56 70 d6  |.k.YMM.H...Y{Vp.|
-00000350  0f fc c2 93 31 03 fa ad  b4 c9 17 03 03 00 99 62  |....1..........b|
-00000360  c5 b8 11 10 72 af 5b 36  7b 4b 86 83 05 1f 5a c5  |....r.[6{K....Z.|
-00000370  66 7b b6 ac 30 8d c0 03  64 ec 29 5d 60 e9 e9 9d  |f{..0...d.)]`...|
-00000380  6d 58 3e 55 7e 19 a3 59  f5 8b ca 1a f0 c8 ca 1b  |mX>U~..Y........|
-00000390  c6 ed 7f d7 70 fb 4b a5  6a 96 66 ce 4c 96 d1 b4  |....p.K.j.f.L...|
-000003a0  de 99 e2 31 4a 88 64 51  7b 73 60 bb 5c 46 9b b7  |...1J.dQ{s`.\F..|
-000003b0  9f d8 97 de 03 06 f3 3e  34 8b 75 43 ce cd 9a 12  |.......>4.uC....|
-000003c0  1e 27 b5 28 5e 8f b6 04  d2 02 19 02 02 72 85 46  |.'.(^........r.F|
-000003d0  1c cb 5e 63 09 e6 ba 81  69 29 97 5f 31 1e 8f f5  |..^c....i)._1...|
-000003e0  1a ed 3b 1e 97 83 bf ee  1f 09 f4 f7 be 32 c7 bc  |..;..........2..|
-000003f0  b6 7e 70 b9 32 4b 07 99  17 03 03 00 35 67 1c 72  |.~p.2K......5g.r|
-00000400  de 27 25 26 1b 12 b2 9a  a3 38 5c a7 f7 13 a4 1e  |.'%&.....8\.....|
-00000410  bf f9 7f 1d 57 af ff 2f  89 4b 75 fc 23 c5 47 00  |....W../.Ku.#.G.|
-00000420  cd b7 b6 89 af 4e f0 17  e9 e6 31 cd fb b0 31 19  |.....N....1...1.|
-00000430  73 61                                             |sa|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 5e  |..+.....3.$... ^|
+00000060  9a da 1d cb 90 03 f2 d2  23 e3 54 fc 3d 9b 8c 92  |........#.T.=...|
+00000070  42 df cf 7a 3d 47 3f 66  a4 a6 7a 07 44 76 5c 14  |B..z=G?f..z.Dv\.|
+00000080  03 03 00 01 01 17 03 03  00 17 53 54 e6 de 6a af  |..........ST..j.|
+00000090  c2 d9 b8 39 b6 ae 3e 9f  54 60 e1 fa 29 5a fb 16  |...9..>.T`..)Z..|
+000000a0  20 17 03 03 00 42 f4 a5  7f e3 e7 ba 6a 88 e1 f2  | ....B......j...|
+000000b0  fd 25 3e ba 05 00 29 77  ff 69 6e e0 ac 50 99 50  |.%>...)w.in..P.P|
+000000c0  ac 1e bd 8c 52 e6 28 5d  67 bb bb 20 61 69 5b 97  |....R.(]g.. ai[.|
+000000d0  7f 29 79 97 bf 13 24 25  ad 3b 01 78 c4 a4 4e 9a  |.)y...$%.;.x..N.|
+000000e0  06 d6 20 da 63 27 97 8d  17 03 03 02 6d 79 7e 9e  |.. .c'......my~.|
+000000f0  01 98 a9 7c ba 63 43 2b  21 b1 bc 2c b2 17 c2 35  |...|.cC+!..,...5|
+00000100  76 f2 30 01 69 45 d4 56  e0 5a 2c 62 aa 6f a8 1f  |v.0.iE.V.Z,b.o..|
+00000110  b8 31 df be 6f 3f 60 16  dc 61 5c 9f 99 a9 63 7d  |.1..o?`..a\...c}|
+00000120  7e 2b d2 ae 02 46 12 db  be 51 9e 15 dd 1c 96 b0  |~+...F...Q......|
+00000130  74 69 20 c0 e1 78 46 01  a6 23 72 28 ba c7 a3 48  |ti ..xF..#r(...H|
+00000140  1e dc 0b 57 c9 b4 39 88  3d 39 c7 6c 38 c7 3a 29  |...W..9.=9.l8.:)|
+00000150  a4 45 79 10 04 61 cd db  df 5b 88 c1 35 4b 38 ea  |.Ey..a...[..5K8.|
+00000160  6d 72 57 9f e0 2e 37 61  3d c8 aa b2 25 a6 11 5c  |mrW...7a=...%..\|
+00000170  09 e2 3a 17 d3 c5 37 2f  a7 b4 73 fe e2 61 df 1d  |..:...7/..s..a..|
+00000180  cd 4f 72 4a 67 c3 c7 e2  53 78 61 78 2c 37 44 12  |.OrJg...Sxax,7D.|
+00000190  4d 0e 8c 14 0b de 3b a4  cf ad 8f d4 74 61 77 4b  |M.....;.....tawK|
+000001a0  36 2d f2 8f 68 95 38 9d  e2 9f cf cc 03 15 89 b9  |6-..h.8.........|
+000001b0  96 c4 47 e5 2f 65 0a 5c  5d 8f 5c 64 9d c8 76 d2  |..G./e.\].\d..v.|
+000001c0  5d a7 90 4d f5 84 2d 31  2d 6c bd ee 0d 45 2b 50  |]..M..-1-l...E+P|
+000001d0  79 f7 8c 34 40 f9 bc f4  38 b3 56 a9 6b ca 54 50  |y..4@...8.V.k.TP|
+000001e0  19 f8 9a 73 74 9b 0a 92  ee 22 53 05 01 38 43 3a  |...st...."S..8C:|
+000001f0  49 fe 2d e9 39 c1 76 b0  04 df 8a 3d cc fc 9b 84  |I.-.9.v....=....|
+00000200  cd 22 ba 40 24 69 93 b9  c5 b3 ed fd ad 94 1b 83  |.".@$i..........|
+00000210  b5 07 a9 e7 94 14 4b c1  59 89 78 56 03 28 29 c3  |......K.Y.xV.().|
+00000220  a8 a4 96 14 5a 51 9a 50  f9 34 3c 5a 76 8f 74 68  |....ZQ.P.4..K..k*D?.#..U|
+000002f0  a0 11 51 04 0b 82 02 d9  24 85 13 2e d1 29 44 9a  |..Q.....$....)D.|
+00000300  15 7f a4 1b c4 f5 36 44  88 9a 6e 5a 1e 2f 14 fa  |......6D..nZ./..|
+00000310  d0 e7 fc 6a fa e5 f3 4a  55 20 73 9b e4 73 2e 47  |...j...JU s..s.G|
+00000320  88 25 b7 69 d9 28 fe 50  8c fc f2 94 29 84 c4 7f  |.%.i.(.P....)...|
+00000330  d6 b2 eb 28 fa 51 8e ff  00 09 35 d3 b2 32 3a c6  |...(.Q....5..2:.|
+00000340  bb 91 a7 c4 b7 88 df 4b  f7 09 ef e7 e1 92 60 cd  |.......K......`.|
+00000350  de 34 4f 39 ee b8 ce 50  6a b9 17 03 03 00 99 64  |.4O9...Pj......d|
+00000360  76 ab 48 eb 68 7d a6 68  60 aa c2 93 bd 31 81 c8  |v.H.h}.h`....1..|
+00000370  b6 15 ba d1 54 94 04 1b  4b 29 86 e1 12 84 ad d5  |....T...K)......|
+00000380  ba eb 4a 7a 7a a8 56 41  04 8c 84 c7 83 46 8c 50  |..Jzz.VA.....F.P|
+00000390  c4 e3 02 d0 28 a4 fe 24  c4 b8 96 13 4f 87 27 ec  |....(..$....O.'.|
+000003a0  6b e3 84 4b 97 13 65 fa  1e 5e 9d ac 85 ea a0 3d  |k..K..e..^.....=|
+000003b0  67 96 e5 ec 88 84 6b 79  d9 16 55 c1 1c 72 17 aa  |g.....ky..U..r..|
+000003c0  9b 49 13 86 d4 39 0d 2a  c8 88 b3 5f f5 11 cb 5f  |.I...9.*..._..._|
+000003d0  bd 22 57 2c bc c1 01 72  b9 c3 f5 d9 a2 3b 8e ff  |."W,...r.....;..|
+000003e0  44 b2 82 b6 5b 35 75 b5  7a 50 40 81 4e a7 2d 40  |D...[5u.zP@.N.-@|
+000003f0  21 28 d9 c4 d9 e5 07 e1  17 03 03 00 35 23 ab b2  |!(..........5#..|
+00000400  60 56 47 6a fe cb 0e 54  22 d5 8f 29 0a 34 e6 82  |`VGj...T"..).4..|
+00000410  5b 10 35 ac 93 97 92 6b  39 5d b8 01 54 9c 86 b0  |[.5....k9]..T...|
+00000420  41 70 52 88 92 cf dd b7  f8 5d d1 18 e1 1f 78 53  |ApR......]....xS|
+00000430  e4 43                                             |.C|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 1e e9 c3 0a e9 35  |...............5|
-00000010  c0 d7 d8 1e 01 13 31 2c  39 0c 31 57 df f2 8d 7f  |......1,9.1W....|
-00000020  ca 2e 8c a0 63 60 e2 61  c6 37 8f cf 66 62 e7 d6  |....c`.a.7..fb..|
-00000030  3d 89 6b 3b bd 1c 45 ec  62 a5 1c b3 86 16 bc 03  |=.k;..E.b.......|
-00000040  57 9e 2b cd 31 d4 4d ad  57 96 12 12 19 ce 61 14  |W.+.1.M.W.....a.|
-00000050  d6 1f 7a d1 c8 9b d4 9e  18 cf 1c f7 d0 ca 84 bb  |..z.............|
-00000060  8e 93 85 97 4b 53 68 3d  f6 45 76 e0 a7 42 df 6a  |....KSh=.Ev..B.j|
-00000070  96 04 b9 9e 03 97 bb 57  bf 7f 9c 27 68 ba 04 49  |.......W...'h..I|
-00000080  a7 c9 a3 f3 77 83 1f 15  0e 02 05 b5 8c e4 a6 ed  |....w...........|
-00000090  f8 65 5b bb a4 65 08 a1  a3 34 2a 71 66 6c 2e c8  |.e[..e...4*qfl..|
-000000a0  e2 5b 08 ca 59 91 da 07  14 61 17 b7 19 28 00 33  |.[..Y....a...(.3|
-000000b0  d9 0c 45 df d8 74 83 2e  9b 99 c7 35 cd f4 de 53  |..E..t.....5...S|
-000000c0  b0 df 5c 8b 15 b0 e0 81  77 a5 5d d5 33 40 51 60  |..\.....w.].3@Q`|
-000000d0  09 36 4f b6 6f ce 95 2b  d1 38 88 33 e0 13 a0 c1  |.6O.o..+.8.3....|
-000000e0  5f 2c 15 77 56 d1 16 09  9a 78 5c 6f 8c 93 c3 44  |_,.wV....x\o...D|
-000000f0  54 04 b4 d3 23 31 ff 61  74 e5 09 3a d3 9b f1 2f  |T...#1.at..:.../|
-00000100  de f4 a9 0b b8 9d ca 17  2c 3f d5 2b dd c0 9e 07  |........,?.+....|
-00000110  48 50 6a 51 72 be 92 10  1a 91 b5 2d 39 76 10 a4  |HPjQr......-9v..|
-00000120  42 63 31 df ce 31 9a 5c  0d ee 6e 55 c0 ba 44 9f  |Bc1..1.\..nU..D.|
-00000130  e4 75 77 0f 88 6d 1d 24  9f 1c a0 12 14 4c ce 68  |.uw..m.$.....L.h|
-00000140  24 a5 aa f2 f2 c5 f4 4f  a9 c7 e0 dd 5c 6b 4c 53  |$......O....\kLS|
-00000150  b5 26 8b e2 a4 af e3 13  77 0a fc dd 2b 56 fa a2  |.&......w...+V..|
-00000160  46 7f 9a 11 c6 a0 4c b6  36 29 93 9f 83 99 13 ad  |F.....L.6)......|
-00000170  a0 62 9a ef 42 d0 dd 49  fe ba e4 fd fd 09 4b d4  |.b..B..I......K.|
-00000180  31 6e d9 a5 0e 4d ac 8c  90 7c 26 2b 6b 1a cb 55  |1n...M...|&+k..U|
-00000190  47 53 47 e2 d4 a1 d8 2e  5d 9b 36 75 f0 a4 8a 39  |GSG.....].6u...9|
-000001a0  88 07 c8 ed 75 40 fd 72  0e 57 02 a6 bf 8a 64 0a  |....u@.r.W....d.|
-000001b0  98 8a 1c f4 d3 3d c4 af  7d 97 6e b7 e0 f6 d8 10  |.....=..}.n.....|
-000001c0  17 0b d1 5c f9 41 c9 5e  5c 8a 38 dd 66 b3 e9 74  |...\.A.^\.8.f..t|
-000001d0  41 2a bd 2d f8 6a 27 57  da ef d6 ca 70 49 c6 e2  |A*.-.j'W....pI..|
-000001e0  94 ef 1e c6 57 a0 c8 fc  d1 05 4f 65 c1 71 e4 ab  |....W.....Oe.q..|
-000001f0  44 49 f3 e3 6d b1 f4 5a  69 e7 70 30 b5 81 19 3a  |DI..m..Zi.p0...:|
-00000200  06 33 ef a5 bd 81 8c 3c  7b 2f 9f 41 a5 7d a8 5f  |.3.....<{/.A.}._|
-00000210  3b 3d 95 6e 04 a8 5f 2a  c1 de 6e e4 14 17 91 36  |;=.n.._*..n....6|
-00000220  9d 57 9c 34 1a 7d c8 c3  42 17 03 03 00 a3 a0 20  |.W.4.}..B...... |
-00000230  06 7e 90 c8 0a b2 db 90  28 38 8f 42 12 89 1d 21  |.~......(8.B...!|
-00000240  04 b3 a6 7b 8c 63 60 49  33 4a 70 4b 1a 97 90 51  |...{.c`I3JpK...Q|
-00000250  d2 13 6e 56 9a 1d 41 9c  65 19 31 43 56 96 e2 50  |..nV..A.e.1CV..P|
-00000260  77 17 67 6e df 3b e1 43  22 fe 0c 49 74 ff b0 e9  |w.gn.;.C"..It...|
-00000270  5c f2 66 4e a3 e5 ac 02  1c 69 11 ce de a1 d4 6b  |\.fN.....i.....k|
-00000280  1c 46 97 02 7e 81 d8 29  78 42 82 5e b7 e2 31 02  |.F..~..)xB.^..1.|
-00000290  fb 74 e2 a6 5e 29 f1 28  cf 8a 9c bd f8 a0 09 45  |.t..^).(.......E|
-000002a0  67 7e d7 7d 91 8d fe 43  03 92 16 b1 67 cc 7a 32  |g~.}...C....g.z2|
-000002b0  7e 3a 88 fc 77 36 b5 69  07 09 a0 1c 5c 76 a7 68  |~:..w6.i....\v.h|
-000002c0  93 1a 35 20 f6 c1 20 c7  8f de c9 da 81 25 7a 08  |..5 .. ......%z.|
-000002d0  e0 17 03 03 00 35 fa 5b  68 55 45 ee dd d6 a2 cb  |.....5.[hUE.....|
-000002e0  09 a7 21 23 43 9c c4 ff  1c d6 66 4c ce e1 bd a9  |..!#C.....fL....|
-000002f0  77 22 0b b0 d4 ad f9 23  a7 1c 0e 63 27 36 16 c6  |w".....#...c'6..|
-00000300  a2 f8 00 ef 36 22 89 a7  d6 76 da 17 03 03 00 17  |....6"...v......|
-00000310  ca d3 97 3a 7d cc a0 95  02 4a a8 d8 dd 6d 26 64  |...:}....J...m&d|
-00000320  92 be 64 86 00 d9 bf 17  03 03 00 13 18 1e 4f 7b  |..d...........O{|
-00000330  f9 1a 63 8a 50 6a ee 81  07 76 53 a9 95 ea df     |..c.Pj...vS....|
+00000000  14 03 03 00 01 01 17 03  03 02 1e 19 c5 11 9d 64  |...............d|
+00000010  8f f5 a9 21 53 fa cc 91  67 30 39 c0 77 d6 35 7b  |...!S...g09.w.5{|
+00000020  b8 a3 ae 44 8a 9a b1 68  5a 20 72 a6 ae 3a 1b 9f  |...D...hZ r..:..|
+00000030  03 eb d9 ed 91 20 49 ba  88 39 99 1c 4e 3a 2b 1b  |..... I..9..N:+.|
+00000040  42 b7 a3 97 a3 a3 6c 7e  3b 4c c1 74 dc 71 e6 14  |B.....l~;L.t.q..|
+00000050  6c 5a 36 12 cb 87 a6 75  ce b3 e3 a8 f2 c8 36 12  |lZ6....u......6.|
+00000060  3d c8 b8 2a 36 e4 40 38  3e 20 1d de 2a 31 b1 04  |=..*6.@8> ..*1..|
+00000070  86 cb 9b c1 f3 fc 01 67  7e 40 0b b8 c4 fa 8f a0  |.......g~@......|
+00000080  a7 5b 24 43 a9 d3 eb 55  99 ec 0b 19 cb ec 19 97  |.[$C...U........|
+00000090  c8 0f c0 5e 8c b2 b1 93  80 70 7c 0b aa 7c 6c 44  |...^.....p|..|lD|
+000000a0  1a 11 dc bd 0d 97 18 f3  ca c6 50 68 ca 77 ab 18  |..........Ph.w..|
+000000b0  79 a9 8b 73 13 48 90 c3  4a cd ae f2 60 ea 0c 20  |y..s.H..J...`.. |
+000000c0  eb ad 84 fb 2f 01 7e 2c  f6 7d ea da 22 59 5f 88  |..../.~,.}.."Y_.|
+000000d0  ff 10 19 81 d5 29 1b 0f  36 7b 84 66 eb bf e3 f9  |.....)..6{.f....|
+000000e0  1c 68 fa 03 93 3e ba c6  58 e2 a9 57 94 8c a8 29  |.h...>..X..W...)|
+000000f0  e2 f9 4b 6d 85 01 e8 f2  11 a2 04 38 73 8e 69 49  |..Km.......8s.iI|
+00000100  4b 7f ca be aa 5f 50 ac  82 16 e6 92 78 87 13 f4  |K...._P.....x...|
+00000110  fc 21 e8 2d 89 d0 f7 fb  73 0b f3 b7 6a 67 24 e8  |.!.-....s...jg$.|
+00000120  d9 33 59 49 d6 88 24 a2  66 f5 c8 4d fe 88 93 77  |.3YI..$.f..M...w|
+00000130  f9 3f ee ae 0b 6a 23 7a  8f b7 66 d4 68 7d 38 51  |.?...j#z..f.h}8Q|
+00000140  85 0a a0 f5 03 f6 e8 2f  cd 0b ac 58 64 82 38 20  |......./...Xd.8 |
+00000150  f2 72 0a 85 83 55 cb db  62 59 f4 40 08 28 f9 8a  |.r...U..bY.@.(..|
+00000160  47 a2 ea a1 1b e1 4c 0a  a4 74 cb a2 11 6f e5 68  |G.....L..t...o.h|
+00000170  e4 ff 38 b0 a5 fc 21 9e  eb de 43 b6 e7 27 cf 9a  |..8...!...C..'..|
+00000180  80 23 59 a2 e9 a8 12 ae  47 09 5c 48 c2 cb c8 e0  |.#Y.....G.\H....|
+00000190  a6 fa 81 c5 49 a4 77 4b  d3 83 0a ce 6e a5 2b 88  |....I.wK....n.+.|
+000001a0  f2 f5 12 2f 0e 7e 10 20  5b c7 31 39 54 ed 19 33  |.../.~. [.19T..3|
+000001b0  5c 94 b5 56 16 fa 0c b0  ec 28 76 fa 38 ca 08 c6  |\..V.....(v.8...|
+000001c0  13 c3 1f 8a 20 35 73 4b  bb bf d8 96 65 de cd f3  |.... 5sK....e...|
+000001d0  44 d4 5b 3d 54 aa ac 53  a9 cc 31 99 86 22 5a f9  |D.[=T..S..1.."Z.|
+000001e0  9e bd f1 f3 74 07 e4 fe  f7 3a 35 44 e5 c6 48 3f  |....t....:5D..H?|
+000001f0  a3 81 1e 67 96 51 0f e6  7d 43 67 9c 12 6c dd 91  |...g.Q..}Cg..l..|
+00000200  c4 f9 20 4d 88 41 fc 40  c5 ee c2 11 fb f1 67 da  |.. M.A.@......g.|
+00000210  7b b6 d0 1b f8 6e f7 8b  07 f2 9e 12 56 dc 75 31  |{....n......V.u1|
+00000220  cd b9 53 62 3f 2f 72 cf  ee 17 03 03 00 a4 f9 ec  |..Sb?/r.........|
+00000230  72 94 94 1c 52 ab 9e 6d  04 5a 26 07 15 3a f5 dd  |r...R..m.Z&..:..|
+00000240  f3 45 18 20 de 2e 97 f7  6a a4 7c 92 68 aa 71 55  |.E. ....j.|.h.qU|
+00000250  b7 7a 3c 8f 54 e7 cc 31  e1 54 9c ad 8e b4 57 11  |.z<.T..1.T....W.|
+00000260  1d 79 85 4a da 3f 1b ab  fb f4 d4 d9 4d 8a 2e da  |.y.J.?......M...|
+00000270  68 3e f9 aa 16 52 cc 4e  49 7a 00 bf fc e8 b5 16  |h>...R.NIz......|
+00000280  43 0c 6d aa 82 49 3c 16  43 56 55 35 ee 47 c3 1c  |C.m..I<.CVU5.G..|
+00000290  99 25 6d 30 89 64 5e 23  bf de fc cc 7c 40 94 28  |.%m0.d^#....|@.(|
+000002a0  d8 ed ec c2 e2 8b 24 64  64 b6 e8 6c 29 82 b5 ba  |......$dd..l)...|
+000002b0  d5 59 7a 6f 11 6e cc 30  91 c8 c0 8b 9f dd 13 59  |.Yzo.n.0.......Y|
+000002c0  a9 72 18 f6 6e ce 3a 47  6b 4f 26 55 61 bf 20 7a  |.r..n.:GkO&Ua. z|
+000002d0  d8 c3 17 03 03 00 35 d7  fc bc 10 29 75 c3 70 0a  |......5....)u.p.|
+000002e0  02 e4 cf 36 20 49 5d 64  78 e9 27 db 2d e3 1a 66  |...6 I]dx.'.-..f|
+000002f0  f3 a8 82 7e 64 f0 29 27  81 6c bd b7 a7 86 a2 6a  |...~d.)'.l.....j|
+00000300  ac 4e 7b da 48 7c d8 9c  39 6c 95 45 17 03 03 00  |.N{.H|..9l.E....|
+00000310  17 c9 13 54 e9 22 62 7e  89 17 de 98 52 93 26 76  |...T."b~....R.&v|
+00000320  73 a0 7d 2c 60 68 c8 68  17 03 03 00 13 ad 3a 53  |s.},`h.h......:S|
+00000330  d1 41 0e 99 26 c8 fb 22  8f e6 d3 a4 1d 83 ff 28  |.A..&..".......(|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519 b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519
index 38382edbea7e63..b524ef43d29dd0 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519
+++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,118 +7,117 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 72 63 6c 83 50  |....z...v..rcl.P|
-00000010  e9 4c 88 85 70 4f e3 cb  c7 0e 0c c5 e5 44 b9 7e  |.L..pO.......D.~|
-00000020  4a 88 d3 32 d2 37 5c 16  d4 a1 e5 20 00 00 00 00  |J..2.7\.... ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 28 10 3b 44 b1  |....z...v..(.;D.|
+00000010  0f a9 77 89 f9 dd 3c 3a  ad 83 a0 ca 3e 60 d6 0e  |..w...<:....>`..|
+00000020  ab 94 3a ec 2e 63 ef b1  41 90 48 20 00 00 00 00  |..:..c..A.H ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 d7  |..+.....3.$... .|
-00000060  fa 97 47 72 9a 7e 63 47  d6 62 2d dc 5d 4f 7f 9b  |..Gr.~cG.b-.]O..|
-00000070  aa 86 c9 ba 65 4c ae 91  82 40 38 ad 4b 46 73 14  |....eL...@8.KFs.|
-00000080  03 03 00 01 01 17 03 03  00 17 27 2e 49 01 db 5e  |..........'.I..^|
-00000090  e1 45 48 97 54 02 31 9f  ad 62 74 58 70 77 21 5b  |.EH.T.1..btXpw![|
-000000a0  81 17 03 03 00 42 2c 0a  8a a0 e0 40 32 b1 2f 9f  |.....B,....@2./.|
-000000b0  e6 13 9f fd 62 88 a7 34  bd 9a bc 64 5d 9d 17 b9  |....b..4...d]...|
-000000c0  b0 f6 fc 84 ca 3f 80 0b  97 4f 7a d9 67 42 c5 0a  |.....?...Oz.gB..|
-000000d0  e5 18 21 e8 08 42 b4 e6  f5 7e c3 70 2c 0e d3 d8  |..!..B...~.p,...|
-000000e0  15 36 37 57 1a d5 58 64  17 03 03 02 6d 07 11 32  |.67W..Xd....m..2|
-000000f0  d3 1e 03 02 fb 04 35 f2  64 a8 78 c2 b2 f7 7d 5c  |......5.d.x...}\|
-00000100  7c 94 0c 7b 16 9a 87 7d  2f 96 de 01 74 d6 6c 6f  ||..{...}/...t.lo|
-00000110  ce 95 eb f0 df 6d 52 89  3a 19 ff 5b b5 f2 d8 6d  |.....mR.:..[...m|
-00000120  e6 10 94 f7 d9 c4 58 e8  80 db f5 30 22 b1 82 b1  |......X....0"...|
-00000130  66 05 b5 d0 71 40 0f 68  83 ec 43 b5 51 c3 f8 ce  |f...q@.h..C.Q...|
-00000140  e9 71 4a c7 cf 57 b5 53  3f 60 99 ae 84 df 98 cc  |.qJ..W.S?`......|
-00000150  9f 90 d0 fc 1d 03 e9 80  72 7c 60 51 a1 89 93 6d  |........r|`Q...m|
-00000160  0a 57 18 c6 dc 22 82 71  be 66 87 93 dd 16 41 c8  |.W...".q.f....A.|
-00000170  84 38 33 63 fc 82 db 38  63 f8 84 f7 12 08 3b 82  |.83c...8c.....;.|
-00000180  18 cb c0 50 0d dd 19 25  16 88 23 97 35 56 6d 46  |...P...%..#.5VmF|
-00000190  3d 75 e1 83 c3 62 e4 19  70 6c 03 f0 33 5d 94 ad  |=u...b..pl..3]..|
-000001a0  6d be d2 db c4 b8 ad d8  78 78 53 76 62 91 f7 cf  |m.......xxSvb...|
-000001b0  83 5b 1e 44 11 2f 27 6a  29 d4 ea 96 fb 40 1c 94  |.[.D./'j)....@..|
-000001c0  69 c2 cc c7 90 2c 60 14  c7 d4 f2 9c f9 0e 66 1c  |i....,`.......f.|
-000001d0  08 76 6e 9f 3b 3a 47 8a  40 0a de 00 e4 6f 45 ca  |.vn.;:G.@....oE.|
-000001e0  1d 41 cc 34 5a 2c 67 78  58 34 eb 19 0c a5 0e a2  |.A.4Z,gxX4......|
-000001f0  fb c1 0a 25 74 f5 ec 55  f8 c3 97 00 d0 a5 90 c5  |...%t..U........|
-00000200  a1 9c aa 19 2b e6 ee c1  9d 73 a1 3c 1f fa 6a 91  |....+....s.<..j.|
-00000210  2b 2d 27 be 06 f3 85 54  63 a5 d9 ac 55 73 0a e4  |+-'....Tc...Us..|
-00000220  4f dc 25 a0 9f 39 c0 0e  1a 9d a7 4c bd c9 3c 64  |O.%..9.....L...6.|
+00000110  a1 53 28 09 cd 1c 1d a0  24 77 e3 e6 4d b1 8f 36  |.S(.....$w..M..6|
+00000120  43 29 79 b3 e2 fb 9e dc  39 90 b5 b7 db 6d 0a c0  |C)y.....9....m..|
+00000130  55 d2 1c fd 8d 57 5b bf  e3 70 b7 6a bc af 4f 34  |U....W[..p.j..O4|
+00000140  e7 e1 46 d3 9a cc e4 73  33 fb e6 ad f9 b5 35 af  |..F....s3.....5.|
+00000150  97 77 88 11 19 7c e6 7d  8b 08 bb 78 2c 50 29 0c  |.w...|.}...x,P).|
+00000160  87 5f ef 04 19 34 9f 59  54 df 14 71 d1 5f e7 dc  |._...4.YT..q._..|
+00000170  46 2e 73 1a 07 12 be 6e  74 e1 8e 82 ca db a2 6d  |F.s....nt......m|
+00000180  35 5b fc 4c 71 42 45 86  35 1c c0 dc 0d 4c 40 a8  |5[.LqBE.5....L@.|
+00000190  c7 ea 4a b8 33 0b 30 e2  6d a4 82 dc 28 35 1f f2  |..J.3.0.m...(5..|
+000001a0  ac 23 41 10 a4 d4 1a 40  28 4d ea db 32 d5 06 de  |.#A....@(M..2...|
+000001b0  1e 37 91 77 34 ed b4 c8  f2 1c 44 de ee 2f dd af  |.7.w4.....D../..|
+000001c0  61 cc 1e 59 87 a6 be 36  b0 8e a3 61 01 aa f4 60  |a..Y...6...a...`|
+000001d0  1e c8 3a 3c 53 57 31 28  3e 40 32 95 67 02 41 9c  |..:@2.g.A.|
+000001e0  58 28 50 51 5e 06 1d f1  57 e1 39 ba e0 ab 30 26  |X(PQ^...W.9...0&|
+000001f0  25 fe b6 0a a9 d5 b3 72  61 3a 71 ec a2 44 91 5e  |%......ra:q..D.^|
+00000200  30 1b d4 dd 07 cf 35 6a  85 4a 95 b2 a9 f5 5c 6e  |0.....5j.J....\n|
+00000210  35 f9 07 7b d9 b0 a5 64  2f c3 34 23 84 3f 1a 97  |5..{...d/.4#.?..|
+00000220  dd 25 75 7c 76 0f 9b 73  5b aa c0 a1 00 4b f6 b1  |.%u|v..s[....K..|
+00000230  61 34 51 d0 d1 3b 00 4f  87 93 f5 45 2e 23 93 ee  |a4Q..;.O...E.#..|
+00000240  e6 ce e5 1c 02 22 3c c1  22 ed 33 b2 71 99 52 26  |....."<.".3.q.R&|
+00000250  70 86 ad bc 41 d9 13 54  d3 3e 5d 4b 63 4d d2 6f  |p...A..T.>]KcM.o|
+00000260  bf a5 24 f8 7b 83 b2 0b  13 02 0d 42 74 9b 04 4e  |..$.{......Bt..N|
+00000270  8a 86 6b 40 92 42 3a d8  a8 21 2f ce e0 90 71 65  |..k@.B:..!/...qe|
+00000280  5f ed c7 65 38 e3 85 e2  32 d5 4b c0 84 61 24 a1  |_..e8...2.K..a$.|
+00000290  00 be 67 f3 59 b0 b2 f0  65 fe a6 49 19 41 f9 9b  |..g.Y...e..I.A..|
+000002a0  40 3a 62 ec 4d 1f 83 77  03 9d 4b 4c d2 5d 93 ca  |@:b.M..w..KL.]..|
+000002b0  01 39 44 dc c6 f7 18 6b  2a c9 1b 3d ef 27 6d a4  |.9D....k*..=.'m.|
+000002c0  2e 8f 33 63 2b c5 fb bb  52 23 68 7e 0b 16 92 64  |..3c+...R#h~...d|
+000002d0  d9 72 04 2d 0d b2 ba 67  45 ae 14 16 f1 57 3b 59  |.r.-...gE....W;Y|
+000002e0  44 ba db b0 c9 d2 9b 8f  6d b2 a4 8c c2 d1 1c e4  |D.......m.......|
+000002f0  ce d3 32 bf 04 d9 09 d1  28 3d 25 2d b5 d3 da 12  |..2.....(=%-....|
+00000300  77 01 45 09 08 e0 df cc  f3 4c c0 e0 b7 d7 d8 16  |w.E......L......|
+00000310  82 19 1d 57 dc b4 27 83  48 1b 9f a9 0e cc d6 39  |...W..'.H......9|
+00000320  c1 4a 66 b3 42 85 a5 a7  14 97 5c 58 fe 41 e1 2e  |.Jf.B.....\X.A..|
+00000330  16 e9 70 89 e7 98 a8 f3  4a 81 d4 d8 ff 5f 48 6e  |..p.....J...._Hn|
+00000340  60 c6 4a 07 c5 57 9c 22  25 3a 9f bf 7e 71 f3 0d  |`.J..W."%:..~q..|
+00000350  71 e5 a5 d4 2b 6d 70 2f  c5 a3 17 03 03 00 99 b9  |q...+mp/........|
+00000360  15 c7 70 bc 06 75 26 50  0f 22 90 43 99 25 0d 0f  |..p..u&P.".C.%..|
+00000370  05 d3 ce e7 3c 53 fb 01  d4 d2 e8 fb b7 49 87 03  |....K......#..._C.|
+000003e0  75 65 ac ba 46 43 61 b4  3d be b8 49 44 ad 15 00  |ue..FCa.=..ID...|
+000003f0  3b c0 07 ba 18 b2 14 71  17 03 03 00 35 d1 22 81  |;......q....5.".|
+00000400  7f 21 e9 e2 7b 11 f5 df  dd 3f 15 ce b5 fc 71 f3  |.!..{....?....q.|
+00000410  0e f2 d0 1c a4 85 29 88  f2 ca 73 01 ee 1c e4 66  |......)...s....f|
+00000420  07 fa 5c a3 32 b0 e4 2a  e4 97 e5 70 b1 cd db 79  |..\.2..*...p...y|
+00000430  83 1f                                             |..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 01 50 90 77 22 64 76  |..........P.w"dv|
-00000010  a1 cd 65 49 53 cb f0 2e  21 6c 12 7c 63 e5 ff 49  |..eIS...!l.|c..I|
-00000020  6c be e6 ba 70 2d 22 49  6e 5c 5b 65 46 4b 64 01  |l...p-"In\[eFKd.|
-00000030  f7 1d 57 a3 5f d5 a3 39  b6 b9 79 62 b3 e2 52 35  |..W._..9..yb..R5|
-00000040  95 26 d9 2b 72 39 60 23  c4 5f 7e 88 66 d4 c8 2b  |.&.+r9`#._~.f..+|
-00000050  2d 89 38 c8 b8 bd 73 0a  02 27 92 ab 89 8a ee 9b  |-.8...s..'......|
-00000060  a2 bc 9e 55 fd a0 d4 f3  02 d7 d6 4c 6c 49 ef 7e  |...U.......LlI.~|
-00000070  35 56 90 41 90 53 24 f5  c1 19 f0 ff a0 c8 7c 82  |5V.A.S$.......|.|
-00000080  52 01 98 8c ef 87 69 09  d2 17 35 af 9c 4b 3b b3  |R.....i...5..K;.|
-00000090  6c 36 70 63 48 a2 88 df  cb 87 f3 40 03 a8 b0 64  |l6pcH......@...d|
-000000a0  cc 66 fb cf ba b9 be 8c  67 2d 3c 99 ac 7f 93 c1  |.f......g-<.....|
-000000b0  15 2e 05 ae 95 51 3d 71  d9 43 09 d7 44 cb df 67  |.....Q=q.C..D..g|
-000000c0  b8 b3 33 62 c5 60 cf 22  20 e5 45 17 7c d6 74 12  |..3b.`." .E.|.t.|
-000000d0  0f 6d af d0 db dd 91 ad  20 ea 4d 26 fc c4 2b bd  |.m...... .M&..+.|
-000000e0  ec 3d 75 c8 87 36 b2 d0  1e cc 1d 92 fd 58 5e d5  |.=u..6.......X^.|
-000000f0  f7 ad c2 ed 0c b6 c6 bc  25 ff 39 75 ee cf fc 76  |........%.9u...v|
-00000100  77 e0 15 2e 22 82 3b 6f  93 e4 e9 a1 5a bb 9d 78  |w...".;o....Z..x|
-00000110  e2 3d 18 c8 e5 ea e3 82  52 de bf ca 32 c9 56 21  |.=......R...2.V!|
-00000120  ba c9 2b 12 7d 7b f5 18  73 e5 5e 9c 1e e1 23 92  |..+.}{..s.^...#.|
-00000130  ec 58 56 e5 a4 aa dc 2b  59 75 71 19 06 77 83 d7  |.XV....+Yuq..w..|
-00000140  0b 28 03 e9 fa 2c 89 1a  8c 64 f0 84 b6 13 f0 02  |.(...,...d......|
-00000150  22 02 33 cf c4 22 dd fb  b0 76 8a 17 03 03 00 59  |".3.."...v.....Y|
-00000160  9b 4c 67 95 f4 37 c9 2c  b7 33 c7 78 1c e0 1b 49  |.Lg..7.,.3.x...I|
-00000170  41 6f 88 2d 99 a7 e3 d3  d1 d1 f6 36 b1 2a 8e df  |Ao.-.......6.*..|
-00000180  11 b6 8d 04 63 c7 11 49  e2 8c 79 03 6b b8 a4 8b  |....c..I..y.k...|
-00000190  2a 2c 04 ab b3 e2 50 03  51 77 65 eb 3a 45 f1 ce  |*,....P.Qwe.:E..|
-000001a0  65 9f 9c be d6 be 7f 28  14 6a 61 37 55 94 8f a7  |e......(.ja7U...|
-000001b0  23 2f bc fc bb aa 89 47  76 17 03 03 00 35 f5 be  |#/.....Gv....5..|
-000001c0  e6 33 9b 48 97 74 b0 ad  a4 fc 78 fe 20 ab cd fa  |.3.H.t....x. ...|
-000001d0  48 ad 8c 55 c3 46 b8 2e  d6 ea f0 79 e3 a5 cf 29  |H..U.F.....y...)|
-000001e0  56 19 ab 95 c4 7f fd 89  41 f7 a3 6f e4 19 2f 83  |V.......A..o../.|
-000001f0  8c 3e 5d 17 03 03 00 17  74 24 c5 8d 30 40 0a 12  |.>].....t$..0@..|
-00000200  57 37 d0 27 30 3e 24 ea  81 ca c7 0a f5 12 cf 17  |W7.'0>$.........|
-00000210  03 03 00 13 ff 20 1a 76  60 da a1 15 22 16 10 8a  |..... .v`..."...|
-00000220  9f e1 ee 5d 62 a2 cc                              |...]b..|
+00000000  14 03 03 00 01 01 17 03  03 01 50 dd d8 5d 40 64  |..........P..]@d|
+00000010  5d 35 b0 82 0d 46 97 4c  a2 d1 4d dd 3c c9 0a f9  |]5...F.L..M.<...|
+00000020  39 6a 1c 17 c3 f6 1a 6b  42 cc f7 37 23 7a e1 bf  |9j.....kB..7#z..|
+00000030  de 51 7f 87 6b 3d d6 4d  ed 24 b3 de dd 62 18 4a  |.Q..k=.M.$...b.J|
+00000040  b5 b3 1e 0f 2f a3 c5 e8  67 65 04 bc 37 97 15 a8  |..../...ge..7...|
+00000050  a8 f3 a8 79 99 82 e1 10  5d d7 f2 ee 21 46 aa b8  |...y....]...!F..|
+00000060  40 9f 3b fc 12 19 c8 82  b4 8e bc b8 9b a9 f6 aa  |@.;.............|
+00000070  18 6b 48 4e 03 92 43 12  b8 54 f2 b7 29 0b 0a a1  |.kHN..C..T..)...|
+00000080  6f c4 1c 2a af 22 c1 3d  1b 43 a5 3c 7d 39 83 5d  |o..*.".=.C.<}9.]|
+00000090  ee 09 fb f1 9a 4c ff b3  2a bb 85 53 04 18 5e 18  |.....L..*..S..^.|
+000000a0  62 e8 cf ec 01 be 76 31  82 1a 60 19 33 c7 37 0a  |b.....v1..`.3.7.|
+000000b0  fa 45 4d b1 9a 1e 07 e9  9c 45 c3 89 60 a2 c9 59  |.EM......E..`..Y|
+000000c0  8c 7d 02 f6 d6 5c 12 26  bd 6d 97 15 e2 07 27 be  |.}...\.&.m....'.|
+000000d0  2f 59 93 1b 11 0e 05 ef  83 c6 a2 c0 1a 9a 4c 60  |/Y............L`|
+000000e0  a6 84 c0 72 b6 2b 7c a1  37 4c d7 eb 76 0f 00 97  |...r.+|.7L..v...|
+000000f0  43 b6 25 ed 36 e1 eb 3a  3d 71 05 d8 d0 f9 80 18  |C.%.6..:=q......|
+00000100  b2 9b c0 4e 2c 8e 05 41  52 a5 40 57 3c 1f 48 0c  |...N,..AR.@W<.H.|
+00000110  55 ea d3 76 6d 3a 26 5d  5d 71 74 1c d5 8d 96 92  |U..vm:&]]qt.....|
+00000120  79 c5 9c 78 68 5f 20 12  01 06 c3 52 49 66 e4 5b  |y..xh_ ....RIf.[|
+00000130  41 09 fa 72 c5 d7 d9 26  1b fa a5 1d 23 b2 4a 1e  |A..r...&....#.J.|
+00000140  da 83 5e 89 c8 3a c4 26  f2 42 70 6d 1b 90 67 eb  |..^..:.&.Bpm..g.|
+00000150  37 15 35 b9 a2 b0 2b ef  93 5f 11 17 03 03 00 59  |7.5...+.._.....Y|
+00000160  b4 a0 79 ba e4 3f 78 d2  11 1a 71 8a a1 a4 28 fc  |..y..?x...q...(.|
+00000170  44 c7 bc 32 19 06 71 1b  6d 50 20 26 d5 91 39 48  |D..2..q.mP &..9H|
+00000180  59 8b fd 55 0a 35 14 f5  31 47 62 15 ee c1 69 23  |Y..U.5..1Gb...i#|
+00000190  eb db 79 ef 20 47 5c ef  31 e1 ae bd 2f 72 f8 9d  |..y. G\.1.../r..|
+000001a0  92 cc 04 6f 73 22 5d 93  59 9f 06 cb bd 70 9b d8  |...os"].Y....p..|
+000001b0  c9 41 44 8f 5b b2 59 2b  a9 17 03 03 00 35 22 65  |.AD.[.Y+.....5"e|
+000001c0  ef 1e dc 4c 63 ba 6d 6a  46 1c d2 9c 9a 81 4b f3  |...Lc.mjF.....K.|
+000001d0  1f 58 4e 08 86 93 f8 3a  53 13 64 1f ca 20 d2 da  |.XN....:S.d.. ..|
+000001e0  6b df 54 88 a8 f3 af 0d  4a 1b 29 91 3a bb 90 27  |k.T.....J.).:..'|
+000001f0  29 3a 97 17 03 03 00 17  09 78 1d f3 95 2e 92 af  |):.......x......|
+00000200  d8 af 64 59 fb 77 e3 85  de f0 37 be 11 91 2f 17  |..dY.w....7.../.|
+00000210  03 03 00 13 4e a2 06 c3  90 6f d3 b0 04 a8 25 32  |....N....o....%2|
+00000220  09 65 1c f2 ef 9c 32                              |.e....2|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA
index 10c83c4828d005..0cd5b76d660b4e 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA
+++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,130 +7,129 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 af 7e fd 3d 23  |....z...v...~.=#|
-00000010  96 b6 46 26 9c 09 13 f6  80 4f c9 d2 52 d9 df 52  |..F&.....O..R..R|
-00000020  0b 7c da 61 52 ba 99 1b  32 5a 0c 20 00 00 00 00  |.|.aR...2Z. ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 40 ad 79 0c ad  |....z...v..@.y..|
+00000010  83 38 58 82 dc b2 5a d1  e2 de f5 43 99 72 8a 93  |.8X...Z....C.r..|
+00000020  ba b1 ea 17 21 52 a7 e9  ed dc 48 20 00 00 00 00  |....!R....H ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 83  |..+.....3.$... .|
-00000060  95 cf ff 0f f6 eb 66 dc  4f 61 f3 94 43 18 7b f5  |......f.Oa..C.{.|
-00000070  91 6a e5 36 75 7b 6b 2c  d4 38 f7 4f 36 f0 3c 14  |.j.6u{k,.8.O6.<.|
-00000080  03 03 00 01 01 17 03 03  00 17 b7 83 3c 5c 9e ee  |............<\..|
-00000090  fc c3 14 33 45 62 69 8b  63 25 03 77 fe 7c 8b c0  |...3Ebi.c%.w.|..|
-000000a0  0a 17 03 03 00 42 6c cd  df 26 24 42 0d 2e 38 64  |.....Bl..&$B..8d|
-000000b0  c5 92 7c 6b 18 47 cc 90  09 57 95 0a f9 cc 81 f1  |..|k.G...W......|
-000000c0  db 90 29 ba b0 3f db 99  55 78 93 ab 05 34 91 46  |..)..?..Ux...4.F|
-000000d0  ce cb c5 2c b8 fb 43 98  31 cc 18 8f 2e 2a 39 78  |...,..C.1....*9x|
-000000e0  68 6d 01 29 05 ff 7e 4f  17 03 03 02 22 c1 3d c5  |hm.)..~O....".=.|
-000000f0  cb 42 fe 5d a8 ea 65 fd  1a a8 cd a9 28 ed 8d 69  |.B.]..e.....(..i|
-00000100  5b eb 28 11 c5 bb 9f 58  8d f2 2d 44 b4 8f 87 d6  |[.(....X..-D....|
-00000110  3f af df 3f 13 c0 7e bf  6f b3 e0 fa 45 5c ee a2  |?..?..~.o...E\..|
-00000120  13 70 08 94 2d 87 a7 1c  23 a9 aa a1 64 d2 49 ed  |.p..-...#...d.I.|
-00000130  33 2c ae 02 9e a7 03 24  3f 4c 43 d4 2e 54 b9 fc  |3,.....$?LC..T..|
-00000140  39 6c 32 8c b1 0c bb f6  31 60 d9 48 82 5b ed 2b  |9l2.....1`.H.[.+|
-00000150  ea dd e3 2d 1a 35 a3 22  be e1 f1 13 04 9c aa 1a  |...-.5."........|
-00000160  24 39 4a 0d 63 fb ce 31  71 af e6 1c f3 a3 dd c1  |$9J.c..1q.......|
-00000170  51 40 28 5a 11 a0 9e 19  0a a5 74 e2 40 56 9c 55  |Q@(Z......t.@V.U|
-00000180  40 45 e6 20 5d 23 aa 85  ec 42 5f 2c 24 10 fb ff  |@E. ]#...B_,$...|
-00000190  8a 52 e6 33 8f e1 1e e1  51 8a 9f 5d 6f 63 b8 04  |.R.3....Q..]oc..|
-000001a0  13 ab fa 5d 85 ba d3 eb  cf b9 0b 89 08 b7 7b a9  |...]..........{.|
-000001b0  ea 07 b9 41 07 7a 08 7b  57 01 35 11 a1 65 99 4a  |...A.z.{W.5..e.J|
-000001c0  4c 4a 1f c2 94 5a 00 09  9a 13 37 23 16 60 45 62  |LJ...Z....7#.`Eb|
-000001d0  96 fa 6b 7a 0f d6 68 14  f5 cd 40 d7 0a eb ea 75  |..kz..h...@....u|
-000001e0  f0 29 cb ea 7f e7 55 36  d9 02 b2 a0 bc 54 ac 04  |.)....U6.....T..|
-000001f0  1b 00 10 c0 db 45 81 e6  97 2a 4a 57 1d e7 de e3  |.....E...*JW....|
-00000200  d1 0a 09 c7 73 6a 9e a0  3c 79 7f a8 26 6a 98 05  |....sj..B ]^..|
-000003f0  a3 91                                             |..|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 bd  |..+.....3.$... .|
+00000060  d2 3a 7e c2 30 84 4f f2  39 7e 26 11 65 49 b9 b2  |.:~.0.O.9~&.eI..|
+00000070  ac 63 c8 ef ea 5e f6 23  33 70 ec 16 86 49 03 14  |.c...^.#3p...I..|
+00000080  03 03 00 01 01 17 03 03  00 17 16 47 c1 58 83 6b  |...........G.X.k|
+00000090  66 06 c4 39 42 8f 68 fb  3a 07 9e e7 74 41 0d 10  |f..9B.h.:...tA..|
+000000a0  97 17 03 03 00 42 42 b2  84 94 a6 18 c6 b6 21 77  |.....BB.......!w|
+000000b0  1e 02 57 4a 14 2d c4 84  17 f1 fa b4 63 0f aa d7  |..WJ.-......c...|
+000000c0  4a d5 ae 75 f1 da 14 ec  51 09 93 6b 62 6f 8f 7e  |J..u....Q..kbo.~|
+000000d0  fe 0c 7f 63 ef 1b 87 d8  43 42 d0 f4 2d 6d 0f cc  |...c....CB..-m..|
+000000e0  ef 77 79 17 1e 39 1e 75  17 03 03 02 22 9c 82 27  |.wy..9.u...."..'|
+000000f0  99 e0 4b 44 a7 a7 bb a9  25 a2 58 7f 70 3f 82 1a  |..KD....%.X.p?..|
+00000100  4b bc e1 35 3e 66 fa 4f  ac 7f 7e da 73 13 06 0f  |K..5>f.O..~.s...|
+00000110  fe 97 ef 82 53 2e d0 e2  11 c6 ee 8d 25 d2 f0 5c  |....S.......%..\|
+00000120  2e b8 61 40 09 12 d4 11  9b b8 3d 38 d7 d5 a7 76  |..a@......=8...v|
+00000130  ed a7 bf 6f 39 9c 83 49  57 86 de 53 da c5 ff 8a  |...o9..IW..S....|
+00000140  ee 47 bc 19 72 d3 cc d0  5b fc 6b 25 2f 64 2a 0c  |.G..r...[.k%/d*.|
+00000150  7d e9 8a 1f f8 48 d1 74  d5 70 97 e7 b4 e2 c8 ce  |}....H.t.p......|
+00000160  dc 74 27 e9 af b1 64 56  19 28 8a 34 93 4e 1c 03  |.t'...dV.(.4.N..|
+00000170  67 ae 41 fb 5f d1 e3 20  45 6b bd 49 25 d8 b4 8b  |g.A._.. Ek.I%...|
+00000180  d4 96 d6 96 b2 72 72 f0  d0 68 f1 f7 f3 17 76 85  |.....rr..h....v.|
+00000190  78 0e dd 35 83 8a 7a 45  c5 91 86 4b a6 b5 77 b4  |x..5..zE...K..w.|
+000001a0  ef 02 43 5c 42 c7 f8 a6  1d ed 73 d2 41 02 be cb  |..C\B.....s.A...|
+000001b0  24 40 61 5a 5f 7a f6 bf  f9 d0 bd 05 7f 90 52 16  |$@aZ_z........R.|
+000001c0  65 49 c6 74 61 f0 05 fa  dd 83 69 b7 ff 5a 2c 4b  |eI.ta.....i..Z,K|
+000001d0  63 6d d2 57 01 43 67 54  25 90 72 f8 12 7e c2 39  |cm.W.CgT%.r..~.9|
+000001e0  26 a9 65 55 02 ca 87 8a  e6 13 cd a4 6b eb 3c 4d  |&.eU........k.#|
+00000250  59 38 6c 9f be 1b ba 60  93 e8 c9 24 fb 13 11 b7  |Y8l....`...$....|
+00000260  78 d8 a7 30 6d 06 0f 4d  59 5d d1 1f 81 13 33 99  |x..0m..MY]....3.|
+00000270  a8 4d 63 16 53 73 40 22  4b 55 21 79 c1 ce 1c 92  |.Mc.Ss@"KU!y....|
+00000280  8c d6 95 14 fd 93 5d c2  54 20 30 c5 79 b0 cd eb  |......].T 0.y...|
+00000290  ac 1b 50 6a 25 b7 e8 f1  0f da f3 d8 6b 17 2b 12  |..Pj%.......k.+.|
+000002a0  06 a8 9a 88 be 2f f3 52  b3 d7 70 05 df 57 88 f9  |...../.R..p..W..|
+000002b0  ec 59 d4 e7 ce cb c3 1f  33 3e c0 d8 04 9f 59 a0  |.Y......3>....Y.|
+000002c0  04 c0 13 b3 a6 7c ce 6c  c4 fa 82 cd da 11 17 b6  |.....|.l........|
+000002d0  c2 40 cd e6 5a 6e d3 b5  17 f0 4d c4 34 8f 2a 28  |.@..Zn....M.4.*(|
+000002e0  4d ce 93 d5 eb 7e 0a d2  57 0a 98 cf ac 48 ee a8  |M....~..W....H..|
+000002f0  8a bd ec c2 d7 d9 39 af  e2 a0 9f b2 fd d1 4e 96  |......9.......N.|
+00000300  fa fd 34 f7 a4 3e 3d 31  9a f6 a2 a7 97 a3 43 17  |..4..>=1......C.|
+00000310  03 03 00 a4 cf 0d e1 8d  b7 e4 1a c0 79 0d 7e d9  |............y.~.|
+00000320  70 a3 34 57 0f 72 b4 5c  05 7f 1e 16 52 ba d3 e7  |p.4W.r.\....R...|
+00000330  fb e5 b8 b0 8d cf 91 7e  96 c4 70 6e cb e5 7e 51  |.......~..pn..~Q|
+00000340  19 17 c1 94 e9 49 69 a0  21 59 74 a9 1d 34 9c 10  |.....Ii.!Yt..4..|
+00000350  a9 10 f0 4a 51 2c e3 1d  e3 59 28 f2 3b ea 66 c1  |...JQ,...Y(.;.f.|
+00000360  ed 6a 8d 39 72 ea 5a 24  7a ee 9f cd 85 9d 54 60  |.j.9r.Z$z.....T`|
+00000370  d4 95 fd 8d 63 a4 78 6c  2f 7d 6a a5 53 e4 42 97  |....c.xl/}j.S.B.|
+00000380  e8 19 36 bf 14 9c a8 48  9f 57 ad 29 7a 30 e5 a9  |..6....H.W.)z0..|
+00000390  32 e7 0f 24 9c ca 9d 6d  b7 47 46 1c cb 90 7d 18  |2..$...m.GF...}.|
+000003a0  39 70 d2 c1 08 28 dc d7  3a 3e 5e 62 a7 4a 4a af  |9p...(..:>^b.JJ.|
+000003b0  02 93 ce 4b 5d a2 96 f3  17 03 03 00 35 10 07 d6  |...K].......5...|
+000003c0  82 f3 28 ef 2f 08 17 f6  0b c2 da 1f b7 52 e1 eb  |..(./........R..|
+000003d0  ca f4 0b c6 21 5c 54 4d  f9 0b 04 c1 5a bf 63 58  |....!\TM....Z.cX|
+000003e0  1c e1 da 7f f7 1f 84 77  09 3a 35 7c e6 1f 89 f2  |.......w.:5|....|
+000003f0  fd 01                                             |..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 11 e0 62 97 8a 4d  |............b..M|
-00000010  01 cf 8f e2 d2 a8 0d d4  9a fc f5 b2 d7 82 2b 7a  |..............+z|
-00000020  8c e7 ce 2a 99 3b 41 a2  a3 ca c4 9d 15 79 7f 2f  |...*.;A......y./|
-00000030  04 7a 18 e4 5b b6 01 d6  b5 03 d2 08 15 41 c7 18  |.z..[........A..|
-00000040  8a 66 78 05 ed 33 19 8e  93 9e c3 ff 4a 92 bb 7b  |.fx..3......J..{|
-00000050  72 e5 81 a6 2a 7f b3 e1  72 67 01 7a 95 f4 3f bc  |r...*...rg.z..?.|
-00000060  cd e4 bc 45 74 9b 4c 1c  69 68 d0 75 89 9f d5 d0  |...Et.L.ih.u....|
-00000070  de 59 d4 1c 47 cc 5e 2e  dd bd f9 1f e4 16 c9 c8  |.Y..G.^.........|
-00000080  9b 4e 07 6b 7a 12 e7 13  71 ae c1 26 48 32 d6 4e  |.N.kz...q..&H2.N|
-00000090  8a 15 c2 a0 91 59 9d 21  0d 28 d2 94 3f e9 fc 74  |.....Y.!.(..?..t|
-000000a0  98 5b e5 be 50 ad 10 7d  d9 a1 da 41 59 15 b3 85  |.[..P..}...AY...|
-000000b0  2d 7b 81 b3 ae fb db 4c  00 24 31 57 f2 54 b7 f7  |-{.....L.$1W.T..|
-000000c0  64 cc 73 23 bc 6a 93 e0  91 a7 5e 1b 63 f1 59 89  |d.s#.j....^.c.Y.|
-000000d0  a9 d9 7b 88 35 17 7a 4d  b9 66 d0 a5 f2 d6 79 ed  |..{.5.zM.f....y.|
-000000e0  c1 3a e7 98 88 96 e7 2f  31 66 bf 16 34 e2 fd 5f  |.:...../1f..4.._|
-000000f0  fb 0f fb 9a aa ba 78 d8  6a c9 72 d6 39 32 3a 99  |......x.j.r.92:.|
-00000100  a2 11 8a 32 79 cf 18 d9  22 da 40 31 3e d3 c8 17  |...2y...".@1>...|
-00000110  c4 1f e2 4f c8 7f b9 2f  83 d7 5e 59 48 d3 9b b9  |...O.../..^YH...|
-00000120  68 9c c2 e4 45 c2 a3 26  91 cd 3a 26 47 c4 b8 7f  |h...E..&..:&G...|
-00000130  8f 91 c0 06 b5 6e 5e b4  65 05 42 ea 48 9e 40 bc  |.....n^.e.B.H.@.|
-00000140  0c 04 22 86 6a 54 6c 27  c3 77 b4 b9 22 99 6a f0  |..".jTl'.w..".j.|
-00000150  91 bc 41 ca 24 41 52 fd  e2 18 0f 64 13 7e a3 6b  |..A.$AR....d.~.k|
-00000160  ab 27 1e 15 87 0d 7f 71  1e 29 16 f9 af 81 ec bc  |.'.....q.)......|
-00000170  28 0b 45 bd 76 fd ff 0e  fb 8d c5 0c aa ef a5 17  |(.E.v...........|
-00000180  55 49 a6 3d 74 5c 8d 77  60 99 a1 8f aa a9 eb 0f  |UI.=t\.w`.......|
-00000190  75 1a 55 21 3a 96 da 08  a2 cd ad 11 78 15 6a ce  |u.U!:.......x.j.|
-000001a0  ef f6 fb 8b a3 dd fd ad  2d a5 2d 59 25 37 fe 53  |........-.-Y%7.S|
-000001b0  48 90 fa 9a d3 3c 09 69  47 d3 d1 e4 48 30 fd df  |H....<.iG...H0..|
-000001c0  15 d7 64 ff ca 91 46 c2  36 82 30 ae 4e 75 12 be  |..d...F.6.0.Nu..|
-000001d0  58 5d da 63 da bd dc be  81 be ad 37 87 ea 0a 26  |X].c.......7...&|
-000001e0  31 cf 1b 1e 7d de a8 04  e3 b8 e5 65 5a 21 db b6  |1...}......eZ!..|
-000001f0  2b 7c e7 23 7c 2b e1 89  3f 28 27 97 dd 1c c6 00  |+|.#|+..?('.....|
-00000200  0e e4 05 68 0f 9a 8a 1d  e6 bd bd aa 1f 46 6e a2  |...h.........Fn.|
-00000210  d9 69 91 9b e7 e3 6c 39  33 77 b8 76 17 03 03 00  |.i....l93w.v....|
-00000220  99 c9 3e 7e 78 3b 91 65  35 cb 19 44 92 f7 77 f5  |..>~x;.e5..D..w.|
-00000230  60 3c 19 2a 97 c5 a0 92  b2 28 e2 44 94 ec 1b 3d  |`<.*.....(.D...=|
-00000240  f8 1a c1 65 eb 41 3f 61  f1 db 42 1a 0d b8 32 12  |...e.A?a..B...2.|
-00000250  f6 1b 83 be 37 d8 fe 78  bd 5b 66 d1 f2 6c 3e e3  |....7..x.[f..l>.|
-00000260  8a 0f 3a 28 57 71 1a 78  ab 2a b5 5f ad a3 6e 2c  |..:(Wq.x.*._..n,|
-00000270  a3 d9 3a 0b d0 99 95 d6  dc 8e 7a f0 b6 e4 cb 46  |..:.......z....F|
-00000280  ab cb eb cf ec 86 b3 fe  e6 e6 73 2c a2 64 d2 d5  |..........s,.d..|
-00000290  9c 8c 25 39 62 07 51 93  12 92 2b e3 4b 2e 3d f5  |..%9b.Q...+.K.=.|
-000002a0  f1 d4 22 69 c3 90 cf 91  35 2f e4 60 35 44 6f bf  |.."i....5/.`5Do.|
-000002b0  7a 75 3d fb 70 bd 20 05  a8 f8 17 03 03 00 35 6e  |zu=.p. .......5n|
-000002c0  09 00 fa 13 8f d4 17 40  ee 9e 5f 8a 56 ba 7c 69  |.......@.._.V.|i|
-000002d0  05 ee 65 8e fd 9c 62 7f  f9 af 04 c7 46 20 07 da  |..e...b.....F ..|
-000002e0  bc 79 f8 cc 53 c6 fc 47  b5 54 9c fb 4d a3 cf 56  |.y..S..G.T..M..V|
-000002f0  a4 57 c5 aa 17 03 03 00  17 d6 ea 39 50 a5 8e 67  |.W.........9P..g|
-00000300  b9 79 76 17 77 86 a8 58  fb 86 03 74 1a e4 12 37  |.yv.w..X...t...7|
-00000310  17 03 03 00 13 e7 07 59  c3 d0 27 b3 d8 e8 a3 7b  |.......Y..'....{|
-00000320  df e8 17 08 78 4e 9a 6b                           |....xN.k|
+00000000  14 03 03 00 01 01 17 03  03 02 11 f1 43 fc 28 7d  |............C.(}|
+00000010  43 0b 17 e4 ed cc 95 d5  09 4e 8f 44 3c 3b 46 23  |C........N.D<;F#|
+00000020  59 a4 62 a7 94 1e da b6  a7 a5 22 15 6a ed e3 eb  |Y.b.......".j...|
+00000030  4f 6d 0e 91 c6 20 74 af  97 80 95 db 6a b6 2d ac  |Om... t.....j.-.|
+00000040  a8 d9 95 84 95 5b 32 27  ec 42 42 a8 fd 05 fc ad  |.....[2'.BB.....|
+00000050  2e 00 e3 4a 9d 93 d1 5e  fd dc 22 30 1f 9c e9 cb  |...J...^.."0....|
+00000060  3f 2e ac ad 0f ab b7 46  82 69 38 db c6 8a be 77  |?......F.i8....w|
+00000070  7e 83 77 4c e1 f4 f2 cf  c2 b1 86 ff 17 d3 1d 79  |~.wL...........y|
+00000080  3e ac f8 6e 73 15 ab 02  4c bf 2a 63 41 ce 93 3b  |>..ns...L.*cA..;|
+00000090  af 11 70 8c 91 91 f4 14  5c 1b 63 4b 42 3b d8 ca  |..p.....\.cKB;..|
+000000a0  00 f6 02 b3 c8 d3 ab 01  1d f2 71 86 7b f9 13 de  |..........q.{...|
+000000b0  1e 39 1c e7 b5 3b b5 bb  26 33 f7 a9 3f 29 e2 8c  |.9...;..&3..?)..|
+000000c0  d1 67 64 11 b4 29 be 6e  c9 cf c5 6e 41 43 41 e7  |.gd..).n...nACA.|
+000000d0  43 9c 5d fb a1 b6 b3 f9  0f 4c 17 11 3c 56 0e 49  |C.]......L...z.U.....4..|
+00000130  11 86 8a 14 8e d6 5c c0  c2 55 de da 37 c4 ac 69  |......\..U..7..i|
+00000140  95 42 84 5f 1d 5f c7 32  91 a9 45 02 c3 a3 da 4f  |.B._._.2..E....O|
+00000150  96 da c0 a2 09 7a a6 2b  25 f4 a2 94 89 fa bd 0f  |.....z.+%.......|
+00000160  87 04 e1 87 00 c4 4f 45  39 7a 5a 7d 75 c5 c9 f6  |......OE9zZ}u...|
+00000170  27 34 2d ba 12 c5 2c 76  06 b0 aa d0 34 e1 99 e9  |'4-...,v....4...|
+00000180  9b 01 db 2a b4 d5 dd 55  2b 92 6d e3 9e fc f1 09  |...*...U+.m.....|
+00000190  2b 37 8b 37 8f 70 31 ee  d2 f0 86 5a 1f d3 4a 29  |+7.7.p1....Z..J)|
+000001a0  7c c9 0e 97 7c 4f e6 87  b7 c8 94 f3 d2 0b 4a 1d  ||...|O........J.|
+000001b0  59 60 09 81 55 6a 01 38  9f ca 20 e0 6e 44 f7 b5  |Y`..Uj.8.. .nD..|
+000001c0  f6 3e 2e d0 81 f6 e6 1d  15 cf c3 d8 ae 98 84 d1  |.>..............|
+000001d0  0b c9 e4 65 96 f9 eb c9  60 6d 50 37 49 9f 6d b1  |...e....`mP7I.m.|
+000001e0  b9 f6 25 20 81 2d cf b4  17 2b 4c a9 8a 76 8a db  |..% .-...+L..v..|
+000001f0  77 8c 29 47 05 0b 27 e1  52 8d 37 27 fb c0 70 26  |w.)G..'.R.7'..p&|
+00000200  3b 6d 2e 74 05 75 88 e4  63 3d ac 98 3f 74 67 3b  |;m.t.u..c=..?tg;|
+00000210  c6 dc 41 39 2b 20 ef f9  8b 2f 4e 20 17 03 03 00  |..A9+ .../N ....|
+00000220  99 7d 8a 83 dd 34 5e 37  e2 c3 85 22 f3 6b ee bc  |.}...4^7...".k..|
+00000230  a5 21 1b c5 2c 38 cf 99  09 5b 31 97 5e a0 8b 69  |.!..,8...[1.^..i|
+00000240  75 3a 23 64 18 22 fb 31  ed ac 8b 0f ae 9c 4e ee  |u:#d.".1......N.|
+00000250  06 0e 3c 3a 18 d3 8e 0c  dc d4 3f 7b 25 e3 90 85  |..<:......?{%...|
+00000260  ca f4 8a 5c 5e 5e 44 f3  1b 57 cd 14 e0 8d 67 36  |...\^^D..W....g6|
+00000270  6e c2 a6 95 60 f3 86 20  29 a6 a8 8f b3 b0 0d 57  |n...`.. )......W|
+00000280  d2 1e 4a b9 d2 63 33 09  f9 c5 87 94 89 c5 fd 2e  |..J..c3.........|
+00000290  de b3 f0 0e 7b 4e 3e d6  21 b4 3b 58 bd 2a 35 49  |....{N>.!.;X.*5I|
+000002a0  5e b0 f4 5a ca 58 dc a5  8b 45 a5 d1 7b 13 b2 00  |^..Z.X...E..{...|
+000002b0  52 c4 b2 6c d1 9a b8 c5  1b fe 17 03 03 00 35 c9  |R..l..........5.|
+000002c0  9b c7 94 b3 eb 5f 4e ab  8c c0 de cf b6 b4 5c ee  |....._N.......\.|
+000002d0  bb 5f fa 48 a2 06 f0 ed  f5 b1 ba 74 0c c5 64 1a  |._.H.......t..d.|
+000002e0  ce 2e 9e 90 4b 6e 98 13  a0 98 99 a3 b4 6f 73 76  |....Kn.......osv|
+000002f0  7b e3 26 15 17 03 03 00  17 3e a1 f0 68 e6 00 86  |{.&......>..h...|
+00000300  10 f4 bf 26 b6 f5 e6 77  85 ca b7 c1 75 bb f9 78  |...&...w....u..x|
+00000310  17 03 03 00 13 43 7f f3  84 ee d7 a9 59 9d c3 5c  |.....C......Y..\|
+00000320  c0 b7 c8 20 4e 83 ba 23                           |... N..#|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS
index 4892e2b5555158..e557181b29550d 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS
+++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,139 +7,138 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 56 a4 21 f9 b3  |....z...v..V.!..|
-00000010  ff ed 23 dc a7 eb cd 4b  f3 0a a9 12 a4 52 84 04  |..#....K.....R..|
-00000020  77 59 23 09 26 6c 49 42  9f 68 b2 20 00 00 00 00  |wY#.&lIB.h. ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 46 b8 dc eb 72  |....z...v..F...r|
+00000010  ac 41 0a 3c 58 14 84 a0  75 91 e1 ca d7 3c c7 2c  |.A..J:..cn..$|
-000000a0  f4 17 03 03 00 20 72 bb  5a aa 0e 2e d9 cc 38 0c  |..... r.Z.....8.|
-000000b0  c8 b9 88 08 6f 19 d8 38  14 14 d7 97 42 6c 45 43  |....o..8....BlEC|
-000000c0  51 dc 2b f6 02 e2 17 03  03 02 7a 8d 04 2f 64 c0  |Q.+.......z../d.|
-000000d0  e2 7b b5 20 9d 04 69 5e  88 82 aa f3 c6 b2 8d 6c  |.{. ..i^.......l|
-000000e0  41 08 c3 b1 0c 7d d1 5f  d6 e6 b7 1d c0 ad 2b 0d  |A....}._......+.|
-000000f0  02 c5 f7 6d a0 87 91 07  20 d3 d4 2e 5a 7d 5e 29  |...m.... ...Z}^)|
-00000100  37 2b ac 5f d6 cb eb e9  99 a7 05 f7 e7 ea 9c 99  |7+._............|
-00000110  cd 33 25 f8 45 95 43 f4  7a 59 2a 91 8c e2 ac 84  |.3%.E.C.zY*.....|
-00000120  ba 99 ef d0 d7 ea 9b db  31 b0 27 0c 81 3b b2 83  |........1.'..;..|
-00000130  20 c4 8b 7e 05 ac c6 82  e9 56 5a a2 b6 7c c7 33  | ..~.....VZ..|.3|
-00000140  a8 31 2f ad 60 be ec c3  2d c0 a8 b4 40 50 98 ea  |.1/.`...-...@P..|
-00000150  83 d1 cc a8 34 20 11 7c  2e f7 7c ca d8 27 03 a2  |....4 .|..|..'..|
-00000160  58 86 e8 e6 41 46 07 18  c7 a7 61 f9 cc 2f 7d 1e  |X...AF....a../}.|
-00000170  bb 34 7c 6e cb b3 9c 03  2f b0 dd e9 a1 32 13 10  |.4|n..../....2..|
-00000180  85 1d fa a6 bf c7 4d ec  94 8f 26 07 94 34 b3 5f  |......M...&..4._|
-00000190  b8 e4 da 6f 3d 5b 0a 61  8f 44 58 10 1a 4c f3 bc  |...o=[.a.DX..L..|
-000001a0  ff c7 8f 09 0a e4 1b 35  e8 a9 dc 9c 14 86 e5 67  |.......5.......g|
-000001b0  7e 96 e9 79 8d b2 d7 34  a0 7f 43 07 11 f1 03 68  |~..y...4..C....h|
-000001c0  95 5e f5 fa e7 8f c8 d6  5b 23 c4 84 e4 c5 40 58  |.^......[#....@X|
-000001d0  80 4a ac b7 a7 07 21 93  c1 a9 ad 9a 89 f7 f3 9e  |.J....!.........|
-000001e0  bb 7d 2a 00 d0 e0 66 9d  f7 86 4a ba b1 c9 1e 3b  |.}*...f...J....;|
-000001f0  f1 c6 6e c1 9c 09 85 38  9d fa 5a b9 ca bb a4 f5  |..n....8..Z.....|
-00000200  9e 3f ba d4 31 7d aa d7  f9 bf 83 05 5c 1f 61 18  |.?..1}......\.a.|
-00000210  d4 5e 16 98 c6 92 7b bd  12 96 18 c7 33 75 ad 08  |.^....{.....3u..|
-00000220  d1 0b 47 4c c8 73 3e 68  fb 53 ff e0 1a 10 6c 5a  |..GL.s>h.S....lZ|
-00000230  7f 9d 92 32 2f c2 2d 95  7d c6 ef 18 9b 44 a1 bc  |...2/.-.}....D..|
-00000240  6a f5 88 79 e1 00 a3 14  8f 66 07 03 16 2a 53 80  |j..y.....f...*S.|
-00000250  9b 26 80 0d 0b 5e 0c c6  c9 fa a1 3b c9 a6 91 1f  |.&...^.....;....|
-00000260  bd fb 79 24 ab 93 e4 25  d1 a6 41 8b 9e a9 06 0f  |..y$...%..A.....|
-00000270  80 2e 4e 8c 20 2c 1e a8  7e 63 7a 4f b8 90 c3 56  |..N. ,..~czO...V|
-00000280  a3 9e 63 2a 8b 85 9e ef  66 f5 16 be 79 c3 9b 47  |..c*....f...y..G|
-00000290  dc 1c 75 0b 30 3c db 32  e8 ec 33 f9 9f 26 3d 56  |..u.0<.2..3..&=V|
-000002a0  36 e9 ea 83 57 c4 59 ac  73 db 04 5a 1d 38 9b e4  |6...W.Y.s..Z.8..|
-000002b0  47 50 f8 92 92 7f c9 09  4f f4 9c ab 3e 03 df 80  |GP......O...>...|
-000002c0  cc 5b 50 0b 06 ef 8c 59  d2 f6 f3 a4 16 e7 0f 90  |.[P....Y........|
-000002d0  c8 79 95 0a 39 0f 33 69  31 29 1c 30 77 72 58 b5  |.y..9.3i1).0wrX.|
-000002e0  cf 0e 4c 30 fc 0a 01 93  b1 20 21 34 2a ce 28 8d  |..L0..... !4*.(.|
-000002f0  57 71 3e c9 b1 51 c9 4f  e5 e4 09 0b 1e 32 52 4e  |Wq>..Q.O.....2RN|
-00000300  d0 be f2 a2 90 75 f4 a8  61 66 43 84 74 4e bb 28  |.....u..afC.tN.(|
-00000310  7b ea 68 96 92 6d 4b 8c  af 50 13 84 92 b9 6b 48  |{.h..mK..P....kH|
-00000320  60 1c 60 62 28 a2 37 d1  1c 86 d4 60 27 a6 5b 6d  |`.`b(.7....`'.[m|
-00000330  88 d7 56 21 b7 86 f5 b6  34 f9 55 cf 47 f8 4f 90  |..V!....4.U.G.O.|
-00000340  78 5c 56 52 97 17 03 03  00 99 35 71 51 6f 73 ba  |x\VR......5qQos.|
-00000350  76 60 e1 4a 5f ec ce 52  b6 91 58 3d 0c ea e6 58  |v`.J_..R..X=...X|
-00000360  7e ee da 1e aa df bb 8e  c9 89 ce 43 bd e7 34 9b  |~..........C..4.|
-00000370  b8 4b dd 50 73 0c f7 e5  15 e0 a1 c3 bd 07 08 62  |.K.Ps..........b|
-00000380  a2 d5 2e 9f 46 f7 4d 9c  ae ad be 22 89 0f b0 3e  |....F.M...."...>|
-00000390  82 1c 80 60 38 39 4f 06  f9 fc 4c f8 02 bf b3 5a  |...`89O...L....Z|
-000003a0  25 22 f4 62 61 ba eb 78  b2 40 68 ea 99 ef 95 90  |%".ba..x.@h.....|
-000003b0  b1 b5 25 17 81 43 5c 15  bd a9 1f e8 0f b9 91 be  |..%..C\.........|
-000003c0  f1 47 91 99 ec 50 3b fa  c2 06 fc 89 09 a3 d7 b3  |.G...P;.........|
-000003d0  ed e3 3d 41 57 07 4b b0  3d 02 51 7e 13 bb d3 68  |..=AW.K.=.Q~...h|
-000003e0  49 4c 6a 17 03 03 00 35  63 f7 b5 68 31 22 c7 f5  |ILj....5c..h1"..|
-000003f0  50 ae c0 81 0f 50 fb ba  50 72 8a d7 e0 c0 73 07  |P....P..Pr....s.|
-00000400  d0 88 ed 6d 7b e7 66 b3  8d e3 10 ca 2f 68 c3 39  |...m{.f...../h.9|
-00000410  d9 b9 09 44 78 4a 11 91  fb 51 ea 9f 9a           |...DxJ...Q...|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 f9  |..+.....3.$... .|
+00000060  c2 64 c8 93 91 3a 81 55  ca 85 23 d4 91 37 3e 01  |.d...:.U..#..7>.|
+00000070  42 63 2e 2a a9 13 0c a9  f2 e6 74 14 1e 5c 52 14  |Bc.*......t..\R.|
+00000080  03 03 00 01 01 17 03 03  00 17 23 71 3e 39 7a 0c  |..........#q>9z.|
+00000090  2a fa 89 f1 65 d1 b0 23  96 8e 6a e4 55 2c fd 34  |*...e..#..j.U,.4|
+000000a0  ea 17 03 03 00 20 b7 a2  d6 ff b3 b4 db ce f8 90  |..... ..........|
+000000b0  f9 a3 9c 0c 8f f0 77 3e  37 f2 d9 e7 84 65 28 f6  |......w>7....e(.|
+000000c0  dd fe b9 42 03 3c 17 03  03 02 7a d4 cf 93 f6 2b  |...B.<....z....+|
+000000d0  64 e3 13 75 41 62 7d bd  cf 4f 42 80 23 f4 03 92  |d..uAb}..OB.#...|
+000000e0  35 02 5e ed bb c6 2f b1  a8 57 cf d4 69 94 6a db  |5.^.../..W..i.j.|
+000000f0  39 b8 3a 05 07 dd f1 1d  63 13 22 9b d7 58 68 6f  |9.:.....c."..Xho|
+00000100  4f ac 79 6a 47 0a 23 35  3c 9b 9f 15 04 e7 6b d8  |O.yjG.#5<.....k.|
+00000110  ff df 00 6c 68 5e a0 41  6a a9 34 9f 37 98 c2 3d  |...lh^.Aj.4.7..=|
+00000120  51 29 73 c4 ad 34 e5 69  78 18 eb 03 55 c0 c6 0d  |Q)s..4.ix...U...|
+00000130  43 d5 4a 5d cb 53 e6 b9  df e8 8b 0e 98 04 89 bb  |C.J].S..........|
+00000140  f4 a1 48 01 af d3 42 ef  17 e7 f9 27 b4 b1 63 99  |..H...B....'..c.|
+00000150  91 a6 c5 c1 cb 6d 1c 55  b1 69 1c ec b1 b7 c3 cd  |.....m.U.i......|
+00000160  7a 93 f2 d8 e4 c4 96 43  0a e1 18 b5 9a 3b 57 83  |z......C.....;W.|
+00000170  98 ce 74 f2 4c 65 ad 01  aa 76 b5 b0 7c a0 7d 09  |..t.Le...v..|.}.|
+00000180  ad d6 20 7d 12 67 f8 4c  2c 41 37 34 66 86 fe 3d  |.. }.g.L,A74f..=|
+00000190  44 52 f0 08 26 4c b3 e7  71 b3 89 b3 5c 78 7e db  |DR..&L..q...\x~.|
+000001a0  34 31 dc dc 7c 7d 28 e1  41 96 f4 2f 28 60 9f 5b  |41..|}(.A../(`.[|
+000001b0  b2 2b 37 6b 3f 3a 37 e2  38 7a 66 40 fe 44 44 72  |.+7k?:7.8zf@.DDr|
+000001c0  b4 e3 97 f3 db 73 c8 af  96 c8 a6 24 ef ea 34 8f  |.....s.....$..4.|
+000001d0  5e 4b 21 22 19 d8 4a db  2e f1 23 90 d0 d2 38 f3  |^K!"..J...#...8.|
+000001e0  c6 08 5d 1d c9 a3 f2 6d  01 eb 30 5e cd f4 98 f5  |..]....m..0^....|
+000001f0  0d d8 68 4f 00 f4 cd 24  9f c4 3c 6a 31 5d c0 e5  |..hO...$..S8B.|
+00000350  6f 99 20 c4 98 59 48 61  e0 13 80 8e 96 25 96 f8  |o. ..YHa.....%..|
+00000360  c9 c8 35 9c 35 c0 13 d7  34 24 0b 6e 59 4f 1b 77  |..5.5...4$.nYO.w|
+00000370  1f 9a 71 6b 6b dc 71 23  b1 a2 e8 1e c2 a0 b1 8c  |..qkk.q#........|
+00000380  27 5e 90 c5 f8 65 30 a2  de fc 6b b2 e3 5d 8d 9f  |'^...e0...k..]..|
+00000390  70 32 3c 92 47 c7 91 10  49 0d f1 3b 41 f1 14 3b  |p2<.G...I..;A..;|
+000003a0  09 55 f5 78 0e 91 1b 75  a0 58 fc c9 34 82 fe 51  |.U.x...u.X..4..Q|
+000003b0  20 73 71 3d 7f 82 a4 29  bc 04 67 d7 30 c7 a5 4b  | sq=...)..g.0..K|
+000003c0  f3 94 4d 15 35 2a 1e 46  82 3f 36 f4 7b ff 9f 88  |..M.5*.F.?6.{...|
+000003d0  3b e6 60 bc 86 51 59 ad  97 58 95 7e 6a 4b c9 6c  |;.`..QY..X.~jK.l|
+000003e0  34 96 03 17 03 03 00 35  03 94 eb e1 e5 9d eb 8f  |4......5........|
+000003f0  34 b1 28 3c 9d 26 40 a9  e7 4c 2b bf 37 32 b6 aa  |4.(<.&@..L+.72..|
+00000400  78 d2 45 0c 6c 5b 0a 0e  8a 3a b6 1a 01 09 3e 0a  |x.E.l[...:....>.|
+00000410  45 25 c6 83 8a 4a cc 22  d9 29 c8 8a 32           |E%...J.".)..2|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 7a 63 6c 83 c6 db  |..........zcl...|
-00000010  85 98 08 0a da be 96 d7  7a 2e 61 7b 7e d1 4f d4  |........z.a{~.O.|
-00000020  45 03 25 05 50 fc 20 ee  8f ae 56 39 15 0b c3 44  |E.%.P. ...V9...D|
-00000030  80 5c 81 45 55 df 1d cd  30 92 7c 5e 43 16 e1 29  |.\.EU...0.|^C..)|
-00000040  46 77 d3 03 6d 36 11 d0  91 76 a8 34 f0 98 67 f6  |Fw..m6...v.4..g.|
-00000050  88 f8 f7 d0 a3 ee e0 d1  30 9f 6f e9 75 ad d6 e9  |........0.o.u...|
-00000060  e8 e9 6f 11 55 7e 66 87  9a 7e 9d a5 31 b2 67 fd  |..o.U~f..~..1.g.|
-00000070  a2 a7 c8 c8 4d d8 2b f1  5b a9 b5 df 03 42 55 96  |....M.+.[....BU.|
-00000080  9e 73 9c 9a 6a b9 9f 2e  a5 ec ba 0b a3 5b 99 b4  |.s..j........[..|
-00000090  7c 57 96 fb f5 96 20 ac  71 90 bb 4b 76 dd 2e 01  ||W.... .q..Kv...|
-000000a0  17 d0 63 76 c9 4a e5 ae  58 bd 59 b5 e1 85 6d 46  |..cv.J..X.Y...mF|
-000000b0  9f d5 3e 9d a7 f0 92 96  ec 4e 90 c3 5a 52 ba e5  |..>......N..ZR..|
-000000c0  bd fa f0 a7 88 d5 9e 76  9b 2b 23 fb 37 c0 f1 0a  |.......v.+#.7...|
-000000d0  d2 df d4 2c 5d 8c 64 f0  98 3c 85 3f bb ed 30 44  |...,].d..<.?..0D|
-000000e0  eb cb fc 47 e5 8a 57 ff  37 23 6d e2 75 a7 15 e4  |...G..W.7#m.u...|
-000000f0  dc f9 02 8f c4 af d8 e8  bb 07 43 90 5b c2 86 f3  |..........C.[...|
-00000100  40 22 a7 bb b6 f1 f6 4c  2e d6 fd d8 02 f0 3d 27  |@".....L......='|
-00000110  89 38 97 7d 6e d3 6c b1  4c 87 ca 30 e9 ec fe b3  |.8.}n.l.L..0....|
-00000120  db 62 ea 2f 3a 83 95 18  4e 44 4f 97 c4 ff f6 bb  |.b./:...NDO.....|
-00000130  0b b0 98 c7 c6 c7 94 0a  8b c9 c0 d9 51 d3 6a e1  |............Q.j.|
-00000140  36 55 79 c4 37 75 6f e7  14 53 60 9e 22 00 fe d7  |6Uy.7uo..S`."...|
-00000150  ef e4 ca 60 38 12 25 8c  c6 c9 7e 5f 1a 7c f1 c1  |...`8.%...~_.|..|
-00000160  a7 15 b2 f4 32 31 de c8  a2 d4 59 46 1e 68 a6 94  |....21....YF.h..|
-00000170  b8 18 52 df 44 01 0b a0  a0 02 60 83 84 fc ad 99  |..R.D.....`.....|
-00000180  fc 60 0b 23 0a 7a f9 73  bf d8 a5 af 9b ea dd a3  |.`.#.z.s........|
-00000190  fb 5b 41 17 95 0a 57 4a  94 7e 24 9f 31 74 06 65  |.[A...WJ.~$.1t.e|
-000001a0  95 90 40 20 17 0b 95 22  b8 49 4e a6 a4 be e1 74  |..@ ...".IN....t|
-000001b0  01 a2 7e cd 60 50 46 5c  fd 2a 88 90 ef 7f 6c b8  |..~.`PF\.*....l.|
-000001c0  3e a1 40 8e 91 cd 8d db  ad 81 d0 08 b0 d0 d7 ae  |>.@.............|
-000001d0  18 4f 47 9b 1a 66 8b a5  d2 fb 01 d3 67 79 46 71  |.OG..f......gyFq|
-000001e0  5a 49 dd df 06 c6 57 c7  e0 b1 60 39 d4 a9 37 88  |ZI....W...`9..7.|
-000001f0  31 0d c0 92 4e c7 2a 25  c4 df b0 d8 df bb 31 1b  |1...N.*%......1.|
-00000200  ff 0a 34 46 46 88 0b 11  7d 20 32 cd 01 d0 3f 11  |..4FF...} 2...?.|
-00000210  e1 6e 63 42 d7 4a 83 ab  ad f7 51 bd c3 37 2b 76  |.ncB.J....Q..7+v|
-00000220  9e bb 45 3b 81 d8 47 71  02 b9 fe 7c 56 46 78 3e  |..E;..Gq...|VFx>|
-00000230  9e 94 00 1b 98 17 72 37  c0 e5 36 a9 f0 02 b7 cf  |......r7..6.....|
-00000240  f0 b4 66 10 1b 91 07 5f  bb 22 e8 12 d9 e3 33 dd  |..f...._."....3.|
-00000250  87 66 e4 f6 00 f6 3a dc  19 59 af ce 8e ae c4 d3  |.f....:..Y......|
-00000260  03 d8 25 02 40 7e 95 70  31 85 53 bc 9e 96 11 69  |..%.@~.p1.S....i|
-00000270  5b 2f b9 17 48 f4 ae c5  a1 c5 d1 7f 4a 10 06 b6  |[/..H.......J...|
-00000280  2e 34 6c 09 12 17 03 03  00 99 16 4c 04 64 97 e0  |.4l........L.d..|
-00000290  26 e1 66 e9 34 05 d7 d3  75 e3 b9 de 56 15 51 67  |&.f.4...u...V.Qg|
-000002a0  fb fe 9a c6 9a 3c 38 08  2c c8 8c dd fe 49 c5 ed  |.....<8.,....I..|
-000002b0  a8 54 86 90 2c f6 7c d1  12 02 99 94 5e 2e 4b 4e  |.T..,.|.....^.KN|
-000002c0  84 e9 b4 96 5c dc 56 28  3d ea a9 4f 8f ad 51 ff  |....\.V(=..O..Q.|
-000002d0  02 b1 b9 7a 29 e5 32 7c  2a 8b 60 5d e2 fc b4 8f  |...z).2|*.`]....|
-000002e0  06 32 4a ea 37 ed 03 f0  68 72 b7 83 1f 04 10 2b  |.2J.7...hr.....+|
-000002f0  24 db 5b 10 6c 41 55 40  54 69 07 39 d4 db ac 10  |$.[.lAU@Ti.9....|
-00000300  77 9f 04 f4 b9 3f 35 7e  04 af ab 7a a0 47 b9 d9  |w....?5~...z.G..|
-00000310  4c 6e 25 00 ce ef 93 3f  28 2c 2d f6 42 e4 5f 3e  |Ln%....?(,-.B._>|
-00000320  26 92 13 17 03 03 00 35  fb 14 eb 5f 18 61 75 ba  |&......5..._.au.|
-00000330  e4 dc d2 95 fe 93 bb 54  29 e3 38 e3 59 54 81 9f  |.......T).8.YT..|
-00000340  4e 29 be c6 e6 cd ad 8c  9d 6a ad 28 ec d3 a6 e4  |N).......j.(....|
-00000350  bc 5e 8c df a8 7e 14 d8  69 3c 30 7c 0a 17 03 03  |.^...~..i<0|....|
-00000360  00 17 10 73 c0 75 88 af  51 90 ff 3f b2 83 47 27  |...s.u..Q..?..G'|
-00000370  19 c0 e6 cd 14 a4 c7 8d  a0 17 03 03 00 13 fb 1f  |................|
-00000380  ed 8e 47 c8 79 f9 53 df  6d 97 a7 1d 53 8d 80 85  |..G.y.S.m...S...|
-00000390  dd                                                |.|
+00000000  14 03 03 00 01 01 17 03  03 02 7a 3e 62 91 75 b4  |..........z>b.u.|
+00000010  58 7d 61 ac 42 4b 1b 91  86 cd 3f c0 6d 30 5a 01  |X}a.BK....?.m0Z.|
+00000020  11 1e 77 87 92 50 bb a0  d2 c6 84 b6 10 37 02 ab  |..w..P.......7..|
+00000030  2d c2 c2 12 0a db f5 8f  e4 1f dd 16 ec 83 ad db  |-...............|
+00000040  2d 8b ec fa aa 56 44 4e  d4 af ce d2 9f 44 3d de  |-....VDN.....D=.|
+00000050  12 29 db bc 29 2a df 99  d7 d0 53 79 84 a4 b8 2d  |.)..)*....Sy...-|
+00000060  8b 5c e6 a4 b7 98 07 5a  f4 63 10 21 87 13 09 07  |.\.....Z.c.!....|
+00000070  28 98 49 48 07 70 c1 ab  8b 62 6d 40 a8 47 27 67  |(.IH.p...bm@.G'g|
+00000080  d6 ad 29 8d 2e 14 34 14  18 6b dd f0 76 3b 91 f9  |..)...4..k..v;..|
+00000090  e1 93 a2 1c 3a 5e 18 a3  c9 ca b0 c9 cf d9 3c f5  |....:^........<.|
+000000a0  a3 38 c7 83 53 67 14 ba  65 6f 11 a2 ef 78 7e ea  |.8..Sg..eo...x~.|
+000000b0  4a 90 c9 aa bf e9 8e ff  8c 9d 7c 5f 56 c3 9b 16  |J.........|_V...|
+000000c0  c1 8a a9 51 24 20 86 dc  99 ac d2 28 af 7b 2d 6e  |...Q$ .....(.{-n|
+000000d0  16 9b 71 71 82 00 94 51  a4 4f 22 c1 26 a2 6f 67  |..qq...Q.O".&.og|
+000000e0  d9 45 ff 80 13 39 16 0f  9c 43 76 54 e5 12 0f 89  |.E...9...CvT....|
+000000f0  95 ed 75 df eb cb 6b d2  77 fd fa 37 d7 a3 31 b5  |..u...k.w..7..1.|
+00000100  61 47 69 8f 99 55 70 d0  96 b0 f7 a9 1b 53 69 a3  |aGi..Up......Si.|
+00000110  e4 59 cc a1 d9 4b d5 4f  e2 47 c1 53 30 60 50 03  |.Y...K.O.G.S0`P.|
+00000120  c7 07 67 3f 68 ce 8c 32  7e f1 93 12 ba d8 67 21  |..g?h..2~.....g!|
+00000130  71 4f c9 ca ae 7b 56 8d  f7 64 14 e3 8d d6 a6 ed  |qO...{V..d......|
+00000140  d0 63 5e 00 1e f7 8a 0c  1e c3 24 e0 bd e2 e8 99  |.c^.......$.....|
+00000150  da ca 01 9e fb 21 9e 1f  57 98 f1 36 7d c8 a8 7b  |.....!..W..6}..{|
+00000160  4b 27 13 fb 8c ab d6 b3  27 3e f5 b5 08 eb cb a9  |K'......'>......|
+00000170  b0 a4 d4 3e c9 14 08 75  51 83 48 03 e7 79 65 30  |...>...uQ.H..ye0|
+00000180  a4 1a 4f a8 7a 41 c8 af  9e 74 89 4d ec eb 58 9b  |..O.zA...t.M..X.|
+00000190  20 db 80 ce e0 c8 a7 1c  b2 62 fc 85 7d 87 ca 00  | ........b..}...|
+000001a0  64 4c 25 4d 3c b2 bf 9d  46 c5 04 b5 dd 7a 29 87  |dL%M<...F....z).|
+000001b0  29 30 2e bc 42 31 9b f2  eb 7b 58 63 91 28 6f 43  |)0..B1...{Xc.(oC|
+000001c0  6b c1 4e 00 b2 4b 9d 0c  ef 18 5b 61 ec 77 84 e1  |k.N..K....[a.w..|
+000001d0  88 49 f9 e2 71 2e 35 23  b8 73 6d c2 52 d1 2f ad  |.I..q.5#.sm.R./.|
+000001e0  55 40 4e a2 b0 14 1b 50  d7 9d 12 80 89 ab 88 a5  |U@N....P........|
+000001f0  01 16 88 d5 4f 95 0c ce  79 c7 49 27 4b 44 4d fe  |....O...y.I'KDM.|
+00000200  f5 cd 95 08 b9 26 8d 52  ff d7 bc 47 11 16 d5 d0  |.....&.R...G....|
+00000210  7d 4c 3c 04 74 92 5b 85  d2 2c 95 b8 4b 02 0b 66  |}L<.t.[..,..K..f|
+00000220  60 7d b9 12 6e d3 06 73  cc c2 69 b9 fe ad f9 4c  |`}..n..s..i....L|
+00000230  f6 24 a0 eb 96 f0 b8 7c  32 dc 4c 67 04 83 15 84  |.$.....|2.Lg....|
+00000240  f9 ef 70 e7 55 85 0e 8f  b3 78 20 2c ed 69 29 89  |..p.U....x ,.i).|
+00000250  d4 d8 5e 97 16 59 90 0f  79 41 6e cf 02 d3 9d 08  |..^..Y..yAn.....|
+00000260  e4 0c 27 0c 74 97 c6 d6  89 6b c9 65 37 7b ae 6b  |..'.t....k.e7{.k|
+00000270  b7 0f e8 70 57 a3 1c 95  8d 66 da 4e 34 51 c8 e0  |...pW....f.N4Q..|
+00000280  0e 83 e3 24 64 17 03 03  00 99 e3 31 2c ae ae 1c  |...$d......1,...|
+00000290  64 6c fc 36 c8 9f c2 88  16 c7 b2 ae 4a ef 3a 90  |dl.6........J.:.|
+000002a0  f4 ad f2 91 58 37 7c 94  c2 e3 ed 76 c5 90 fb e6  |....X7|....v....|
+000002b0  88 08 a6 a2 53 5a 78 cb  bd f2 3c 6e 36 b4 cd 87  |....SZx...XCK.>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,82 +7,81 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 a5 7b 07 50 bc  |....z...v...{.P.|
-00000010  01 11 74 76 99 fb 85 e5  40 6b 02 14 d9 64 b1 8a  |..tv....@k...d..|
-00000020  8b 78 a3 ee 2e 4d b0 96  14 3a fb 20 00 00 00 00  |.x...M...:. ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 24 80 76 3d db  |....z...v..$.v=.|
+00000010  cf 32 53 04 de ce 2e 74  95 bb 30 a8 d5 5e ab ed  |.2S....t..0..^..|
+00000020  3c 1e 1a ae 92 63 8f 40  0b ce a4 20 00 00 00 00  |<....c.@... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 67  |..+.....3.$... g|
-00000060  b0 dc 13 4f 2b 92 43 27  38 b5 2c 7a 3a 87 83 6f  |...O+.C'8.,z:..o|
-00000070  a1 cc 43 fa 90 9e 2e 4d  88 f6 60 d4 20 32 6a 14  |..C....M..`. 2j.|
-00000080  03 03 00 01 01 17 03 03  00 17 9b 51 d0 81 30 4b  |...........Q..0K|
-00000090  52 65 8b b5 fe 1a cc 44  c9 7a 10 83 41 0b 1a 00  |Re.....D.z..A...|
-000000a0  76 17 03 03 02 22 4e 55  d0 64 9c 41 c8 22 2c 9c  |v...."NU.d.A.",.|
-000000b0  0e 0a 0c 2b 2b 2e 6e 08  d5 54 75 61 99 bf ea f5  |...++.n..Tua....|
-000000c0  ca 12 3e 44 7f 81 a8 40  d1 7c 4d a0 a3 d2 f3 07  |..>D...@.|M.....|
-000000d0  40 af 68 81 69 dd 7c 77  24 26 87 73 73 5e d2 0c  |@.h.i.|w$&.ss^..|
-000000e0  2a 32 c5 34 50 ef a8 0f  63 12 3a 47 34 8f f2 c6  |*2.4P...c.:G4...|
-000000f0  9f bd 81 bf ea 69 47 04  8b 87 64 4e 67 81 10 a5  |.....iG...dNg...|
-00000100  f1 76 92 5e d6 11 a5 48  5b cc ef a8 43 dd cf f5  |.v.^...H[...C...|
-00000110  20 9d b8 2f f4 0d 92 10  55 af d1 fa ab 64 5f 99  | ../....U....d_.|
-00000120  3e 6b e9 70 70 f1 22 d9  05 04 89 3a fa 65 ae 91  |>k.pp."....:.e..|
-00000130  9d 07 ea 54 93 2d 02 0c  c0 70 d9 e9 f0 9a 5a 81  |...T.-...p....Z.|
-00000140  c6 c6 79 e0 e1 90 ad 34  78 bf d3 c8 9c 68 2e ac  |..y....4x....h..|
-00000150  e6 2d c0 e5 c8 3c 77 80  d7 dd e5 a4 ac b8 36 4f  |.-...@..I<..FW.Ye.|
-00000170  4e db 21 ea ab 72 47 79  e6 c1 4f ea 17 e3 b4 73  |N.!..rGy..O....s|
-00000180  9d e2 e5 72 be 88 0a 60  1e 35 02 67 33 a0 7a 05  |...r...`.5.g3.z.|
-00000190  b8 ae 05 b2 53 6c cd c5  e3 a5 16 56 2b b0 0e 8e  |....Sl.....V+...|
-000001a0  a0 ca 54 c0 34 6b 00 22  69 de e1 57 81 48 c6 1a  |..T.4k."i..W.H..|
-000001b0  cc 88 f6 15 1c 7e b6 1f  b0 48 82 75 6b ff 42 78  |.....~...H.uk.Bx|
-000001c0  f9 85 10 86 5b af 31 62  f6 7b d4 8a a6 86 3f 99  |....[.1b.{....?.|
-000001d0  9b ce 91 c0 4d 44 5b 3f  16 81 d0 a9 4a e0 2d 85  |....MD[?....J.-.|
-000001e0  a4 80 91 64 13 20 33 dc  84 48 da 79 2e 73 cb 78  |...d. 3..H.y.s.x|
-000001f0  9c 05 8a 6c 42 ce b0 b0  45 3c 05 47 47 f7 92 3b  |...lB...E<.GG..;|
-00000200  d2 fb 65 f0 40 a3 52 b7  aa 04 ae 71 84 35 12 7a  |..e.@.R....q.5.z|
-00000210  33 f8 8b 0d 21 a3 29 ad  78 de df 7f 53 71 fb 5f  |3...!.).x...Sq._|
-00000220  a5 ab 07 89 3a 1f e9 ca  6d 8d bb 04 39 8d b3 50  |....:...m...9..P|
-00000230  7e 2e bd 0f b8 ff 4f 3f  d1 a5 23 b9 80 33 da b0  |~.....O?..#..3..|
-00000240  2c dc 0f c2 26 b2 cf 59  d9 10 ef 66 52 40 e4 54  |,...&..Y...fR@.T|
-00000250  28 5e 7f c1 94 62 8f 4f  9b 94 fc c9 32 af f5 17  |(^...b.O....2...|
-00000260  5d 04 32 08 83 f4 90 68  68 01 d3 00 ed 82 f3 da  |].2....hh.......|
-00000270  81 2e d5 df 1e 13 c3 c3  76 83 c4 67 23 c4 32 c0  |........v..g#.2.|
-00000280  59 5d dd 56 78 d9 74 ef  7b d5 c9 13 4d 62 29 85  |Y].Vx.t.{...Mb).|
-00000290  ca 24 53 1a b1 2b 09 a1  a6 26 db 13 cf 2a 2b 92  |.$S..+...&...*+.|
-000002a0  85 a3 51 2b 24 e1 90 2a  fe 0c 74 ee 86 cc 3b 6a  |..Q+$..*..t...;j|
-000002b0  07 21 a6 b6 97 a4 e0 9f  3d 75 9a 2b 9e 91 ef d8  |.!......=u.+....|
-000002c0  c9 94 28 ba 40 e4 cc 6a  17 03 03 00 a4 ab c3 c1  |..(.@..j........|
-000002d0  32 1d 44 0d f7 85 e3 85  df 9e bb 0c 82 18 a2 9f  |2.D.............|
-000002e0  27 de 78 4f 06 9b 43 59  27 b5 8e 34 4d 96 b3 96  |'.xO..CY'..4M...|
-000002f0  af 8b 98 d0 36 91 52 df  9c aa c2 fe e7 0f ed ca  |....6.R.........|
-00000300  ef 57 73 97 cc c8 dc 7c  c8 15 73 ad a6 3e 54 93  |.Ws....|..s..>T.|
-00000310  1a ab 72 f6 e0 e3 cb bb  fe a5 d1 45 47 f3 1a 89  |..r........EG...|
-00000320  40 f7 9d f5 e4 61 16 fa  12 0a 62 24 a7 34 ab 6f  |@....a....b$.4.o|
-00000330  08 85 b2 fe b2 5c 49 59  7b cb 05 b2 e3 1a 37 79  |.....\IY{.....7y|
-00000340  b1 27 28 a5 ab ee ae 72  11 19 61 c0 3b ed 32 ec  |.'(....r..a.;.2.|
-00000350  57 26 76 8e 42 3c 98 4a  ec 10 4e e0 eb e2 19 3d  |W&v.B<.J..N....=|
-00000360  67 47 99 9c e5 97 a4 07  ff 7a b5 15 65 0e b9 e4  |gG.......z..e...|
-00000370  e3 17 03 03 00 35 61 d9  d8 36 a0 1e 83 b0 f8 1f  |.....5a..6......|
-00000380  74 61 a0 4b 93 7f 98 8b  63 1c 63 82 f4 cd 57 8d  |ta.K....c.c...W.|
-00000390  1f 75 7a 6d a9 1d e2 35  0b 2b 9a 5f 5f 71 cd 46  |.uzm...5.+.__q.F|
-000003a0  48 7f 27 af a5 da 8b 35  b1 18 39                 |H.'....5..9|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 d2  |..+.....3.$... .|
+00000060  b3 86 f1 35 22 26 89 f4  07 ab b8 f5 27 a6 d5 c9  |...5"&......'...|
+00000070  87 00 59 43 b8 df da 92  f6 f5 ed f4 8d 04 26 14  |..YC..........&.|
+00000080  03 03 00 01 01 17 03 03  00 17 ed 6b 14 3a 82 c5  |...........k.:..|
+00000090  88 9d a4 96 c7 c4 c7 73  63 c6 58 65 d0 d4 a6 cb  |.......sc.Xe....|
+000000a0  dc 17 03 03 02 22 e8 c5  15 54 3c 26 7b 87 8c d3  |....."...T<&{...|
+000000b0  99 b0 af 98 21 1b 8f be  f5 d8 40 c9 05 97 39 fd  |....!.....@...9.|
+000000c0  3d b2 da 2d 80 26 c9 24  cd 14 0b 48 2e d7 c4 dc  |=..-.&.$...H....|
+000000d0  4c 61 1e 5d 46 ce 66 cd  94 50 a4 e8 c4 d7 f0 48  |La.]F.f..P.....H|
+000000e0  20 16 52 fb 12 04 17 48  7d 65 49 50 c5 b8 e6 9c  | .R....H}eIP....|
+000000f0  be f6 58 09 ea 8b 94 51  93 cf 0d 7a 76 88 78 cb  |..X....Q...zv.x.|
+00000100  37 83 43 fa 37 d5 5b 3f  10 1d 07 b1 bb 9b ac 3a  |7.C.7.[?.......:|
+00000110  43 e0 62 b1 fe 64 43 83  53 49 96 9e 81 1c 05 64  |C.b..dC.SI.....d|
+00000120  40 2a 1b 98 5f ed 8d 47  52 2c db 84 8b 6a 1e 3b  |@*.._..GR,...j.;|
+00000130  de bb 7d 20 e6 cf 2a 79  2e c4 54 71 56 2f 79 45  |..} ..*y..TqV/yE|
+00000140  07 3f 05 6c 82 e8 ab f7  62 0a 28 e0 db 83 6b bd  |.?.l....b.(...k.|
+00000150  55 81 8f 3f b6 1f d0 83  cd 97 67 71 56 f5 13 aa  |U..?......gqV...|
+00000160  45 95 65 ce 1e 42 bf 6a  83 6e bc 2e 41 28 79 b7  |E.e..B.j.n..A(y.|
+00000170  b8 3f 6e 64 14 8d ed 3a  a4 02 06 46 17 e5 c7 f8  |.?nd...:...F....|
+00000180  72 f1 5f 9b 14 96 c9 c6  53 e6 32 b2 0b cc d5 d7  |r._.....S.2.....|
+00000190  89 1e d9 52 fb 8f 48 8b  41 6e c6 f3 55 57 41 5d  |...R..H.An..UWA]|
+000001a0  95 03 9c 34 ea 3c a8 58  8d b7 89 82 e1 40 e0 60  |...4.<.X.....@.`|
+000001b0  22 ab 23 30 e8 f0 4e 21  a1 11 0a 7f 18 80 ad de  |".#0..N!........|
+000001c0  41 ba a1 12 60 31 60 0f  84 f6 91 b1 ae ca f5 81  |A...`1`.........|
+000001d0  3e d6 4e 3a 89 b6 b0 fe  3f 27 18 20 65 a9 d4 6c  |>.N:....?'. e..l|
+000001e0  ac 8a 46 08 e2 7d 06 6d  52 8c 69 9e 24 9b 8d f9  |..F..}.mR.i.$...|
+000001f0  b7 a7 74 87 bd f9 84 ca  18 7d 5b 50 1d 8e 64 e1  |..t......}[P..d.|
+00000200  39 6f f7 56 5a ef 08 6b  e2 a1 87 e4 7a 5e ea b6  |9o.VZ..k....z^..|
+00000210  12 75 2d ee e9 af a4 36  99 91 88 11 97 f3 d5 fb  |.u-....6........|
+00000220  8b 52 59 bc 9c 18 03 5b  b1 59 47 ae d4 bb a1 65  |.RY....[.YG....e|
+00000230  cf bf 40 54 e5 e7 6e e0  0c 26 0e a1 d2 4d 41 19  |..@T..n..&...MA.|
+00000240  36 b5 b6 48 33 96 8a e3  a5 56 9b 34 16 ae 36 48  |6..H3....V.4..6H|
+00000250  c5 ff 12 a7 33 f4 76 40  de d1 4b 41 ed 18 3b 04  |....3.v@..KA..;.|
+00000260  06 32 6e f3 57 c6 be 72  58 7f 78 b7 91 65 00 a8  |.2n.W..rX.x..e..|
+00000270  8d 5c 7f ff 0a 62 d4 99  82 b2 6b c8 80 3e 89 30  |.\...b....k..>.0|
+00000280  dd 31 60 7a 00 6e a2 13  c7 58 08 b0 d5 32 03 2e  |.1`z.n...X...2..|
+00000290  08 86 a2 97 7a f0 a1 95  10 5f a2 d6 fc e7 a3 93  |....z...._......|
+000002a0  16 a2 3d 33 04 e7 aa 3b  99 a5 ce c7 2c 28 71 bb  |..=3...;....,(q.|
+000002b0  ed e6 b9 5a a5 ec d1 44  54 e0 ff 41 cf 1a cb ff  |...Z...DT..A....|
+000002c0  67 43 6b af 87 19 40 74  17 03 03 00 a4 bc ef 32  |gCk...@t.......2|
+000002d0  22 da e9 d5 93 ce 06 bd  3d 6c 2e f0 0c de ec b8  |".......=l......|
+000002e0  12 d6 28 17 c6 64 aa 8d  4b 04 76 9e 41 3c 4a 94  |..(..d..K.v.Aru@.0.|
+000003a0  fd 46 9d 5e 79 39 e1 a8  f9 27 2b                 |.F.^y9...'+|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 3d 13 d4 8c 88  |..........5=....|
-00000010  73 62 97 8b 18 04 f7 05  8d c8 56 d2 f4 0a 86 93  |sb........V.....|
-00000020  d4 6f 08 1c d8 7f 57 be  50 03 a7 4a c8 37 80 04  |.o....W.P..J.7..|
-00000030  43 1b 2a 86 21 25 ae 84  53 80 0c f6 4f 2e 73 67  |C.*.!%..S...O.sg|
-00000040  17 03 03 00 17 43 99 86  f2 2f a2 22 05 36 d8 47  |.....C.../.".6.G|
-00000050  c5 57 92 93 c7 79 d9 fd  13 70 8f 75 17 03 03 00  |.W...y...p.u....|
-00000060  13 15 90 47 ea af 57 89  d4 19 70 e7 e1 ce 68 8a  |...G..W...p...h.|
-00000070  7b 83 8c a5                                       |{...|
+00000000  14 03 03 00 01 01 17 03  03 00 35 09 35 dd b0 97  |..........5.5...|
+00000010  7b a4 5b ef 16 90 e4 15  aa 19 e4 5b e8 f1 11 c0  |{.[........[....|
+00000020  e0 fa 4b 0e df a3 4a 7c  cd 9a 0a c4 05 65 e9 5b  |..K...J|.....e.[|
+00000030  8b 0b e0 3c b2 5a cc eb  87 2b 67 0d 9f 19 d0 ec  |...<.Z...+g.....|
+00000040  17 03 03 00 17 68 1f ad  70 7c 49 62 6b 2f 67 15  |.....h..p|Ibk/g.|
+00000050  d1 bf bb 35 b3 b3 2b f3  12 27 b6 0e 17 03 03 00  |...5..+..'......|
+00000060  13 23 39 42 9f 8a 9e 68  41 39 fa 3b 50 bc 56 59  |.#9B...hA9.;P.VY|
+00000070  d0 3a 5a 9a                                       |.:Z.|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-Ed25519 b/src/crypto/tls/testdata/Client-TLSv13-Ed25519
index 274620a2576af4..3a2915d613e2e3 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-Ed25519
+++ b/src/crypto/tls/testdata/Client-TLSv13-Ed25519
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,64 +7,63 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 5a e2 b6 f0 cf  |....z...v..Z....|
-00000010  f2 85 49 e0 28 8c d7 89  41 39 5f a4 e8 41 9b f6  |..I.(...A9_..A..|
-00000020  1d 2b 3a 8a 3e a3 40 29  76 17 22 20 00 00 00 00  |.+:.>.@)v." ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 b2 4d aa 76 5b  |....z...v...M.v[|
+00000010  b7 38 95 18 e6 81 66 f8  27 82 26 2c b3 44 50 b0  |.8....f.'.&,.DP.|
+00000020  f4 a8 f5 f2 87 f0 9d 85  4f ac 60 20 00 00 00 00  |........O.` ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 d1  |..+.....3.$... .|
-00000060  41 fa 43 c4 c8 0a 98 e0  da 88 c8 58 36 ab 12 61  |A.C........X6..a|
-00000070  d5 2d 9a 5b 10 fd 1f 10  bf d4 df 23 d0 de 2c 14  |.-.[.......#..,.|
-00000080  03 03 00 01 01 17 03 03  00 17 bf 64 74 65 06 48  |...........dte.H|
-00000090  41 72 b9 9f 41 24 a9 d0  05 00 4e 8c 93 a8 bd 91  |Ar..A$....N.....|
-000000a0  ce 17 03 03 01 50 20 58  c1 4f 42 ed e9 e6 50 86  |.....P X.OB...P.|
-000000b0  5f 49 88 ac 8b b8 3d 25  1d 87 b5 7f 9f 1a a2 cd  |_I....=%........|
-000000c0  f2 90 d0 6d 13 ed a6 6c  f9 1e af c8 73 dd 68 d4  |...m...l....s.h.|
-000000d0  46 1f ce d4 74 87 57 0f  c1 b7 dd bd 5a 44 7c 08  |F...t.W.....ZD|.|
-000000e0  2d 60 ca 34 1f 94 ee 4a  cd e7 4a 69 1c 8d 4c 64  |-`.4...J..Ji..Ld|
-000000f0  e8 a1 90 89 75 e2 3b 5b  0e 58 f8 7a 0a fe 2d 6d  |....u.;[.X.z..-m|
-00000100  ee 82 ab 07 e3 09 ae 37  d5 d6 31 9f 47 a5 eb ca  |.......7..1.G...|
-00000110  fd d9 5e b3 f1 ab 8a 64  8f 66 7d e7 a5 66 b4 46  |..^....d.f}..f.F|
-00000120  3c 3c 2c 2f f7 5a 46 b3  e7 8b a4 3e 5f 21 ab 66  |<<,/.ZF....>_!.f|
-00000130  60 4d ca 20 4b 7b 75 5a  88 a5 65 97 1b 70 5b 69  |`M. K{uZ..e..p[i|
-00000140  7b 22 87 48 e4 a2 a8 32  06 65 00 91 e6 ac 6c 9b  |{".H...2.e....l.|
-00000150  42 04 53 f5 e5 46 72 d6  3a 7d d8 c1 e4 f1 79 dc  |B.S..Fr.:}....y.|
-00000160  de 7b 21 83 d0 98 90 99  2d 9d 78 67 89 31 2a 7d  |.{!.....-.xg.1*}|
-00000170  6a 97 c7 80 a9 2a 91 4e  e2 30 29 96 25 97 e9 94  |j....*.N.0).%...|
-00000180  2d 0a e0 30 8c e3 54 00  2a 29 e9 60 ef 4c 60 1c  |-..0..T.*).`.L`.|
-00000190  76 51 db 5d d7 7c 0c ae  f3 a8 9e 3b 49 c6 a7 ce  |vQ.].|.....;I...|
-000001a0  a3 e8 e6 8c 13 ea fa bd  7f 59 36 06 1e 0c 54 2d  |.........Y6...T-|
-000001b0  d2 75 8a 75 94 f3 5c 77  0a 8e a0 23 9f 21 d8 ed  |.u.u..\w...#.!..|
-000001c0  65 87 fa f0 65 e1 81 2b  45 50 91 9e 48 8f 4c 80  |e...e..+EP..H.L.|
-000001d0  7a c7 32 07 9a d9 d4 59  7a 7c 11 01 c2 75 fd 25  |z.2....Yz|...u.%|
-000001e0  15 7b de b1 72 54 42 9e  02 41 a8 1a 04 6a 64 ba  |.{..rTB..A...jd.|
-000001f0  97 48 48 48 24 3d 17 03  03 00 59 d7 53 12 64 01  |.HHH$=....Y.S.d.|
-00000200  d4 b7 e4 bf e1 33 f6 49  24 cf e8 6f 48 56 d6 1b  |.....3.I$..oHV..|
-00000210  e3 11 e9 a5 fb 7d f7 f5  b7 06 6c ce 4d e7 3c ca  |.....}....l.M.<.|
-00000220  bc 30 27 2e 02 4a 50 ec  7e 8c d4 cd 7a 78 43 3f  |.0'..JP.~...zxC?|
-00000230  5d 17 d7 bd 3e 78 68 21  ad 98 93 ad 90 de f7 c9  |]...>xh!........|
-00000240  ab 7d 36 59 7e 7b e8 10  92 de ee 44 a2 e3 df 41  |.}6Y~{.....D...A|
-00000250  6c a8 6c 9b 17 03 03 00  35 3a 9b 88 fc 4d 78 aa  |l.l.....5:...Mx.|
-00000260  a3 96 c7 f9 80 87 75 88  41 e6 58 9c f7 f6 88 0c  |......u.A.X.....|
-00000270  8f 57 8f 41 b7 49 a9 c2  db d6 44 51 a6 cb eb c3  |.W.A.I....DQ....|
-00000280  8d e5 32 19 4b e5 dd 4e  19 6b f4 38 cd 3d        |..2.K..N.k.8.=|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 e7  |..+.....3.$... .|
+00000060  c2 3e 68 73 d9 fd 6e 69  16 15 85 84 24 45 36 47  |.>hs..ni....$E6G|
+00000070  1b ad d9 c4 dc 4a 61 c6  12 5c 22 bf 1e 2f 59 14  |.....Ja..\"../Y.|
+00000080  03 03 00 01 01 17 03 03  00 17 0f a4 05 81 10 48  |...............H|
+00000090  c7 b7 78 9b 56 14 6c 9f  55 28 e3 4c 42 80 cc 1c  |..x.V.l.U(.LB...|
+000000a0  31 17 03 03 01 50 0d af  3b 08 02 84 89 42 b5 75  |1....P..;....B.u|
+000000b0  c5 8f 9f c2 b1 dc cb 7c  6a d5 31 41 9a 16 8f fa  |.......|j.1A....|
+000000c0  74 40 21 5d f9 cc b0 1d  30 80 87 9a b2 57 58 53  |t@!]....0....WXS|
+000000d0  2c 9e 5c 97 20 9c 81 77  16 25 62 9b fc a4 e1 9a  |,.\. ..w.%b.....|
+000000e0  80 c8 9a 4c f6 fc ae 79  a5 c2 26 4b 55 41 ff d0  |...L...y..&KUA..|
+000000f0  25 4b 70 c9 ad b6 04 80  65 19 e0 fe 05 e7 b4 dc  |%Kp.....e.......|
+00000100  53 8f f8 3b ed 2c df b9  08 c2 da 60 b9 23 17 50  |S..;.,.....`.#.P|
+00000110  da 0f 24 76 15 21 e6 e9  a8 f5 3e 08 cc 1b ee 92  |..$v.!....>.....|
+00000120  2b 01 92 8d f9 4f 5a 3a  53 11 fc 32 52 cc af cd  |+....OZ:S..2R...|
+00000130  7b 94 0e 76 10 c2 16 36  2d a4 64 69 1c 05 70 20  |{..v...6-.di..p |
+00000140  0d 23 cd 4a 33 c5 c7 db  db 0f f8 b6 42 0c 83 0a  |.#.J3.......B...|
+00000150  a1 73 68 fb 87 2c 9d d2  d3 cf d7 3a bb 36 7e 83  |.sh..,.....:.6~.|
+00000160  c3 3f bc e2 61 d9 c2 8b  15 a2 cc bf 14 a0 69 f4  |.?..a.........i.|
+00000170  22 02 a9 ff 5e 55 37 6e  61 86 71 73 94 2f 7e 50  |"...^U7na.qs./~P|
+00000180  45 96 cf 23 dd 39 90 5d  57 04 a3 d0 9f 97 f8 56  |E..#.9.]W......V|
+00000190  fa cf 7a a9 e6 57 1f cb  33 a0 82 7a 84 94 1f 6d  |..z..W..3..z...m|
+000001a0  d8 0b c7 fb bc 62 94 36  4a d6 96 ce f6 f2 7f 06  |.....b.6J.......|
+000001b0  18 59 66 77 77 12 8c 74  06 61 8f b6 37 35 65 fd  |.Yfww..t.a..75e.|
+000001c0  f1 0b fe e6 cc a9 64 f5  b5 0d 06 4e 38 4b 4b 78  |......d....N8KKx|
+000001d0  be 6a cc 67 9e 39 f8 f2  27 33 a9 2d bc 9c 5e 06  |.j.g.9..'3.-..^.|
+000001e0  b9 fb 76 0c be 8d 2a a5  6d cf 83 55 4f c5 6e 6e  |..v...*.m..UO.nn|
+000001f0  d0 08 8b f6 5a 61 17 03  03 00 59 c1 cc 58 14 33  |....Za....Y..X.3|
+00000200  5a 39 b5 40 46 e8 b1 28  06 08 22 d3 27 b4 e6 ef  |Z9.@F..(..".'...|
+00000210  10 79 08 d4 ce 9e e2 cb  0b 86 a4 b1 80 e4 1b ac  |.y..............|
+00000220  71 15 fd 16 5b aa 01 c2  7b e3 c2 84 01 c0 f6 04  |q...[...{.......|
+00000230  a7 31 2b ec f2 50 bf 5a  07 6f b8 03 9f d2 c6 ad  |.1+..P.Z.o......|
+00000240  73 18 81 f5 fd 9a 5a b2  bc 9f 85 94 9f f6 da da  |s.....Z.........|
+00000250  dd 56 bc 66 17 03 03 00  35 9f 7e 2e 02 66 bb ac  |.V.f....5.~..f..|
+00000260  3d d8 92 70 c9 35 c6 df  ff 0f 81 b5 ca d4 56 4a  |=..p.5........VJ|
+00000270  24 06 06 57 28 e9 9d 82  0e 40 06 a7 f8 cc bc 6c  |$..W(....@.....l|
+00000280  a2 ea 2b 0e 88 77 05 de  3d 30 a0 6f bc 98        |..+..w..=0.o..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 64 73 84 51 69  |..........5ds.Qi|
-00000010  81 4c a7 ce 8b 39 08 0e  0f 25 d2 24 49 3c 9d 98  |.L...9...%.$I<..|
-00000020  c7 46 f5 7e ba bd d1 9d  79 d3 f6 cb 29 00 95 90  |.F.~....y...)...|
-00000030  c2 fa c6 65 01 f2 9d 12  a7 db 14 49 e6 0b 40 c9  |...e.......I..@.|
-00000040  17 03 03 00 17 df ad 2a  5f f7 bd 94 90 dd 11 24  |.......*_......$|
-00000050  b8 97 6e fc d3 93 91 47  36 26 2d e1 17 03 03 00  |..n....G6&-.....|
-00000060  13 40 ad 3c c3 49 76 47  c0 02 f0 bc 80 66 3c e4  |.@.<.IvG.....f<.|
-00000070  35 28 eb b5                                       |5(..|
+00000000  14 03 03 00 01 01 17 03  03 00 35 1c 60 8f 01 6b  |..........5.`..k|
+00000010  7c e3 d4 28 24 d8 7c 85  7f 63 44 23 97 7c a0 de  ||..($.|..cD#.|..|
+00000020  70 61 9e d9 ce 35 d9 3b  81 68 09 12 c1 b9 5e f5  |pa...5.;.h....^.|
+00000030  32 23 9b 47 fc be 74 3c  e6 1b 3f cd e8 c1 f1 4f  |2#.G..t<..?....O|
+00000040  17 03 03 00 17 1a 16 bc  fe 99 30 d8 97 c1 00 d9  |..........0.....|
+00000050  fd 1a 44 bd 84 35 dc 66  62 eb 28 3d 17 03 03 00  |..D..5.fb.(=....|
+00000060  13 b4 8a 54 df ae 97 ce  2e ae fa 38 ca 02 a1 d6  |...T.......8....|
+00000070  f5 40 64 2b                                       |.@d+|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial b/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
index 13fb6048748dac..13ae97153af48b 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
+++ b/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,86 +7,85 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 67 c5 21 e2 8b  |....z...v..g.!..|
-00000010  b6 6a cc 42 40 24 b2 4f  55 61 d9 20 78 e2 e3 40  |.j.B@$.OUa. x..@|
-00000020  83 62 3d 08 e3 0a 31 0b  55 f5 b6 20 00 00 00 00  |.b=...1.U.. ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 48 e6 a7 a9 4c  |....z...v..H...L|
+00000010  c3 a7 cc 18 b7 71 7d ed  c5 6a cb ca b5 9f 00 fd  |.....q}..j......|
+00000020  f8 2c ac 9c 1f 24 27 b9  c6 55 8e 20 00 00 00 00  |.,...$'..U. ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 ba  |..+.....3.$... .|
-00000060  d1 5b 5d b4 ca a0 c2 a8  20 f2 d4 12 03 c1 95 ba  |.[]..... .......|
-00000070  f0 ca 33 f0 22 56 f6 15  2c 15 b9 7b c6 78 6a 14  |..3."V..,..{.xj.|
-00000080  03 03 00 01 01 17 03 03  00 17 da b1 6a 79 21 51  |............jy!Q|
-00000090  6b 2a 57 47 22 f1 be 5d  24 36 ec 0f 82 fd bf b8  |k*WG"..]$6......|
-000000a0  5e 17 03 03 02 6d e7 ed  1e c2 be f9 15 80 5e 01  |^....m........^.|
-000000b0  73 b7 57 07 40 68 ae 88  d6 43 eb 6b fb 0c a3 4e  |s.W.@h...C.k...N|
-000000c0  b3 86 9d 5b 92 8a 1c da  a2 9b a5 11 a3 e4 4e 2c  |...[..........N,|
-000000d0  8d 3f 96 20 ec 13 e8 ea  10 47 4a 4a cd 64 ad f9  |.?. .....GJJ.d..|
-000000e0  48 af 11 58 ff 2f cd 29  6e 8e 0f fc 31 96 29 b4  |H..X./.)n...1.).|
-000000f0  df 57 e4 e9 65 62 b5 35  8e 7f a0 36 1d b1 fd 19  |.W..eb.5...6....|
-00000100  c1 b8 7e d9 59 44 a8 3c  97 15 57 fa 64 95 c8 ff  |..~.YD.<..W.d...|
-00000110  db a5 12 85 86 2c aa bc  87 f1 7e f3 2c 08 64 05  |.....,....~.,.d.|
-00000120  4a b1 8e a3 6a 26 e3 e8  fd 80 47 3c 9c a3 4a bb  |J...j&....G<..J.|
-00000130  73 9b 5d 6e 18 06 ac e5  63 de a8 53 e4 a1 b0 41  |s.]n....c..S...A|
-00000140  6a 88 ab 91 94 df 77 55  11 eb 29 97 69 59 67 19  |j.....wU..).iYg.|
-00000150  b3 23 df bf 2c ac 15 03  77 88 ad bf df 8d 4e 96  |.#..,...w.....N.|
-00000160  59 86 9b 77 e9 74 fc 29  c6 cd 65 c9 aa 7a 36 9b  |Y..w.t.)..e..z6.|
-00000170  11 f8 47 fd 8b 59 8b 26  8c f4 f1 f1 38 12 0e 02  |..G..Y.&....8...|
-00000180  e8 27 f2 ce bc 4a be c3  22 ff ae ce ef 31 d0 4c  |.'...J.."....1.L|
-00000190  d2 13 b3 1b 40 fd a0 c0  e9 f3 00 54 cf b8 9c 9d  |....@......T....|
-000001a0  2c 4b de 9a f8 82 11 e7  ea eb cf 45 99 a2 f8 ff  |,K.........E....|
-000001b0  53 71 e5 e0 bd f1 bb 4e  eb 39 7f 85 c4 e9 0d c0  |Sq.....N.9......|
-000001c0  46 de b4 1b 0e 1f 18 8c  5b cf 12 03 8a 91 06 23  |F.......[......#|
-000001d0  3f f3 54 3e e9 e6 e1 2c  84 d3 4e cc 16 f6 aa 92  |?.T>...,..N.....|
-000001e0  6b 24 30 5d f8 a0 52 ca  02 9a 50 58 43 b6 22 04  |k$0]..R...PXC.".|
-000001f0  47 c6 ba 1c e1 aa c2 2c  ca 50 13 de 2b 2b 34 ec  |G......,.P..++4.|
-00000200  80 8c 34 77 20 ab f3 f3  42 d2 9a 2b 9d 38 32 f9  |..4w ...B..+.82.|
-00000210  de 9c 7b ee 22 4f 41 9e  ea 35 88 8c e7 74 f6 ac  |..{."OA..5...t..|
-00000220  a5 fe af d9 c4 b1 a4 87  aa 9f d9 02 3b 4b 92 2b  |............;K.+|
-00000230  f4 ea 6f 81 b8 54 ca 77  3d a2 37 f0 60 d8 26 e4  |..o..T.w=.7.`.&.|
-00000240  27 04 c8 5b bf bc 5e 9c  8b a9 f6 c1 58 31 de 48  |'..[..^.....X1.H|
-00000250  67 5b c5 d7 ae 35 cc d8  8d 01 9b e0 d0 c7 33 f8  |g[...5........3.|
-00000260  36 c1 e8 50 32 27 87 6c  64 71 27 3f 66 82 fa 92  |6..P2'.ldq'?f...|
-00000270  d3 fe b9 9e d3 e2 63 43  64 13 73 4b e9 34 d9 ae  |......cCd.sK.4..|
-00000280  49 dd 9c 17 f3 a6 34 27  3e 07 68 ed 6b 98 0a 69  |I.....4'>.h.k..i|
-00000290  9c f5 4f 1e fc ac 72 08  7e bb bd 97 fe f9 c1 09  |..O...r.~.......|
-000002a0  a2 69 75 c4 e7 a1 83 df  03 0f 74 21 e8 4c 4c d7  |.iu.......t!.LL.|
-000002b0  a2 90 5a 4d d9 a2 fa f1  e4 dc ff 75 e8 fe a1 91  |..ZM.......u....|
-000002c0  46 a4 c2 0b c3 9e 83 45  40 b4 ba fe ed 9e 3a 81  |F......E@.....:.|
-000002d0  a9 27 b9 fa 6f 9e 38 10  2f e6 05 9a 00 43 e9 fb  |.'..o.8./....C..|
-000002e0  60 b8 26 2e 18 4a 0c 14  6a 9f aa 26 1d 53 9e 4f  |`.&..J..j..&.S.O|
-000002f0  fc 7e e1 90 60 28 b1 89  db b6 68 58 5d 2a fa 43  |.~..`(....hX]*.C|
-00000300  91 99 c1 94 74 77 a9 30  cf 1e 9d 49 fc cd be 6c  |....tw.0...I...l|
-00000310  5a 72 90 17 03 03 00 99  1b 1f 16 9b 8e 85 5a 8a  |Zr............Z.|
-00000320  3c c7 d8 e5 86 20 eb 71  83 12 e7 3b 02 ca a1 18  |<.... .q...;....|
-00000330  aa b7 ef 67 9d bf 57 46  14 3b ed b2 9b 2e f1 96  |...g..WF.;......|
-00000340  67 b0 cc 20 ab 67 63 5c  a9 96 d8 22 8e fa f0 94  |g.. .gc\..."....|
-00000350  1e 83 6c 53 8a 75 a5 37  1d f1 de 1f a7 22 13 08  |..lS.u.7....."..|
-00000360  b7 13 dd 25 26 eb 7a 85  72 33 ed a8 27 be cc ff  |...%&.z.r3..'...|
-00000370  8d 42 fa 6a f8 0a 59 44  6f 48 4d 58 27 d5 28 fb  |.B.j..YDoHMX'.(.|
-00000380  37 b0 85 25 49 d0 32 7c  dd b8 46 1a aa dc 16 b7  |7..%I.2|..F.....|
-00000390  f2 fd 99 17 67 41 c0 2d  75 0d 66 ef 65 e2 5f af  |....gA.-u.f.e._.|
-000003a0  d8 b4 aa 15 1c 24 40 0d  0d 4f a8 bc c9 92 1c ab  |.....$@..O......|
-000003b0  91 17 03 03 00 35 f9 69  7e 2a d6 fa 6e 42 25 6c  |.....5.i~*..nB%l|
-000003c0  da 96 f7 79 5f 02 44 1f  d8 1c a2 41 fc eb a5 12  |...y_.D....A....|
-000003d0  bf 37 ab b0 40 92 55 50  64 8e 7b e9 e5 f3 04 b5  |.7..@.UPd.{.....|
-000003e0  0f 04 93 98 fa ca 24 69  a1 73 26                 |......$i.s&|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 dd  |..+.....3.$... .|
+00000060  be 27 eb a0 9c b1 22 6a  8c 29 9a d4 47 c2 ee 14  |.'...."j.)..G...|
+00000070  39 0c 60 81 c9 06 3f dc  e5 e0 24 9a c4 88 35 14  |9.`...?...$...5.|
+00000080  03 03 00 01 01 17 03 03  00 17 25 70 5a e5 6b 9e  |..........%pZ.k.|
+00000090  56 b9 cf 83 48 b0 bc 99  6a 86 e1 cb 4e ce b5 10  |V...H...j...N...|
+000000a0  e0 17 03 03 02 6d c7 a6  79 ef b0 81 d6 e4 0e 02  |.....m..y.......|
+000000b0  59 32 88 cc b1 0d 53 f6  33 9b d2 e8 74 a9 0a a7  |Y2....S.3...t...|
+000000c0  f9 76 e9 6e 0d 16 75 0b  e0 8f 5c b5 31 47 6b 68  |.v.n..u...\.1Gkh|
+000000d0  52 c7 c2 84 cb 48 81 a3  da bd a1 50 5c ec 5c a7  |R....H.....P\.\.|
+000000e0  10 01 58 cc 03 c3 53 04  03 69 80 f4 ad 4d ce 72  |..X...S..i...M.r|
+000000f0  26 4e 6c c7 2c 31 69 2b  fd 97 67 5e 7d e0 05 b3  |&Nl.,1i+..g^}...|
+00000100  f4 40 64 a1 bd a3 fd a8  f9 7b 18 82 89 8f 25 f9  |.@d......{....%.|
+00000110  ca ca c4 8f e4 90 7b 26  7a d5 b2 1e fa 05 db ad  |......{&z.......|
+00000120  8a 9f 93 e9 13 5b 28 cc  cb 8b 30 f2 4c 1d 73 09  |.....[(...0.L.s.|
+00000130  7f 6b 63 5c 29 36 2f fc  a5 6e eb 24 79 f8 7c 63  |.kc\)6/..n.$y.|c|
+00000140  1f ef 41 72 98 69 7c d6  8d f9 76 d4 4d af b0 71  |..Ar.i|...v.M..q|
+00000150  2e f7 f8 b5 73 45 05 52  fa 25 46 02 28 0d d9 7a  |....sE.R.%F.(..z|
+00000160  60 13 b9 6c 6d fb f3 be  e3 04 74 76 72 d6 a4 91  |`..lm.....tvr...|
+00000170  d1 2c 0d 1e fa 23 ef c7  80 ff 1e aa 1b af 50 58  |.,...#........PX|
+00000180  77 ea 49 d9 22 4d ed bc  bf a6 0a 41 8e e7 5b 31  |w.I."M.....A..[1|
+00000190  de 33 05 10 46 a5 54 aa  5e 90 5c 15 64 2d 1b e9  |.3..F.T.^.\.d-..|
+000001a0  5c fc 93 8d 2f b2 af 74  d7 d2 c6 7f 27 68 fd 44  |\.../..t....'h.D|
+000001b0  13 60 70 87 e8 08 e1 e2  af 7f 1a 2c 29 5f 45 fe  |.`p........,)_E.|
+000001c0  49 9a d0 42 c9 51 ef f7  5b ae 02 df 27 1c 29 20  |I..B.Q..[...'.) |
+000001d0  35 4f 3d 7d 74 97 0c 20  be f8 a3 c9 b7 ff 65 69  |5O=}t.. ......ei|
+000001e0  08 89 92 fe 85 65 9f 8a  00 4b 9f 39 8d 6f 29 7c  |.....e...K.9.o)||
+000001f0  7c e9 16 e4 bd 06 a3 b0  5b 7f cf f0 74 14 56 a2  ||.......[...t.V.|
+00000200  76 61 b8 79 10 44 55 4f  25 55 a7 be a4 eb 2e 7d  |va.y.DUO%U.....}|
+00000210  9a b8 7a d8 d7 34 b6 ef  6c f7 fb ef fd 16 c2 61  |..z..4..l......a|
+00000220  89 bb 98 22 c6 80 9e 33  7f e9 35 7a 58 b6 33 1c  |..."...3..5zX.3.|
+00000230  d6 87 68 b7 62 21 3b 26  9b f1 b1 f2 92 d5 4b 19  |..h.b!;&......K.|
+00000240  02 58 05 3c 81 cf 00 5a  54 86 a5 61 8f 71 ae 32  |.X.<...ZT..a.q.2|
+00000250  f2 0f 08 3b 13 4d f3 e6  03 2e 73 9c 50 4a b7 6c  |...;.M....s.PJ.l|
+00000260  d8 0a 04 fc b5 44 a5 45  c8 86 c9 9f 29 b4 00 90  |.....D.E....)...|
+00000270  d8 8b e0 c8 ba 63 9f 42  65 ef ba 5b dc b2 61 53  |.....c.Be..[..aS|
+00000280  e6 4b 29 72 51 c9 21 d4  d7 2d 14 56 82 80 32 36  |.K)rQ.!..-.V..26|
+00000290  fd 72 b6 16 6f 06 71 f9  60 4f 32 ce f6 83 94 75  |.r..o.q.`O2....u|
+000002a0  d9 23 d3 41 f8 e7 90 60  80 a8 a5 95 c0 a2 dd 2e  |.#.A...`........|
+000002b0  e7 60 73 5b c0 a5 a0 bd  8b bc cc 32 8a 9e 30 6a  |.`s[.......2..0j|
+000002c0  72 2f 61 24 56 0b 1e 3e  52 92 d2 e0 11 cd 52 69  |r/a$V..>R.....Ri|
+000002d0  c4 73 7f 72 95 fd f5 c4  72 d7 77 73 85 bf be e0  |.s.r....r.ws....|
+000002e0  cd 3c 3b 3d 92 63 91 ba  c8 a8 d2 32 40 6a 33 91  |.<;=.c.....2@j3.|
+000002f0  c0 71 fe ea 76 9f a9 96  dc c0 a9 bd 67 b6 23 42  |.q..v.......g.#B|
+00000300  d9 1b 3d 8d d4 5f 81 38  74 1c db 36 9e bd 79 fd  |..=.._.8t..6..y.|
+00000310  30 c5 db 17 03 03 00 99  61 1e 25 cb 11 26 61 72  |0.......a.%..&ar|
+00000320  a0 9a de 5b ad 5b ad 8a  29 43 eb 76 5a 16 a4 d3  |...[.[..)C.vZ...|
+00000330  d4 a1 84 e4 7e a1 2b 76  75 b6 a5 a6 36 da d3 bf  |....~.+vu...6...|
+00000340  0c 3a 39 ca ef 3f 02 22  63 3d 5d c1 30 94 ba 32  |.:9..?."c=].0..2|
+00000350  fe c0 20 c1 ba c8 fa 29  e8 1c c6 ab f0 c9 53 a4  |.. ....)......S.|
+00000360  73 d0 9a 2d 50 d8 b4 0c  db e5 4a 9f 98 38 34 c9  |s..-P.....J..84.|
+00000370  9f ff 63 a9 50 7b 26 00  64 26 4d 0d 20 d5 e5 27  |..c.P{&.d&M. ..'|
+00000380  e1 41 7b 5a 03 97 0a 14  8c 55 3c 45 4b 72 ce de  |.A{Z.....U>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 80 f8 9b f1 1d  |..........5.....|
-00000010  89 31 a8 ea b8 cc 44 a7  6c c3 f7 ea 0f fd f4 a3  |.1....D.l.......|
-00000020  4c c2 15 06 bd 79 16 90  a1 bf 44 df e5 21 03 ff  |L....y....D..!..|
-00000030  e5 83 08 67 70 09 11 21  8e 96 47 e6 f4 e3 36 6e  |...gp..!..G...6n|
-00000040  17 03 03 00 17 7b 87 be  4e f8 ce 6f 30 b8 5b 95  |.....{..N..o0.[.|
-00000050  20 79 23 f7 50 6b 17 b8  13 a2 38 6a 17 03 03 00  | y#.Pk....8j....|
-00000060  13 2a d5 e0 a4 17 7d 4f  3b 5a 6c bc 9d 5a 79 5b  |.*....}O;Zl..Zy[|
-00000070  a8 f6 b2 4a                                       |...J|
+00000000  14 03 03 00 01 01 17 03  03 00 35 a6 7f ef 71 68  |..........5...qh|
+00000010  8b 86 84 20 a6 e7 65 3f  3f f8 c6 8b 62 40 31 e2  |... ..e??...b@1.|
+00000020  1a ee 8d 0a 64 88 ea 4b  83 5f c5 ff 1b 9d aa 5f  |....d..K._....._|
+00000030  ce a4 31 76 06 90 da ad  b9 17 49 0b a6 b5 37 80  |..1v......I...7.|
+00000040  17 03 03 00 17 2b be e8  98 11 37 0d db 46 69 0d  |.....+....7..Fi.|
+00000050  51 34 ee 13 00 c3 f1 12  8a 13 21 b7 17 03 03 00  |Q4........!.....|
+00000060  13 8d ec 94 6f 55 b1 d5  c0 d6 a3 6e a2 8d 67 76  |....oU.....n..gv|
+00000070  7b c7 b8 1d                                       |{...|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest b/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
index 4d58f8d440da5b..a669920d938177 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
+++ b/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 14 01 00 01  10 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fa 01 00 00  f6 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,16 +7,14 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 95 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7b 00 0b 00 02  01 00 ff 01 00 01 00 00  |...{............|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
-000000a0  00 0a 00 06 00 04 00 1d  00 17 00 0d 00 16 00 14  |................|
+000000a0  00 0a 00 06 00 04 00 1d  00 17 00 0d 00 1a 00 18  |................|
 000000b0  08 04 04 03 08 07 08 05  08 06 04 01 05 01 06 01  |................|
-000000c0  05 03 06 03 00 32 00 1a  00 18 08 04 04 03 08 07  |.....2..........|
-000000d0  08 05 08 06 04 01 05 01  06 01 05 03 06 03 02 01  |................|
-000000e0  02 03 00 2b 00 09 08 03  04 03 03 03 02 03 01 00  |...+............|
-000000f0  33 00 26 00 24 00 1d 00  20 2f e5 7d a3 47 cd 62  |3.&.$... /.}.G.b|
-00000100  43 15 28 da ac 5f bb 29  07 30 ff f6 84 af c4 cf  |C.(.._.).0......|
-00000110  c2 ed 90 99 5f 58 cb 3b  74                       |...._X.;t|
+000000c0  05 03 06 03 02 01 02 03  00 2b 00 09 08 03 04 03  |.........+......|
+000000d0  03 03 02 03 01 00 33 00  26 00 24 00 1d 00 20 2f  |......3.&.$... /|
+000000e0  e5 7d a3 47 cd 62 43 15  28 da ac 5f bb 29 07 30  |.}.G.bC.(.._.).0|
+000000f0  ff f6 84 af c4 cf c2 ed  90 99 5f 58 cb 3b 74     |.........._X.;t|
 >>> Flow 2 (server to client)
 00000000  16 03 03 00 58 02 00 00  54 03 03 cf 21 ad 74 e5  |....X...T...!.t.|
 00000010  9a 61 11 be 1d 8c 02 1e  65 b8 91 c2 a2 11 16 7a  |.a......e......z|
@@ -26,7 +24,7 @@
 00000050  0c 00 2b 00 02 03 04 00  33 00 02 00 17 14 03 03  |..+.....3.......|
 00000060  00 01 01                                          |...|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 16 03  03 01 35 01 00 01 31 03  |..........5...1.|
+00000000  14 03 03 00 01 01 16 03  03 01 1b 01 00 01 17 03  |................|
 00000010  03 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000030  00 20 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |. ..............|
@@ -34,89 +32,88 @@
 00000050  00 00 00 32 cc a9 cc a8  c0 2b c0 2f c0 2c c0 30  |...2.....+./.,.0|
 00000060  c0 09 c0 13 c0 0a c0 14  00 9c 00 9d 00 2f 00 35  |............./.5|
 00000070  c0 12 00 0a c0 23 c0 27  00 3c c0 07 c0 11 00 05  |.....#.'.<......|
-00000080  13 03 13 01 13 02 01 00  00 b6 00 0b 00 02 01 00  |................|
+00000080  13 03 13 01 13 02 01 00  00 9c 00 0b 00 02 01 00  |................|
 00000090  ff 01 00 01 00 00 17 00  00 00 12 00 00 00 05 00  |................|
 000000a0  05 01 00 00 00 00 00 0a  00 06 00 04 00 1d 00 17  |................|
-000000b0  00 0d 00 16 00 14 08 04  04 03 08 07 08 05 08 06  |................|
-000000c0  04 01 05 01 06 01 05 03  06 03 00 32 00 1a 00 18  |...........2....|
-000000d0  08 04 04 03 08 07 08 05  08 06 04 01 05 01 06 01  |................|
-000000e0  05 03 06 03 02 01 02 03  00 2b 00 09 08 03 04 03  |.........+......|
-000000f0  03 03 02 03 01 00 33 00  47 00 45 00 17 00 41 04  |......3.G.E...A.|
-00000100  1e 18 37 ef 0d 19 51 88  35 75 71 b5 e5 54 5b 12  |..7...Q.5uq..T[.|
-00000110  2e 8f 09 67 fd a7 24 20  3e b2 56 1c ce 97 28 5e  |...g..$ >.V...(^|
-00000120  f8 2b 2d 4f 9e f1 07 9f  6c 4b 5b 83 56 e2 32 42  |.+-O....lK[.V.2B|
-00000130  e9 58 b6 d7 49 a6 b5 68  1a 41 03 56 6b dc 5a 89  |.X..I..h.A.Vk.Z.|
+000000b0  00 0d 00 1a 00 18 08 04  04 03 08 07 08 05 08 06  |................|
+000000c0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 2b  |...............+|
+000000d0  00 09 08 03 04 03 03 03  02 03 01 00 33 00 47 00  |............3.G.|
+000000e0  45 00 17 00 41 04 1e 18  37 ef 0d 19 51 88 35 75  |E...A...7...Q.5u|
+000000f0  71 b5 e5 54 5b 12 2e 8f  09 67 fd a7 24 20 3e b2  |q..T[....g..$ >.|
+00000100  56 1c ce 97 28 5e f8 2b  2d 4f 9e f1 07 9f 6c 4b  |V...(^.+-O....lK|
+00000110  5b 83 56 e2 32 42 e9 58  b6 d7 49 a6 b5 68 1a 41  |[.V.2B.X..I..h.A|
+00000120  03 56 6b dc 5a 89                                 |.Vk.Z.|
 >>> Flow 4 (server to client)
-00000000  16 03 03 00 9b 02 00 00  97 03 03 3e b5 60 d1 cd  |...........>.`..|
-00000010  f5 a6 76 2c bd 49 f6 0f  c2 ff ff 6b c9 f6 45 19  |..v,.I.....k..E.|
-00000020  f6 e3 e7 fc 31 8b 49 4e  88 29 55 20 00 00 00 00  |....1.IN.)U ....|
+00000000  16 03 03 00 9b 02 00 00  97 03 03 9a 1f 7a fa 06  |.............z..|
+00000010  c4 5f 92 61 62 d2 a5 f3  ae b9 a6 d8 6b eb 13 a7  |._.ab.......k...|
+00000020  2f 17 62 79 3a ca 42 8b  18 06 15 20 00 00 00 00  |/.by:.B.... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
 00000050  4f 00 2b 00 02 03 04 00  33 00 45 00 17 00 41 04  |O.+.....3.E...A.|
-00000060  f8 a5 4d 81 0a 05 43 42  0b d6 ca 3b 3e 02 44 20  |..M...CB...;>.D |
-00000070  56 89 80 d3 03 50 1a b4  70 50 78 aa 81 2b 5b 03  |V....P..pPx..+[.|
-00000080  6c 38 22 c1 17 4f e5 b9  57 ab 58 33 76 8e ae c9  |l8"..O..W.X3v...|
-00000090  a0 74 47 a0 10 c0 5c a7  8c 77 24 c8 90 bb f4 2a  |.tG...\..w$....*|
-000000a0  17 03 03 00 17 0c 2a 67  cb 9f a8 e8 5b 97 4a 75  |......*g....[.Ju|
-000000b0  24 80 65 28 15 a7 d4 71  eb 24 74 7e 17 03 03 02  |$.e(...q.$t~....|
-000000c0  6d 89 a3 fa 0f a6 dd dc  b5 5a f9 03 93 5a 2a a6  |m........Z...Z*.|
-000000d0  2f 65 81 9e 0d 2c 21 25  0b 7c 04 41 40 3e 95 a4  |/e...,!%.|.A@>..|
-000000e0  31 21 2a 08 db 35 bc 5a  93 aa b4 8f 30 28 0c e5  |1!*..5.Z....0(..|
-000000f0  11 f6 31 d6 7a b0 df 9c  f3 76 30 72 e2 27 1c d3  |..1.z....v0r.'..|
-00000100  75 68 3d 63 71 27 da 72  7a 18 19 da 25 94 ee e3  |uh=cq'.rz...%...|
-00000110  62 6f 45 c5 38 67 ba 4a  1f 6f f3 ea 46 c6 09 ad  |boE.8g.J.o..F...|
-00000120  db 3c 42 3c d7 8d 9c 49  8d 2c 22 15 74 98 60 5b  |...|
-00000190  c6 b2 c3 eb ec 03 7d d2  85 2b c3 7f e7 07 c1 50  |......}..+.....P|
-000001a0  c9 b6 6f ab 7a 86 7b b3  fd 8b 9a 6a 3c ea 18 06  |..o.z.{....j<...|
-000001b0  13 e4 a4 9b d0 2c ef 8c  3f ea 8e d8 c4 d4 54 33  |.....,..?.....T3|
-000001c0  2e e5 b6 40 85 a8 4b 5d  9b 3c f2 9e 70 5a 23 d7  |...@..K].<..pZ#.|
-000001d0  c1 e1 b4 7a 42 69 fb b1  49 99 cf 60 5c 8a c0 7f  |...zBi..I..`\...|
-000001e0  c2 8c 8c 26 4f 0f 6c 10  bd e4 51 ab 19 4d 2a 63  |...&O.l...Q..M*c|
-000001f0  b3 39 1e d6 55 00 c9 89  3a c0 5a 2b 5b 0a e9 10  |.9..U...:.Z+[...|
-00000200  56 4c 8a 88 2d 37 27 50  07 2a 77 19 92 6a a0 67  |VL..-7'P.*w..j.g|
-00000210  c9 34 e7 b2 e4 f8 f8 fc  e0 24 c1 8e 6a 04 b0 6a  |.4.......$..j..j|
-00000220  35 1b 5a 74 78 34 81 09  d5 ed bc 61 55 bd bf 6f  |5.Ztx4.....aU..o|
-00000230  e4 a1 13 e9 b1 9a de de  54 3b 99 19 f7 90 74 be  |........T;....t.|
-00000240  48 b0 80 92 e7 19 91 17  12 12 9a 08 77 bf 2c 21  |H...........w.,!|
-00000250  33 51 9a 02 fc 8c c5 7b  90 52 89 61 df 64 1f af  |3Q.....{.R.a.d..|
-00000260  1e 49 2a 7b 33 1b 47 df  34 7f aa ca e3 16 2d 28  |.I*{3.G.4.....-(|
-00000270  94 cc 07 d1 0d 1a 07 80  a4 c6 cc 10 a7 72 58 bc  |.............rX.|
-00000280  65 92 de a1 c7 8b e5 63  9a 83 85 eb ee e8 8d e9  |e......c........|
-00000290  63 06 f0 6d 14 81 5a d5  a6 1b 84 d3 a2 5d f1 94  |c..m..Z......]..|
-000002a0  a4 af f7 eb 85 d3 00 41  12 b3 bc bf 4a 1a c1 c0  |.......A....J...|
-000002b0  b0 46 38 63 f4 05 de e0  c2 b7 ee 5b f8 c8 6c e7  |.F8c.......[..l.|
-000002c0  fe a4 3d a2 52 e8 25 4c  d0 b4 dd 1a aa e4 9c 5b  |..=.R.%L.......[|
-000002d0  3c 5c 9b 0f e2 ca 18 a8  59 1d 22 d8 2d cb ca 0d  |<\......Y.".-...|
-000002e0  61 f0 8e be 55 5e 0b b4  72 2f 32 f1 47 fe b8 94  |a...U^..r/2.G...|
-000002f0  ec 14 af c4 59 dd f9 b1  1b 18 84 44 54 c0 16 f0  |....Y......DT...|
-00000300  f4 e6 19 82 fb 00 84 6e  c0 87 05 82 33 7b 62 d8  |.......n....3{b.|
-00000310  e3 83 86 55 d6 06 bd e5  a3 1c c0 f1 ef b3 ae 2c  |...U...........,|
-00000320  f7 6e fa 9a 3d 6c cf de  5d 77 54 08 03 0c 17 03  |.n..=l..]wT.....|
-00000330  03 00 99 03 00 b3 cc ca  76 27 18 16 0a 8e d0 81  |........v'......|
-00000340  32 5d 9e 32 75 5e bb b4  c5 5c 6b 61 62 38 3d 2e  |2].2u^...\kab8=.|
-00000350  21 1a 93 c9 fc b7 90 74  17 78 ae 18 78 86 fc 6d  |!......t.x..x..m|
-00000360  0b 0c 50 d3 a6 5a 98 a8  76 6f ff 3b 98 f5 2f 11  |..P..Z..vo.;../.|
-00000370  3d af 84 92 04 42 93 33  33 5c 9a f2 fc 5f 05 dd  |=....B.33\..._..|
-00000380  89 a8 c3 c1 e7 92 0f 76  3a ed da 7c 25 e0 96 89  |.......v:..|%...|
-00000390  27 97 c1 3e 27 70 3f a4  15 f3 24 6a 47 43 7f d7  |'..>'p?...$jGC..|
-000003a0  70 b9 7b 2d 3d 53 c0 f6  53 85 fb f7 62 4a 01 8e  |p.{-=S..S...bJ..|
-000003b0  3e 30 3b b4 79 17 af 2e  73 56 e5 de ba 48 0e 0c  |>0;.y...sV...H..|
-000003c0  e0 d3 0a 80 07 b9 53 f1  1d a6 cf 29 17 03 03 00  |......S....)....|
-000003d0  35 f8 8f 94 ec 0a b9 d9  b1 2c d3 02 c9 0b ef 19  |5........,......|
-000003e0  89 ee a9 c0 b1 f3 9c 87  09 0e fb 9a e2 ad 4a 1e  |..............J.|
-000003f0  16 6d 84 af b3 fa b9 af  98 79 54 7d 45 29 99 85  |.m.......yT}E)..|
-00000400  8c a9 69 b6 ee 4e                                 |..i..N|
+00000060  d1 56 18 67 59 a5 e1 ed  99 0f ca e5 6b 5f e3 d9  |.V.gY.......k_..|
+00000070  e3 fd e6 a2 50 93 bf 87  85 60 e7 7f 0b a0 96 c4  |....P....`......|
+00000080  29 55 63 de fe 6b 75 99  b2 a6 75 92 61 d0 96 19  |)Uc..ku...u.a...|
+00000090  f5 60 8f ec e9 d3 98 4a  b9 6b 98 26 c1 3e 27 7e  |.`.....J.k.&.>'~|
+000000a0  17 03 03 00 17 5a aa bb  35 67 ec 83 da 8e 85 bd  |.....Z..5g......|
+000000b0  ae a5 0d c9 8b cd 03 bf  96 2b 35 61 17 03 03 02  |.........+5a....|
+000000c0  6d 85 0c 7c d5 ff 0f 77  0a a4 b7 97 aa d3 f7 af  |m..|...w........|
+000000d0  4b 58 cb 24 4d 9f a6 d8  e2 c3 10 ce 3a 5d e4 cc  |KX.$M.......:]..|
+000000e0  84 7d 1f 71 bd b6 25 0c  10 75 d3 8d b6 12 04 56  |.}.q..%..u.....V|
+000000f0  63 af 53 e5 cc 29 ce f7  18 7a 93 91 73 ae ff c1  |c.S..)...z..s...|
+00000100  2e 2b 3d 76 ab 99 c8 e0  fd 69 b3 67 39 e9 58 40  |.+=v.....i.g9.X@|
+00000110  4a 63 e8 71 c5 8d de 44  fb ef 4d 0a dc ae 51 12  |Jc.q...D..M...Q.|
+00000120  7e ea 6a 25 32 8e 5b 08  6e c7 b2 87 00 4e 35 d8  |~.j%2.[.n....N5.|
+00000130  cd 3b bd 8c dc e8 55 a9  2f 65 d1 7f c1 28 33 f9  |.;....U./e...(3.|
+00000140  70 e1 af d8 2d 64 4c ac  5a 3a 16 6d 3e 97 a7 0e  |p...-dL.Z:.m>...|
+00000150  cd 28 05 1c ea 28 8d 63  a3 41 e2 3a 24 27 f4 43  |.(...(.c.A.:$'.C|
+00000160  97 c8 89 09 ed 8b 96 74  b3 dc 98 f4 0c c2 6f 25  |.......t......o%|
+00000170  fc 30 8a f8 25 49 e1 91  fb c6 39 23 ca d5 16 08  |.0..%I....9#....|
+00000180  5f bf 10 88 71 a4 c5 ac  e7 ad 9e 5a 4d e8 d3 1f  |_...q......ZM...|
+00000190  f0 5d 83 9d c9 e2 b3 f8  e4 a3 a5 57 5d ca 30 74  |.].........W].0t|
+000001a0  a6 1b c7 51 50 05 5f 7e  93 71 1a 8d fc 04 d6 fe  |...QP._~.q......|
+000001b0  4e 4b 95 54 18 43 19 4d  d2 dc 81 a8 94 76 7e 23  |NK.T.C.M.....v~#|
+000001c0  56 8c 86 f9 15 d2 a8 0c  48 4e 0e 81 df e0 31 52  |V.......HN....1R|
+000001d0  c9 2e b4 39 f3 cf ae e2  29 72 01 ed 34 4f 09 ce  |...9....)r..4O..|
+000001e0  64 de a9 9b 84 61 3a bb  0b ac 4e b1 6d 37 41 10  |d....a:...N.m7A.|
+000001f0  5b cf 99 b1 3e e6 f5 7b  1c d4 d0 d5 34 fc ab c6  |[...>..{....4...|
+00000200  29 8e 0b 53 e4 7b 35 33  e4 e3 f6 77 9b f6 c6 ae  |)..S.{53...w....|
+00000210  73 3c c5 80 c8 72 f7 56  6c 4c ce e5 a7 05 63 ee  |s<...r.VlL....c.|
+00000220  07 e0 1d 3e 73 3e 55 73  ba 63 a8 d7 99 6a 48 57  |...>s>Us.c...jHW|
+00000230  0c 55 51 42 4b 27 91 4b  75 b3 3b 4c 29 f1 52 e8  |.UQBK'.Ku.;L).R.|
+00000240  85 f9 49 53 ed 87 6d 9e  8f 5c 29 7c 5c 9c 4e 9a  |..IS..m..\)|\.N.|
+00000250  90 a8 99 2a 53 65 f7 d9  61 ef 6a 56 2a da 76 ed  |...*Se..a.jV*.v.|
+00000260  04 84 11 f5 1c 40 82 52  7d fa 00 79 43 12 42 b4  |.....@.R}..yC.B.|
+00000270  ca 7a 86 d5 8d d6 c5 7b  04 13 79 08 72 0c ce d7  |.z.....{..y.r...|
+00000280  88 9a f2 2c b5 9a 18 a4  d2 87 48 ce ab 17 33 fd  |...,......H...3.|
+00000290  cf 22 3c 72 03 86 af 35  2a b3 fe 24 0e 86 d8 82  |."......D..|
+000002c0  14 12 cd 16 e5 6a 58 1b  3f f8 70 d6 47 e6 1b 98  |.....jX.?.p.G...|
+000002d0  74 9c 21 2b 6d f8 8a 47  05 86 b1 fa 63 9d cc 19  |t.!+m..G....c...|
+000002e0  da 9a a0 ea 5a 26 98 e6  b7 d0 da 03 b3 1d 33 e8  |....Z&........3.|
+000002f0  55 74 ee 4b 6a 06 0f f1  45 35 72 81 bb c9 61 4e  |Ut.Kj...E5r...aN|
+00000300  60 d6 83 e6 ab 08 77 a4  f9 73 e5 d8 cb 66 9f 41  |`.....w..s...f.A|
+00000310  00 15 2c 09 0e ad 16 02  6c 06 5f bc bf 47 f1 5a  |..,.....l._..G.Z|
+00000320  85 97 ab 88 e8 45 b0 31  96 ad 56 00 97 59 17 03  |.....E.1..V..Y..|
+00000330  03 00 99 5e 77 80 46 1d  2f 47 9f b3 43 4d a6 2b  |...^w.F./G..CM.+|
+00000340  e9 f7 72 a2 d0 c6 69 7c  df 5d ce a0 3b 89 e2 69  |..r...i|.]..;..i|
+00000350  e7 35 5e 00 fb 87 10 4a  a8 41 02 b7 89 fa 88 fc  |.5^....J.A......|
+00000360  72 63 ce bf 41 61 16 91  55 06 cd b6 fa 78 09 bc  |rc..Aa..U....x..|
+00000370  f6 21 a0 c2 1f f3 fa 34  2a 9e b9 8a 0c 72 81 02  |.!.....4*....r..|
+00000380  66 a7 da 6b d6 e2 aa 99  6d 4b 42 f5 19 83 52 89  |f..k....mKB...R.|
+00000390  9a 26 56 5d d5 a4 a7 bd  ad b4 10 db ee 87 1d 15  |.&V]............|
+000003a0  15 df 30 95 d8 61 e2 c4  88 47 e1 91 e3 85 33 fe  |..0..a...G....3.|
+000003b0  7d 02 0c 22 6b 52 22 a7  cf bf bf f0 9d 25 65 e0  |}.."kR"......%e.|
+000003c0  6b da a2 8c 9a 00 3d 68  78 55 38 69 17 03 03 00  |k.....=hxU8i....|
+000003d0  35 c8 ca 51 96 aa c1 4b  a0 09 d3 bc d9 ea 35 db  |5..Q...K......5.|
+000003e0  f2 8d bb ab b3 23 09 a1  d1 9c 40 3e e4 84 d3 1c  |.....#....@>....|
+000003f0  60 64 5c ff 01 c7 78 69  c2 4a fb e1 c3 d6 f0 57  |`d\...xi.J.....W|
+00000400  fa 3a 5f 7a 8b 70                                 |.:_z.p|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 35 4c c3 af  0b 49 46 e0 51 3a 73 a8  |....5L...IF.Q:s.|
-00000010  28 46 95 22 ef d7 05 8a  fc 4f 12 98 2f 09 ca a9  |(F.".....O../...|
-00000020  4d b8 17 e4 15 15 b5 13  3f 1a cb 8e 3d 19 00 d6  |M.......?...=...|
-00000030  19 af 90 66 0e 93 d4 22  4d 54 17 03 03 00 17 56  |...f..."MT.....V|
-00000040  31 7c 05 02 1d 84 64 d0  32 21 8d c1 61 7e 7f ce  |1|....d.2!..a~..|
-00000050  d3 45 b2 df ba df 17 03  03 00 13 3a 57 b6 2e 79  |.E.........:W..y|
-00000060  96 09 e9 66 f2 85 7a 21  88 45 cc b4 ff 12        |...f..z!.E....|
+00000000  17 03 03 00 35 24 4a 53  55 49 92 7a 21 a2 db 69  |....5$JSUI.z!..i|
+00000010  e5 2b 00 29 83 cb 91 32  17 48 73 96 89 d1 b2 11  |.+.)...2.Hs.....|
+00000020  c4 23 48 41 eb df eb 5a  10 c2 78 4e a2 e4 f0 38  |.#HA...Z..xN...8|
+00000030  4a 1c b6 d3 bb 52 bc 7e  f6 94 17 03 03 00 17 74  |J....R.~.......t|
+00000040  04 34 8d 27 19 da f3 d8  14 30 1b 85 ad 1e 99 cd  |.4.'.....0......|
+00000050  06 f0 a3 50 94 48 17 03  03 00 13 ac 8f 7e 2e 9c  |...P.H.......~..|
+00000060  90 96 db 33 e2 e9 94 c1  c9 95 f2 7a d1 8f        |...3.......z..|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate b/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate
index 7d04d95a272d9c..1b8004ad0a08ac 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate
+++ b/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 18 01 00 01  14 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 fe 01 00 00  fa 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,98 +7,97 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 99 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 7f 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
 000000a0  00 0a 00 0a 00 08 00 1d  00 17 00 18 00 19 00 0d  |................|
-000000b0  00 16 00 14 08 04 04 03  08 07 08 05 08 06 04 01  |................|
-000000c0  05 01 06 01 05 03 06 03  00 32 00 1a 00 18 08 04  |.........2......|
-000000d0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000e0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
-000000f0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
-00000100  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
-00000110  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
+000000b0  00 1a 00 18 08 04 04 03  08 07 08 05 08 06 04 01  |................|
+000000c0  05 01 06 01 05 03 06 03  02 01 02 03 00 2b 00 09  |.............+..|
+000000d0  08 03 04 03 03 03 02 03  01 00 33 00 26 00 24 00  |..........3.&.$.|
+000000e0  1d 00 20 2f e5 7d a3 47  cd 62 43 15 28 da ac 5f  |.. /.}.G.bC.(.._|
+000000f0  bb 29 07 30 ff f6 84 af  c4 cf c2 ed 90 99 5f 58  |.).0.........._X|
+00000100  cb 3b 74                                          |.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 b2 4e f2 da 8b  |....z...v...N...|
-00000010  79 31 33 74 d5 37 8e 44  9d ad 6f 91 c4 bb 5d d4  |y13t.7.D..o...].|
-00000020  fd f1 e2 42 50 43 f5 3c  7f cf 92 20 00 00 00 00  |...BPC.<... ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 dc 81 c4 82 2e  |....z...v.......|
+00000010  a2 4f c4 c2 53 c2 bc 6a  bd f3 46 84 b5 ba 66 b5  |.O..S..j..F...f.|
+00000020  8b 67 7c 90 51 40 12 39  18 e1 bf 20 00 00 00 00  |.g|.Q@.9... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 74  |..+.....3.$... t|
-00000060  4e d7 36 eb 1f e1 51 c6  8e 48 2d c4 67 e8 c1 d5  |N.6...Q..H-.g...|
-00000070  32 2b 4b 64 77 43 ee 04  eb 9c 07 03 45 4f 25 14  |2+KdwC......EO%.|
-00000080  03 03 00 01 01 17 03 03  00 17 c5 a9 04 f5 f0 9c  |................|
-00000090  db 59 34 64 cb 01 0d 41  fe c9 75 76 f5 0c 43 f0  |.Y4d...A..uv..C.|
-000000a0  af 17 03 03 02 6d 85 7c  c1 3f 80 ae 73 7a 81 6a  |.....m.|.?..sz.j|
-000000b0  cc ec 35 79 a9 6c b4 81  4b 11 2e a1 4b 59 23 9b  |..5y.l..K...KY#.|
-000000c0  fc ad 8a e6 ec 39 f8 db  cc f9 36 c7 93 25 47 38  |.....9....6..%G8|
-000000d0  9e 1c f9 9e 88 25 96 e4  bc cf 9c 8e c7 d3 e3 e4  |.....%..........|
-000000e0  4b 9a 75 f1 fa d0 2b 46  a6 56 ff c2 59 16 77 8a  |K.u...+F.V..Y.w.|
-000000f0  f3 1f 31 14 0f cf b9 88  4b 21 7b d3 39 e5 96 82  |..1.....K!{.9...|
-00000100  bd 16 fb 6a af 12 29 b2  7a 0a 11 ae 90 9b 3c 34  |...j..).z.....<4|
-00000110  52 89 2d 4a b5 81 68 18  18 e4 c4 56 b7 76 c9 23  |R.-J..h....V.v.#|
-00000120  5d 0e 8e f4 a5 a4 63 a2  76 06 66 67 a8 96 cd d8  |].....c.v.fg....|
-00000130  3f cf bc 0d e5 c6 5c 27  7f 43 bf a8 b7 02 f9 24  |?.....\'.C.....$|
-00000140  ee b5 a1 09 63 d6 7c 5a  9b e0 f4 3b 99 f9 03 42  |....c.|Z...;...B|
-00000150  0a eb 55 f5 77 ee 38 70  6b de 27 63 47 2f ed 78  |..U.w.8pk.'cG/.x|
-00000160  f7 a1 39 d8 c4 4a 9c a8  2b 38 8c 3c c4 3c 8a 24  |..9..J..+8.<.<.$|
-00000170  63 7e df bc 9f 21 8e 04  9e 53 ce 0a 46 99 87 3d  |c~...!...S..F..=|
-00000180  80 70 cc 27 05 82 2a dc  7b bb 03 e9 84 6f 18 ca  |.p.'..*.{....o..|
-00000190  4d be b1 73 06 72 27 1e  80 c0 84 73 69 39 07 b3  |M..s.r'....si9..|
-000001a0  72 81 09 9b 03 8d 97 36  a7 04 a7 08 01 94 d0 17  |r......6........|
-000001b0  6c 13 cd 9d 47 a9 81 b1  59 fd 90 1b 47 04 b5 30  |l...G...Y...G..0|
-000001c0  64 6a b6 f5 52 0f f8 41  83 0e e7 ee fc ac 7e f5  |dj..R..A......~.|
-000001d0  02 65 eb 12 1d 9a 0e cc  f1 4c 12 f9 17 98 4e 32  |.e.......L....N2|
-000001e0  27 24 41 15 bf 17 c2 ae  73 1c 45 19 7b 68 e5 74  |'$A.....s.E.{h.t|
-000001f0  07 6b 59 92 f3 a7 cc c0  c7 bb a4 60 d9 2d 17 e9  |.kY........`.-..|
-00000200  4f e0 90 0c 70 00 0e 75  55 78 37 0c 4b 16 06 78  |O...p..uUx7.K..x|
-00000210  bf cb 77 1c 8c 4b b3 f5  68 99 06 2d b7 50 a8 03  |..w..K..h..-.P..|
-00000220  54 36 85 33 41 1c 1a 16  16 bc f3 76 9f d9 65 c8  |T6.3A......v..e.|
-00000230  31 a5 f4 1f e1 ab 36 ac  33 54 bb fb f2 57 ec 46  |1.....6.3T...W.F|
-00000240  85 79 15 35 30 84 cc 8b  a6 bb d8 cf 6c 88 8b ab  |.y.50.......l...|
-00000250  d1 36 bd 2d 9a 11 6e 4d  09 5c 10 06 7e 26 23 b6  |.6.-..nM.\..~&#.|
-00000260  57 4a 18 dd 5b 0c 45 1c  4c 60 27 6d cf 77 1c 70  |WJ..[.E.L`'m.w.p|
-00000270  ef b9 81 af 02 fc 7b ca  80 0e 1f 48 ad 22 ce 33  |......{....H.".3|
-00000280  44 2f 28 47 a8 cd a3 98  e6 28 8e dc ac df b5 1c  |D/(G.....(......|
-00000290  34 47 8a 7a 98 c5 79 c9  38 ba 34 7e 76 63 51 3d  |4G.z..y.8.4~vcQ=|
-000002a0  ae 9b eb 2c bb 89 6d 01  cd 81 ab a4 b8 4f 27 82  |...,..m......O'.|
-000002b0  23 09 fb 9f b2 56 0f 7a  a3 f6 13 70 c3 6d 13 61  |#....V.z...p.m.a|
-000002c0  eb dd 39 da 99 8e a3 00  9e 7a 48 fe d8 78 c2 ff  |..9......zH..x..|
-000002d0  c9 ce 14 3f 37 8d 4d fb  80 6b 39 e6 cc f1 23 a0  |...?7.M..k9...#.|
-000002e0  e2 e5 cd 3d ed 07 80 85  ea 60 9d 6b e0 93 7f 53  |...=.....`.k...S|
-000002f0  89 94 32 b8 a1 4e f0 d7  33 f6 9c 07 48 f6 43 89  |..2..N..3...H.C.|
-00000300  3b 52 89 0f 31 98 a8 86  5b 2b c5 6c 0d 0c 26 04  |;R..1...[+.l..&.|
-00000310  9f 90 29 17 03 03 00 99  62 df 1f c6 0c 83 e0 8e  |..).....b.......|
-00000320  9e 30 43 4b 9b 63 c7 b7  96 bf 79 35 14 89 43 f6  |.0CK.c....y5..C.|
-00000330  5e e6 fb ec 28 6a 62 cc  64 4a e8 86 07 da 38 f3  |^...(jb.dJ....8.|
-00000340  30 c7 5a 98 78 fc e8 ee  ab 53 81 72 15 92 e1 1b  |0.Z.x....S.r....|
-00000350  d1 78 1d d3 7a 5b 7a c6  78 82 6e 8e ec a6 bd d7  |.x..z[z.x.n.....|
-00000360  8a da 12 68 64 65 2b ec  46 c4 b4 01 a8 e9 b6 00  |...hde+.F.......|
-00000370  67 b1 bf ac 26 7e 11 64  3d de 40 ae 57 8d 7d 07  |g...&~.d=.@.W.}.|
-00000380  3f 06 65 6c 92 10 42 b9  be 30 ef bd 26 a2 87 96  |?.el..B..0..&...|
-00000390  12 61 4a 56 3b 26 c1 d2  81 d3 71 d0 4c 6d 01 c3  |.aJV;&....q.Lm..|
-000003a0  a0 ec 55 96 0c 10 2a f6  9e 6c 99 78 5a 49 a8 50  |..U...*..l.xZI.P|
-000003b0  af 17 03 03 00 35 5e 78  9a 3e c9 92 b6 2d 32 1d  |.....5^x.>...-2.|
-000003c0  cd 16 ab da cd e7 93 0d  c2 90 a2 62 7b 3c 54 bb  |...........b{.......U.|
+00000250  d0 4c c4 6d a3 ce c6 c0  df f8 a8 b6 43 03 ae fc  |.L.m........C...|
+00000260  7d 94 7b fe be 85 46 d8  42 9d b6 15 b9 a3 27 3d  |}.{...F.B.....'=|
+00000270  80 64 54 c8 53 c4 a7 94  52 8f 9d 4c 58 54 a5 c4  |.dT.S...R..LXT..|
+00000280  e0 e7 2e cb f3 8c d0 82  3f 95 76 c9 ea ea 80 41  |........?.v....A|
+00000290  21 5d 3e a3 1e be 4e 0b  ce 10 ab 61 a5 76 ef 62  |!]>...N....a.v.b|
+000002a0  50 1b 52 a8 75 23 fd eb  ea 76 f9 d8 41 3c a2 e4  |P.R.u#...v..A<..|
+000002b0  21 cb 56 f7 40 81 78 56  22 06 2a 38 fc 1f d8 9f  |!.V.@.xV".*8....|
+000002c0  38 b0 7a 93 f0 8c ad 3e  54 27 a2 d7 8b 2c 79 46  |8.z....>T'...,yF|
+000002d0  15 65 f1 55 b2 2a 06 a1  97 9b 47 23 f8 9a 3f 88  |.e.U.*....G#..?.|
+000002e0  8e 26 7e 13 cd 6e 8b cb  d5 a5 78 48 f7 ba ad d8  |.&~..n....xH....|
+000002f0  08 3b 34 5b 52 cd e3 2d  12 ac 81 00 c0 d0 4d df  |.;4[R..-......M.|
+00000300  56 d6 40 86 91 31 3d ba  6b 41 bc 51 6f ac b2 df  |V.@..1=.kA.Qo...|
+00000310  90 4b 78 17 03 03 00 99  21 0f 5b 18 54 84 98 0c  |.Kx.....!.[.T...|
+00000320  3a 7b 0b db 99 0e 09 f6  b7 4f a9 cc da bf 4c ac  |:{.......O....L.|
+00000330  5f 44 fc ba 9d 5d 52 d5  ec 2e 08 0c cc 3c e1 72  |_D...]R......<.r|
+00000340  10 77 5b 7b 55 f7 c1 44  a3 25 e0 48 20 9a 3a de  |.w[{U..D.%.H .:.|
+00000350  2f ae 30 a9 e9 5b 75 84  e3 59 f0 6b 23 a6 d8 20  |/.0..[u..Y.k#.. |
+00000360  16 51 2a 19 61 60 35 28  74 41 32 fa 97 8d 3b ed  |.Q*.a`5(tA2...;.|
+00000370  ff 64 94 d7 27 4c 9b 1e  5e b8 89 43 e3 ae 2a b6  |.d..'L..^..C..*.|
+00000380  60 a8 bb f0 d1 75 85 15  bb 95 3c 82 f1 62 da b1  |`....u....<..b..|
+00000390  25 d2 58 7d 67 7f 02 5b  b4 91 68 3c 70 10 09 94  |%.X}g..[..h>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 a8 d6 93 8f 7e  |..........5....~|
-00000010  65 3a ee 6f c8 37 2a 27  14 dc b7 19 0e aa 14 b6  |e:.o.7*'........|
-00000020  22 21 2d ea f4 00 d1 60  55 c0 f1 56 db 43 7a f0  |"!-....`U..V.Cz.|
-00000030  1a 47 ce 93 d9 07 7e 61  43 92 3a 95 a9 54 7b c6  |.G....~aC.:..T{.|
-00000040  17 03 03 00 17 e6 e4 52  74 15 e2 18 d7 14 59 29  |.......Rt.....Y)|
-00000050  59 d8 ce 49 68 3a a8 79  9e f4 ee f1              |Y..Ih:.y....|
+00000000  14 03 03 00 01 01 17 03  03 00 35 c9 09 ac f5 44  |..........5....D|
+00000010  40 83 88 5a b9 46 70 b9  ff 9b 2e bb b4 7e 72 b0  |@..Z.Fp......~r.|
+00000020  85 26 d6 37 33 ec d1 ac  ce f4 db 72 8c e1 07 b5  |.&.73......r....|
+00000030  d0 ce ee 2f 19 77 62 ec  97 ae 1b e1 5f 85 bf c4  |.../.wb....._...|
+00000040  17 03 03 00 17 1c ae 0f  1d 50 be 4b d0 64 4f 23  |.........P.K.dO#|
+00000050  41 60 d9 c7 f5 60 a6 5c  38 14 fd d5              |A`...`.\8...|
 >>> Flow 4 (server to client)
-00000000  17 03 03 00 16 e6 cd 54  e3 31 d9 70 20 25 f4 aa  |.......T.1.p %..|
-00000010  cd 8f fe e7 88 6b 7f 62  9b 7b de                 |.....k.b.{.|
+00000000  17 03 03 00 16 ad 61 13  66 9c 3c dd 88 42 2c 6c  |......a.f.<..B,l|
+00000010  d1 22 5d b4 b2 6f f0 68  4f 37 4d                 |."]..o.hO7M|
 >>> Flow 5 (client to server)
-00000000  17 03 03 00 16 bd e9 c4  24 4a 6d 76 aa 83 bb da  |........$Jmv....|
-00000010  ec 9e d0 c9 38 cc 6b 3c  65 38 91                 |....8.khM8o..0|
 >>> Flow 6 (server to client)
-00000000  17 03 03 00 1a 6a e1 ea  df 76 a9 fc 4a 80 7b 49  |.....j...v..J.{I|
-00000010  dd fa c3 87 e9 e7 c9 b3  ab bf bc a7 d8 cd 36     |..............6|
+00000000  17 03 03 00 1a 64 0c f4  8e 8f 2b 04 e2 36 28 77  |.....d....+..6(w|
+00000010  a2 28 97 4b 15 ba 1b b2  10 31 b3 4d 87 09 af     |.(.K.....1.M...|
 >>> Flow 7 (client to server)
-00000000  17 03 03 00 1d 1e c5 6f  93 48 41 07 03 e5 8c 6f  |.......o.HA....o|
-00000010  09 8e 2f 8e da cb 6e 01  e9 b8 6e f6 3f 59 5c 17  |../...n...n.?Y\.|
-00000020  91 46 17 03 03 00 13 35  33 12 5e d3 97 0a 1c 54  |.F.....53.^....T|
-00000030  cf 54 bb 7d 78 2e 57 a2  5b 39                    |.T.}x.W.[9|
+00000000  17 03 03 00 1d 90 c9 33  bf fc 76 12 3d af 9e c8  |.......3..v.=...|
+00000010  8c ca e7 a1 63 6e 80 91  b1 7f 5e e4 dc c2 e6 1c  |....cn....^.....|
+00000020  b6 2b 17 03 03 00 13 ef  a8 30 91 b1 20 fe 82 79  |.+.......0.. ..y|
+00000030  44 31 a8 af 99 bb 5e 97  75 a3                    |D1....^.u.|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE b/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
index 410f0dd189a8c5..fa8d312384fce6 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
+++ b/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 33 01 00 01  2f 03 03 00 00 00 00 00  |....3.../.......|
+00000000  16 03 01 01 19 01 00 01  15 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,90 +7,88 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 b4 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 9a 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
-000000a0  00 0a 00 04 00 02 00 17  00 0d 00 16 00 14 08 04  |................|
+000000a0  00 0a 00 04 00 02 00 17  00 0d 00 1a 00 18 08 04  |................|
 000000b0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000c0  06 03 00 32 00 1a 00 18  08 04 04 03 08 07 08 05  |...2............|
-000000d0  08 06 04 01 05 01 06 01  05 03 06 03 02 01 02 03  |................|
-000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
-000000f0  47 00 45 00 17 00 41 04  1e 18 37 ef 0d 19 51 88  |G.E...A...7...Q.|
-00000100  35 75 71 b5 e5 54 5b 12  2e 8f 09 67 fd a7 24 20  |5uq..T[....g..$ |
-00000110  3e b2 56 1c ce 97 28 5e  f8 2b 2d 4f 9e f1 07 9f  |>.V...(^.+-O....|
-00000120  6c 4b 5b 83 56 e2 32 42  e9 58 b6 d7 49 a6 b5 68  |lK[.V.2B.X..I..h|
-00000130  1a 41 03 56 6b dc 5a 89                           |.A.Vk.Z.|
+000000c0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
+000000d0  02 03 01 00 33 00 47 00  45 00 17 00 41 04 1e 18  |....3.G.E...A...|
+000000e0  37 ef 0d 19 51 88 35 75  71 b5 e5 54 5b 12 2e 8f  |7...Q.5uq..T[...|
+000000f0  09 67 fd a7 24 20 3e b2  56 1c ce 97 28 5e f8 2b  |.g..$ >.V...(^.+|
+00000100  2d 4f 9e f1 07 9f 6c 4b  5b 83 56 e2 32 42 e9 58  |-O....lK[.V.2B.X|
+00000110  b6 d7 49 a6 b5 68 1a 41  03 56 6b dc 5a 89        |..I..h.A.Vk.Z.|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 9b 02 00 00  97 03 03 1f 9f 7f 3f 27  |..............?'|
-00000010  c5 5c f2 f1 bb cc a2 89  0d 7f 66 6a ff 85 7e 55  |.\........fj..~U|
-00000020  ec 47 a6 5e 9c 09 00 ec  96 e2 a7 20 00 00 00 00  |.G.^....... ....|
+00000000  16 03 03 00 9b 02 00 00  97 03 03 1c 1a ee 30 2f  |..............0/|
+00000010  02 10 0c 84 ee 6a 2c d1  67 76 00 8a 16 e5 15 c5  |.....j,.gv......|
+00000020  4c d7 a9 26 33 43 9a 9a  d6 f8 e7 20 00 00 00 00  |L..&3C..... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
 00000050  4f 00 2b 00 02 03 04 00  33 00 45 00 17 00 41 04  |O.+.....3.E...A.|
-00000060  f0 c5 09 c6 22 3f 23 06  65 c7 e2 1c f8 e7 c2 59  |...."?#.e......Y|
-00000070  a9 9f 00 3d 1a 48 fb b5  7f e4 ad 3d 4f 2d 91 d8  |...=.H.....=O-..|
-00000080  f4 2f d5 31 5c dc 2b 53  63 2b 25 1b 60 47 31 3a  |./.1\.+Sc+%.`G1:|
-00000090  30 72 d8 5d a4 60 9d 68  51 48 45 69 32 73 58 a5  |0r.].`.hQHEi2sX.|
-000000a0  14 03 03 00 01 01 17 03  03 00 17 e9 38 fa fe 25  |............8..%|
-000000b0  89 ba 85 3b 0e 66 1e 3f  b9 52 55 20 e0 3c 07 6f  |...;.f.?.RU .<.o|
-000000c0  2c 2f 17 03 03 02 6d cf  73 3f de 91 5b 86 ff 90  |,/....m.s?..[...|
-000000d0  ca a3 c9 ba e2 9e 56 53  fc 72 28 e5 98 1f 08 ca  |......VS.r(.....|
-000000e0  6d 0e 80 96 d2 45 74 33  3b 45 ee 2b ab 12 94 57  |m....Et3;E.+...W|
-000000f0  be 00 7e f6 14 93 64 62  7b 0d 81 0e 79 8b 63 49  |..~...db{...y.cI|
-00000100  36 8a 67 5c bb 33 72 fa  73 0d e1 ab 66 58 fa a3  |6.g\.3r.s...fX..|
-00000110  dd 66 c2 bb 0e 64 82 39  59 e1 a0 e1 5c 84 b1 b6  |.f...d.9Y...\...|
-00000120  0d 60 94 f2 ff 94 39 72  62 45 cd f6 d8 f3 33 b5  |.`....9rbE....3.|
-00000130  20 99 29 c8 d5 ba 8c 49  cb 29 54 e9 cf 7e 26 1f  | .)....I.)T..~&.|
-00000140  25 96 41 93 82 4c 38 15  0d 0c 6d 7f 89 51 7f 43  |%.A..L8...m..Q.C|
-00000150  9d 04 3a 1a 58 86 97 4e  0c 29 c0 2e f0 e7 78 42  |..:.X..N.)....xB|
-00000160  f0 b4 11 cb 50 ec 45 62  c5 0a 42 11 cc aa c4 d4  |....P.Eb..B.....|
-00000170  33 15 ee 43 e1 80 6f 46  16 ea 30 27 09 d1 34 e6  |3..C..oF..0'..4.|
-00000180  59 f7 b0 e0 6f ea 51 bd  02 79 17 06 3f 84 75 08  |Y...o.Q..y..?.u.|
-00000190  63 91 b3 58 d3 1c 61 47  bf d9 2a 9e 11 75 b2 5e  |c..X..aG..*..u.^|
-000001a0  7e 09 62 f2 3c ba 63 4b  2b 09 c4 90 b5 78 9a c4  |~.b.<.cK+....x..|
-000001b0  be 35 9b 7f e3 11 5a 82  d8 50 b3 67 20 7a 53 ec  |.5....Z..P.g zS.|
-000001c0  cb f9 1a b3 b3 b6 b6 39  1b f1 fe 7a 28 27 9c ed  |.......9...z('..|
-000001d0  25 35 f4 f1 21 11 eb 33  61 64 1d 54 eb ef c3 d0  |%5..!..3ad.T....|
-000001e0  2c 0d 76 0d 7e 90 3f 8d  a4 d0 b5 d9 27 49 c7 fc  |,.v.~.?.....'I..|
-000001f0  cc 59 8c c5 af 59 fc 09  98 63 9c fb 63 d8 09 6f  |.Y...Y...c..c..o|
-00000200  55 2d 1f d2 c7 83 5f 3d  ae 00 ef ca 27 03 9d b9  |U-...._=....'...|
-00000210  00 03 c5 c7 e5 2d 91 47  b0 6c 67 2a 09 3e bc 57  |.....-.G.lg*.>.W|
-00000220  a3 02 3f cf b2 88 d8 3d  25 c5 e1 0e 2b a2 b7 5f  |..?....=%...+.._|
-00000230  57 18 5c eb 8e ae 5f d6  5f 11 1b 5c 48 3b f5 84  |W.\..._._..\H;..|
-00000240  b0 6e 29 3e 58 71 36 6e  66 6e e0 d0 98 b0 1b 84  |.n)>Xq6nfn......|
-00000250  ca 8c 53 83 86 ca 26 7a  15 6b 6a 7c 61 91 55 45  |..S...&z.kj|a.UE|
-00000260  58 cb bd b2 df df 78 22  83 36 8e 4f b6 40 70 ea  |X.....x".6.O.@p.|
-00000270  d1 72 33 7d 85 00 01 48  f1 75 73 db b3 aa 1d da  |.r3}...H.us.....|
-00000280  78 c9 e3 37 7c 1c 52 74  62 6c f6 eb af af 0b 2d  |x..7|.Rtbl.....-|
-00000290  ef d4 85 3d 9f 48 de 5c  4a 6e 24 69 b9 7b 87 e7  |...=.H.\Jn$i.{..|
-000002a0  62 3c 26 67 8a 52 b2 73  66 90 56 07 6f ec 14 62  |b<&g.R.sf.V.o..b|
-000002b0  88 15 20 e6 27 59 d4 cf  0e f0 59 cd cb 8e bd e5  |.. .'Y....Y.....|
-000002c0  ca 10 39 40 54 a5 57 4e  99 70 93 b4 86 60 5f f1  |..9@T.WN.p...`_.|
-000002d0  70 f5 d7 21 ef f2 11 b2  da 7a 7f 27 a8 6b fe 7f  |p..!.....z.'.k..|
-000002e0  e4 eb 35 9c d5 24 ef 70  4b 3c ed bd 9b b9 b9 f3  |..5..$.pK<......|
-000002f0  50 a4 61 7f 24 d0 8c 7f  4f 48 09 4f 1e 26 fb 46  |P.a.$...OH.O.&.F|
-00000300  ec c2 84 12 a5 6a 5f 19  f0 03 cc 50 cc 07 26 23  |.....j_....P..&#|
-00000310  58 6e 68 d8 20 ae eb db  2f be a6 7b a8 ed 86 20  |Xnh. .../..{... |
-00000320  61 07 03 47 e5 19 9b a7  0d 27 e0 56 9f 2a d5 19  |a..G.....'.V.*..|
-00000330  e7 b3 39 07 17 03 03 00  99 3a 9b b2 61 6a 40 3a  |..9......:..aj@:|
-00000340  46 a8 0b 50 e3 95 d2 80  5f 5a 08 c3 54 2e 47 ac  |F..P...._Z..T.G.|
-00000350  f1 83 07 13 21 7f 5e 4e  1b 67 66 cc 38 a7 f3 91  |....!.^N.gf.8...|
-00000360  f0 5f ac 9a 39 55 de bf  02 30 2a 87 35 85 f8 1d  |._..9U...0*.5...|
-00000370  32 3a 8c f8 90 6a 22 21  b2 e8 87 5e 54 6a 45 de  |2:...j"!...^TjE.|
-00000380  74 ff 6d 37 00 92 07 6c  09 13 c1 5e 68 bc 28 80  |t.m7...l...^h.(.|
-00000390  d6 24 e5 32 fc 13 ee 68  68 91 9a e6 15 74 21 7d  |.$.2...hh....t!}|
-000003a0  2d b2 c8 f5 1d 05 69 5c  80 ee 8b 7c 3e 23 be 35  |-.....i\...|>#.5|
-000003b0  d4 54 3c 52 66 2a f1 12  98 5d 3a 3f 44 26 84 d8  |.T..{|
+000000e0  12 18 d7 d6 ab ed 24 5f  16 c8 18 5e e0 28 84 40  |......$_...^.(.@|
+000000f0  89 49 a7 91 57 d6 2b a0  9c ab 5d 85 ac 4f 6b 70  |.I..W.+...]..Okp|
+00000100  c3 31 e0 57 87 d7 7c 45  27 34 54 eb 85 02 14 2c  |.1.W..|E'4T....,|
+00000110  a0 53 4f ec 21 9f 04 91  38 b8 df 2c 5d 0b 79 0a  |.SO.!...8..,].y.|
+00000120  4f 96 79 15 72 de b5 fb  43 1f d8 71 62 d8 e0 69  |O.y.r...C..qb..i|
+00000130  21 13 87 ab e5 b8 e5 86  01 74 25 b7 39 fc 86 e2  |!........t%.9...|
+00000140  2f de 0b 1f 8c db b2 98  b3 47 c1 4e dd db 36 d3  |/........G.N..6.|
+00000150  28 de cf 4c 4d 54 8e a3  e5 d3 38 19 1f 4b 05 7f  |(..LMT....8..K..|
+00000160  9a e1 59 4c a3 4e 42 b6  71 0d 9c 96 e4 d8 29 73  |..YL.NB.q.....)s|
+00000170  4e e6 f5 87 56 04 99 c2  56 15 6c 8b 04 7c e5 83  |N...V...V.l..|..|
+00000180  8b f3 42 e8 97 7a b0 cc  7d 15 b8 84 d3 08 dd c1  |..B..z..}.......|
+00000190  89 f5 d4 19 d2 f6 fd 32  b4 37 6e 6a cc 0c 7a 69  |.......2.7nj..zi|
+000001a0  09 57 78 36 d4 5b 8c 23  0f e6 39 08 4c 58 3e 3f  |.Wx6.[.#..9.LX>?|
+000001b0  b1 a0 ae 2e 85 b7 64 45  dd e1 ae c4 91 53 8c 6f  |......dE.....S.o|
+000001c0  02 70 45 f0 97 7b c8 90  88 0e 95 ed 1e 81 fc 86  |.pE..{..........|
+000001d0  27 83 3d 32 43 d6 e4 f3  84 c6 c4 c1 b2 1c 0d 4a  |'.=2C..........J|
+000001e0  22 78 cd 1c f8 0a aa 19  1a 96 cc 46 6d a0 7f c7  |"x.........Fm...|
+000001f0  2f d8 68 de 48 7d ae 42  b3 75 2a d5 ab cf e7 a7  |/.h.H}.B.u*.....|
+00000200  a1 e6 66 e0 88 d8 14 25  81 21 4a 6f f7 7c 84 57  |..f....%.!Jo.|.W|
+00000210  9c cd 45 8a c0 2d 5f 97  b6 66 96 f1 be d8 02 d2  |..E..-_..f......|
+00000220  a4 8e fb 0d c4 cc 02 12  1d b7 76 73 8d 73 8e 71  |..........vs.s.q|
+00000230  ec 62 4b ba d1 94 98 e5  de 45 f4 92 22 79 9a 2e  |.bK......E.."y..|
+00000240  b4 12 a6 f8 ab 8a 52 c3  df f8 77 a9 71 8b ff d6  |......R...w.q...|
+00000250  2b bc 47 0b 63 5b 0f cf  f8 f1 86 7a 72 91 78 7b  |+.G.c[.....zr.x{|
+00000260  b8 52 74 96 40 4c 08 f3  ca 46 ef d9 b9 6d 7a dc  |.Rt.@L...F...mz.|
+00000270  2c da f1 c2 c4 1f 19 38  84 cf 7d b7 5d f2 19 a7  |,......8..}.]...|
+00000280  bc 81 70 48 1c 5d da e7  e1 8f 94 33 fa b9 44 97  |..pH.].....3..D.|
+00000290  52 7a 22 75 f3 3e 08 f5  d3 66 be 63 8e e6 fc 7b  |Rz"u.>...f.c...{|
+000002a0  54 6d 14 2e 88 09 c7 a1  a6 b7 8e f3 9f 66 dd a4  |Tm...........f..|
+000002b0  ec 81 e9 4b 44 69 29 78  95 dd 44 80 f5 f9 41 23  |...KDi)x..D...A#|
+000002c0  97 53 71 63 2d cc d0 47  d6 f7 3f 6b 61 5f 44 33  |.Sqc-..G..?ka_D3|
+000002d0  61 d1 35 94 42 7b 88 b9  af 6f e2 c1 71 7b d9 12  |a.5.B{...o..q{..|
+000002e0  2c b6 57 fa 42 98 27 6d  8a da f8 dd de 6f b2 ea  |,.W.B.'m.....o..|
+000002f0  c8 de 5c 09 cd 47 36 10  0f 52 72 39 b2 e5 92 19  |..\..G6..Rr9....|
+00000300  81 2a e0 ae aa cc b5 d1  68 98 c4 69 02 fc 86 1a  |.*......h..i....|
+00000310  79 9c 11 54 fc 43 8a ed  63 50 83 49 ac bf 4c ad  |y..T.C..cP.I..L.|
+00000320  80 04 98 fd 33 19 76 49  8f fe 5a 0f 22 69 3e eb  |....3.vI..Z."i>.|
+00000330  d8 eb 51 71 17 03 03 00  99 42 4d 4b db 37 6c c3  |..Qq.....BMK.7l.|
+00000340  fb 93 1f a6 7a 86 3c 5e  88 e5 75 d4 a1 73 4a b3  |....z.<^..u..sJ.|
+00000350  0b 99 f1 a6 98 5f 6d 0f  00 0e 4f fa a3 5e 7d f0  |....._m...O..^}.|
+00000360  41 dd dd 5c 71 3b 10 f9  75 07 d5 6c f2 83 83 5c  |A..\q;..u..l...\|
+00000370  60 32 d9 d2 b3 13 1b 6c  84 2b 02 58 da b6 18 4e  |`2.....l.+.X...N|
+00000380  ea 7d b3 46 2b a9 ec e7  65 3a 8e 2f 77 48 92 72  |.}.F+...e:./wH.r|
+00000390  6a 82 47 bd 82 2b f7 01  6b c4 22 e2 43 78 78 03  |j.G..+..k.".Cxx.|
+000003a0  3c 40 d9 6c d1 b3 5e 21  4d 52 74 e4 07 70 56 21  |<@.l..^!MRt..pV!|
+000003b0  05 37 37 82 13 cd e6 ce  3f 93 61 74 b4 9a 42 7d  |.77.....?.at..B}|
+000003c0  26 fa 15 4f ed b7 63 22  3c 92 f3 72 9c d2 80 17  |&..O..c"<..r....|
+000003d0  30 f0 17 03 03 00 35 8c  f6 08 33 76 5a a4 7b ef  |0.....5...3vZ.{.|
+000003e0  0d 91 b6 bf fa 9e 39 19  6f 79 77 4c 4d 74 95 71  |......9.oywLMt.q|
+000003f0  00 73 37 17 50 ef 55 fb  71 04 36 87 2e 16 5e 25  |.s7.P.U.q.6...^%|
+00000400  9b d4 9c 52 f9 ec c5 26  7e 58 ed 9f              |...R...&~X..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 70 3d 2c 7e 6a  |..........5p=,~j|
-00000010  d9 c5 58 7b 1d b5 d8 af  9e ca b8 30 2a 9b c3 c8  |..X{.......0*...|
-00000020  fa 1c 76 f0 64 f8 4c 01  24 19 18 b2 2e 70 b9 e1  |..v.d.L.$....p..|
-00000030  d3 45 96 e7 08 7e 7b c8  7d 1a c8 b7 87 13 9d 1d  |.E...~{.}.......|
-00000040  17 03 03 00 17 3f 62 68  a3 27 6c c3 12 33 ed e6  |.....?bh.'l..3..|
-00000050  0e 87 e6 c4 3e 63 55 2a  15 11 aa 35 17 03 03 00  |....>cU*...5....|
-00000060  13 f8 81 0f 72 73 8b d0  14 af fe f2 9d b7 c7 fd  |....rs..........|
-00000070  16 17 b9 60                                       |...`|
+00000000  14 03 03 00 01 01 17 03  03 00 35 f5 7f 27 09 c2  |..........5..'..|
+00000010  54 9d e7 a7 3b 14 b3 f2  a6 6d 27 5f 9b 79 04 17  |T...;....m'_.y..|
+00000020  28 5c de 4f 67 cf a5 24  e4 d3 c5 e1 38 fa 7e e8  |(\.Og..$....8.~.|
+00000030  97 03 7e 66 3b d0 6b e7  f8 7e 97 e0 db 6a da 79  |..~f;.k..~...j.y|
+00000040  17 03 03 00 17 30 1a e2  fe 4a 7a 03 03 82 f6 05  |.....0...Jz.....|
+00000050  e8 18 67 1d 14 ab 4f 3c  22 c6 45 f5 17 03 03 00  |..g...O<".E.....|
+00000060  13 f8 8f 43 e7 74 3c a0  28 b2 71 5a 85 69 e5 86  |...C.t<.(.qZ.i..|
+00000070  06 e3 4c 91                                       |..L.|
diff --git a/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE b/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
index 9e53626d5dc344..855f63de210766 100644
--- a/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
+++ b/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
@@ -1,5 +1,5 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 01 12 01 00 01  0e 03 03 00 00 00 00 00  |................|
+00000000  16 03 01 00 f8 01 00 00  f4 03 03 00 00 00 00 00  |................|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000020  00 00 00 00 00 00 00 00  00 00 00 20 00 00 00 00  |........... ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -7,86 +7,84 @@
 00000050  cc a8 c0 2b c0 2f c0 2c  c0 30 c0 09 c0 13 c0 0a  |...+./.,.0......|
 00000060  c0 14 00 9c 00 9d 00 2f  00 35 c0 12 00 0a c0 23  |......./.5.....#|
 00000070  c0 27 00 3c c0 07 c0 11  00 05 13 03 13 01 13 02  |.'.<............|
-00000080  01 00 00 93 00 0b 00 02  01 00 ff 01 00 01 00 00  |................|
+00000080  01 00 00 79 00 0b 00 02  01 00 ff 01 00 01 00 00  |...y............|
 00000090  17 00 00 00 12 00 00 00  05 00 05 01 00 00 00 00  |................|
-000000a0  00 0a 00 04 00 02 00 1d  00 0d 00 16 00 14 08 04  |................|
+000000a0  00 0a 00 04 00 02 00 1d  00 0d 00 1a 00 18 08 04  |................|
 000000b0  04 03 08 07 08 05 08 06  04 01 05 01 06 01 05 03  |................|
-000000c0  06 03 00 32 00 1a 00 18  08 04 04 03 08 07 08 05  |...2............|
-000000d0  08 06 04 01 05 01 06 01  05 03 06 03 02 01 02 03  |................|
-000000e0  00 2b 00 09 08 03 04 03  03 03 02 03 01 00 33 00  |.+............3.|
-000000f0  26 00 24 00 1d 00 20 2f  e5 7d a3 47 cd 62 43 15  |&.$... /.}.G.bC.|
-00000100  28 da ac 5f bb 29 07 30  ff f6 84 af c4 cf c2 ed  |(.._.).0........|
-00000110  90 99 5f 58 cb 3b 74                              |.._X.;t|
+000000c0  06 03 02 01 02 03 00 2b  00 09 08 03 04 03 03 03  |.......+........|
+000000d0  02 03 01 00 33 00 26 00  24 00 1d 00 20 2f e5 7d  |....3.&.$... /.}|
+000000e0  a3 47 cd 62 43 15 28 da  ac 5f bb 29 07 30 ff f6  |.G.bC.(.._.).0..|
+000000f0  84 af c4 cf c2 ed 90 99  5f 58 cb 3b 74           |........_X.;t|
 >>> Flow 2 (server to client)
-00000000  16 03 03 00 7a 02 00 00  76 03 03 5a 42 7b 30 69  |....z...v..ZB{0i|
-00000010  87 6c 87 6a 9c c4 4f 41  b5 18 58 d5 7a 1d 7d da  |.l.j..OA..X.z.}.|
-00000020  92 29 4c dd 57 6b 4d 0c  f9 7c 74 20 00 00 00 00  |.)L.WkM..|t ....|
+00000000  16 03 03 00 7a 02 00 00  76 03 03 6c f6 24 8a 4a  |....z...v..l.$.J|
+00000010  82 87 8f c9 9a a3 5a d2  4a 24 d3 52 c8 5d 52 95  |......Z.J$.R.]R.|
+00000020  0f 12 e8 8e e6 0c a6 5d  60 de 3c 20 00 00 00 00  |.......]`.< ....|
 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 00000040  00 00 00 00 00 00 00 00  00 00 00 00 13 03 00 00  |................|
-00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 f5  |..+.....3.$... .|
-00000060  7b aa 52 58 70 5a dd 9b  db b3 b8 17 02 fc db e4  |{.RXpZ..........|
-00000070  b2 9d a2 e7 77 aa c1 d9  f9 a8 87 65 b8 c2 38 14  |....w......e..8.|
-00000080  03 03 00 01 01 17 03 03  00 17 cf 0f a3 89 ff 85  |................|
-00000090  ce 6f aa 9e 41 c6 cc e0  bb 9c dd f2 6c 2b f6 4f  |.o..A.......l+.O|
-000000a0  e5 17 03 03 02 6d eb 5d  f8 b5 8a 60 c3 af a8 03  |.....m.]...`....|
-000000b0  a7 55 8c 85 ee 94 9c 31  d5 2e de 80 71 70 c0 9d  |.U.....1....qp..|
-000000c0  9a b2 c6 fd 82 1f 72 09  3c eb 2d 38 3f 3a cd fd  |......r.<.-8?:..|
-000000d0  c2 6d b5 0a 30 20 4b 6c  64 26 e9 e2 f2 1f 27 da  |.m..0 Kld&....'.|
-000000e0  ed 81 98 fe 58 3e 27 f9  af 91 cf 90 b8 c2 a8 f0  |....X>'.........|
-000000f0  14 3c a1 5b 2e 60 55 34  73 f2 1d c2 24 df 09 55  |.<.[.`U4s...$..U|
-00000100  e5 5b b6 43 de d7 48 6b  cd 15 da 06 f1 b6 56 0b  |.[.C..Hk......V.|
-00000110  fb 7e 97 f4 40 2f 6b c9  5b 4d 0c 70 8d d5 1c 21  |.~..@/k.[M.p...!|
-00000120  d6 a2 4f ab e9 c7 cb 69  0e d0 86 d0 b8 1e c5 6b  |..O....i.......k|
-00000130  3d 2f 78 f7 ab fd db 06  5c 59 69 fe 74 69 2f c9  |=/x.....\Yi.ti/.|
-00000140  a0 36 e2 08 2e 42 23 05  da 89 33 e7 b5 c3 b2 5a  |.6...B#...3....Z|
-00000150  d4 7e 4c 99 1c 24 a8 62  9b 92 7d bb c0 e1 4a 90  |.~L..$.b..}...J.|
-00000160  72 83 4d b2 74 13 45 3f  ef 91 7c b0 c4 6b 4e f5  |r.M.t.E?..|..kN.|
-00000170  5c 3d 56 6f fe 96 63 c2  fe 2c 88 23 ab 92 08 bf  |\=Vo..c..,.#....|
-00000180  c5 08 25 81 a5 49 a6 5c  95 da 09 b2 c9 4b e0 f2  |..%..I.\.....K..|
-00000190  59 4e 5a 67 6b 71 c7 ba  69 ff a8 f5 6d 21 52 68  |YNZgkq..i...m!Rh|
-000001a0  05 d6 61 0e d6 67 d9 64  3d 26 a3 65 3c 55 11 42  |..a..g.d=&.e.}..E0L-rC.|
-00000260  4f a3 08 d2 7f 70 e9 31  7b c8 cd 77 fc 3e 82 70  |O....p.1{..w.>.p|
-00000270  48 ed 83 55 79 16 c1 8c  69 50 60 53 48 08 5b 66  |H..Uy...iP`SH.[f|
-00000280  fe 78 02 06 16 ba 02 90  85 11 7b 49 36 71 58 35  |.x........{I6qX5|
-00000290  46 7f fd 0f de dc 11 ae  3a bd df 79 93 f9 e3 8d  |F.......:..y....|
-000002a0  4c d8 c5 55 74 34 7f 01  dd 4d d5 ef ef 4e 3d d3  |L..Ut4...M...N=.|
-000002b0  31 94 3f 1c 9b 6c 44 d0  3b 73 d1 5f b4 b6 48 5d  |1.?..lD.;s._..H]|
-000002c0  16 ba 17 0b d0 f5 b4 16  18 1f 85 be dc f1 75 71  |..............uq|
-000002d0  17 f8 b0 8a f3 d2 80 24  d5 3b cd 58 f4 9b 03 e5  |.......$.;.X....|
-000002e0  64 c5 ae 5e 9a 25 d2 bb  a2 28 91 4b 2e 81 4d e4  |d..^.%...(.K..M.|
-000002f0  4e 25 57 12 fc 7a 87 36  66 0b 76 21 66 17 a0 e5  |N%W..z.6f.v!f...|
-00000300  0a f7 00 31 48 62 a9 70  f1 75 1b e0 78 c9 fa de  |...1Hb.p.u..x...|
-00000310  11 6f 3d 17 03 03 00 99  72 f9 ad 67 80 2a 9f 04  |.o=.....r..g.*..|
-00000320  a9 0a fb 6f 03 90 88 35  7f cb 97 5f 4e a2 1e a8  |...o...5..._N...|
-00000330  34 80 96 d1 60 b4 b4 12  ec c3 2b 15 c9 a0 f9 28  |4...`.....+....(|
-00000340  50 1c 53 1d fc 32 a2 c7  c0 03 58 1b 83 a6 ee 94  |P.S..2....X.....|
-00000350  2d 98 99 83 62 6a 52 a0  c5 42 94 4f 3a 26 2e 44  |-...bjR..B.O:&.D|
-00000360  7b 03 f5 2a 0e 9e 48 e4  2a 18 2e 9b 42 7f 34 d2  |{..*..H.*...B.4.|
-00000370  3c b2 92 52 cc 51 0e f0  fd c7 4d e6 d7 1b b2 44  |<..R.Q....M....D|
-00000380  99 48 e7 da 1e 43 37 d1  ac 80 c5 34 21 1b d8 0c  |.H...C7....4!...|
-00000390  9c 92 0d b4 27 b0 78 43  06 a2 90 42 c4 99 5e 5f  |....'.xC...B..^_|
-000003a0  a4 36 69 a5 a1 92 12 5e  51 47 7f ff 50 07 ac 8a  |.6i....^QG..P...|
-000003b0  35 17 03 03 00 35 86 65  34 2f d0 12 2a 0b 7c 50  |5....5.e4/..*.|P|
-000003c0  b4 c5 67 30 cc 4d cf 4f  f7 be a5 0d 2c b2 96 ae  |..g0.M.O....,...|
-000003d0  da 70 a3 74 c2 e7 9a 18  61 17 95 da 00 ac cc 89  |.p.t....a.......|
-000003e0  66 a1 e8 aa ca 8f 02 3c  b5 16 3d                 |f......<..=|
+00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 1b  |..+.....3.$... .|
+00000060  e6 5f 3d 83 17 1c a6 90  45 f9 00 d9 96 be 4a 58  |._=.....E.....JX|
+00000070  ec 82 73 4d e6 8c 74 e9  80 bc 3a 48 1b 93 71 14  |..sM..t...:H..q.|
+00000080  03 03 00 01 01 17 03 03  00 17 71 c1 fc 68 5e 33  |..........q..h^3|
+00000090  54 8f 43 df 20 55 ac 3b  e8 a4 ee 68 ff 88 7c 71  |T.C. U.;...h..|q|
+000000a0  92 17 03 03 02 6d 2a 26  5c 45 13 5f 75 46 56 41  |.....m*&\E._uFVA|
+000000b0  25 92 a1 6f cd 7b 01 e2  cb 76 81 4d 33 f0 9d d1  |%..o.{...v.M3...|
+000000c0  0d db b1 90 1a a7 d9 a8  4a 79 b1 12 59 62 0d c8  |........Jy..Yb..|
+000000d0  cc 92 16 26 27 3e 07 b6  8a 15 77 a8 f6 c3 02 e7  |...&'>....w.....|
+000000e0  44 0d b5 d3 11 57 6b 81  15 7d 23 b3 91 82 21 3c  |D....Wk..}#...!<|
+000000f0  0a 0c ef d5 5b 96 5d 85  aa 3a 1e a6 7b fc 3a eb  |....[.]..:..{.:.|
+00000100  24 af 13 fa 7f 90 0a 83  b5 0a 0b d0 f7 0c 2d 99  |$.............-.|
+00000110  75 9b 84 0c d8 dc 60 a3  62 ed 64 55 02 73 a1 74  |u.....`.b.dU.s.t|
+00000120  c1 53 c6 97 a5 23 7c 19  c8 f7 1c 97 e9 e9 f8 ee  |.S...#|.........|
+00000130  4c 47 7e c4 5e 0f 03 fc  60 9e ba 47 ea a9 9b ef  |LG~.^...`..G....|
+00000140  9a 04 62 e3 db bf 30 d7  5a 1f 20 c9 4c 37 ff 0e  |..b...0.Z. .L7..|
+00000150  46 d9 ce 85 c5 47 16 43  9a 89 0b 97 44 7a be 09  |F....G.C....Dz..|
+00000160  5d 03 a0 b1 1f a6 ca 78  0d fb f4 1a 6d 3a ec 40  |]......x....m:.@|
+00000170  1e 58 fc 67 5e bb 69 a1  ae 1d 6d bc b4 80 b9 71  |.X.g^.i...m....q|
+00000180  1a 11 12 35 6a 2a 0c dc  b3 b5 4b 0a 06 a7 8b be  |...5j*....K.....|
+00000190  38 4b 70 32 d4 51 e3 99  5b 60 28 e7 9a 60 90 6b  |8Kp2.Q..[`(..`.k|
+000001a0  1f 3a 9b 4b 66 fd e6 76  b5 8c 29 c3 36 ae a8 81  |.:.Kf..v..).6...|
+000001b0  7e 7c bf e7 46 7d 13 27  0d 38 75 f0 15 e1 64 93  |~|..F}.'.8u...d.|
+000001c0  1e 26 bc a8 5d 95 60 a2  e5 42 7f 2f 08 a1 e8 d3  |.&..].`..B./....|
+000001d0  79 e8 5e 1f 02 45 cc 05  ca 63 7b f2 d9 ad af ab  |y.^..E...c{.....|
+000001e0  5a 94 f0 16 e7 60 14 c2  3d 05 3f 8d bb 33 c1 ca  |Z....`..=.?..3..|
+000001f0  79 28 04 c7 20 07 c8 13  89 7a 11 a2 54 6d b8 d5  |y(.. ....z..Tm..|
+00000200  e1 b7 b1 43 48 9b a9 b9  e8 e0 40 7e 5a 36 24 70  |...CH.....@~Z6$p|
+00000210  42 9a 51 70 6e 22 8a 2b  4b 9d b0 58 ff ae a9 45  |B.Qpn".+K..X...E|
+00000220  34 b2 8b c1 35 d8 65 a5  7e 1f 32 fd 51 21 79 00  |4...5.e.~.2.Q!y.|
+00000230  79 20 f7 5f 8a e2 e0 b3  4a 78 3b 03 a8 03 b6 ef  |y ._....Jx;.....|
+00000240  b2 25 37 e9 f3 ce 22 f0  2b fc f8 dd be 50 10 22  |.%7...".+....P."|
+00000250  0b fa fb 04 ab a7 33 07  48 2f ca ec 0d fe 19 75  |......3.H/.....u|
+00000260  cc c5 3d 17 36 06 5c 07  08 15 df 36 6c 4f f4 73  |..=.6.\....6lO.s|
+00000270  50 49 ff 47 ba 47 6d e1  bb 2d 8f 77 d5 44 a9 87  |PI.G.Gm..-.w.D..|
+00000280  2a 05 12 52 bf 2b e2 4b  64 94 9c 89 bb 2c 65 cb  |*..R.+.Kd....,e.|
+00000290  59 2a f0 1a 15 b2 e3 6e  5a cc 48 b4 44 6c 44 07  |Y*.....nZ.H.DlD.|
+000002a0  80 01 93 25 86 83 f2 8f  01 e6 ef 5e 9a 36 4e 7f  |...%.......^.6N.|
+000002b0  bc 27 0e 4d f0 67 3a de  29 b5 e9 6a 7f 4b b4 77  |.'.M.g:.)..j.K.w|
+000002c0  9b e2 3b 73 c9 51 e5 a6  df 97 a7 02 fa f2 f7 db  |..;s.Q..........|
+000002d0  df 71 fb d1 ad 64 37 46  3e de 57 de 1d fc 8f 6e  |.q...d7F>.W....n|
+000002e0  bb 6f 58 3f 87 00 d1 a3  52 a5 35 12 17 83 19 a4  |.oX?....R.5.....|
+000002f0  2b be 31 bd dc a6 62 ca  c3 09 39 e1 cd 0b 64 44  |+.1...b...9...dD|
+00000300  1a ef 65 26 f3 e5 31 fb  61 56 df d3 11 d9 cc 65  |..e&..1.aV.....e|
+00000310  7f 8f ab 17 03 03 00 99  94 ce 37 3c e1 7f b1 f5  |..........7<....|
+00000320  7e 2b 04 17 45 3d 38 40  1b 82 0e f7 22 ef 28 ce  |~+..E=8@....".(.|
+00000330  1a 69 33 a6 ad c6 1f ab  08 12 31 b4 c7 41 ac c5  |.i3.......1..A..|
+00000340  b3 e5 4b 84 56 d9 0c 53  58 4c 8f 40 3a 34 66 d0  |..K.V..SXL.@:4f.|
+00000350  c7 8f 9b b3 26 25 1f 68  fc 97 ba a7 de ac cf c5  |....&%.h........|
+00000360  8b b3 26 99 68 6e ca e9  65 47 07 bd 38 15 f3 0c  |..&.hn..eG..8...|
+00000370  d0 14 8e 6d 89 a2 ad cd  ad ef 00 54 07 5a 4b ef  |...m.......T.ZK.|
+00000380  02 ce b9 a1 b0 d0 d6 f7  bb e0 91 51 72 87 99 50  |...........Qr..P|
+00000390  f4 68 4c 0e d8 fa 00 d4  dd bd 1d 2e 7b f6 e2 61  |.hL.........{..a|
+000003a0  d3 a8 46 9c f7 dc 2a 04  be 3c 42 85 4f ad 59 20  |..F...*..>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 35 a0 a0 1c ae a9  |..........5.....|
-00000010  1a 1f 74 01 92 fe bf 91  c4 aa 8b f2 84 7e 39 c1  |..t..........~9.|
-00000020  cb f4 ae a8 76 0c de 9e  54 7f ca 4a a2 d3 07 ef  |....v...T..J....|
-00000030  8e ed 8a be 54 ad 76 fe  b6 62 24 4d a7 88 d5 7a  |....T.v..b$M...z|
-00000040  17 03 03 00 17 a2 d4 e7  78 ef 4a 2e 66 52 6f 2a  |........x.J.fRo*|
-00000050  e3 07 e0 9c fc 19 f6 f8  96 88 bb be 17 03 03 00  |................|
-00000060  13 43 01 14 16 42 27 8a  b9 a9 98 5f c7 06 4d 20  |.C...B'...._..M |
-00000070  8b c3 cb 33                                       |...3|
+00000000  14 03 03 00 01 01 17 03  03 00 35 19 50 85 5d 08  |..........5.P.].|
+00000010  c9 5e 25 05 37 ed cc 54  fe ba 86 3e 8a d4 e9 fd  |.^%.7..T...>....|
+00000020  66 54 6e a3 1f 8b 4f 95  cf 04 51 db 60 96 ae 78  |fTn...O...Q.`..x|
+00000030  6b 7d 19 63 03 2a b6 e5  97 37 26 79 98 3f 85 52  |k}.c.*...7&y.?.R|
+00000040  17 03 03 00 17 c9 80 91  3e 92 1e a7 9b 00 a3 01  |........>.......|
+00000050  19 31 d0 6f 2e 69 0c 15  03 73 20 36 17 03 03 00  |.1.o.i...s 6....|
+00000060  13 97 85 32 6f a2 9c 72  be ca 43 db 18 a7 98 b7  |...2o..r..C.....|
+00000070  67 44 71 ce                                       |gDq.|
diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven
index 73d54e6579036f..41ed6c4e1b0ed9 100644
--- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven
+++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 6d 01 00 00  69 03 03 5e 1c 8d af f1  |....m...i..^....|
-00000010  4a ab 9d e1 c7 9c 85 c3  ab b8 84 84 ee 39 66 0b  |J............9f.|
-00000020  6d d7 b2 3b 7b bf 4e d1  90 a4 92 00 00 04 00 2f  |m..;{.N......../|
+00000000  16 03 01 00 6d 01 00 00  69 03 03 5e 92 9d 30 27  |....m...i..^..0'|
+00000010  23 da fa a0 07 30 03 c8  bd 60 f2 db e9 5e b3 fc  |#....0...`...^..|
+00000020  65 d3 c5 e1 49 35 63 86  53 ec 87 00 00 04 00 2f  |e...I5c.S....../|
 00000030  00 ff 01 00 00 3c 00 16  00 00 00 17 00 00 00 0d  |.....<..........|
 00000040  00 30 00 2e 04 03 05 03  06 03 08 07 08 08 08 09  |.0..............|
 00000050  08 0a 08 0b 08 04 08 05  08 06 04 01 05 01 06 01  |................|
@@ -49,10 +49,10 @@
 00000260  ee b1 87 82 f1 6c 04 ed  73 bb b3 43 77 8d 0c 1c  |.....l..s..Cw...|
 00000270  f1 0f a1 d8 40 83 61 c9  4c 72 2b 9d ae db 46 06  |....@.a.Lr+...F.|
 00000280  06 4d f4 c1 b3 3e c0 d1  bd 42 d4 db fe 3d 13 60  |.M...>...B...=.`|
-00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 1f 0d 00 00  |.\!.;...........|
-000002a0  1b 02 01 40 00 14 08 04  04 03 08 07 08 05 08 06  |...@............|
-000002b0  04 01 05 01 06 01 05 03  06 03 00 00 16 03 03 00  |................|
-000002c0  04 0e 00 00 00                                    |.....|
+00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 23 0d 00 00  |.\!.;.......#...|
+000002a0  1f 02 01 40 00 18 08 04  04 03 08 07 08 05 08 06  |...@............|
+000002b0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 00  |................|
+000002c0  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 02 0a 0b 00 02  06 00 02 03 00 02 00 30  |...............0|
 00000010  82 01 fc 30 82 01 5e 02  09 00 9a 30 84 6c 26 35  |...0..^....0.l&5|
@@ -87,40 +87,40 @@
 000001e0  be e8 91 b3 da 1a f5 5d  a3 23 f5 26 8b 45 70 8d  |.......].#.&.Ep.|
 000001f0  65 62 9b 7e 01 99 3d 18  f6 10 9a 38 61 9b 2e 57  |eb.~..=....8a..W|
 00000200  e4 fa cc b1 8a ce e2 23  a0 87 f0 e1 67 51 eb 16  |.......#....gQ..|
-00000210  03 03 00 86 10 00 00 82  00 80 b1 e6 1d 71 51 c1  |.............qQ.|
-00000220  3a bd 0a 32 95 14 0c 83  7a 2b ec 89 24 f2 29 d8  |:..2....z+..$.).|
-00000230  72 84 ae 13 33 90 58 93  b6 46 6c 54 11 54 5b d3  |r...3.X..FlT.T[.|
-00000240  59 da 02 4a de 2a 56 67  04 32 3b 44 6b ac 6d 6c  |Y..J.*Vg.2;Dk.ml|
-00000250  c5 de 9d b2 9e 7b ec 27  05 9d 47 6d a1 0b 50 71  |.....{.'..Gm..Pq|
-00000260  ea 19 cc 60 5e db 6c 2f  06 b7 6e ce 51 bf 93 a9  |...`^.l/..n.Q...|
-00000270  0e c7 85 c1 83 d2 ac fe  6a d2 a9 bd b3 54 4f 45  |........j....TOE|
-00000280  4b e4 40 68 fb 30 21 ec  1c fc 76 a6 db 8b e1 46  |K.@h.0!...v....F|
-00000290  8c 0c 56 1f c0 e5 9b 2c  54 eb 16 03 03 00 93 0f  |..V....,T.......|
-000002a0  00 00 8f 04 03 00 8b 30  81 88 02 42 01 11 9a de  |.......0...B....|
-000002b0  07 19 df 8b d0 56 e7 b5  b0 d2 d4 c1 32 58 93 88  |.....V......2X..|
-000002c0  ea a6 73 86 f9 e6 be b5  c5 1f d6 0d da 28 59 89  |..s..........(Y.|
-000002d0  21 73 fe e8 30 b9 f0 d1  01 d3 e0 54 79 a6 67 0d  |!s..0......Ty.g.|
-000002e0  84 88 94 2c b9 b6 0e 19  06 34 cc f1 5f 01 02 42  |...,.....4.._..B|
-000002f0  00 fe 02 83 e8 46 a8 5f  ef 5a f0 e1 6f 3f 73 b9  |.....F._.Z..o?s.|
-00000300  0f a1 64 db a7 c4 fb 1e  9f ac da 33 ac a2 7f ff  |..d........3....|
-00000310  64 c1 26 37 17 41 c0 5e  f4 37 5c 76 23 7d 92 3a  |d.&7.A.^.7\v#}.:|
-00000320  ea 35 7f 83 03 7b a4 65  44 5d fb 84 08 39 c7 90  |.5...{.eD]...9..|
-00000330  cc 4a 14 03 03 00 01 01  16 03 03 00 40 7b 06 98  |.J..........@{..|
-00000340  ff f7 d5 a1 68 60 23 25  bc df 12 27 7f 64 1e c8  |....h`#%...'.d..|
-00000350  bc 6d 26 28 29 d0 9f 56  6a f1 5b cd 4e 17 6c 32  |.m&()..Vj.[.N.l2|
-00000360  15 b9 7a 55 02 9b 66 1c  e3 97 40 26 69 7b e7 02  |..zU..f...@&i{..|
-00000370  b0 37 d1 ec ed 96 2e 92  5a 5f 90 c1 be           |.7......Z_...|
+00000210  03 03 00 86 10 00 00 82  00 80 02 50 e4 cc a3 ad  |...........P....|
+00000220  fb 33 24 a1 b3 0a 7c 0f  00 e6 1a 06 2b 9f 1e 1f  |.3$...|.....+...|
+00000230  cc b8 b2 80 90 e7 86 20  32 40 06 ac 1b b0 41 b7  |....... 2@....A.|
+00000240  0d 9c 4c 41 90 01 0b 7a  7e b2 b2 46 39 dc 51 25  |..LA...z~..F9.Q%|
+00000250  98 e0 b9 ec 36 fc 08 64  f0 51 2a 41 e1 e5 61 3d  |....6..d.Q*A..a=|
+00000260  fc 07 c1 9b 1f 6f 48 d4  1f 46 bf 14 e6 92 61 1a  |.....oH..F....a.|
+00000270  bd 5f 25 1f 5e b1 3c ac  c7 58 63 02 0d 3a e0 d6  |._%.^.<..Xc..:..|
+00000280  e9 39 fc ec 59 66 2e 91  b2 65 37 eb a8 b5 60 d9  |.9..Yf...e7...`.|
+00000290  49 05 9f 6f cc 71 79 bb  f7 68 16 03 03 00 93 0f  |I..o.qy..h......|
+000002a0  00 00 8f 04 03 00 8b 30  81 88 02 42 00 bd 6a 29  |.......0...B..j)|
+000002b0  21 06 1a e2 67 a1 7f 10  ab ca 3f 74 5a bc 2f 5d  |!...g.....?tZ./]|
+000002c0  53 d0 59 90 f2 d0 b4 2d  75 47 67 0b 67 55 b6 4f  |S.Y....-uGg.gU.O|
+000002d0  75 7d 32 d8 a7 25 c8 4c  90 0b 56 65 be 60 5d ee  |u}2..%.L..Ve.`].|
+000002e0  f7 b3 80 79 26 e5 25 1d  17 cc d8 36 fc 39 02 42  |...y&.%....6.9.B|
+000002f0  01 c3 32 d6 f2 59 9e 10  c8 bf 7f 74 27 a1 00 df  |..2..Y.....t'...|
+00000300  55 05 f0 b3 81 a1 6e 10  a6 fb 0b e4 1c 3f 62 02  |U.....n......?b.|
+00000310  c9 cc c2 4b 97 ad 0c 88  98 07 6c 98 6d db 9d 9f  |...K......l.m...|
+00000320  68 a0 56 ab 5f f9 a2 21  33 86 64 53 de 37 ff 68  |h.V._..!3.dS.7.h|
+00000330  04 9d 14 03 03 00 01 01  16 03 03 00 40 85 14 34  |............@..4|
+00000340  d6 74 a9 d0 0b e9 1f 34  a9 e9 6c cf 5a ac 88 22  |.t.....4..l.Z.."|
+00000350  51 4d ae 16 05 dd 9e c1  36 5e e3 cf b1 5a b5 48  |QM......6^...Z.H|
+00000360  6c 24 b1 d6 fb 7f 03 6a  98 41 90 de 6d c7 b2 49  |l$.....j.A..m..I|
+00000370  d9 a3 c7 45 ff 18 7c f7  a4 cf 05 59 87           |...E..|....Y.|
 >>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 0f e2 df ef c7  |................|
-00000020  0e 11 83 70 ba a8 fa 90  e3 d5 df 76 dd 7a f1 63  |...p.......v.z.c|
-00000030  ca a3 12 c7 42 45 ae 1a  a3 0f 3b 4c 46 52 91 8e  |....BE....;LFR..|
-00000040  bf df 21 be cb ed 93 12  8a ba 88 17 03 03 00 40  |..!............@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 63 1a 77 66 2a  |...........c.wf*|
+00000020  49 3a b2 17 83 74 e1 d9  70 96 de 01 84 09 f4 88  |I:...t..p.......|
+00000030  c3 e7 3b 65 11 6f 13 32  b8 b4 f4 41 ca 6a d6 d7  |..;e.o.2...A.j..|
+00000040  51 a3 a1 f0 2d 5b b4 55  29 f9 d3 17 03 03 00 40  |Q...-[.U)......@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  12 fd 68 02 2d 6e aa 2f  df e4 0b a1 2c 13 e1 23  |..h.-n./....,..#|
-00000070  f9 78 4b 18 a3 1f 28 78  4d f6 25 83 4c 0c 8c df  |.xK...(xM.%.L...|
-00000080  8b ed a9 b2 87 8c 95 e3  87 8e 71 ad d9 23 05 91  |..........q..#..|
+00000060  d7 30 0f 03 89 22 4c 19  5f 06 a7 4b 95 59 91 52  |.0..."L._..K.Y.R|
+00000070  2a 65 ab 99 cb 71 99 8b  13 82 44 92 6b ff 59 07  |*e...q....D.k.Y.|
+00000080  28 ca 01 68 ab ad ba ee  6c 6a 19 0b e5 6d 82 24  |(..h....lj...m.$|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 80 9a 8c  0e 27 b9 7a f9 61 a4 a6  |.........'.z.a..|
-000000b0  4e c9 24 02 ce 1c 93 5c  5a 7a c9 1e 5f b2 a1 9b  |N.$....\Zz.._...|
-000000c0  e3 0d 47 85 ab                                    |..G..|
+000000a0  00 00 00 00 00 fc 07 f4  d4 bb 24 a3 f1 cf dc 3c  |..........$....<|
+000000b0  ac 14 63 50 32 34 fd 73  c0 eb f2 78 7b 3b ea 58  |..cP24.s...x{;.X|
+000000c0  cc 3e ff 7f e5                                    |.>...|
diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given
index 4ca8a034ed21da..f8cc96058dfc1b 100644
--- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given
+++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 6d 01 00 00  69 03 03 73 b2 f2 a9 ed  |....m...i..s....|
-00000010  88 e0 79 65 b4 3b 58 0d  b2 d8 ab cf d7 12 12 c6  |..ye.;X.........|
-00000020  99 f9 36 75 d3 f8 3e 94  cf 39 25 00 00 04 00 2f  |..6u..>..9%..../|
+00000000  16 03 01 00 6d 01 00 00  69 03 03 8a fe ad ad 75  |....m...i......u|
+00000010  e4 8c bf bf b7 b6 66 14  92 eb 84 85 9c c8 a7 66  |......f........f|
+00000020  04 2a d0 63 5e a6 bf 85  e9 4f 49 00 00 04 00 2f  |.*.c^....OI..../|
 00000030  00 ff 01 00 00 3c 00 16  00 00 00 17 00 00 00 0d  |.....<..........|
 00000040  00 30 00 2e 04 03 05 03  06 03 08 07 08 08 08 09  |.0..............|
 00000050  08 0a 08 0b 08 04 08 05  08 06 04 01 05 01 06 01  |................|
@@ -49,10 +49,10 @@
 00000260  ee b1 87 82 f1 6c 04 ed  73 bb b3 43 77 8d 0c 1c  |.....l..s..Cw...|
 00000270  f1 0f a1 d8 40 83 61 c9  4c 72 2b 9d ae db 46 06  |....@.a.Lr+...F.|
 00000280  06 4d f4 c1 b3 3e c0 d1  bd 42 d4 db fe 3d 13 60  |.M...>...B...=.`|
-00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 1f 0d 00 00  |.\!.;...........|
-000002a0  1b 02 01 40 00 14 08 04  04 03 08 07 08 05 08 06  |...@............|
-000002b0  04 01 05 01 06 01 05 03  06 03 00 00 16 03 03 00  |................|
-000002c0  04 0e 00 00 00                                    |.....|
+00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 23 0d 00 00  |.\!.;.......#...|
+000002a0  1f 02 01 40 00 18 08 04  04 03 08 07 08 05 08 06  |...@............|
+000002b0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 00  |................|
+000002c0  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 01 3c 0b 00 01  38 00 01 35 00 01 32 30  |....<...8..5..20|
 00000010  82 01 2e 30 81 e1 a0 03  02 01 02 02 10 17 d1 81  |...0............|
@@ -74,36 +74,36 @@
 00000110  8a 4e 34 40 39 d6 b3 10  dc 19 fe a0 22 71 b3 f5  |.N4@9......."q..|
 00000120  8f a1 58 0d cd f4 f1 85  24 bf e6 3d 14 df df ed  |..X.....$..=....|
 00000130  0e e1 17 d8 11 a2 60 d0  8a 37 23 2a c2 46 aa 3a  |......`..7#*.F.:|
-00000140  08 16 03 03 00 86 10 00  00 82 00 80 1c aa 0a c6  |................|
-00000150  76 22 2b bc 67 c7 db 5a  59 0c 2b 1d 1a 66 9b c5  |v"+.g..ZY.+..f..|
-00000160  55 ac 80 bf 23 11 68 96  82 df 44 cf bc 44 4f 54  |U...#.h...D..DOT|
-00000170  ce 0c 32 01 59 5e 3e a8  28 e1 33 7d 7d fb 2a 87  |..2.Y^>.(.3}}.*.|
-00000180  53 d1 32 25 b8 29 5a 5e  45 24 4d a8 47 58 bc 9c  |S.2%.)Z^E$M.GX..|
-00000190  6f f3 61 a9 ca e0 ad 32  88 04 1a da 83 ff fd 31  |o.a....2.......1|
-000001a0  84 65 9e 33 bb 79 d4 71  55 52 bc 57 fd 2e d5 98  |.e.3.y.qUR.W....|
-000001b0  46 b9 dc 74 58 7c c9 25  44 3c 07 97 5d bc 65 b5  |F..tX|.%D<..].e.|
-000001c0  b5 46 50 fa 52 f9 45 d7  0f f5 d2 4e 16 03 03 00  |.FP.R.E....N....|
-000001d0  48 0f 00 00 44 08 07 00  40 e2 1c ab 11 6c 52 e6  |H...D...@....lR.|
-000001e0  e8 7f 67 f0 6e 6a e4 a8  4f 25 89 31 d7 f8 dd 6f  |..g.nj..O%.1...o|
-000001f0  fd c7 84 e9 59 6b 77 b6  3b fb bc b3 d6 a7 96 4c  |....Ykw.;......L|
-00000200  2f 54 d2 cf 6b 06 5f a5  69 b6 85 0e a9 a2 90 aa  |/T..k._.i.......|
-00000210  c4 b2 89 17 b3 c7 b9 73  00 14 03 03 00 01 01 16  |.......s........|
-00000220  03 03 00 40 45 8d 48 5b  23 74 21 05 ae 22 ce c0  |...@E.H[#t!.."..|
-00000230  8a 05 9a 15 7e fb 61 73  dd 45 fd d0 97 a4 ca f5  |....~.as.E......|
-00000240  84 f0 01 c4 e4 44 78 c2  14 4f b6 27 0f e8 5a 9d  |.....Dx..O.'..Z.|
-00000250  69 7c 9b c4 c5 a3 4d 42  bf 2b 89 c6 a3 c2 ca 7a  |i|....MB.+.....z|
-00000260  d3 6c 5e 51                                       |.l^Q|
+00000140  08 16 03 03 00 86 10 00  00 82 00 80 77 8b 9f 34  |............w..4|
+00000150  b4 db a7 0d 5b ed 1b 2f  4a 41 64 f5 ce 4a 00 7c  |....[../JAd..J.||
+00000160  91 32 b3 cf 61 18 41 04  ae fa 3b 14 de 19 0e 64  |.2..a.A...;....d|
+00000170  f9 ec 75 a6 48 7e 28 57  26 f5 1c 75 1d 42 73 fc  |..u.H~(W&..u.Bs.|
+00000180  11 51 2b ef e5 08 83 ac  17 ec 78 b8 5b 14 84 c9  |.Q+.......x.[...|
+00000190  bc 7f 22 fd 54 69 7a 82  36 c7 21 bc d6 04 c4 e7  |..".Tiz.6.!.....|
+000001a0  bc 48 c8 72 56 5d 1e 65  41 21 0a 26 85 a0 d8 c3  |.H.rV].eA!.&....|
+000001b0  50 f0 b6 07 25 ee 79 b8  f5 e6 17 85 d4 09 e7 d7  |P...%.y.........|
+000001c0  ab 8f 17 cb c2 13 a0 5a  50 cb e4 a7 16 03 03 00  |.......ZP.......|
+000001d0  48 0f 00 00 44 08 07 00  40 b7 24 50 46 db d4 8c  |H...D...@.$PF...|
+000001e0  68 17 f5 5e 79 a9 80 8c  40 23 92 33 4e 1e cc ee  |h..^y...@#.3N...|
+000001f0  d5 35 4d b8 2a 52 f0 7f  50 8e c6 d5 5f bc 08 35  |.5M.*R..P..._..5|
+00000200  a2 6d db cb 96 52 ec 92  c7 62 c7 59 ab d8 6f 9d  |.m...R...b.Y..o.|
+00000210  d7 46 35 71 28 41 89 59  02 14 03 03 00 01 01 16  |.F5q(A.Y........|
+00000220  03 03 00 40 3e 12 44 bc  c6 3d 88 71 ba d3 0c 26  |...@>.D..=.q...&|
+00000230  20 72 b0 7f 25 83 9f fd  77 c1 f5 1e 47 28 2e 60  | r..%...w...G(.`|
+00000240  53 e0 ac 52 e8 94 e4 87  90 3f af f3 a4 c0 d3 ba  |S..R.....?......|
+00000250  fe b7 06 54 f7 13 33 36  47 8f 5e 45 22 84 18 3a  |...T..36G.^E"..:|
+00000260  1f 14 21 85                                       |..!.|
 >>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 d0 d7 ea c0 57  |...............W|
-00000020  b8 c4 0e ad 2b ba 7e f7  40 0e 92 42 0b c1 55 38  |....+.~.@..B..U8|
-00000030  89 ac d8 9f 46 96 89 c8  a0 06 e7 84 ac 42 6f a8  |....F........Bo.|
-00000040  e2 67 49 fe 5b 2f 66 3e  47 c3 14 17 03 03 00 40  |.gI.[/f>G......@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 d4 e6 b8 6f 53  |..............oS|
+00000020  6a d9 37 2b a4 95 9f 04  e5 99 2f f9 9a 16 fd a7  |j.7+....../.....|
+00000030  2d 39 d9 aa 7c 26 9e 44  4b 7f 8f d5 c6 24 4d ac  |-9..|&.DK....$M.|
+00000040  13 ca 8a 45 1e 66 dc 9a  bf 76 22 17 03 03 00 40  |...E.f...v"....@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  95 78 c4 75 cf 05 a9 ce  aa 85 0b 8e 4e fc 4b dc  |.x.u........N.K.|
-00000070  59 70 3e 68 85 68 97 9a  eb 22 22 3a 8c 61 91 a4  |Yp>h.h..."":.a..|
-00000080  89 06 bd 9e fc 8d 1d 4b  ed fe 4b d6 e7 0a 6e 2b  |.......K..K...n+|
+00000060  3f 5c 60 f8 22 7b aa 82  38 c4 4a 2e 07 50 cb 6c  |?\`."{..8.J..P.l|
+00000070  3f 6f a9 39 bf 21 ce 7a  30 72 03 90 ec bc 9c 18  |?o.9.!.z0r......|
+00000080  1f a9 7f 82 3a d9 46 d9  d8 b8 77 65 e8 b3 e7 f5  |....:.F...we....|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 92 d4 46  1f 6b d5 63 a7 95 0d c2  |.......F.k.c....|
-000000b0  2f a9 a2 5f 0d 70 8f a5  31 e3 5c 1d fa ac f6 2e  |/.._.p..1.\.....|
-000000c0  02 6d e8 9f 95                                    |.m...|
+000000a0  00 00 00 00 00 6d 29 d4  87 0a b4 1d b4 9d f4 12  |.....m).........|
+000000b0  bc 3d a3 1b 79 21 85 0d  e7 10 64 92 40 39 05 99  |.=..y!....d.@9..|
+000000c0  c8 a7 dd ef 0e                                    |.....|
diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven
index 585e6af6579bd1..cc6450a4ce8b34 100644
--- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven
+++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 6d 01 00 00  69 03 03 0e c0 95 b1 0b  |....m...i.......|
-00000010  7b b5 57 cc 04 e7 03 d0  66 8d ee 9d da 65 dc 74  |{.W.....f....e.t|
-00000020  0d de 11 47 38 cd 19 12  f4 06 17 00 00 04 00 2f  |...G8........../|
+00000000  16 03 01 00 6d 01 00 00  69 03 03 e9 31 0f d0 25  |....m...i...1..%|
+00000010  ef 25 a7 1a 9b 8c 4b a3  ca 2b a6 54 89 1c e1 68  |.%....K..+.T...h|
+00000020  6f b2 b2 60 6f 8a dc 87  24 8c 7b 00 00 04 00 2f  |o..`o...$.{..../|
 00000030  00 ff 01 00 00 3c 00 16  00 00 00 17 00 00 00 0d  |.....<..........|
 00000040  00 30 00 2e 04 03 05 03  06 03 08 07 08 08 08 09  |.0..............|
 00000050  08 0a 08 0b 08 04 08 05  08 06 04 01 05 01 06 01  |................|
@@ -49,10 +49,10 @@
 00000260  ee b1 87 82 f1 6c 04 ed  73 bb b3 43 77 8d 0c 1c  |.....l..s..Cw...|
 00000270  f1 0f a1 d8 40 83 61 c9  4c 72 2b 9d ae db 46 06  |....@.a.Lr+...F.|
 00000280  06 4d f4 c1 b3 3e c0 d1  bd 42 d4 db fe 3d 13 60  |.M...>...B...=.`|
-00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 1f 0d 00 00  |.\!.;...........|
-000002a0  1b 02 01 40 00 14 08 04  04 03 08 07 08 05 08 06  |...@............|
-000002b0  04 01 05 01 06 01 05 03  06 03 00 00 16 03 03 00  |................|
-000002c0  04 0e 00 00 00                                    |.....|
+00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 23 0d 00 00  |.\!.;.......#...|
+000002a0  1f 02 01 40 00 18 08 04  04 03 08 07 08 05 08 06  |...@............|
+000002b0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 00  |................|
+000002c0  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 01 fd 0b 00 01  f9 00 01 f6 00 01 f3 30  |...............0|
 00000010  82 01 ef 30 82 01 58 a0  03 02 01 02 02 10 5c 19  |...0..X.......\.|
@@ -86,40 +86,40 @@
 000001d0  ac 11 b1 28 56 be 1d cd  61 62 84 09 bf d6 80 c6  |...(V...ab......|
 000001e0  45 8d 82 2c b4 d8 83 9b  db c9 22 b7 2a 12 11 7b  |E..,......".*..{|
 000001f0  fa 02 3b c1 c9 ff ea c9  9d a8 49 d3 95 d7 d5 0e  |..;.......I.....|
-00000200  e5 35 16 03 03 00 86 10  00 00 82 00 80 cc d2 66  |.5.............f|
-00000210  37 df f1 5d cb 6f 1d 6b  64 ea 62 45 97 dd 47 f8  |7..].o.kd.bE..G.|
-00000220  e5 a0 f6 84 46 9b 6c 5b  c9 79 60 07 b0 d1 5a e6  |....F.l[.y`...Z.|
-00000230  5c 1a 43 b1 04 9f f2 3d  7a 09 da e0 45 ea 30 8a  |\.C....=z...E.0.|
-00000240  5c 08 07 67 17 2e 55 f5  0a 13 96 5c 92 e5 61 66  |\..g..U....\..af|
-00000250  92 fe c6 44 9c 4f 62 54  10 12 df f7 e4 11 74 f6  |...D.ObT......t.|
-00000260  35 81 bb 55 4f ce 43 dc  7f 4d bc 4f 8b 0c ef 13  |5..UO.C..M.O....|
-00000270  43 8a e5 80 dc 38 3e 8a  f5 7b 5c 5d 1c 76 10 06  |C....8>..{\].v..|
-00000280  3d c5 05 5b cb 9a 17 20  13 29 a5 36 5d 16 03 03  |=..[... .).6]...|
-00000290  00 88 0f 00 00 84 08 04  00 80 a7 7f 2c 3b d1 82  |............,;..|
-000002a0  8a 17 50 2a f6 c4 ac ce  47 1b 25 23 4b 0c d0 17  |..P*....G.%#K...|
-000002b0  89 18 98 a6 e4 b8 51 70  6a 59 72 1a aa 68 e8 25  |......QpjYr..h.%|
-000002c0  f5 4d 72 66 be bb 25 61  9b 36 e0 24 a5 34 e4 36  |.Mrf..%a.6.$.4.6|
-000002d0  23 0a 36 a8 81 f4 19 62  98 2b af 1b f5 c4 55 d2  |#.6....b.+....U.|
-000002e0  d5 65 58 b8 31 21 f4 fe  ce 44 cc ea 77 8e 1d f7  |.eX.1!...D..w...|
-000002f0  bc a4 4c e5 cc 90 10 f3  a0 8d 10 72 08 d4 50 1c  |..L........r..P.|
-00000300  88 82 a7 61 da cb 35 ba  26 3c 18 11 6c 14 d6 1a  |...a..5.&<..l...|
-00000310  7f 65 3d 2c 74 f0 92 a3  aa fd 14 03 03 00 01 01  |.e=,t...........|
-00000320  16 03 03 00 40 f3 3a f0  23 48 35 41 7f d0 ed 22  |....@.:.#H5A..."|
-00000330  5b 1a 47 71 60 08 b0 6b  cd 32 56 c0 d0 05 90 b3  |[.Gq`..k.2V.....|
-00000340  0b 35 3c 03 49 ec 06 5d  b4 ce 1d 10 4e bc 75 bf  |.5<.I..]....N.u.|
-00000350  23 3b f1 d6 8f f6 f0 70  b6 94 8f 51 fd 4f 47 0b  |#;.....p...Q.OG.|
-00000360  e1 c9 ad c8 14                                    |.....|
+00000200  e5 35 16 03 03 00 86 10  00 00 82 00 80 29 51 da  |.5...........)Q.|
+00000210  8e 5c 3e fb 44 8a 0f 97  42 23 8b e2 73 cc e2 90  |.\>.D...B#..s...|
+00000220  11 c4 98 01 e9 60 96 9e  a9 96 30 c5 95 f8 56 0e  |.....`....0...V.|
+00000230  4a 2e 77 e7 7e 23 b7 49  31 c4 87 c5 69 c6 ca 6f  |J.w.~#.I1...i..o|
+00000240  ea 53 41 b4 2e 1e f6 0b  33 f5 e1 40 69 c0 91 6f  |.SA.....3..@i..o|
+00000250  88 c1 68 c8 18 99 6e fe  b3 5f 9b ee f1 4a 76 41  |..h...n.._...JvA|
+00000260  1f d1 05 f5 39 76 61 e6  a6 ea 75 0e 50 32 a1 19  |....9va...u.P2..|
+00000270  20 6a 4c 5d 62 6e 2a 6e  af f9 9c 38 b6 3a bc 86  | jL]bn*n...8.:..|
+00000280  eb ac 6d d3 b5 48 30 11  4d 98 2e 61 34 16 03 03  |..m..H0.M..a4...|
+00000290  00 88 0f 00 00 84 08 04  00 80 82 ed 3f da b5 50  |............?..P|
+000002a0  d2 50 51 14 cf ee f7 b9  7b a9 0c 77 2f 88 42 0a  |.PQ.....{..w/.B.|
+000002b0  34 a9 5d e7 32 26 3a 28  87 49 fb c4 83 31 68 c6  |4.].2&:(.I...1h.|
+000002c0  0d 32 d4 31 0a d1 d6 1e  6f 7f 89 93 bf b7 7c c7  |.2.1....o.....|.|
+000002d0  95 f8 c3 69 d8 58 4e e4  76 07 36 84 b7 c3 e7 22  |...i.XN.v.6...."|
+000002e0  01 4c 59 ae 89 95 bb e0  07 e0 31 6a e2 95 4c d4  |.LY.......1j..L.|
+000002f0  01 54 9d 27 82 60 31 13  39 07 47 c2 0c 08 5c d4  |.T.'.`1.9.G...\.|
+00000300  03 5a 6f d7 89 a0 67 5e  2d a0 11 03 bf 0e 35 d8  |.Zo...g^-.....5.|
+00000310  d0 78 2f 1e d8 15 47 ce  c9 d3 14 03 03 00 01 01  |.x/...G.........|
+00000320  16 03 03 00 40 d0 0a 0e  93 dd 9a 51 4f a9 7f 5f  |....@......QO.._|
+00000330  93 a6 60 a6 f2 10 f1 bd  bd ae 13 5d 11 b7 0d 1a  |..`........]....|
+00000340  3d 1e f3 0c b7 53 7c 10  ed fa 8c d7 3f 20 ec f2  |=....S|.....? ..|
+00000350  7d e9 15 87 3d d3 05 21  3a bc a5 54 fa 40 3b 53  |}...=..!:..T.@;S|
+00000360  41 7c ea c6 28                                    |A|..(|
 >>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 6e d3 79 f1 02  |...........n.y..|
-00000020  4d 8e ad 3b 33 5a 92 10  55 79 94 b7 43 ed 08 c1  |M..;3Z..Uy..C...|
-00000030  e1 5f 04 c6 01 82 ce 96  70 c7 97 8d cc 0a ca d3  |._......p.......|
-00000040  46 d4 2f 9f b8 78 57 27  ee 14 aa 17 03 03 00 40  |F./..xW'.......@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 a8 8e 30 08 f0  |.............0..|
+00000020  87 7b 13 31 99 6d 7e 9a  9b 03 d3 6f 84 d8 d9 31  |.{.1.m~....o...1|
+00000030  2b d2 aa d4 0e ae 6e 72  03 ac e7 7e 5c 22 cc ac  |+.....nr...~\"..|
+00000040  33 b5 df 04 b2 4a 2b 6f  bb a1 6f 17 03 03 00 40  |3....J+o..o....@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  ed 9f 38 f6 99 84 f5 cf  5e ee 27 64 f7 29 3c 18  |..8.....^.'d.)<.|
-00000070  a0 55 23 b7 db 4a 6d 2d  80 c9 75 a5 a3 1f 38 24  |.U#..Jm-..u...8$|
-00000080  0a 99 18 0d 0b 5d 7d 03  f7 8d d2 55 fd 98 7f 69  |.....]}....U...i|
+00000060  50 9c 81 04 9b 1d 61 8a  30 9c 18 68 c7 e1 c9 f3  |P.....a.0..h....|
+00000070  70 f0 1b b6 4a dd fc c7  e3 e3 20 e2 4d 6f 9f bf  |p...J..... .Mo..|
+00000080  17 b0 5e 5b 45 73 29 1e  d4 30 b4 03 ca 8e 69 63  |..^[Es)..0....ic|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 aa 43 ca  95 7d 1a 47 d5 0b 0e c7  |......C..}.G....|
-000000b0  cc 61 3d 43 5b 69 05 a1  39 eb 03 52 41 05 54 e9  |.a=C[i..9..RA.T.|
-000000c0  5d b6 ca 56 2c                                    |]..V,|
+000000a0  00 00 00 00 00 28 ca 6a  4c 1b 3c 11 61 ce b2 58  |.....(.jL.<.a..X|
+000000b0  94 e7 e4 7d c5 ce 51 03  c4 ae b5 4c 33 0b 3c 95  |...}..Q....L3.<.|
+000000c0  ec b1 65 ea da                                    |..e..|
diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given
index 10949e5e3badeb..875fe1becb17bd 100644
--- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given
+++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given
@@ -1,7 +1,7 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 6d 01 00 00  69 03 03 c2 c7 15 c0 0f  |....m...i.......|
-00000010  0d fc 44 60 25 22 6c 4a  ec f1 b0 66 5d c4 f3 bc  |..D`%"lJ...f]...|
-00000020  fe da b2 9a af 24 04 b7  bb 74 79 00 00 04 00 2f  |.....$...ty..../|
+00000000  16 03 01 00 6d 01 00 00  69 03 03 dc f3 c6 52 a4  |....m...i.....R.|
+00000010  9a 9c 53 e0 5a 3c cc 4c  4f 09 32 7f f1 7c 86 6b  |..S.Z<.LO.2..|.k|
+00000020  75 59 68 a5 81 72 45 46  fb 94 a8 00 00 04 00 2f  |uYh..rEF......./|
 00000030  00 ff 01 00 00 3c 00 16  00 00 00 17 00 00 00 0d  |.....<..........|
 00000040  00 30 00 2e 04 03 05 03  06 03 08 07 08 08 08 09  |.0..............|
 00000050  08 0a 08 0b 08 04 08 05  08 06 04 01 05 01 06 01  |................|
@@ -49,10 +49,10 @@
 00000260  ee b1 87 82 f1 6c 04 ed  73 bb b3 43 77 8d 0c 1c  |.....l..s..Cw...|
 00000270  f1 0f a1 d8 40 83 61 c9  4c 72 2b 9d ae db 46 06  |....@.a.Lr+...F.|
 00000280  06 4d f4 c1 b3 3e c0 d1  bd 42 d4 db fe 3d 13 60  |.M...>...B...=.`|
-00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 1f 0d 00 00  |.\!.;...........|
-000002a0  1b 02 01 40 00 14 08 04  04 03 08 07 08 05 08 06  |...@............|
-000002b0  04 01 05 01 06 01 05 03  06 03 00 00 16 03 03 00  |................|
-000002c0  04 0e 00 00 00                                    |.....|
+00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 23 0d 00 00  |.\!.;.......#...|
+000002a0  1f 02 01 40 00 18 08 04  04 03 08 07 08 05 08 06  |...@............|
+000002b0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 00  |................|
+000002c0  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 01 fd 0b 00 01  f9 00 01 f6 00 01 f3 30  |...............0|
 00000010  82 01 ef 30 82 01 58 a0  03 02 01 02 02 10 5c 19  |...0..X.......\.|
@@ -86,40 +86,40 @@
 000001d0  ac 11 b1 28 56 be 1d cd  61 62 84 09 bf d6 80 c6  |...(V...ab......|
 000001e0  45 8d 82 2c b4 d8 83 9b  db c9 22 b7 2a 12 11 7b  |E..,......".*..{|
 000001f0  fa 02 3b c1 c9 ff ea c9  9d a8 49 d3 95 d7 d5 0e  |..;.......I.....|
-00000200  e5 35 16 03 03 00 86 10  00 00 82 00 80 40 fe b5  |.5...........@..|
-00000210  07 31 4a 29 12 9e 52 56  8b a7 7c 33 5e 8f 67 d4  |.1J)..RV..|3^.g.|
-00000220  c7 c3 82 e3 cf 62 11 12  dc 2a 03 4f 07 04 21 7e  |.....b...*.O..!~|
-00000230  70 72 fc 3a d3 4f 6e ed  92 f7 6d 92 a0 28 10 55  |pr.:.On...m..(.U|
-00000240  14 cb fa cb 19 06 9c e4  b1 6d 30 44 2a 74 6b 3a  |.........m0D*tk:|
-00000250  db d4 d6 be 20 25 b1 d4  73 9f 58 3d e7 18 6f 06  |.... %..s.X=..o.|
-00000260  54 b8 ce 9a 7d 92 76 c6  23 bc 19 ca 84 5e f2 18  |T...}.v.#....^..|
-00000270  0a cc b8 43 e1 ff 9e bc  61 64 e0 62 f0 6d 03 11  |...C....ad.b.m..|
-00000280  5f 65 fa 84 35 fe 81 ec  cb c9 1d 0a 48 16 03 03  |_e..5.......H...|
-00000290  00 88 0f 00 00 84 04 01  00 80 95 e5 ba e5 ef 6f  |...............o|
-000002a0  6d 68 2c c5 ee 96 7e 0d  4f 98 4a cb 31 8b 82 f7  |mh,...~.O.J.1...|
-000002b0  b3 2d 18 6e d8 f3 6f 19  5a 3f 3f 18 a3 53 6e e9  |.-.n..o.Z??..Sn.|
-000002c0  a0 3d 8a 78 02 a2 4a f3  a2 e6 f3 c2 83 63 e1 fd  |.=.x..J......c..|
-000002d0  4b 05 ce cf 0e a6 7e db  bb d1 95 5f 4e c9 91 83  |K.....~...._N...|
-000002e0  9c 3c da 85 6e 23 71 78  e1 dc b9 f9 5f 8d 6f e4  |.<..n#qx...._.o.|
-000002f0  76 cc bc a5 18 03 41 e7  44 dc f6 c0 7b ea 05 40  |v.....A.D...{..@|
-00000300  95 7b 54 62 75 ba a5 59  37 8c cf ea ad c6 7c d1  |.{Tbu..Y7.....|.|
-00000310  8a 8a 85 03 fc 46 f4 58  9e a9 14 03 03 00 01 01  |.....F.X........|
-00000320  16 03 03 00 40 e1 c1 7d  5b 18 51 c1 8f 98 70 14  |....@..}[.Q...p.|
-00000330  f1 c1 61 0b 13 1e f1 5f  d6 df 85 b9 a6 e0 f1 c8  |..a...._........|
-00000340  6e 47 eb 15 98 38 ba 2d  27 30 7e 29 8e db c6 4e  |nG...8.-'0~)...N|
-00000350  09 15 d8 5f 4a ef 14 95  5f 78 e3 02 c4 92 de 44  |..._J..._x.....D|
-00000360  bb cc 09 27 6f                                    |...'o|
+00000200  e5 35 16 03 03 00 86 10  00 00 82 00 80 b5 77 6b  |.5............wk|
+00000210  fa 10 fb df 48 8f e7 51  b4 cb 14 c5 48 bd 63 d6  |....H..Q....H.c.|
+00000220  0e 19 d0 81 a8 5a d7 b5  43 84 35 85 37 b7 8d 2e  |.....Z..C.5.7...|
+00000230  c7 c8 70 4c f4 45 bf be  17 86 e7 40 1d 6f 88 2a  |..pL.E.....@.o.*|
+00000240  91 b5 aa aa 34 f7 9a f3  96 e4 dd 51 15 88 be f1  |....4......Q....|
+00000250  80 a9 6f 94 ed c7 5d 28  66 b4 37 e8 22 4f 42 c3  |..o...](f.7."OB.|
+00000260  b5 f0 2f dd 57 dc 8d e5  5a c0 9d fa ce 3c 7a 2d  |../.W...Z....>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 0c 22 6e 84 b2  |............"n..|
-00000020  a1 f9 18 62 3a 86 16 7e  e6 17 3b 8e e5 88 b8 8e  |...b:..~..;.....|
-00000030  3c c5 08 11 8e 0a df df  d4 69 bc 01 7d c8 63 33  |<........i..}.c3|
-00000040  b5 15 bf 03 5e df 50 29  c5 c4 c2 17 03 03 00 40  |....^.P).......@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 a2 b0 ad 7e 71  |..............~q|
+00000020  0c 2c db df 4c b1 4f 19  e6 00 4f 11 ff 5e 4a c5  |.,..L.O...O..^J.|
+00000030  c2 9d 8c 6c 03 50 12 3d  81 ec 44 5a 75 ba 2d 48  |...l.P.=..DZu.-H|
+00000040  7a 74 c3 a3 68 5a 26 ee  7e f5 a2 17 03 03 00 40  |zt..hZ&.~......@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  45 76 91 63 fa 48 9b c9  47 6a f6 7b fa 72 ab 78  |Ev.c.H..Gj.{.r.x|
-00000070  4f cb c4 bb 68 78 7c 71  13 f9 47 32 33 59 d4 16  |O...hx|q..G23Y..|
-00000080  83 fa 8e db 37 b6 cb d5  a1 1a e5 21 1b 50 a6 d3  |....7......!.P..|
+00000060  ad 1b 16 8e 39 99 64 7c  c5 49 24 83 c4 4e f6 86  |....9.d|.I$..N..|
+00000070  6b 5d 68 ae f4 0b 58 23  83 eb ab 01 52 4d 07 a1  |k]h...X#....RM..|
+00000080  59 00 e8 dc a5 a1 6f 76  e2 e9 f2 e1 21 58 6b a0  |Y.....ov....!Xk.|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 47 3b be  7e be 4e 24 16 45 85 27  |.....G;.~.N$.E.'|
-000000b0  0f 31 2a 5a ab 8b 83 61  bb e9 27 8d 12 dc 6f 6d  |.1*Z...a..'...om|
-000000c0  55 17 39 51 4c                                    |U.9QL|
+000000a0  00 00 00 00 00 3c 6e a7  81 36 d0 8c 99 d8 f3 55  |.....>> Flow 1 (client to server)
-00000000  16 03 01 00 6d 01 00 00  69 03 03 f2 1b 6e dc ce  |....m...i....n..|
-00000010  fe af a8 4b 44 88 5f ba  eb c5 d7 92 7e 69 d7 19  |...KD._.....~i..|
-00000020  b3 32 d3 99 e6 be 1f 4f  94 04 e6 00 00 04 00 2f  |.2.....O......./|
+00000000  16 03 01 00 6d 01 00 00  69 03 03 ac ea d9 49 98  |....m...i.....I.|
+00000010  9a 0c 7c 86 64 7c 73 72  6d 79 3f 7b e9 11 8b 1d  |..|.d|srmy?{....|
+00000020  79 95 f5 f5 23 9f b2 f1  9c f4 b5 00 00 04 00 2f  |y...#........../|
 00000030  00 ff 01 00 00 3c 00 16  00 00 00 17 00 00 00 0d  |.....<..........|
 00000040  00 30 00 2e 04 03 05 03  06 03 08 07 08 08 08 09  |.0..............|
 00000050  08 0a 08 0b 08 04 08 05  08 06 04 01 05 01 06 01  |................|
@@ -49,37 +49,37 @@
 00000260  ee b1 87 82 f1 6c 04 ed  73 bb b3 43 77 8d 0c 1c  |.....l..s..Cw...|
 00000270  f1 0f a1 d8 40 83 61 c9  4c 72 2b 9d ae db 46 06  |....@.a.Lr+...F.|
 00000280  06 4d f4 c1 b3 3e c0 d1  bd 42 d4 db fe 3d 13 60  |.M...>...B...=.`|
-00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 1f 0d 00 00  |.\!.;...........|
-000002a0  1b 02 01 40 00 14 08 04  04 03 08 07 08 05 08 06  |...@............|
-000002b0  04 01 05 01 06 01 05 03  06 03 00 00 16 03 03 00  |................|
-000002c0  04 0e 00 00 00                                    |.....|
+00000290  84 5c 21 d3 3b e9 fa e7  16 03 03 00 23 0d 00 00  |.\!.;.......#...|
+000002a0  1f 02 01 40 00 18 08 04  04 03 08 07 08 05 08 06  |...@............|
+000002b0  04 01 05 01 06 01 05 03  06 03 02 01 02 03 00 00  |................|
+000002c0  16 03 03 00 04 0e 00 00  00                       |.........|
 >>> Flow 3 (client to server)
 00000000  16 03 03 00 07 0b 00 00  03 00 00 00 16 03 03 00  |................|
-00000010  86 10 00 00 82 00 80 36  1c ba 9d 08 27 52 8b f7  |.......6....'R..|
-00000020  24 d9 e6 18 d7 21 75 1d  76 e0 13 a0 35 d5 08 7d  |$....!u.v...5..}|
-00000030  c1 8e 3f b2 aa 10 b4 f9  d4 77 e6 cd b3 92 94 0e  |..?......w......|
-00000040  7a c9 0b 5f e2 34 88 ad  fc 02 1b 84 10 ff e8 2a  |z.._.4.........*|
-00000050  dd 2d 82 5c bb ca 15 f8  73 74 ad dd 9f 9d e7 38  |.-.\....st.....8|
-00000060  7c cd 74 8e 37 0f 87 62  cf 30 68 8a e2 15 9d d2  ||.t.7..b.0h.....|
-00000070  43 4b e3 29 69 e4 db 94  9b 5a 7c c6 9b e8 7d 26  |CK.)i....Z|...}&|
-00000080  4b a8 4a 28 c1 47 cf 15  7b 22 a2 1d 6b ac 16 e4  |K.J(.G..{"..k...|
-00000090  e1 62 6e be 9a 05 67 14  03 03 00 01 01 16 03 03  |.bn...g.........|
-000000a0  00 40 98 4e 3d 6c 72 d8  7f 81 b6 b8 ed 32 2e 98  |.@.N=lr......2..|
-000000b0  8d fc c1 1d 56 97 82 ef  3f 7c 86 79 e3 27 06 ed  |....V...?|.y.'..|
-000000c0  87 c4 28 2d 6b f1 b1 88  d0 67 34 64 ba e1 d9 34  |..(-k....g4d...4|
-000000d0  a4 2c ff e0 b2 38 21 5d  04 64 99 a4 34 62 aa 81  |.,...8!].d..4b..|
-000000e0  cf 21                                             |.!|
+00000010  86 10 00 00 82 00 80 2e  37 44 fb d7 1d 2f 3d a5  |........7D.../=.|
+00000020  1b 43 cf f4 1c cf 9d 95  fa be 9f 9d 96 8a 27 5d  |.C............']|
+00000030  7b be 19 10 bd 5e 9a 3e  49 49 d2 af 85 07 70 f8  |{....^.>II....p.|
+00000040  c8 4f 69 02 ff 4e 9d ee  f4 0d 4d 54 a1 aa 61 a3  |.Oi..N....MT..a.|
+00000050  e0 cc db a7 2c 46 80 6e  eb 10 fb cd 2e 3b c5 50  |....,F.n.....;.P|
+00000060  2b a5 d9 a0 bf 01 d2 f8  d8 51 2b ad 40 6f c6 6f  |+........Q+.@o.o|
+00000070  0e 30 53 27 73 89 b7 1b  c1 28 ff ff 18 4c fa 6f  |.0S's....(...L.o|
+00000080  fa 5f 16 b3 38 36 9f f4  07 74 ca bb bb c2 3f aa  |._..86...t....?.|
+00000090  0d e7 42 24 fb f8 4c 14  03 03 00 01 01 16 03 03  |..B$..L.........|
+000000a0  00 40 19 02 9e 3a ce b9  38 40 ce d6 3b 87 b2 f6  |.@...:..8@..;...|
+000000b0  1b 7d ee 76 62 f8 6e 04  80 8f cb 1b f7 1e 1d a6  |.}.vb.n.........|
+000000c0  50 8a 59 b1 ad 7d c5 9d  2f 2d 14 56 2e e5 3b b3  |P.Y..}../-.V..;.|
+000000d0  db da 7e 37 10 97 71 91  d3 7b 93 f6 64 a4 d7 8b  |..~7..q..{..d...|
+000000e0  d2 f0                                             |..|
 >>> Flow 4 (server to client)
 00000000  14 03 03 00 01 01 16 03  03 00 40 00 00 00 00 00  |..........@.....|
-00000010  00 00 00 00 00 00 00 00  00 00 00 66 31 30 4e 0f  |...........f10N.|
-00000020  de bd de 72 65 0c 74 ab  64 d8 59 47 fc 6b ad d8  |...re.t.d.YG.k..|
-00000030  73 24 da 77 62 ba 0a 8c  69 d3 c4 6f 89 ef 5b 92  |s$.wb...i..o..[.|
-00000040  d3 ca 3b e8 67 2b 7c bf  39 7c 8b 17 03 03 00 40  |..;.g+|.9|.....@|
+00000010  00 00 00 00 00 00 00 00  00 00 00 46 c8 31 06 11  |...........F.1..|
+00000020  01 8e df b0 e7 cc 16 d3  97 2e a2 68 e7 a4 d1 0f  |...........h....|
+00000030  91 71 dd ba db 97 20 45  60 c2 47 c7 ee 56 c4 68  |.q.... E`.G..V.h|
+00000040  a4 b1 05 09 e2 68 4d 54  fa ff 01 17 03 03 00 40  |.....hMT.......@|
 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  5c a8 b1 1c 7e e1 76 b8  d0 0c 4d 3d 3f 36 a8 26  |\...~.v...M=?6.&|
-00000070  66 00 dd 47 3c ae 1c 8b  6f b0 6b 80 75 c4 0b 7e  |f..G<...o.k.u..~|
-00000080  ee fb 8c fe 2f 2f 65 1b  9b e1 72 a9 ac 8f cf da  |....//e...r.....|
+00000060  79 bf ad 63 e3 11 2b d0  41 0e 24 85 92 c4 9b b5  |y..c..+.A.$.....|
+00000070  b2 d3 2e fc aa 46 84 85  a7 37 90 fc f0 2b 5a 7e  |.....F...7...+Z~|
+00000080  28 9f 2e 57 1d 8f c3 ca  eb 40 32 79 af 4b b8 28  |(..W.....@2y.K.(|
 00000090  15 03 03 00 30 00 00 00  00 00 00 00 00 00 00 00  |....0...........|
-000000a0  00 00 00 00 00 9d 96 95  12 3b 42 41 a8 30 b2 8c  |.........;BA.0..|
-000000b0  3d 18 f6 27 b7 77 30 d9  29 0c 68 ec 2b 09 26 91  |=..'.w0.).h.+.&.|
-000000c0  23 0c e2 10 07                                    |#....|
+000000a0  00 00 00 00 00 8b 6c 27  b8 ff f9 ea ca 68 75 54  |......l'.....huT|
+000000b0  bf bf a7 f4 b1 58 a5 b3  31 01 4d c7 85 58 31 d4  |.....X..1.M..X1.|
+000000c0  e7 da 7e 77 68                                    |..~wh|
diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven
index 686011b0fa9b82..a957c26399e8e6 100644
--- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven
+++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven
@@ -1,182 +1,180 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ca 01 00 00  c6 03 03 af 29 1d da b2  |............)...|
-00000010  1b 14 96 f9 c9 6a 4d 28  cc 1d 9f c4 95 d0 a6 16  |.....jM(........|
-00000020  1f 83 3d d6 17 80 5e 4f  9f d9 87 20 cb 34 16 64  |..=...^O... .4.d|
-00000030  39 bb 98 16 55 43 38 3a  a2 b4 e0 38 02 04 ee 6b  |9...UC8:...8...k|
-00000040  a6 4e b9 f8 83 09 aa 7b  f5 de e0 79 00 04 13 01  |.N.....{...y....|
+00000000  16 03 01 00 ca 01 00 00  c6 03 03 cd 87 c0 5e 7c  |..............^||
+00000010  7b d7 c6 77 d9 21 6f 46  00 07 88 61 18 8c b9 d4  |{..w.!oF...a....|
+00000020  ad 25 6a 9d 7e 54 cc 70  52 7c 0f 20 67 9b dd 18  |.%j.~T.pR|. g...|
+00000030  84 bb 23 7d 53 10 b9 6c  01 ef 30 6f 79 7d 64 5c  |..#}S..l..0oy}d\|
+00000040  79 3e c1 11 8f 75 cf 83  02 d3 e8 d9 00 04 13 01  |y>...u..........|
 00000050  00 ff 01 00 00 79 00 0b  00 04 03 00 01 02 00 0a  |.....y..........|
 00000060  00 0c 00 0a 00 1d 00 17  00 1e 00 19 00 18 00 16  |................|
 00000070  00 00 00 17 00 00 00 0d  00 1e 00 1c 04 03 05 03  |................|
 00000080  06 03 08 07 08 08 08 09  08 0a 08 0b 08 04 08 05  |................|
 00000090  08 06 04 01 05 01 06 01  00 2b 00 03 02 03 04 00  |.........+......|
-000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 ee  |-.....3.&.$... .|
-000000b0  90 71 47 4a 18 b1 78 c4  9a 7d 65 5d 4e b3 88 96  |.qGJ..x..}e]N...|
-000000c0  6c b1 bc 2d a3 9d 2d 8e  a2 7a 7b eb 94 11 4e     |l..-..-..z{...N|
+000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 d7  |-.....3.&.$... .|
+000000b0  18 8a c1 a5 4d cb 7c f2  7d e4 cf 7a c6 92 28 ee  |....M.|.}..z..(.|
+000000c0  a6 b4 79 65 bf 2b fb 71  2e a5 2a 58 da 6f 5e     |..ye.+.q..*X.o^|
 >>> Flow 2 (server to client)
 00000000  16 03 03 00 7a 02 00 00  76 03 03 00 00 00 00 00  |....z...v.......|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000020  00 00 00 00 00 00 00 00  00 00 00 20 cb 34 16 64  |........... .4.d|
-00000030  39 bb 98 16 55 43 38 3a  a2 b4 e0 38 02 04 ee 6b  |9...UC8:...8...k|
-00000040  a6 4e b9 f8 83 09 aa 7b  f5 de e0 79 13 01 00 00  |.N.....{...y....|
+00000020  00 00 00 00 00 00 00 00  00 00 00 20 67 9b dd 18  |........... g...|
+00000030  84 bb 23 7d 53 10 b9 6c  01 ef 30 6f 79 7d 64 5c  |..#}S..l..0oy}d\|
+00000040  79 3e c1 11 8f 75 cf 83  02 d3 e8 d9 13 01 00 00  |y>...u..........|
 00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 2f  |..+.....3.$... /|
 00000060  e5 7d a3 47 cd 62 43 15  28 da ac 5f bb 29 07 30  |.}.G.bC.(.._.).0|
 00000070  ff f6 84 af c4 cf c2 ed  90 99 5f 58 cb 3b 74 14  |.........._X.;t.|
-00000080  03 03 00 01 01 17 03 03  00 17 c3 9d 29 f6 f8 18  |............)...|
-00000090  b9 39 9f 93 b2 f5 ab 30  41 d6 95 40 21 ba f8 8e  |.9.....0A..@!...|
-000000a0  25 17 03 03 00 52 08 a9  80 f3 24 c6 a6 b6 aa bc  |%....R....$.....|
-000000b0  30 c2 f7 dd e6 47 10 88  db 0c dd 43 ab 78 bd 16  |0....G.....C.x..|
-000000c0  82 7b 4f 26 9c 0e 47 6b  75 79 4e da 8e 43 8b e6  |.{O&..GkuyN..C..|
-000000d0  6a 25 0d 47 50 bf 26 c8  16 70 41 1c b2 b5 cd d1  |j%.GP.&..pA.....|
-000000e0  34 9b 26 13 92 45 b5 f5  03 04 cf 55 ee ff c8 e6  |4.&..E.....U....|
-000000f0  92 9e 04 d9 c5 f5 fd 0f  17 03 03 02 6d f6 33 26  |............m.3&|
-00000100  26 da 41 f2 4e 6e ed 41  23 44 29 5f 43 38 7d 24  |&.A.Nn.A#D)_C8}$|
-00000110  f7 a1 01 d4 23 a5 bf 85  db 39 86 27 ff 9c e9 ac  |....#....9.'....|
-00000120  6c 0e 0e 51 c7 95 8d aa  f6 59 53 0a 89 d4 e7 2d  |l..Q.....YS....-|
-00000130  6e f8 66 7d e5 b2 ac e4  7b b2 91 2b 31 c9 2b 4e  |n.f}....{..+1.+N|
-00000140  92 8f a9 c8 79 21 9a 8f  a2 79 29 47 c4 ef ab 80  |....y!...y)G....|
-00000150  25 02 d6 8c ae 32 3b 1a  55 0e f9 4a ba 92 b9 61  |%....2;.U..J...a|
-00000160  86 39 04 0a a7 d6 eb 95  50 4f 86 1b c9 d1 1d 1e  |.9......PO......|
-00000170  61 06 43 00 c2 2a a9 e2  06 ff ce 4a fd 6f d0 19  |a.C..*.....J.o..|
-00000180  2a 0e ec 14 86 19 9c bc  1d 96 e1 b1 00 b2 19 c4  |*...............|
-00000190  15 64 4c 33 54 89 fc 15  01 90 13 3b ff 99 e6 23  |.dL3T......;...#|
-000001a0  19 38 4f 67 97 ee ab b3  9f ca 1f 18 7d 45 ef 87  |.8Og........}E..|
-000001b0  42 7b 57 51 d0 c3 43 50  35 a3 33 ff 19 df 54 8e  |B{WQ..CP5.3...T.|
-000001c0  e9 98 2f 46 93 87 b4 b1  c2 73 04 4f 06 5b 3c 0a  |../F.....s.O.[<.|
-000001d0  c3 87 6c 68 68 b4 61 a2  33 bd 11 06 93 19 fb 05  |..lhh.a.3.......|
-000001e0  c3 e6 3f 14 e5 a6 6d ec  48 56 a6 37 60 81 a4 cd  |..?...m.HV.7`...|
-000001f0  89 b5 4e c8 dc 99 79 66  5e 40 44 de 4a 22 9a ce  |..N...yf^@D.J"..|
-00000200  3d c4 a0 17 03 45 e6 28  70 27 f5 24 e1 81 7a 5f  |=....E.(p'.$..z_|
-00000210  5d 6e 6c bc 28 c3 fb b1  8b 18 fa 3d 9d f3 c3 a5  |]nl.(......=....|
-00000220  f0 41 7a 0d 87 c1 70 77  d3 3a fa ef 2b 11 9b 61  |.Az...pw.:..+..a|
-00000230  12 f8 d1 25 73 bc 79 bf  ee 9a 5e e0 3b fb 06 da  |...%s.y...^.;...|
-00000240  7e d6 08 aa 13 73 8a 8c  97 d7 5a e4 dc 88 51 60  |~....s....Z...Q`|
-00000250  8c 61 51 65 f6 d0 4e 7d  b0 b1 23 2c 69 77 20 fe  |.aQe..N}..#,iw .|
-00000260  d1 ff 13 57 d8 c5 58 1f  3c e9 86 f4 3a 45 1a 9c  |...W..X.<...:E..|
-00000270  c2 e0 4d da 67 1b 81 62  bf 07 de a6 ea 74 81 e3  |..M.g..b.....t..|
-00000280  ba 1b 1f bf b0 d3 d3 08  c0 23 5f 05 d5 1f 41 51  |.........#_...AQ|
-00000290  f2 11 2e 36 ed 00 f8 b5  ea f1 4c 0b b8 d0 a3 cc  |...6......L.....|
-000002a0  c6 a7 2a ee 1f 6c 6b 33  0d 38 5b 5c 6e f4 53 d2  |..*..lk3.8[\n.S.|
-000002b0  6e 90 5b ce 44 e7 f1 50  1e 12 21 76 35 d1 2f 49  |n.[.D..P..!v5./I|
-000002c0  a1 27 66 00 93 27 27 34  5d e5 ed 4b 6f 7e 3d e3  |.'f..''4]..Ko~=.|
-000002d0  78 de 2f 48 9f 4c 36 a7  5d 62 98 1e 2c ee 82 3c  |x./H.L6.]b..,..<|
-000002e0  18 17 2d 80 f4 a2 ac e9  a6 c8 2c b9 92 d1 9e 2b  |..-.......,....+|
-000002f0  5f 3e 33 56 03 b5 76 51  ea c7 af 1c 42 8e 0e 65  |_>3V..vQ....B..e|
-00000300  f7 0f ad 36 9f fe b5 a0  06 31 f0 89 02 b4 bf c3  |...6.....1......|
-00000310  8e 2f 52 4d 97 99 dd 95  0f c4 32 9e 81 55 d1 2a  |./RM......2..U.*|
-00000320  05 ff b5 7a 02 0f 6f 1b  ef f1 de 48 dc a8 f8 44  |...z..o....H...D|
-00000330  35 8c eb df 6b 78 cd 89  75 ca ef 31 ba 8f b8 ff  |5...kx..u..1....|
-00000340  a3 74 39 ce 42 a0 01 8b  db 68 34 21 0a bf 84 fd  |.t9.B....h4!....|
-00000350  5f 28 87 d4 09 b2 91 c2  f3 1f b8 39 da 2b 55 3c  |_(.........9.+U<|
-00000360  46 a2 fa 3d 65 eb 41 0c  37 c8 17 03 03 00 99 e8  |F..=e.A.7.......|
-00000370  25 eb 99 2f 80 e2 09 ed  2f b9 78 90 7c dc e2 4a  |%../..../.x.|..J|
-00000380  78 19 49 46 a8 e7 82 a0  85 84 71 da 80 fb d2 5d  |x.IF......q....]|
-00000390  28 c4 69 cf ac 1c bc 1e  ba 90 5c 0a ec dd 31 5c  |(.i.......\...1\|
-000003a0  87 d0 4f 31 3f 62 cd 91  1e 99 a5 08 c6 de 6c 75  |..O1?b........lu|
-000003b0  91 be 31 83 12 5b fd 5a  eb 96 ae 70 9c 06 c9 ee  |..1..[.Z...p....|
-000003c0  63 e9 3c a0 5b 9c 55 cb  cd 9d a2 31 33 17 92 fa  |c.<.[.U....13...|
-000003d0  dc 34 20 43 71 92 8b 16  dd 1c 29 f5 ec a2 e4 ad  |.4 Cq.....).....|
-000003e0  d6 21 27 37 32 0c 7b f1  60 7f 58 aa fc d6 ae f3  |.!'72.{.`.X.....|
-000003f0  c9 7b 5f 59 39 cf 79 ab  5b a3 7e ea 13 72 51 9f  |.{_Y9.y.[.~..rQ.|
-00000400  a9 c5 fc fb c0 da 39 2a  17 03 03 00 35 b7 6d ed  |......9*....5.m.|
-00000410  8d d3 c6 09 fd 9b 6b be  6e bc 01 64 3b a1 4e 2d  |......k.n..d;.N-|
-00000420  3d 85 e3 5b 4b 7b 44 49  81 fd c8 d9 07 fe e5 53  |=..[K{DI.......S|
-00000430  ab 5f a3 64 f6 be 22 79  80 52 f0 ee 3c 1e 4e 65  |._.d.."y.R..<.Ne|
-00000440  0e e3                                             |..|
+00000080  03 03 00 01 01 17 03 03  00 17 4d 4b 33 12 cb ed  |..........MK3...|
+00000090  f7 a2 55 e7 a6 ab 5b b1  55 16 30 c3 ee e1 5c 14  |..U...[.U.0...\.|
+000000a0  b8 17 03 03 00 3e 30 04  2a e5 e8 b8 f3 25 9b a9  |.....>0.*....%..|
+000000b0  92 e6 eb d9 fb b6 62 64  e2 de 9d c0 48 68 b3 d7  |......bd....Hh..|
+000000c0  0f 8b ad 21 69 c7 f0 d7  96 ff 6a 24 2f 01 c9 e7  |...!i.....j$/...|
+000000d0  e9 06 4b 93 94 67 97 44  46 c4 69 2f 0e aa e0 9b  |..K..g.DF.i/....|
+000000e0  8d 19 f2 2c 17 03 03 02  6d a1 fb 2b 5f 10 e9 62  |...,....m..+_..b|
+000000f0  8b ad c1 33 58 f6 a7 89  78 a6 dd 64 ff c2 c7 57  |...3X...x..d...W|
+00000100  80 9f 59 be 2d bd f5 b9  8a 6b d9 22 1c fe 10 ea  |..Y.-....k."....|
+00000110  c4 a5 3e 45 d9 d7 12 cf  48 d5 26 18 49 50 80 69  |..>E....H.&.IP.i|
+00000120  44 28 03 3b b6 f8 0a 0e  b4 cb 5e 5b 57 0f c0 2f  |D(.;......^[W../|
+00000130  59 4f 13 e3 9c 02 18 b1  ce 94 78 05 18 64 73 c6  |YO........x..ds.|
+00000140  05 89 d1 54 37 18 ea 09  61 08 c5 6a 54 f6 48 44  |...T7...a..jT.HD|
+00000150  40 63 6a 53 b9 41 5f 4f  8e 05 e7 31 7b 08 d0 67  |@cjS.A_O...1{..g|
+00000160  8e bf 56 c4 56 0a 82 b2  74 6a 89 dd b4 f7 3c 0b  |..V.V...tj....<.|
+00000170  3c fd 21 1f 00 72 1d 4f  be b1 50 44 9a 14 67 7d  |<.!..r.O..PD..g}|
+00000180  a9 93 30 a2 4e ea 61 c9  fd 44 de 5c 88 36 59 a2  |..0.N.a..D.\.6Y.|
+00000190  e3 63 b1 9c ea dd 47 0a  ca 63 9e 50 9d ca 57 12  |.c....G..c.P..W.|
+000001a0  05 9b fc f1 26 a2 5e 18  9b 32 00 38 1f ce a6 58  |....&.^..2.8...X|
+000001b0  58 0f 61 e2 44 c2 89 34  cc f4 fd 9a dc 1a 67 a6  |X.a.D..4......g.|
+000001c0  e8 b1 fc 9f dc bd 0b 21  01 49 0d 9b e1 40 00 f6  |.......!.I...@..|
+000001d0  33 1a 57 c5 84 c1 98 3d  7f 53 d3 4d 2e 04 5e 40  |3.W....=.S.M..^@|
+000001e0  7d 38 80 66 bc c5 40 d9  14 f6 83 26 82 9b c8 14  |}8.f..@....&....|
+000001f0  61 aa 6c 1c a1 53 81 f8  b0 7f 06 92 5c af be 57  |a.l..S......\..W|
+00000200  1a 54 97 02 27 31 1f 58  52 cf 39 2f 82 26 ae 6c  |.T..'1.XR.9/.&.l|
+00000210  86 d9 46 cd 38 16 e2 67  62 82 2e 53 7a 86 15 30  |..F.8..gb..Sz..0|
+00000220  08 0c a7 e2 85 18 55 79  16 44 4d 50 9e b5 e7 e1  |......Uy.DMP....|
+00000230  2c 1e 1d eb e1 83 f3 9e  d0 7b 45 b8 1e 51 d9 79  |,........{E..Q.y|
+00000240  91 7a b8 90 bc 18 94 69  ad 94 08 e5 23 de 2b fa  |.z.....i....#.+.|
+00000250  8d ef 23 4c 40 df e1 43  0d 71 51 ef 88 a9 bb 89  |..#L@..C.qQ.....|
+00000260  59 87 9c db e1 d4 31 94  a7 f5 af 7d 51 be e9 d0  |Y.....1....}Q...|
+00000270  f2 49 12 72 47 65 a0 5b  7d 9f 91 85 f7 e8 d6 90  |.I.rGe.[}.......|
+00000280  b3 4d f3 5d 6a 51 96 a9  81 84 72 95 47 e8 0a f5  |.M.]jQ....r.G...|
+00000290  8d d6 2a 64 c2 34 1b d8  f0 f9 62 0c be 17 12 9b  |..*d.4....b.....|
+000002a0  40 a2 c3 8a eb 30 20 04  e4 69 a3 27 90 a6 1a 4f  |@....0 ..i.'...O|
+000002b0  3f 95 65 e6 9e c7 ad 03  e1 d2 34 d2 84 d5 f6 8c  |?.e.......4.....|
+000002c0  1e 8a aa e4 75 c0 7f 1d  79 4e 70 10 4e 18 9c eb  |....u...yNp.N...|
+000002d0  17 76 0c 66 6c 82 72 41  83 98 fc 41 41 4a 07 03  |.v.fl.rA...AAJ..|
+000002e0  a6 16 51 0d 60 96 43 0a  97 27 72 42 31 70 6b 02  |..Q.`.C..'rB1pk.|
+000002f0  e4 58 b0 15 4f 2e a3 5a  ed dc 82 99 82 47 d5 6c  |.X..O..Z.....G.l|
+00000300  4b b4 68 70 f5 a3 31 36  52 8d af ab d1 ac f6 28  |K.hp..16R......(|
+00000310  2e 18 bc 4f 1b 7c a8 ad  c3 1f 2f 70 a6 c4 39 c6  |...O.|..../p..9.|
+00000320  ae 0f 2e b7 58 c9 c0 2a  4b 34 c2 42 12 e3 5d ed  |....X..*K4.B..].|
+00000330  d1 ac e1 f1 14 66 d4 09  1c a0 99 82 d3 04 13 2a  |.....f.........*|
+00000340  a4 20 c4 e7 38 1e 0a 02  4e 96 02 71 9d f6 f7 86  |. ..8...N..q....|
+00000350  f7 30 1a 5d 65 4f 17 03  03 00 99 3f 3d 4a 91 ae  |.0.]eO.....?=J..|
+00000360  0f 80 52 0f 1c d1 a2 75  83 e5 08 d8 1f 9d c8 24  |..R....u.......$|
+00000370  fc 85 ba 76 1f 9e 1e 35  a3 dd 45 83 8e b9 55 a6  |...v...5..E...U.|
+00000380  3b 26 ae 82 4f 1f 2e 8f  e5 25 fb d6 22 0f 55 d6  |;&..O....%..".U.|
+00000390  ac fa 93 6d d1 d3 7c 41  af c0 15 5c 8b e1 64 c1  |...m..|A...\..d.|
+000003a0  3f a2 c8 9e 48 f5 63 61  3a df 13 6e f4 e3 60 9d  |?...H.ca:..n..`.|
+000003b0  bc 52 bd b7 94 e9 4b 7a  65 97 28 ac 39 6a 77 a7  |.R....Kze.(.9jw.|
+000003c0  86 1d b4 6b e4 15 c4 bd  2b 41 b6 06 ac ff b5 9f  |...k....+A......|
+000003d0  17 47 b4 a7 1d 69 8b 6e  82 eb f7 39 03 95 10 dd  |.G...i.n...9....|
+000003e0  18 78 50 58 c8 78 80 ae  45 dc 54 0f 33 cb 4a d2  |.xPX.x..E.T.3.J.|
+000003f0  90 00 12 d4 17 03 03 00  35 76 fa bf ab 3f c3 3d  |........5v...?.=|
+00000400  dd 78 65 cc 35 1e 24 35  4f 7d 3c e4 bb 73 d8 19  |.xe.5.$5O}<..s..|
+00000410  56 94 f4 ce ad bc 1d 6a  fb 1b 75 01 93 36 2b 44  |V......j..u..6+D|
+00000420  3a 3c a3 9b 7c 57 6f 98  24 a3 64 b1 13 47        |:<..|Wo.$.d..G|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 1e a8 48 8d 47 f6  |............H.G.|
-00000010  3d d8 59 5b 26 9e bd fc  d1 15 7c e1 37 1b db 3c  |=.Y[&.....|.7..<|
-00000020  e4 02 98 fd aa cc a6 45  97 6e c5 18 4e 45 8e d6  |.......E.n..NE..|
-00000030  84 7a b5 e4 da 8b 17 34  e5 fb 21 3c f6 02 c2 5c  |.z.....4..!<...\|
-00000040  ea 57 ea 16 67 4a 6d b2  0e 5a 39 f8 6b 11 84 bd  |.W..gJm..Z9.k...|
-00000050  43 80 03 40 5e d2 d2 54  2e d1 38 bc 9a 16 4f 21  |C..@^..T..8...O!|
-00000060  0e 07 38 b5 80 21 16 c6  a1 bb 23 79 a6 df ef 27  |..8..!....#y...'|
-00000070  dc 30 3c 4a 53 b1 5c 54  a7 fb ff 73 e2 12 ab 90  |.0..*..`.d~q|
-000001b0  45 26 b8 91 26 cc d6 bf  d5 4d 26 3f 4f c8 73 99  |E&..&....M&?O.s.|
-000001c0  a7 50 9d 14 09 b6 07 1a  af aa 9b 02 31 b2 c6 22  |.P..........1.."|
-000001d0  ca 3e e0 2f 27 87 27 2e  96 f4 b4 ba c6 01 77 d3  |.>./'.'.......w.|
-000001e0  52 09 ea 79 9b ee b4 6a  41 29 b1 de de 74 6b b2  |R..y...jA)...tk.|
-000001f0  11 b1 58 90 5c 6a 0d b5  51 4b 2e 1b 3e e6 f4 17  |..X.\j..QK..>...|
-00000200  8e 8a 1d 1e c8 bd 55 3a  fc f4 90 73 14 5f 63 1b  |......U:...s._c.|
-00000210  22 f0 81 fd 70 05 ca b2  fd 90 3c 9d 2e 73 d3 8c  |"...p.....<..s..|
-00000220  f0 0a 59 9e 46 fe 8c e2  22 17 03 03 00 a4 78 2b  |..Y.F...".....x+|
-00000230  ec c5 5e 71 85 c6 e5 5d  75 f3 b5 3d 55 de 1c f9  |..^q...]u..=U...|
-00000240  06 92 be df ef 77 31 4b  f3 13 b8 c7 7a 68 ec 1b  |.....w1K....zh..|
-00000250  e2 7c c0 ff b5 6f c2 62  bd 34 23 fd 6a 39 c7 ef  |.|...o.b.4#.j9..|
-00000260  91 47 77 7e 32 2e a9 b2  85 ae 01 3e 61 43 8a 93  |.Gw~2......>aC..|
-00000270  72 14 e1 b7 a5 14 4b ca  6e cb 4d e7 a3 cd 74 98  |r.....K.n.M...t.|
-00000280  4e 08 a4 d4 34 ea 73 17  4b 20 8b 40 03 10 a0 33  |N...4.s.K .@...3|
-00000290  c9 2f c0 4c 3b a2 2c 61  3c ab ec e3 c0 e8 e2 d6  |./.L;.,a<.......|
-000002a0  a0 85 fa 26 26 a9 65 dc  70 5b 8f b7 3f 9e b3 fb  |...&&.e.p[..?...|
-000002b0  44 36 62 79 75 af ef 94  05 6b d2 44 07 51 ae 91  |D6byu....k.D.Q..|
-000002c0  ea e3 e7 d2 f4 2f 19 17  38 aa 1c ae cb 88 db 0b  |...../..8.......|
-000002d0  66 5a 17 03 03 00 35 6d  d9 23 d1 3c c3 25 7b 5d  |fZ....5m.#.<.%{]|
-000002e0  8a 1a 41 00 00 f8 0c a7  3e 53 4e e5 f6 cb 11 3f  |..A.....>SN....?|
-000002f0  9c 66 62 80 98 6c 55 19  b1 6f 00 5d 46 93 d2 0b  |.fb..lU..o.]F...|
-00000300  79 58 1c d6 d7 f9 fc fb  38 c5 32 63 17 03 03 00  |yX......8.2c....|
-00000310  13 72 a9 fd 60 5c cf 68  b3 32 15 04 33 1c e1 5f  |.r..`\.h.2..3.._|
-00000320  11 11 9e 8c                                       |....|
+00000000  14 03 03 00 01 01 17 03  03 02 1e e0 29 6d d1 38  |............)m.8|
+00000010  a6 03 d7 fc 2b df a4 a4  d0 ae 87 01 b8 82 5d eb  |....+.........].|
+00000020  3c 25 3e a1 33 89 b5 05  eb bc 02 0f ad 84 f0 2b  |<%>.3..........+|
+00000030  5f 14 af 0d f8 f1 08 e3  ca c1 8e ad 4b a5 a0 09  |_...........K...|
+00000040  b8 a0 4f bf e4 0f 93 a9  4a 35 35 26 22 d7 04 03  |..O.....J55&"...|
+00000050  70 95 4f 80 df d4 47 5b  21 14 27 d6 17 ea 32 6e  |p.O...G[!.'...2n|
+00000060  ea 3a ca 31 7c f2 d1 46  a2 ef 47 b9 16 d6 18 d5  |.:.1|..F..G.....|
+00000070  17 35 71 9d 14 37 63 cd  e1 c6 ff 3d ec a5 d8 53  |.5q..7c....=...S|
+00000080  48 d5 d8 0b 75 39 c1 d2  66 ad 97 4e 5f eb c3 c7  |H...u9..f..N_...|
+00000090  e0 77 95 fd 16 84 e2 a3  6a f2 a8 88 5e 4c 86 be  |.w......j...^L..|
+000000a0  81 a5 f2 6b 12 86 63 f1  4f a6 8d 63 7c 07 0f 8d  |...k..c.O..c|...|
+000000b0  53 d5 d4 00 c7 b7 2a ef  b2 1d 07 4e 43 d6 25 35  |S.....*....NC.%5|
+000000c0  c9 b1 fa 91 d1 f7 87 c6  98 c7 e7 c2 c3 7d 42 09  |.............}B.|
+000000d0  e5 3c 50 83 1b 20 ef ec  e4 ac 2e f2 3e 03 73 52  |..sR|
+000000e0  2e 1d 20 cf e2 8d 15 c3  c7 a6 2f 68 b5 8e 5f bc  |.. ......./h.._.|
+000000f0  c5 73 61 ff 52 3c b0 7b  47 82 47 a0 73 f8 1c ab  |.sa.R<.{G.G.s...|
+00000100  4d ea 15 fa 94 e0 7f 70  c1 c8 9c 55 f0 96 38 42  |M......p...U..8B|
+00000110  76 d4 26 6d a7 73 11 59  43 19 2f 49 70 a9 18 1c  |v.&m.s.YC./Ip...|
+00000120  12 9e ee d3 eb ca 1c c0  3b e1 99 e3 c2 25 de 39  |........;....%.9|
+00000130  1a 15 e0 d7 20 9d 1b 95  74 8c ee 96 7b 5e de 13  |.... ...t...{^..|
+00000140  99 56 54 a2 31 7b e9 96  02 9e 86 7b 15 9d c6 3e  |.VT.1{.....{...>|
+00000150  24 a5 19 e5 8e de 85 97  05 68 4f 39 d1 49 05 c9  |$........hO9.I..|
+00000160  7a 54 90 29 e7 93 ec 8e  6f cc 73 73 82 7d 72 8d  |zT.)....o.ss.}r.|
+00000170  4a 85 29 7f a5 53 13 26  16 b2 fa c3 ce 1f 8b ae  |J.)..S.&........|
+00000180  e6 60 8c 2d b0 64 66 d4  29 7c b5 2d 1d 11 c5 09  |.`.-.df.)|.-....|
+00000190  bb a5 44 c6 c8 af e6 f1  d5 f8 d9 45 97 64 7f 03  |..D........E.d..|
+000001a0  02 f7 f5 9f cb 31 1e 89  e4 5d a0 e9 34 db be 28  |.....1...]..4..(|
+000001b0  51 15 68 54 01 7c e5 1d  b4 05 d2 d6 24 ca 10 69  |Q.hT.|......$..i|
+000001c0  31 bf 8b 7a ee d9 bf e1  2a d4 7c c8 e8 79 ca dd  |1..z....*.|..y..|
+000001d0  0f 73 09 c8 cf 97 28 78  04 5b 04 51 44 c4 5f d1  |.s....(x.[.QD._.|
+000001e0  dc da 4f f5 d9 5c 9c b1  ea f8 1b f7 43 90 c0 c0  |..O..\......C...|
+000001f0  fd 82 56 e3 71 15 18 5e  7e 5c 61 5e b3 80 c1 1c  |..V.q..^~\a^....|
+00000200  22 92 32 67 23 f6 3b 74  e4 20 4e 1f fb f8 89 55  |".2g#.;t. N....U|
+00000210  e7 3c 18 30 24 77 7c 33  5c 89 91 60 65 14 06 9e  |.<.0$w|3\..`e...|
+00000220  e2 6d f0 07 84 4b b4 14  e8 17 03 03 00 a3 a7 e1  |.m...K..........|
+00000230  f7 26 48 56 da 6d ef a5  f4 5f 19 52 37 9e e7 6d  |.&HV.m..._.R7..m|
+00000240  28 07 70 ee 1e de 85 2b  7a 2d bf eb 48 06 f5 d4  |(.p....+z-..H...|
+00000250  ea 4d 83 86 59 d4 14 4f  46 bc 17 89 f1 f5 37 0e  |.M..Y..OF.....7.|
+00000260  84 60 6e ba 73 d7 c1 bc  6f d7 aa cf f0 36 96 a2  |.`n.s...o....6..|
+00000270  83 60 81 6f 48 6c 9d 87  e5 b6 5e 77 ab c5 e3 cb  |.`.oHl....^w....|
+00000280  8e 55 94 dc 94 f3 8a ce  cb f7 b4 d5 33 55 df 88  |.U..........3U..|
+00000290  22 44 04 ee 4e f5 30 e7  30 94 dc 95 2d 97 2c e4  |"D..N.0.0...-.,.|
+000002a0  34 58 4d 38 9e 25 61 96  c1 37 66 34 2b be ee e6  |4XM8.%a..7f4+...|
+000002b0  ee 39 73 89 a3 aa 1b 0a  5a bf 44 23 4e 19 5c c4  |.9s.....Z.D#N.\.|
+000002c0  3f 27 47 5c 40 67 6c 50  b8 3f 7c c9 97 f0 55 02  |?'G\@glP.?|...U.|
+000002d0  16 17 03 03 00 35 82 8b  0d 4e 87 3c c6 bc 41 8b  |.....5...N.<..A.|
+000002e0  ec ab 71 9d 57 7b e6 22  e4 87 82 61 5d f8 69 31  |..q.W{."...a].i1|
+000002f0  8a 2c be 2c d8 4d 2f dc  9a 91 31 7a ab d8 a4 0e  |.,.,.M/...1z....|
+00000300  ba cb fc ef 17 a4 7c 87  ca 13 bb 17 03 03 00 13  |......|.........|
+00000310  3b d0 da 9f d4 be fa 59  7a 30 8b 7e 8e a0 99 c0  |;......Yz0.~....|
+00000320  c2 36 f3                                          |.6.|
 >>> Flow 4 (server to client)
-00000000  17 03 03 02 90 2e 71 49  81 51 71 9c 2f da 1e dc  |......qI.Qq./...|
-00000010  22 c0 a2 59 13 ad 41 ae  7b 18 56 d0 00 7b b5 cf  |"..Y..A.{.V..{..|
-00000020  47 e7 bc 8e 92 9e dc 88  78 3e 40 8e 8b 01 b0 30  |G.......x>@....0|
-00000030  8f 7e 88 95 77 ed de 31  bf c5 78 ba a1 44 55 ec  |.~..w..1..x..DU.|
-00000040  b6 df 49 a9 df a0 92 b2  be b7 2c 1c 39 1b a0 63  |..I.......,.9..c|
-00000050  18 e5 12 b7 5a a5 85 14  97 7d 9e e1 80 b7 15 c5  |....Z....}......|
-00000060  2f ca e3 3b 48 91 42 07  f4 49 25 99 2c ee b8 b5  |/..;H.B..I%.,...|
-00000070  05 a2 34 7d bb c0 87 4c  f3 a8 07 89 fe b7 08 2c  |..4}...L.......,|
-00000080  e2 0b 27 6f 49 88 80 2f  3b 9c ae a6 3e 38 74 23  |..'oI../;...>8t#|
-00000090  53 70 f5 84 0f 77 d4 94  68 f9 86 18 2f dc e1 94  |Sp...w..h.../...|
-000000a0  3c e1 2c f2 84 07 f5 3c  88 99 63 ef a1 96 73 f9  |<.,....<..c...s.|
-000000b0  46 43 c2 92 be 04 b8 6b  9e db e1 7f 63 b1 d4 15  |FC.....k....c...|
-000000c0  36 2c 37 e3 c2 24 b2 4c  c5 60 96 15 3b 20 01 67  |6,7..$.L.`..; .g|
-000000d0  e5 52 9a 4f 17 6c 0a f1  a0 a3 31 48 e5 31 8e d3  |.R.O.l....1H.1..|
-000000e0  b9 49 38 d2 55 4d 40 8e  a2 bf dd 0f 19 25 42 55  |.I8.UM@......%BU|
-000000f0  06 57 22 c5 06 c9 59 13  f7 c7 56 b1 68 20 f4 62  |.W"...Y...V.h .b|
-00000100  19 0a 5d ab 5f 81 c6 50  b7 a2 f8 ce 55 f2 b6 6c  |..]._..P....U..l|
-00000110  67 39 75 82 1b a1 6b 85  58 37 c0 a5 12 64 a6 ee  |g9u...k.X7...d..|
-00000120  2e f8 f0 dc d2 50 08 47  0f 15 c8 37 2d ba 69 64  |.....P.G...7-.id|
-00000130  e9 ea 7b fa 16 91 ed b6  24 0d fb e8 aa 74 6b 74  |..{.....$....tkt|
-00000140  2d 78 2d 1c 2b 98 8e ab  74 6d 06 a3 00 8a e5 be  |-x-.+...tm......|
-00000150  c0 68 09 05 e0 95 0d c1  27 8a cf 05 09 0a 7c b9  |.h......'.....|.|
-00000160  a1 3a 9b 45 3d d4 5d 16  64 5b d5 a3 6c d2 12 78  |.:.E=.].d[..l..x|
-00000170  4f 6b ba 3a fe ad 35 9e  5e 0c 5f d4 f3 32 a2 0b  |Ok.:..5.^._..2..|
-00000180  f1 af d4 e5 f1 91 c6 6c  47 6b 30 a7 2f bf 60 05  |.......lGk0./.`.|
-00000190  e3 c0 2d 9c 34 f2 f0 6b  f2 ce 7f 19 d0 86 26 b0  |..-.4..k......&.|
-000001a0  e1 7e 7b e0 0e 3d e7 f6  3c 7f 42 bc 9f a6 0a 25  |.~{..=..<.B....%|
-000001b0  eb cf 1b 4b 44 10 df 7d  f1 1f e3 a9 ea 4f 6d 52  |...KD..}.....OmR|
-000001c0  70 b2 f0 0b a9 c5 bc 66  46 21 4d 92 c4 c3 f6 71  |p......fF!M....q|
-000001d0  eb 46 c0 f3 e7 6f 4a ee  37 ad 8a ea 3b aa 51 79  |.F...oJ.7...;.Qy|
-000001e0  d5 d5 18 7e e8 ae 31 1a  db 16 04 d8 3c 94 17 f6  |...~..1.....<...|
-000001f0  ad 8f 8b 5d 7d 14 fb b4  e9 b4 7e bb 75 f1 df de  |...]}.....~.u...|
-00000200  6f 0a 0d a8 f9 b5 d8 53  73 36 88 77 db e6 0e 84  |o......Ss6.w....|
-00000210  fc 94 6b c9 cc 74 0f 01  40 39 c4 d0 66 2d 23 76  |..k..t..@9..f-#v|
-00000220  9f 0d a1 53 94 a2 dd 56  83 9e 62 39 10 13 39 40  |...S...V..b9..9@|
-00000230  55 09 b6 77 d2 22 9c 49  ef f9 af 93 ee d1 cf 3d  |U..w.".I.......=|
-00000240  1f 29 ef 27 94 3c 6d 23  d6 7c 33 e1 f7 cd 70 05  |.).'.Z..~..i7.|
-000002b0  b0 90 43 11 e6 76 5e 2d  17 03 03 00 13 4b 69 75  |..C..v^-.....Kiu|
-000002c0  3d 46 35 f6 85 4b 0b 6e  f4 6b 30 2a 28 37 3c f1  |=F5..K.n.k0*(7<.|
+00000000  17 03 03 02 90 a2 a0 e4  83 63 ad 8d d5 45 25 dc  |.........c...E%.|
+00000010  41 02 31 28 8d b0 87 85  66 b8 9c 36 f3 1f 97 87  |A.1(....f..6....|
+00000020  8c c9 e6 b4 67 1e 42 ab  84 c4 eb 0a 41 b1 0f 50  |....g.B.....A..P|
+00000030  25 c3 7e 69 20 cf 8a d0  56 79 61 e3 e1 5b cc a4  |%.~i ...Vya..[..|
+00000040  24 5a c7 2d 3b 17 33 92  59 6c 7e 29 a9 a2 2c 73  |$Z.-;.3.Yl~)..,s|
+00000050  3e b1 65 32 3d 6a 2b 61  5d 76 c4 66 0e 4f f1 da  |>.e2=j+a]v.f.O..|
+00000060  dd d3 7e 29 3d f5 42 99  9e 04 60 a4 9a a1 c0 f7  |..~)=.B...`.....|
+00000070  54 4e d5 58 73 85 02 83  38 ba 4e 93 9a 69 68 07  |TN.Xs...8.N..ih.|
+00000080  71 c9 a7 e4 83 51 4c 11  21 26 b2 dd ad 4b 2a ef  |q....QL.!&...K*.|
+00000090  23 9b b0 f6 d6 96 9f 99  1f 69 fe 35 28 86 49 bc  |#........i.5(.I.|
+000000a0  ec 97 11 4d 4e b7 c1 c2  da 6c ae c7 40 b9 2a 1f  |...MN....l..@.*.|
+000000b0  ff 9d 9d ea 90 b9 61 6f  76 ae fe 55 70 f6 ee 54  |......aov..Up..T|
+000000c0  54 62 6d 19 9a fc 40 16  e5 c2 e2 3e d1 68 c6 09  |Tbm...@....>.h..|
+000000d0  be 54 64 25 8a a0 2b e6  b3 14 7e 74 17 91 f0 de  |.Td%..+...~t....|
+000000e0  87 e8 3c 3e 58 8d 1b b2  4e 2d 7d c1 f8 aa 16 ca  |..<>X...N-}.....|
+000000f0  2a 3e 8f aa 52 14 e4 f2  2a b9 6e 62 46 ab ed 3a  |*>..R...*.nbF..:|
+00000100  ff a1 51 53 92 7a 78 c4  ed 9d fd 1f b4 62 2e e7  |..QS.zx......b..|
+00000110  cc 9d 09 fa 06 2e 9e 55  e5 98 9e b8 be e9 12 94  |.......U........|
+00000120  33 58 6b be 71 a1 4f f8  a0 83 85 f8 7e b4 28 a7  |3Xk.q.O.....~.(.|
+00000130  ee 1b ac 3c 46 b6 ac 60  af 5d cc b0 a8 2c 3f 95  |.....Z.|
+00000210  6b 5c d2 4d b2 20 35 63  9e 83 c0 7e 83 60 46 57  |k\.M. 5c...~.`FW|
+00000220  c0 80 0d d7 b9 9f 14 c0  58 2d 48 2a cc 8c 1d 32  |........X-H*...2|
+00000230  2c 34 ec 10 f2 34 b4 28  e1 0e 83 38 c4 2e 5a 09  |,4...4.(...8..Z.|
+00000240  ff e6 3f d3 9a 32 8e 33  9e 31 18 e5 1d 6b 97 12  |..?..2.3.1...k..|
+00000250  9b 93 84 86 62 8a 0a 8a  ab 8d 37 68 af a1 ec 8e  |....b.....7h....|
+00000260  38 c8 47 ef 10 f8 64 7c  e1 13 0a 33 eb c2 4b bf  |8.G...d|...3..K.|
+00000270  47 49 6d 93 3c c9 44 aa  74 67 a9 93 dd de 66 47  |GIm.<.D.tg....fG|
+00000280  1e b3 55 47 b1 16 88 68  82 24 d6 b8 81 b0 5a b6  |..UG...h.$....Z.|
+00000290  27 7a f8 0b 5c 17 03 03  00 1e a5 9b 8c d2 3e 96  |'z..\.........>.|
+000002a0  f3 49 7a ed d9 fc 33 62  15 12 43 76 11 f9 dc fc  |.Iz...3b..Cv....|
+000002b0  ea d2 d7 87 22 6f 9e 3d  17 03 03 00 13 e1 30 4e  |...."o.=......0N|
+000002c0  4c 1d 02 78 57 a5 ee 8f  1c 5f 19 f0 57 3a 8d 7e  |L..xW...._..W:.~|
diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given
index 016b7da4dfe90e..6943bf65690f77 100644
--- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given
+++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given
@@ -1,151 +1,149 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ca 01 00 00  c6 03 03 c3 82 3b bf 9c  |.............;..|
-00000010  31 25 31 c7 8d 18 7f c1  28 22 0f 23 0c 13 b8 81  |1%1.....(".#....|
-00000020  a8 e8 35 00 92 0a 13 21  8d 76 43 20 9e 3a 45 91  |..5....!.vC .:E.|
-00000030  73 a0 99 70 ab 96 99 2b  ae 4a b1 2a 89 3c 74 94  |s..p...+.J.*.>> Flow 2 (server to client)
 00000000  16 03 03 00 7a 02 00 00  76 03 03 00 00 00 00 00  |....z...v.......|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000020  00 00 00 00 00 00 00 00  00 00 00 20 9e 3a 45 91  |........... .:E.|
-00000030  73 a0 99 70 ab 96 99 2b  ae 4a b1 2a 89 3c 74 94  |s..p...+.J.*.#.....h/).~O|
-00000350  8b 92 85 32 15 2f c1 dc  fa 87 14 1d 21 3e 95 c6  |...2./......!>..|
-00000360  e4 96 f1 66 d6 af bb eb  d8 d4 17 03 03 00 99 31  |...f...........1|
-00000370  1a 82 6b b3 f2 1d 12 83  7c df 15 6a 5b a8 af 96  |..k.....|..j[...|
-00000380  a3 81 92 59 7a 19 c5 6b  b4 ec e0 90 14 f1 00 ca  |...Yz..k........|
-00000390  0d d5 15 c5 24 49 a7 fc  c2 2f 40 89 61 c1 6d d4  |....$I.../@.a.m.|
-000003a0  da 39 f7 c3 42 50 e2 47  62 b2 5f 2b 91 70 e7 61  |.9..BP.Gb._+.p.a|
-000003b0  57 e0 a3 20 a2 79 1f 18  ce f9 ad 5d ea 87 fa 16  |W.. .y.....]....|
-000003c0  85 4b 50 a0 43 8f 0a 40  d7 93 cf 82 b5 82 6c 11  |.KP.C..@......l.|
-000003d0  b7 cb 7c b2 4d 7d 23 ec  a7 f8 2f b6 69 a8 83 29  |..|.M}#.../.i..)|
-000003e0  4a ff 72 86 8e 05 79 91  a7 ed 4b 3d c8 86 fc 29  |J.r...y...K=...)|
-000003f0  74 1e 88 7b a5 b2 2c 6e  62 08 2e a9 02 c9 05 d8  |t..{..,nb.......|
-00000400  66 db 9c 28 35 79 ed 6f  17 03 03 00 35 24 4d e5  |f..(5y.o....5$M.|
-00000410  81 c9 80 a9 1b c8 a9 20  27 c8 17 b3 0e 42 91 70  |....... '....B.p|
-00000420  cb 4d ac 6f b8 b7 9a 96  94 95 fb ce f1 51 65 21  |.M.o.........Qe!|
-00000430  ff 2c c5 53 42 1c b3 1c  b1 9b 38 1a 1c a0 bf 3c  |.,.SB.....8....<|
-00000440  92 06                                             |..|
+00000080  03 03 00 01 01 17 03 03  00 17 3b ca 9a d3 b7 99  |..........;.....|
+00000090  d7 d8 c9 f9 96 b8 70 69  3b 22 42 0f c4 72 de 7c  |......pi;"B..r.||
+000000a0  05 17 03 03 00 3e 38 d7  00 60 b9 ce 17 31 26 9f  |.....>8..`...1&.|
+000000b0  db ef e2 b1 99 55 c8 f9  f3 a0 81 19 12 a7 63 85  |.....U........c.|
+000000c0  5a 26 2d d1 1c ad 5d ae  d6 4b 66 93 62 d7 fe 08  |Z&-...]..Kf.b...|
+000000d0  40 e9 fa 16 8b 89 f8 04  e8 33 67 20 2b 21 91 a0  |@........3g +!..|
+000000e0  c6 0a 87 ff 17 03 03 02  6d 79 97 6c 2f f6 01 7b  |........my.l/..{|
+000000f0  3a 49 0e 1a 00 96 10 fd  7f 77 db 76 b2 d4 e4 68  |:I.......w.v...h|
+00000100  46 4e 4f 3c 64 54 ca 27  9a 5c 78 98 f4 96 a4 fe  |FNO.....u.(..|
+00000120  ff d8 ec 27 2c f2 4c e5  a0 6e 88 ce 67 6e 35 f4  |...',.L..n..gn5.|
+00000130  e5 d5 96 2d 40 af fa 88  12 8a 48 24 2c f9 82 f5  |...-@.....H$,...|
+00000140  cb a4 6e 95 a6 53 bc 79  f7 6a ef 66 77 bc 46 f0  |..n..S.y.j.fw.F.|
+00000150  1b 0d 6b 5c 76 82 15 c4  d0 1c dd ec cc ce 09 93  |..k\v...........|
+00000160  ce 21 55 9b d8 8a 11 1b  0c 24 fa 9e 5f 29 4a f1  |.!U......$.._)J.|
+00000170  2a 2e ad c0 6d 6d 46 06  5b c9 75 b3 3e 32 45 67  |*...mmF.[.u.>2Eg|
+00000180  05 26 cc d8 a8 4a a9 b1  67 71 a6 82 1c dc f0 15  |.&...J..gq......|
+00000190  6d 25 f5 6e be a2 5f 45  39 dc d1 2e df fa e1 e9  |m%.n.._E9.......|
+000001a0  48 ca 7a 78 fa 0e 53 d1  5c 8f c2 40 91 d5 fa 40  |H.zx..S.\..@...@|
+000001b0  7e a1 52 23 c8 56 1f 31  17 91 5c 38 bb 54 56 f3  |~.R#.V.1..\8.TV.|
+000001c0  1e 14 90 43 b7 ef fd 56  b5 ae 13 90 97 dc 60 15  |...C...V......`.|
+000001d0  67 72 fc c2 0a 32 90 be  ec de 69 16 d3 1b 22 2c  |gr...2....i...",|
+000001e0  25 9f 91 27 a7 6d 8c a4  de 02 fd 0e da bf ca 71  |%..'.m.........q|
+000001f0  77 9b 56 b8 07 e8 80 00  9b d9 36 1c 09 4f 9f 54  |w.V.......6..O.T|
+00000200  76 d5 76 f4 9a 03 94 bb  9e 93 f0 b5 3c a1 71 ec  |v.v.........<.q.|
+00000210  b3 83 3a 06 b4 46 97 bf  ef bb f0 26 94 4e b0 08  |..:..F.....&.N..|
+00000220  3b ec 81 20 66 92 11 85  a0 c2 90 fd c5 bc ae 39  |;.. f..........9|
+00000230  2c 87 ec e4 5d 59 ee b4  e9 0d f7 2a e0 3b 2a 94  |,...]Y.....*.;*.|
+00000240  1a 79 2f e8 5c 88 d3 61  2e 47 c0 f3 c4 01 84 a9  |.y/.\..a.G......|
+00000250  cf f6 36 13 cb 4b 0b f7  9a 14 f1 d5 0e 10 80 fd  |..6..K..........|
+00000260  11 79 20 20 ae 56 5e de  58 53 19 38 26 e2 ac bc  |.y  .V^.XS.8&...|
+00000270  0c 40 38 8b f9 67 62 4c  42 7d 18 4f 27 e9 53 96  |.@8..gbLB}.O'.S.|
+00000280  78 4b fa 44 fe c2 c3 d9  99 f2 2c 59 2b 2b 2c 88  |xK.D......,Y++,.|
+00000290  5b dc a8 98 3d 17 14 09  70 ce e4 02 8b 3c 5d 94  |[...=...p....<].|
+000002a0  44 ac ba 57 2d a9 bf b8  70 e9 b8 a8 c3 b8 90 da  |D..W-...p.......|
+000002b0  ec b1 b4 57 d6 e3 0f 41  82 bb 21 4a 57 dc ac 4b  |...W...A..!JW..K|
+000002c0  89 34 75 fc c4 56 6b 70  3d 83 2b fa be c8 2b cd  |.4u..Vkp=.+...+.|
+000002d0  f8 4f 9f 9e 9a 0e d2 d0  46 cd 21 a5 f7 07 a6 2a  |.O......F.!....*|
+000002e0  85 7b 30 92 78 a2 da a5  1d 1c 1c 54 63 4b 66 b2  |.{0.x......TcKf.|
+000002f0  f1 a7 c4 43 57 97 7f 28  37 e7 15 62 9b 1c f5 90  |...CW..(7..b....|
+00000300  0c 19 36 1a c1 48 48 e5  7d 56 93 3c 13 e3 cd 6a  |..6..HH.}V.<...j|
+00000310  aa aa ba d5 24 95 c7 df  9c a9 76 6c 07 bf 09 2d  |....$.....vl...-|
+00000320  4b 7b 55 94 37 ec d4 69  ce ab 0f 48 37 74 37 99  |K{U.7..i...H7t7.|
+00000330  83 0d 60 8a 73 56 fb e2  9e 0c 39 0e 23 bf 68 b2  |..`.sV....9.#.h.|
+00000340  92 51 12 bc cf 1b af 9d  7c fe 77 14 c8 66 4a 6f  |.Q......|.w..fJo|
+00000350  91 06 55 6a 11 61 17 03  03 00 99 c2 bf 26 a6 fa  |..Uj.a.......&..|
+00000360  67 16 a3 b9 1f 36 f8 4f  5d 59 b1 be 43 3a 70 01  |g....6.O]Y..C:p.|
+00000370  c0 3a 4b c5 20 b1 22 49  04 22 bb 7f 5f f4 bb f8  |.:K. ."I.".._...|
+00000380  35 03 0e dc ba ce de 2a  25 ea 96 dd 3d 64 34 90  |5......*%...=d4.|
+00000390  30 f8 34 22 bb e4 94 00  bb b3 ea 3c d2 87 90 9a  |0.4".......<....|
+000003a0  86 76 6b b7 e3 78 fc 35  10 50 ce b6 c0 71 52 ae  |.vk..x.5.P...qR.|
+000003b0  a5 f7 bf 8c 5e 5d c1 96  c7 92 6f f0 04 87 d9 a8  |....^]....o.....|
+000003c0  72 f4 9e ed 6d ab 28 42  7c c8 60 39 81 66 74 a1  |r...m.(B|.`9.ft.|
+000003d0  79 79 6a 59 02 29 b8 14  12 34 a7 96 8f e0 c1 d6  |yyjY.)...4......|
+000003e0  4e da e2 63 22 c1 60 b1  87 64 d3 80 b9 c4 df 9a  |N..c".`..d......|
+000003f0  5f 2c 22 91 17 03 03 00  35 9a 62 4d a2 ba 27 31  |_,".....5.bM..'1|
+00000400  fc 8e 23 cc 5f f0 5c 8c  9b c1 b0 ae 7b b8 fa e2  |..#._.\.....{...|
+00000410  f3 af 6c 6c ac 86 1e e1  2b 9f 14 a1 f3 5f b5 f9  |..ll....+...._..|
+00000420  76 b6 dd 73 f5 6a 08 29  f1 29 9e 79 87 aa        |v..s.j.).).y..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 01 50 0c e7 45 36 eb  |..........P..E6.|
-00000010  2f a0 d5 c8 d2 75 51 8f  ec 65 b5 3f 5b 6f 80 6e  |/....uQ..e.?[o.n|
-00000020  5f 88 db 8f d0 23 07 57  1b 01 d6 20 ba a2 89 6b  |_....#.W... ...k|
-00000030  a4 f8 fe 67 84 29 13 b1  f8 06 48 34 2c bd 4a b3  |...g.)....H4,.J.|
-00000040  1a 87 e1 79 1f f6 06 4e  5a c6 7f 49 87 b3 22 ea  |...y...NZ..I..".|
-00000050  be 13 44 81 ae be 60 dd  37 37 21 41 a9 e0 47 a8  |..D...`.77!A..G.|
-00000060  2f a5 24 b6 8c 1c f7 f3  b4 41 5c 0f d1 f3 08 6f  |/.$......A\....o|
-00000070  52 8b ef eb c9 0c 3a d0  cd 1a 7e fa e2 25 95 ed  |R.....:...~..%..|
-00000080  8d 62 99 e9 ba 99 e9 57  c8 a2 43 b8 36 0c 8b d7  |.b.....W..C.6...|
-00000090  b2 8b 70 12 d5 7e 36 3a  66 44 a6 66 34 e9 aa df  |..p..~6:fD.f4...|
-000000a0  fd f2 d8 1e 8c b8 2e 42  7d 0e 2d a7 54 7a e3 04  |.......B}.-.Tz..|
-000000b0  6c b3 42 90 88 c3 34 54  21 5d da 0b 58 c9 ee 68  |l.B...4T!]..X..h|
-000000c0  ef fa 4c e9 c1 bd 8e da  ef 68 b5 37 7e df 44 8f  |..L......h.7~.D.|
-000000d0  d5 ef 0a 04 98 e0 94 9c  53 37 bc 0b 34 d5 a1 12  |........S7..4...|
-000000e0  8a dc ad 2b 4e e1 3c 79  9e 9a da 18 3c b7 d8 ee  |...+N..z....5=.|
-000001c0  94 02 6e 65 f2 98 8d 45  3e d5 af 22 46 f0 70 3e  |..ne...E>.."F.p>|
-000001d0  d4 90 9c 02 0a f9 8d e6  c7 8f 52 af ab 74 67 12  |..........R..tg.|
-000001e0  6d 8e 25 f8 03 73 02 78  5d 9c 8b 38 68 fe e9 96  |m.%..s.x]..8h...|
-000001f0  c6 83 29                                          |..)|
+00000000  14 03 03 00 01 01 17 03  03 01 50 ef 68 27 d6 ec  |..........P.h'..|
+00000010  76 00 e1 c6 ed 3c f6 a1  83 b4 4b 26 28 ba 0f d6  |v....<....K&(...|
+00000020  2a fd f0 4a 10 8f 9c ed  84 3f 0a 0e 5b 77 e2 7d  |*..J.....?..[w.}|
+00000030  1e 03 2a 76 5b 2b 87 78  ad bd 45 8b 03 b3 8d e7  |..*v[+.x..E.....|
+00000040  b7 66 ca 5e 36 f8 53 87  90 3c 1a 33 46 1d 32 4f  |.f.^6.S..<.3F.2O|
+00000050  f1 90 fb 36 da 96 1c 1a  db 9f 9b e6 9f 85 f8 13  |...6............|
+00000060  7d e1 ab e1 ca c6 05 df  15 ea af dd 55 58 c7 5f  |}...........UX._|
+00000070  de 62 1b 93 60 a4 fc 39  0a ef 95 bc 0c ca 8f 84  |.b..`..9........|
+00000080  98 0a 6d 5b fd c6 0c ad  02 7f 0c f8 b4 be fe 5a  |..m[...........Z|
+00000090  fb 22 00 08 09 5d c7 47  76 89 e5 06 d1 90 5b e6  |."...].Gv.....[.|
+000000a0  63 64 06 28 37 d9 1b e9  0d 27 45 f7 72 30 d7 f2  |cd.(7....'E.r0..|
+000000b0  db 8e bf 95 97 29 43 e7  16 bf a0 59 9c fa d9 59  |.....)C....Y...Y|
+000000c0  a0 a6 9b 1f b5 74 80 87  d0 61 2f d5 a5 ac dd b2  |.....t...a/.....|
+000000d0  8d 27 fc e6 68 eb 07 b3  3d 97 a9 93 5b 35 99 e9  |.'..h...=...[5..|
+000000e0  ba 99 fe 49 d6 39 1a 0a  38 98 cd 47 b9 67 9b 9a  |...I.9..8..G.g..|
+000000f0  77 65 45 f8 48 fb d3 1c  0f a2 2e af e0 29 68 bc  |weE.H........)h.|
+00000100  81 24 3b 9b 36 0a ef 51  75 ff 61 6a d4 6c 59 42  |.$;.6..Qu.aj.lYB|
+00000110  54 31 47 e9 02 9e 58 33  9e 89 65 b6 65 db b2 81  |T1G...X3..e.e...|
+00000120  bd c1 f4 0a 34 eb f3 26  f5 8d 36 6d da 78 e6 88  |....4..&..6m.x..|
+00000130  00 8f 92 24 dc 76 e3 95  dc 13 b5 92 91 ee c0 82  |...$.v..........|
+00000140  cb 63 85 b6 59 67 dc 14  2e 2d 58 8e 56 7e 7c db  |.c..Yg...-X.V~|.|
+00000150  2f 54 01 ed 17 8d 9a 97  22 39 7f 17 03 03 00 59  |/T......"9.....Y|
+00000160  a1 f2 0d 19 e7 d8 a8 6d  cd ea f6 82 ee 5d 0a 55  |.......m.....].U|
+00000170  22 61 11 21 f7 b0 1d 86  a8 4d c2 e2 9b ac bb 87  |"a.!.....M......|
+00000180  a2 82 67 ee 78 76 9b e0  c0 00 85 bf 1e 2b ab e6  |..g.xv.......+..|
+00000190  f1 43 79 69 a0 3d 04 b7  d9 7f 31 c7 7a b7 4f 5c  |.Cyi.=....1.z.O\|
+000001a0  9f 62 84 dc f4 6d a1 ce  3d ff 24 88 15 10 4a e6  |.b...m..=.$...J.|
+000001b0  5c 12 68 08 3c 55 a2 a9  d7 17 03 03 00 35 f4 d9  |\.h.>> Flow 4 (server to client)
-00000000  17 03 03 01 c2 48 66 ba  b6 48 e4 d9 1a 73 81 09  |.....Hf..H...s..|
-00000010  cc 26 f8 2b bd 70 e7 15  c7 29 ac 30 58 21 ee 0c  |.&.+.p...).0X!..|
-00000020  9b c6 f0 b2 85 23 20 1a  7b ad ce fc 5f b6 ce aa  |.....# .{..._...|
-00000030  af a3 40 52 bf b3 3f 3d  61 a9 14 d1 eb 3c 21 78  |..@R..?=a......J.........|
-00000170  fb ff 37 ce b7 5a 75 34  91 35 de 45 a2 36 71 05  |..7..Zu4.5.E.6q.|
-00000180  20 65 d3 e4 fa 48 00 c1  25 3f f2 98 e8 0f 32 2a  | e...H..%?....2*|
-00000190  ee c5 60 f6 83 25 40 91  f6 13 0b fe 26 a9 f1 4c  |..`..%@.....&..L|
-000001a0  67 0d e8 c9 25 7e f5 f3  e3 ca 34 c3 e7 0e 4b e1  |g...%~....4...K.|
-000001b0  c8 f4 40 94 69 88 a2 81  75 02 7d 6d d4 6a b3 c3  |..@.i...u.}m.j..|
-000001c0  61 84 17 29 2a e9 90 17  03 03 00 1e 43 69 c6 7c  |a..)*.......Ci.||
-000001d0  1a fa 1a cf bf 78 54 c0  8f b7 8d 83 d8 74 f9 54  |.....xT......t.T|
-000001e0  6a 62 2f b1 68 63 69 b7  46 2e 17 03 03 00 13 08  |jb/.hci.F.......|
-000001f0  49 af 4e 5f f1 e1 8a 7d  20 4e 55 2b 86 4f 03 a0  |I.N_...} NU+.O..|
-00000200  d2 b5                                             |..|
+00000000  17 03 03 01 c2 80 69 97  9a 20 30 2a 1c f4 31 f9  |......i.. 0*..1.|
+00000010  0f cf f7 79 c0 01 e1 f3  35 f5 16 a0 33 d6 eb 21  |...y....5...3..!|
+00000020  44 db bc c6 c4 91 6b a6  75 da ca d3 63 78 47 8b  |D.....k.u...cxG.|
+00000030  96 e5 6f 63 2c 77 c0 33  29 d8 3e ee bf 8e 6b d4  |..oc,w.3).>...k.|
+00000040  de f7 1b 0e e6 ae ce cd  17 0d 24 77 10 3d e4 89  |..........$w.=..|
+00000050  06 07 a3 77 68 ac 20 ec  0b ae 47 41 3b 80 4e 95  |...wh. ...GA;.N.|
+00000060  02 aa 13 36 19 03 06 1c  47 b3 f7 f0 4b 6d 5a c6  |...6....G...KmZ.|
+00000070  42 14 95 03 20 c7 46 96  42 d3 18 5a 40 bd a1 03  |B... .F.B..Z@...|
+00000080  b6 d2 8b f9 ff 2d d1 b1  3c 8a 34 af 23 64 31 7d  |.....-..<.4.#d1}|
+00000090  46 47 21 b4 82 16 df a2  a4 0f 96 03 4b 38 3d 5d  |FG!.........K8=]|
+000000a0  d0 d1 78 d1 6e 6a a2 95  c0 a7 e6 ee 07 eb 77 68  |..x.nj........wh|
+000000b0  35 78 72 3e df d9 4b e9  1b ab 34 99 2d fe 52 99  |5xr>..K...4.-.R.|
+000000c0  6e 57 63 13 39 ae 5e ce  b6 43 21 07 fd fe b7 6d  |nWc.9.^..C!....m|
+000000d0  8f 72 a4 f8 7e 0a 56 60  61 d5 5a d4 01 b3 47 8e  |.r..~.V`a.Z...G.|
+000000e0  f0 48 cd 85 61 a3 d2 d1  eb ba 04 39 6b 5e 5f fc  |.H..a......9k^_.|
+000000f0  e3 90 c1 cb 3f 40 30 00  5c 94 df bf 5b 89 6d ab  |....?@0.\...[.m.|
+00000100  15 1e 72 50 ac 56 ee 16  7d 84 4c e6 0c 89 68 fa  |..rP.V..}.L...h.|
+00000110  d5 8d 5f 09 85 25 5f 8c  70 df 0b b7 94 15 40 20  |.._..%_.p.....@ |
+00000120  b1 ff 41 50 5d 9f c6 8a  9b 7f 40 6f dc bd 4f 54  |..AP].....@o..OT|
+00000130  d8 1f e6 f1 44 00 11 97  45 ca 80 bc 15 eb 93 01  |....D...E.......|
+00000140  dd 54 c6 75 7e 08 b9 38  f5 4d 97 c5 50 56 97 3c  |.T.u~..8.M..PV.<|
+00000150  3c 72 9a 33 7c 68 b1 73  2b 38 c7 b8 a8 3c 5d af  |.....6....[..z|
+00000170  f5 74 8d ac a4 0f 38 34  ee cd 08 50 e0 33 b0 e1  |.t....84...P.3..|
+00000180  52 e1 5d f2 7d c6 7b 64  c7 46 f6 9e d0 a2 cf 89  |R.].}.{d.F......|
+00000190  3c c9 ab 2f fb 8a f3 ba  78 e9 4c c5 2d 62 32 6b  |<../....x.L.-b2k|
+000001a0  50 4c a0 7e d3 bb 2a 66  57 99 38 69 e8 77 ef 18  |PL.~..*fW.8i.w..|
+000001b0  24 af b3 cb e5 c0 37 a2  97 f6 00 d4 68 8a 71 af  |$.....7.....h.q.|
+000001c0  24 a4 ab 19 07 3b c0 17  03 03 00 1e 60 b4 fc 15  |$....;......`...|
+000001d0  f9 9c b1 a1 60 1a ba f5  1b b9 c1 33 f1 8b e5 c0  |....`......3....|
+000001e0  48 77 4f 11 42 21 ad 8c  d2 d6 17 03 03 00 13 5c  |HwO.B!.........\|
+000001f0  db 07 5e 65 40 58 74 a4  7f ab 5f cc f0 9a 91 0c  |..^e@Xt..._.....|
+00000200  17 3d                                             |.=|
diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven
index 2a608bda2618bb..8ba88ebf3fa2ee 100644
--- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven
+++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven
@@ -1,180 +1,177 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ca 01 00 00  c6 03 03 c5 cc 07 79 72  |..............yr|
-00000010  50 61 54 df 90 ab 52 54  06 7d 7b 96 7f 13 5c 3c  |PaT...RT.}{...\<|
-00000020  1f ee fe cf d5 31 0a 58  37 96 02 20 b9 21 2b 29  |.....1.X7.. .!+)|
-00000030  79 05 38 92 c6 fe 41 fa  be d7 98 08 0a e4 12 b7  |y.8...A.........|
-00000040  7a ea 10 5a 0d 1a f2 b4  81 5d 9d 01 00 04 13 01  |z..Z.....]......|
+00000000  16 03 01 00 ca 01 00 00  c6 03 03 56 2e 3c 64 35  |...........V.>> Flow 2 (server to client)
 00000000  16 03 03 00 7a 02 00 00  76 03 03 00 00 00 00 00  |....z...v.......|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000020  00 00 00 00 00 00 00 00  00 00 00 20 b9 21 2b 29  |........... .!+)|
-00000030  79 05 38 92 c6 fe 41 fa  be d7 98 08 0a e4 12 b7  |y.8...A.........|
-00000040  7a ea 10 5a 0d 1a f2 b4  81 5d 9d 01 13 01 00 00  |z..Z.....]......|
+00000020  00 00 00 00 00 00 00 00  00 00 00 20 7c d3 26 20  |........... |.& |
+00000030  a0 dc e9 7a 07 71 02 2d  3b 27 85 16 fb 6e 26 e5  |...z.q.-;'...n&.|
+00000040  c3 67 e5 0b bd e5 50 8f  bd 39 6f 2c 13 01 00 00  |.g....P..9o,....|
 00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 2f  |..+.....3.$... /|
 00000060  e5 7d a3 47 cd 62 43 15  28 da ac 5f bb 29 07 30  |.}.G.bC.(.._.).0|
 00000070  ff f6 84 af c4 cf c2 ed  90 99 5f 58 cb 3b 74 14  |.........._X.;t.|
-00000080  03 03 00 01 01 17 03 03  00 17 4d 00 8b d1 bc 63  |..........M....c|
-00000090  c3 8c af c4 0f 2e 36 78  8d 2b 52 32 f6 2c 29 0e  |......6x.+R2.,).|
-000000a0  17 17 03 03 00 52 aa 37  4e 5d 56 9a 8d 72 e7 77  |.....R.7N]V..r.w|
-000000b0  f1 b7 0c 0b be 7d 63 92  58 0f 09 d7 a0 36 12 75  |.....}c.X....6.u|
-000000c0  c9 0d ec d8 44 b4 8f ad  dd a1 84 58 3f 0a 7c 47  |....D......X?.|G|
-000000d0  0b c1 6f 56 7a 90 bf 82  6d 29 22 8b b3 50 03 ea  |..oVz...m)"..P..|
-000000e0  18 96 5e f5 1b f0 67 7d  10 c8 3f a4 f5 44 84 b3  |..^...g}..?..D..|
-000000f0  f3 af 3e f2 b3 93 a1 57  17 03 03 02 6d 54 0a b5  |..>....W....mT..|
-00000100  be 3f e0 77 de 6f e3 d7  83 60 2e 17 94 77 fb e1  |.?.w.o...`...w..|
-00000110  11 e8 8d 22 1a 7b ac 36  94 35 d5 29 e5 fa 9e 07  |...".{.6.5.)....|
-00000120  62 87 34 f8 b4 c5 ae d5  ee 84 76 c8 fd 30 cf a8  |b.4.......v..0..|
-00000130  b1 a4 fe 42 12 e1 36 80  05 76 e2 d2 04 2b 6e c7  |...B..6..v...+n.|
-00000140  0d 7d dc 99 de 3d 62 41  2f 3c c2 78 22 ec 6f 37  |.}...=bA/<.x".o7|
-00000150  ab 0d 03 22 fe fc f4 82  41 49 44 fd 0a 02 4a 79  |..."....AID...Jy|
-00000160  bd 5b 40 63 46 58 cd 84  b6 cf 46 c3 31 68 38 2a  |.[@cFX....F.1h8*|
-00000170  cf e0 3f ee de 06 ee de  f8 e8 3e 37 ab 92 a6 9b  |..?.......>7....|
-00000180  0a f3 a8 64 6a 81 86 5d  ed e3 a2 8c d0 0f 09 1e  |...dj..]........|
-00000190  ba e9 b0 6f 6b 1e 32 be  03 de 97 81 e0 42 ad 6e  |...ok.2......B.n|
-000001a0  f6 af bd 12 7a 2f f4 41  63 c4 f4 6a 61 8c e5 d4  |....z/.Ac..ja...|
-000001b0  60 99 f2 d5 92 54 2f 28  ee 3f 9b ab fa c1 51 9b  |`....T/(.?....Q.|
-000001c0  f5 6b d1 d6 6d b1 17 28  95 5f 3c cc e4 41 bf 9b  |.k..m..(._<..A..|
-000001d0  c5 6e 29 4b 39 f8 ad b0  fe 51 4c 2b 92 76 ce 22  |.n)K9....QL+.v."|
-000001e0  ee 5c 9e ad 0e 50 12 3d  2a a0 7a 6d a1 63 18 f7  |.\...P.=*.zm.c..|
-000001f0  f2 a0 2a b7 b6 c9 f3 60  54 47 a8 90 dd 90 7d c3  |..*....`TG....}.|
-00000200  6e f8 58 1c 28 e7 21 b4  52 33 da 67 67 2b b1 51  |n.X.(.!.R3.gg+.Q|
-00000210  b0 41 97 a3 1f 9b cd c8  28 63 c9 f5 e5 d1 a3 3f  |.A......(c.....?|
-00000220  ac 1c 39 2e 72 1b e5 16  4d 8c b1 6b 4c 35 07 e9  |..9.r...M..kL5..|
-00000230  24 a4 98 fb 67 75 4b 76  b7 2d cc 35 d9 a4 db 74  |$...guKv.-.5...t|
-00000240  96 56 96 e0 74 8e f9 4a  45 19 30 57 a0 22 27 a9  |.V..t..JE.0W."'.|
-00000250  d9 34 d7 73 f0 16 87 e5  be 8e b3 d2 53 f2 9c 19  |.4.s........S...|
-00000260  c1 0a df 07 e7 e8 30 fb  44 ac 34 13 2b 22 4c a2  |......0.D.4.+"L.|
-00000270  00 da 45 fc 95 1f 83 a0  c9 fa b3 b9 16 95 83 0f  |..E.............|
-00000280  a9 fa ae 2f b7 bc a1 55  d2 ab 2d 31 af 39 c2 82  |.../...U..-1.9..|
-00000290  f7 bf 9a 9a 5c e6 61 d7  f2 9c d0 b5 53 85 58 cf  |....\.a.....S.X.|
-000002a0  9d 2e 50 eb 46 a1 a4 a0  aa c4 44 66 f7 61 41 0f  |..P.F.....Df.aA.|
-000002b0  75 68 36 76 11 7d 1e d7  be 0f a4 7a a8 bb 9e 26  |uh6v.}.....z...&|
-000002c0  a9 7b ea 30 14 51 37 78  58 2a 92 e2 2c d3 9e 27  |.{.0.Q7xX*..,..'|
-000002d0  86 92 83 a0 bc e8 50 ed  da 9c 06 f4 d8 3c d5 6c  |......P......<.l|
-000002e0  a5 3a cc 1a ce 00 55 30  20 74 ad 17 5c bd 98 2d  |.:....U0 t..\..-|
-000002f0  1f 11 e7 38 99 2d b4 fc  1c 42 c9 ae f1 af 46 3e  |...8.-...B....F>|
-00000300  67 13 d2 31 16 34 fd e9  26 7c dd bb a0 25 10 7d  |g..1.4..&|...%.}|
-00000310  ca 94 20 6a b9 10 b7 94  0d 26 31 46 f2 bf 45 a8  |.. j.....&1F..E.|
-00000320  ed 8f 08 15 7d db dd 3a  ad 45 9f bd 32 8d ff 80  |....}..:.E..2...|
-00000330  c6 1f bf 57 5e a0 dc 74  3c 8a b3 8f 03 ef a1 ef  |...W^..t<.......|
-00000340  12 65 2c c3 16 4f bc 63  3b 62 ab fa ae 9f d1 84  |.e,..O.c;b......|
-00000350  79 80 25 04 bc e0 f9 70  98 e1 8c 15 55 ba cf a3  |y.%....p....U...|
-00000360  0a 24 64 8c 3a b2 b7 a8  04 c1 17 03 03 00 99 c0  |.$d.:...........|
-00000370  87 16 ce 52 d1 e9 83 f3  46 02 91 89 a1 6d 24 17  |...R....F....m$.|
-00000380  dc 6a 05 bb c2 fb bd 93  94 05 60 8c 6c 47 f6 4a  |.j........`.lG.J|
-00000390  d8 ad 42 99 8b 77 92 91  f3 58 1e 10 3b 59 b1 19  |..B..w...X..;Y..|
-000003a0  55 2c 3b f2 5b f3 e5 67  b2 e1 9c a8 68 dd 0e b9  |U,;.[..g....h...|
-000003b0  67 c4 61 63 b3 bc 15 7b  d6 76 7d 44 42 46 57 96  |g.ac...{.v}DBFW.|
-000003c0  b3 10 40 39 2b 8c d5 fa  cf a0 32 c0 d5 1a aa 96  |..@9+.....2.....|
-000003d0  95 3b d5 55 fe 06 d2 34  31 7c 29 95 86 ac 7e f5  |.;.U...41|)...~.|
-000003e0  e6 6b 7d a6 b5 52 37 2d  02 56 b8 12 66 33 67 80  |.k}..R7-.V..f3g.|
-000003f0  14 5f 78 b3 a3 bf fc 4f  cb 16 82 4e f5 c4 1b a1  |._x....O...N....|
-00000400  33 3e 6c ed df 7b 4d 0b  17 03 03 00 35 dd de ca  |3>l..{M.....5...|
-00000410  4d 9e 09 ba 14 09 72 72  23 9f 3c 7e 2c 46 e5 5e  |M.....rr#.<~,F.^|
-00000420  50 a2 21 02 f7 03 4b 76  ab 4c a8 0b a2 b3 9b 7a  |P.!...Kv.L.....z|
-00000430  fc b9 5d a2 ac 0b c3 55  15 b8 b8 23 2b 61 46 00  |..]....U...#+aF.|
-00000440  1c 5c                                             |.\|
+00000080  03 03 00 01 01 17 03 03  00 17 43 8e 41 a4 04 13  |..........C.A...|
+00000090  01 08 9f 6e 1a fd 00 68  38 5c 93 d9 9a f7 1e 36  |...n...h8\.....6|
+000000a0  ea 17 03 03 00 3e 9f ae  80 ef f4 20 66 e7 44 fc  |.....>..... f.D.|
+000000b0  4d a4 3f 0e dc bb 33 47  0f 13 96 fa 03 07 d6 6f  |M.?...3G.......o|
+000000c0  cc 9f 3c fd 01 f5 87 d9  ec c9 d0 fc dd bf c8 5c  |..<............\|
+000000d0  0b 3d aa a7 c6 1d 90 18  d9 a1 1a a0 a1 ea 49 32  |.=............I2|
+000000e0  9e 45 86 f7 17 03 03 02  6d 61 29 fe 45 7e 5c b3  |.E......ma).E~\.|
+000000f0  8a 73 f2 65 c1 90 4e 93  0d 84 b2 bd e4 46 93 c2  |.s.e..N......F..|
+00000100  52 3f 07 38 e7 23 db 25  5e 71 98 a9 7d fd e9 ef  |R?.8.#.%^q..}...|
+00000110  3f 2c d8 9c ae 41 c4 d3  c7 9e d5 6e f0 0c 33 78  |?,...A.....n..3x|
+00000120  98 cf bf 22 3d 1f d0 f3  c8 a2 34 e8 ce 5e 0d 37  |..."=.....4..^.7|
+00000130  52 e2 b8 e3 50 ea 35 3e  e5 59 a0 6d ed 9e 09 36  |R...P.5>.Y.m...6|
+00000140  59 20 33 08 a9 41 f4 72  aa 2d 0c b5 d6 96 d9 04  |Y 3..A.r.-......|
+00000150  1a f1 d8 45 ed 67 ab f9  15 fa 25 ef 6d 87 72 ad  |...E.g....%.m.r.|
+00000160  f0 06 59 a5 8e 61 80 8b  28 f9 a0 df 5b b2 a2 3a  |..Y..a..(...[..:|
+00000170  1c 91 43 18 f4 a2 f3 4e  db dc 24 1b c3 0e 77 22  |..C....N..$...w"|
+00000180  83 ae 88 9f 8e 8d 48 38  f4 60 51 42 fa f2 a4 de  |......H8.`QB....|
+00000190  33 78 35 d0 b6 01 3d 7a  f5 54 68 51 fd 0e 4c 9b  |3x5...=z.ThQ..L.|
+000001a0  92 7c a5 01 96 52 7e de  38 b9 b0 ee 60 1e aa eb  |.|...R~.8...`...|
+000001b0  8c e6 b4 f4 7c 35 d2 0b  9b 83 94 ac ac ce 7e 58  |....|5........~X|
+000001c0  51 6e c3 ae 3b cd f5 85  8a 1e 43 78 19 ee dc a1  |Qn..;.....Cx....|
+000001d0  a3 d0 93 24 0d 3b 6a 4b  cd dc 78 9c 0b 2f bc 41  |...$.;jK..x../.A|
+000001e0  46 2f 64 3c 23 95 04 8b  60 75 bf 4d 45 3b e4 1e  |F/d<#...`u.ME;..|
+000001f0  9c 5b 1a 46 bb f3 4d a9  1b 59 33 b4 40 78 bd ff  |.[.F..M..Y3.@x..|
+00000200  30 7d d4 cc 5e 83 03 de  8d a3 a6 27 b4 bc 12 6e  |0}..^......'...n|
+00000210  5e f2 88 e8 b6 60 f3 01  e8 4a 53 c7 a9 fc a1 cc  |^....`...JS.....|
+00000220  27 45 c1 06 90 38 9a fb  1b 2a 9e ed 9e f6 19 85  |'E...8...*......|
+00000230  dd f7 8a 7f 95 08 3a 25  c0 5b 63 96 44 71 c2 16  |......:%.[c.Dq..|
+00000240  9c e1 10 69 e5 6a 5c 4a  e8 2a ed 6f bd de f5 98  |...i.j\J.*.o....|
+00000250  c0 a0 c5 54 7c cc 06 11  b2 54 1a c3 b4 46 c2 b4  |...T|....T...F..|
+00000260  97 d8 9c 7d f1 f3 d4 6f  3c a0 ef 18 c5 a6 e9 13  |...}...o<.......|
+00000270  e9 f4 9d bf 9b 25 a2 da  c6 ba 7a 6d 91 fd 41 a4  |.....%....zm..A.|
+00000280  e8 88 e3 79 2c 99 df 4d  21 48 89 57 5a bf 2a 2d  |...y,..M!H.WZ.*-|
+00000290  72 4e 1e 3a e8 c9 82 7b  c0 ff 6b 7c e8 8f 41 bf  |rN.:...{..k|..A.|
+000002a0  83 19 9e 96 d1 3f 2b 60  8f 7f 0b f8 6c 70 82 dd  |.....?+`....lp..|
+000002b0  34 da 91 62 17 20 e9 99  2e e2 a9 9a 9d fd 5d f8  |4..b. ........].|
+000002c0  a5 c0 ac e8 a3 df 11 b5  df 2c bd e1 e8 0f 7e 0a  |.........,....~.|
+000002d0  f2 47 4c 92 33 7b 6b 49  e5 30 31 8b 2e 16 81 3e  |.GL.3{kI.01....>|
+000002e0  79 25 f7 d7 d2 8f 5e e6  e3 2d ed 0d e1 08 97 13  |y%....^..-......|
+000002f0  f3 ce 7d b1 36 0d 7c b0  4f 23 6b 12 ef 3a a4 8b  |..}.6.|.O#k..:..|
+00000300  b5 d0 c9 ee 48 77 70 28  61 ff ad 49 f6 48 4c 37  |....Hwp(a..I.HL7|
+00000310  7b 00 c4 01 5d 8b 54 bc  44 5c 5f 98 6f 7d 84 84  |{...].T.D\_.o}..|
+00000320  c8 d0 55 88 f9 17 f6 02  f1 84 b6 3c 1a 03 e8 7b  |..U........<...{|
+00000330  b9 4e 24 c6 d8 0a f6 8c  b9 49 c6 10 38 53 e1 10  |.N$......I..8S..|
+00000340  8f 91 cd 39 9a 3a e8 c7  10 f3 c3 91 84 3c 8c a6  |...9.:.......<..|
+00000350  55 ab f4 f5 ab e7 17 03  03 00 99 e5 40 f6 35 34  |U...........@.54|
+00000360  2d 42 3e 7f e1 51 26 56  50 4e 60 b0 2f 65 e3 cd  |-B>..Q&VPN`./e..|
+00000370  c7 08 0e 96 77 08 c7 f6  4f e6 70 90 bc 80 95 e7  |....w...O.p.....|
+00000380  b2 df 98 83 94 4d 9e 5c  8a af d3 45 da e9 d7 fa  |.....M.\...E....|
+00000390  d8 d2 60 f8 b1 06 d9 27  64 45 4d e8 d3 07 8a bb  |..`....'dEM.....|
+000003a0  72 7a c6 71 00 7e 8b b0  2b 7d d0 f7 ab 1a bf d2  |rz.q.~..+}......|
+000003b0  50 be a9 3a 0c 68 b8 48  9a 91 ee db 26 4d d3 66  |P..:.h.H....&M.f|
+000003c0  5b 00 ef c3 cc b8 f2 4e  1e 51 c7 9b 34 3c e3 01  |[......N.Q..4<..|
+000003d0  7f 75 4e 41 e4 56 34 ec  14 92 0f 1e 6d dd 51 9a  |.uNA.V4.....m.Q.|
+000003e0  e0 8b 33 54 df 77 1f ff  d3 72 67 4c 62 16 b7 f8  |..3T.w...rgLb...|
+000003f0  4f 8f f8 ee 17 03 03 00  35 b7 83 d2 27 a3 15 f2  |O.......5...'...|
+00000400  75 55 aa 06 8c 5f c4 fa  0f 43 88 c9 c5 e3 c7 36  |uU..._...C.....6|
+00000410  40 6b 35 0b 7e 60 a1 1e  48 ef 46 2c d6 e4 48 80  |@k5.~`..H.F,..H.|
+00000420  91 b0 e5 3b c0 58 5d fe  5d bd 0a 6c 19 ea        |...;.X].]..l..|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 02 11 79 f8 bd a7 4e  |...........y...N|
-00000010  90 84 77 6f d1 a8 95 67  b7 0b e2 7a 4e 16 e9 ca  |..wo...g...zN...|
-00000020  1c f3 31 df a8 0e 99 02  c0 09 68 de 6a bb c2 bd  |..1.......h.j...|
-00000030  19 10 30 65 e6 5d d1 43  e2 aa 81 ba ea 3d 30 9a  |..0e.].C.....=0.|
-00000040  bb a8 66 ef 91 d1 1d 4c  cd 93 97 19 f5 b7 52 1f  |..f....L......R.|
-00000050  c3 4b f8 dd 2f 39 53 54  68 06 dd 90 c1 75 57 9a  |.K../9STh....uW.|
-00000060  d6 9d c5 79 36 f9 5e bc  c6 9b b8 bd 3d 14 40 71  |...y6.^.....=.@q|
-00000070  a8 db 5c a8 d0 28 f3 a6  c1 37 29 c1 38 3f a3 51  |..\..(...7).8?.Q|
-00000080  29 5c 01 eb 5c 7e c7 09  e6 2b fd 48 6f 53 77 25  |)\..\~...+.HoSw%|
-00000090  c8 55 bb fd 68 21 a4 f0  f8 0e 52 41 97 81 20 78  |.U..h!....RA.. x|
-000000a0  5e b8 77 3e 4e 6c 0a b1  32 98 2e d4 58 dd 64 fa  |^.w>Nl..2...X.d.|
-000000b0  8a 3e ba ea 79 67 c1 01  97 d2 5c d6 09 81 57 b0  |.>..yg....\...W.|
-000000c0  fa c3 b8 3d 91 ee 7e 06  47 a8 3e 7b 59 74 14 44  |...=..~.G.>{Yt.D|
-000000d0  29 28 29 1f 52 00 b8 31  4f ae 60 d5 18 72 fb a7  |)().R..1O.`..r..|
-000000e0  21 0f 79 73 d8 e2 5c 6b  b7 aa 78 53 f0 83 b5 ec  |!.ys..\k..xS....|
-000000f0  89 fc d0 fd 84 2e f6 3b  65 1d ac fe e8 75 10 f6  |.......;e....u..|
-00000100  52 01 7f 5a 67 6d 1c 1d  82 4d eb 9d 2f fa 54 4e  |R..Zgm...M../.TN|
-00000110  0f 05 c8 d0 c3 50 6b cb  15 f0 27 5e 1d 15 b4 60  |.....Pk...'^...`|
-00000120  85 bc b0 0e 54 3a 10 54  f9 4c 43 db 57 74 96 4b  |....T:.T.LC.Wt.K|
-00000130  12 1c c8 1b 4c b7 d6 44  e7 df 95 9b 1d 28 cc d0  |....L..D.....(..|
-00000140  20 a5 9f 28 5d da 20 1a  46 42 1c b5 88 81 6b 3e  | ..(]. .FB....k>|
-00000150  0f 7b 37 5f b8 8e e5 b8  57 3c e7 03 6f 4f be 83  |.{7_....W<..oO..|
-00000160  5a 3a a9 46 c6 e9 42 68  4f 10 38 bc ba 4d 67 7b  |Z:.F..BhO.8..Mg{|
-00000170  19 9a b0 bd ce 9a 8f 21  ff eb 82 59 a6 2f 0a 0f  |.......!...Y./..|
-00000180  b2 eb 76 c0 e2 dc 3f f4  3b c5 26 d3 7e 8c ed c3  |..v...?.;.&.~...|
-00000190  5d 0f 80 56 a0 07 76 88  4c ab 04 3c aa 8a 44 65  |]..V..v.L..<..De|
-000001a0  a7 5a 7b 31 29 5f 41 b8  12 c0 c0 f1 cd 95 08 0e  |.Z{1)_A.........|
-000001b0  f7 89 a0 af 91 e6 52 14  5a 2b 39 c5 c6 4e b7 72  |......R.Z+9..N.r|
-000001c0  93 e2 a7 6f 00 b4 57 9b  20 e4 90 b9 57 f0 67 40  |...o..W. ...W.g@|
-000001d0  e3 87 7d f6 6b f6 87 91  7f f6 3b 99 f2 93 b3 35  |..}.k.....;....5|
-000001e0  e7 d4 fe 7c 1c b7 08 4a  00 de 7c 6c 85 df 2d 37  |...|...J..|l..-7|
-000001f0  3b 69 62 18 c6 f9 e0 e3  6e 1d 30 cd 35 7d 83 5c  |;ib.....n.0.5}.\|
-00000200  1d 0c d8 61 df 4b f3 20  77 81 b1 9e 5f 84 79 44  |...a.K. w..._.yD|
-00000210  93 b6 30 60 2d 76 4e 6d  4d 18 3a 21 17 03 03 00  |..0`-vNmM.:!....|
-00000220  99 30 99 a3 ff 5c 70 58  5a d7 f0 ec 97 a0 d9 b8  |.0...\pXZ.......|
-00000230  9e 98 08 f6 ec 87 48 3b  c6 46 c2 45 c4 29 ab 08  |......H;.F.E.)..|
-00000240  f2 ee 94 4d 89 c9 19 b4  0d b0 f6 df f7 a5 8d 4b  |...M...........K|
-00000250  2f 53 62 b8 ee 4c 8a cf  81 be fb 7e 16 2f ec f3  |/Sb..L.....~./..|
-00000260  03 49 18 93 dc d3 53 67  fc a2 03 f8 f6 ab 26 87  |.I....Sg......&.|
-00000270  92 32 7c 06 1a 12 14 29  cf a2 43 e4 36 04 2c ad  |.2|....)..C.6.,.|
-00000280  68 ea 5f 5a d2 83 81 d7  96 7d 8c 2e 9a 98 14 56  |h._Z.....}.....V|
-00000290  a7 a3 23 69 d5 fd 21 9e  2f 81 43 2b 8a ad 2e c9  |..#i..!./.C+....|
-000002a0  50 a8 a5 5c 28 b3 a0 62  c0 95 78 92 f7 3b 7b c0  |P..\(..b..x..;{.|
-000002b0  1c a9 29 c4 34 28 39 c4  0b ef 17 03 03 00 35 8d  |..).4(9.......5.|
-000002c0  35 f3 1d 55 34 aa 92 ff  8f e6 2e c2 9b 2f c6 c8  |5..U4......../..|
-000002d0  29 69 66 08 db fb 6f b5  22 4e bf 62 35 43 6c 72  |)if...o."N.b5Clr|
-000002e0  c6 2a c4 57 8c a9 42 2c  b8 5e 82 25 b2 92 aa 82  |.*.W..B,.^.%....|
-000002f0  77 5f a4 1f 17 03 03 00  13 cc 12 01 75 9c 9f d3  |w_..........u...|
-00000300  3f 17 17 a8 b8 8b b3 ae  dc f6 08 34              |?..........4|
+00000000  14 03 03 00 01 01 17 03  03 02 11 9e 9e cf 44 84  |..............D.|
+00000010  df e7 23 47 2d 4e 85 fa  f2 02 2a 79 4d 3a 3d df  |..#G-N....*yM:=.|
+00000020  48 95 2e d7 0d 3c d0 05  fc bf bb 23 0a 25 59 76  |H....<.....#.%Yv|
+00000030  fd 04 f8 f0 81 88 85 9f  99 f0 55 91 9a 79 8a 39  |..........U..y.9|
+00000040  f4 6e 49 92 be ed 1d d1  20 19 77 bc 55 9b b0 da  |.nI..... .w.U...|
+00000050  d1 c4 9f b5 2f 5c 1a 60  38 e1 92 9b f9 a1 97 6b  |..../\.`8......k|
+00000060  1b d0 d0 d0 05 7a 41 26  d4 6b 12 a0 b3 c6 33 13  |.....zA&.k....3.|
+00000070  4f 74 10 d6 91 fb b0 69  46 46 ca de 7c 05 d6 62  |Ot.....iFF..|..b|
+00000080  51 23 12 58 00 ff 25 8e  c8 5f 54 85 f4 2f e9 f9  |Q#.X..%.._T../..|
+00000090  f1 1e 32 b9 f1 a6 fb 90  9b a9 65 d2 c9 ea a7 1a  |..2.......e.....|
+000000a0  e8 c9 a8 bb 7e 3d 3f 03  62 fc f4 06 a4 a2 f7 41  |....~=?.b......A|
+000000b0  60 f5 f1 df 3e d6 31 51  f4 dc b1 d3 60 4b 84 4f  |`...>.1Q....`K.O|
+000000c0  99 e2 9f b2 f0 d5 fd b2  f3 5c 24 5f 91 a6 94 cd  |.........\$_....|
+000000d0  37 61 91 4e cc ae cd c1  b5 cc 58 5f 9a 91 a1 13  |7a.N......X_....|
+000000e0  23 42 8a c5 27 4c 66 32  69 9c 75 9f 2a ed 73 1d  |#B..'Lf2i.u.*.s.|
+000000f0  29 2e 36 50 34 b4 80 d2  08 e6 9f c6 3e da df 9f  |).6P4.......>...|
+00000100  e0 2a 08 88 47 b6 d3 ff  f7 6c 6c 91 1a 8e 53 89  |.*..G....ll...S.|
+00000110  53 6c b8 d7 83 37 ab 03  59 e6 4f 41 42 af d4 f9  |Sl...7..Y.OAB...|
+00000120  ac 9d ae d1 77 f1 71 79  a0 16 c4 c7 b5 a6 a9 9f  |....w.qy........|
+00000130  59 da 55 fb c5 88 8c 13  04 c2 06 39 8f ae 7e ca  |Y.U........9..~.|
+00000140  99 ce cd aa 86 0a 00 bd  56 f1 98 d9 c8 d2 c1 c0  |........V.......|
+00000150  df 16 c2 6f 78 da 66 3f  cc 43 c7 38 33 1b 3b 5b  |...ox.f?.C.83.;[|
+00000160  f8 7e d8 b7 ef 4c 6d c7  f6 84 56 8d 76 f7 0d 83  |.~...Lm...V.v...|
+00000170  94 e6 ad c5 f3 05 5c f4  17 69 d5 83 98 c3 43 8e  |......\..i....C.|
+00000180  9f a5 5c 7b 12 ea f4 1f  39 ce 0d 83 15 b1 e6 ce  |..\{....9.......|
+00000190  c1 35 9b 8c ec c6 d2 d7  f9 02 36 90 24 f4 3a 70  |.5........6.$.:p|
+000001a0  ce bb 8d bb 4b b2 aa 64  f0 b5 c0 88 cc 06 e3 9c  |....K..d........|
+000001b0  f7 70 64 fd 5d 48 f5 c8  07 48 c2 09 c4 07 56 b9  |.pd.]H...H....V.|
+000001c0  86 e9 d6 7b dc ac a5 00  2c 1d 80 8f 47 f2 c4 c7  |...{....,...G...|
+000001d0  ab dc 7b 41 7b 3d 47 db  09 12 02 9f 1b 63 e7 cc  |..{A{=G......c..|
+000001e0  38 1d 33 56 e0 ae 63 7a  95 73 5f e6 da 13 53 49  |8.3V..cz.s_...SI|
+000001f0  5f 69 e9 ff 86 26 bd 9a  dd be 5c 75 e7 69 66 b4  |_i...&....\u.if.|
+00000200  27 3f 79 d2 2e 8e 79 9e  89 42 58 20 a2 ca 8c 2a  |'?y...y..BX ...*|
+00000210  37 b8 99 81 66 3a 31 66  1a 95 4c 47 17 03 03 00  |7...f:1f..LG....|
+00000220  99 66 08 07 06 6d 95 fe  f1 72 2a 7c de 84 06 b0  |.f...m...r*|....|
+00000230  3d d7 d1 6b 47 0e 4d fb  9e ab 55 f7 71 c5 5d 11  |=..kG.M...U.q.].|
+00000240  cb c7 fb 45 90 9d 22 eb  ec 03 d6 ce 8c 01 ff 81  |...E..".........|
+00000250  a2 90 23 1d 7a f3 cb 16  76 a5 05 57 77 f6 af f0  |..#.z...v..Ww...|
+00000260  29 6c 6c 39 9e 99 55 c0  38 c3 31 68 49 b3 bf cc  |)ll9..U.8.1hI...|
+00000270  31 e2 6d a4 4c e7 99 53  2f 31 3f 05 2c 7c 1b 10  |1.m.L..S/1?.,|..|
+00000280  60 ce 8b 60 47 16 eb e5  8b be 1b 7a 95 b9 3c 60  |`..`G......z..<`|
+00000290  1c d6 b5 13 5f ad b9 bb  13 dd d6 08 8e 70 cb 2a  |...._........p.*|
+000002a0  26 3e df ce 7c 21 e5 27  7e 27 ec 75 b6 47 a0 89  |&>..|!.'~'.u.G..|
+000002b0  2e e1 3c ab 0d 72 90 d1  d5 07 17 03 03 00 35 82  |..<..r........5.|
+000002c0  6b 48 4a 9a 63 16 07 8f  b2 d3 4a 65 7d e0 c4 e8  |kHJ.c.....Je}...|
+000002d0  27 3e ce 4a 0a c8 63 e0  f9 70 98 c0 6a 12 39 ec  |'>.J..c..p..j.9.|
+000002e0  e1 52 de 73 58 2d f0 7c  bc 8d 41 16 be 89 a0 88  |.R.sX-.|..A.....|
+000002f0  56 e5 ef f6                                       |V...|
 >>> Flow 4 (server to client)
-00000000  17 03 03 02 83 63 68 c7  ae a5 c2 03 56 49 d3 13  |.....ch.....VI..|
-00000010  45 f0 de 02 20 70 1a cb  a5 cc 6f fa 0e 4b 28 65  |E... p....o..K(e|
-00000020  4f 6d 76 2e b0 61 cf fe  be 43 82 02 44 06 e4 1e  |Omv..a...C..D...|
-00000030  91 0c 64 1b 0e 58 53 c0  15 84 e8 6a 23 64 a1 cb  |..d..XS....j#d..|
-00000040  cd af e6 98 c1 c2 10 23  2b dd 54 9c ff d8 11 af  |.......#+.T.....|
-00000050  41 0c 88 7b 77 5c 12 47  7e f9 61 97 d6 f4 65 a7  |A..{w\.G~.a...e.|
-00000060  5e 9c 06 0e 8a 96 5a 4c  60 f9 ce fb 52 a6 61 44  |^.....ZL`...R.aD|
-00000070  7a d1 41 54 10 51 b6 26  d4 18 fb 37 75 55 7f 18  |z.AT.Q.&...7uU..|
-00000080  10 39 ea b1 f7 d5 8f 3a  a4 e8 d8 be f5 2f c2 90  |.9.....:...../..|
-00000090  1a dd bc d7 50 b7 0e 7e  c8 71 88 8f a0 04 34 2d  |....P..~.q....4-|
-000000a0  6f 35 f5 3f 43 08 1d 28  c7 30 db 8e c0 6c cd 14  |o5.?C..(.0...l..|
-000000b0  93 10 fc b4 58 43 92 6d  a3 3c 2e 87 71 12 70 c5  |....XC.m.<..q.p.|
-000000c0  ec f8 64 5a 28 ee 3c 67  05 f4 00 f8 16 11 a6 49  |..dZ(.`3e.^_.|
-00000110  7b 16 78 d9 8d 2a 92 16  62 02 fc 27 ee 72 f4 2e  |{.x..*..b..'.r..|
-00000120  86 11 32 55 a2 9b b7 d3  3a 3b 87 be 28 8f 30 e7  |..2U....:;..(.0.|
-00000130  c7 ca 34 51 e5 3b 96 55  c1 d2 b2 b1 4e 84 85 0c  |..4Q.;.U....N...|
-00000140  df d9 25 3e 29 b8 56 4a  32 b7 45 1a b3 05 c1 d6  |..%>).VJ2.E.....|
-00000150  ca ac 13 74 59 b6 0d 03  14 f2 fa b7 05 c4 2f da  |...tY........./.|
-00000160  11 65 a4 89 06 c6 fd 2b  10 3c 13 3d 92 d5 6a 1c  |.e.....+.<.=..j.|
-00000170  c5 01 10 b5 1a 3d a0 a5  ea ef 11 74 8b 68 24 20  |.....=.....t.h$ |
-00000180  04 58 68 e4 e3 69 b7 12  03 f1 4c dd 78 65 04 58  |.Xh..i....L.xe.X|
-00000190  d9 85 45 39 d2 74 18 f7  5c b4 59 fc 08 fb e0 49  |..E9.t..\.Y....I|
-000001a0  c6 73 e0 0d 18 05 6a 84  95 03 11 ad 73 1d 45 d3  |.s....j.....s.E.|
-000001b0  d7 66 c9 14 14 f4 ed 39  a6 b2 bd 81 ac 23 c0 d9  |.f.....9.....#..|
-000001c0  ba 6a 82 16 75 2f c1 31  4f 83 25 ce 87 fb 23 97  |.j..u/.1O.%...#.|
-000001d0  a0 0d 7c c8 2d 35 ce a6  e8 76 65 cb 72 cc 95 fc  |..|.-5...ve.r...|
-000001e0  8c 65 eb f7 74 7f a6 fc  1e 03 05 cd dc 56 8d 3c  |.e..t........V.<|
-000001f0  09 0b 74 48 24 72 19 07  c0 c4 a3 32 28 15 33 45  |..tH$r.....2(.3E|
-00000200  ef c6 02 f2 8d bf 39 a9  b9 41 bd 99 77 be 36 67  |......9..A..w.6g|
-00000210  0e eb 62 2b fa cd c9 6e  b8 59 d8 f9 2b dd 09 1e  |..b+...n.Y..+...|
-00000220  4c 4a 90 e5 d4 4c 54 10  b9 f1 e3 5a 88 4b 3f 30  |LJ...LT....Z.K?0|
-00000230  c9 7c d5 be e5 b0 44 4f  bb 41 7a 83 e2 47 0c 73  |.|....DO.Az..G.s|
-00000240  28 b9 f2 c0 6c 28 0c 3c  3a cd 34 92 5c 13 f8 15  |(...l(.<:.4.\...|
-00000250  88 5b 02 fa 65 fd 1c b9  c0 cc 78 17 37 cc 53 50  |.[..e.....x.7.SP|
-00000260  0f 53 5e a0 fa 08 48 93  c2 4e 7d c1 f9 bb f7 6a  |.S^...H..N}....j|
-00000270  e0 0e 8b 14 1a 64 60 b6  67 3a 07 68 13 20 e1 8a  |.....d`.g:.h. ..|
-00000280  f2 7b 0d 25 c6 11 2f 9e  17 03 03 00 1e 1e a5 9c  |.{.%../.........|
-00000290  f5 56 23 e2 91 d8 e1 fd  da 88 04 24 b5 66 79 06  |.V#........$.fy.|
-000002a0  b2 3d e8 95 60 e1 86 2d  34 f4 c8 17 03 03 00 13  |.=..`..-4.......|
-000002b0  2a c7 60 04 0d 2f b5 d7  d2 c2 f9 15 bf 26 d7 84  |*.`../.......&..|
-000002c0  05 98 ee                                          |...|
+00000000  17 03 03 02 83 ce c4 10  39 1a fe 62 a2 ff 27 6d  |........9..b..'m|
+00000010  b7 e3 1d d6 8e b8 a2 7e  f5 30 87 35 16 41 fb 04  |.......~.0.5.A..|
+00000020  3c 79 9e 02 9b 06 4c a7  ba 01 5b cf 94 bc c8 08  |.|
+00000050  58 7d fe c1 e3 78 79 31  48 d2 74 c0 8d 17 97 6f  |X}...xy1H.t....o|
+00000060  30 bb 8a 2c 8c d4 76 3d  3f f0 20 24 3d 5a 21 0c  |0..,..v=?. $=Z!.|
+00000070  37 7b 14 45 e6 69 db ed  52 50 a0 77 e9 a2 84 59  |7{.E.i..RP.w...Y|
+00000080  0c 96 c1 ad 48 ed 8d 9f  00 4d f2 15 86 71 c0 fa  |....H....M...q..|
+00000090  14 b9 77 cb 9f 04 d9 1b  be da 68 8e 31 8f 25 14  |..w.......h.1.%.|
+000000a0  f5 43 bd e5 6e c5 10 ab  f7 68 22 7f c2 ba 5c a6  |.C..n....h"...\.|
+000000b0  88 31 c0 a5 fb 63 05 95  52 b3 04 94 14 fe eb 0c  |.1...c..R.......|
+000000c0  53 a0 c2 bf ae 58 e3 f9  84 22 6b ca 95 33 12 80  |S....X..."k..3..|
+000000d0  09 e2 97 b0 2b 4b ed fa  34 e1 5a b1 de 52 b1 2c  |....+K..4.Z..R.,|
+000000e0  a0 aa 11 d6 fa 07 e1 41  ed 36 9f 9a 1a 56 18 b0  |.......A.6...V..|
+000000f0  ef e7 85 dc 5b 53 23 56  c2 ac 34 64 c8 9d 4b 49  |....[S#V..4d..KI|
+00000100  6d 29 7e 4b 73 4f 0b 8e  30 86 87 ea cf 1c dd 62  |m)~KsO..0......b|
+00000110  c0 a4 96 aa fe 41 e7 25  94 8e 08 b5 4d 42 26 d3  |.....A.%....MB&.|
+00000120  ba 84 98 bf 27 2b d5 3d  37 b9 b1 b5 24 33 e3 4d  |....'+.=7...$3.M|
+00000130  3f 05 38 54 fe 2c 15 63  20 2e 70 c0 c6 da 0e 89  |?.8T.,.c .p.....|
+00000140  b6 99 07 db e3 7c 3e 58  d0 a3 2b 50 c4 f3 21 92  |.....|>X..+P..!.|
+00000150  62 e0 e9 b5 d4 7a 6b 23  a2 05 ef 9c f5 f5 05 57  |b....zk#.......W|
+00000160  cd d4 4d 0a 2f 17 ca ac  fc 9d 7e 60 ec 3c 80 8c  |..M./.....~`.<..|
+00000170  1f 99 da b7 f6 14 7a e1  86 76 50 8d f8 6b 92 24  |......z..vP..k.$|
+00000180  f2 b7 82 fa 3c 9b 14 af  0f 37 40 ae 7f 10 f5 0a  |....<....7@.....|
+00000190  f2 0f 0f bd 01 b7 0a f7  b6 d0 7f cf bf e6 67 55  |..............gU|
+000001a0  cc 36 af a6 d8 c4 ca 80  c7 af 35 ff 6e 83 56 30  |.6........5.n.V0|
+000001b0  62 26 49 bb 1a 04 8b 39  10 7b 0f 09 19 2b 0f 95  |b&I....9.{...+..|
+000001c0  08 9d c8 85 3b 5d 8c 97  16 ae cd 92 00 d5 3e 50  |....;]........>P|
+000001d0  54 66 85 8f 42 9b 60 3d  f8 99 ca c7 07 3b 51 18  |Tf..B.`=.....;Q.|
+000001e0  d5 20 37 57 35 0a d8 c6  13 0f 48 94 8f 50 7d 0e  |. 7W5.....H..P}.|
+000001f0  5a f0 98 b2 5d 5f 46 fb  ba 85 c8 4f ba 02 19 86  |Z...]_F....O....|
+00000200  0b ef 4a 04 49 1f 06 cd  be dc d5 32 74 14 d8 60  |..J.I......2t..`|
+00000210  17 a5 b5 a2 70 8e b1 75  29 bc e0 02 e0 a2 1c 7b  |....p..u)......{|
+00000220  58 cd 96 69 84 0f 95 7b  78 3e 09 72 a6 e0 50 7e  |X..i...{x>.r..P~|
+00000230  76 b0 7b 44 11 9b b8 7e  7d 09 49 91 75 5b 9b 6f  |v.{D...~}.I.u[.o|
+00000240  42 a4 e6 54 4d c6 21 65  c4 64 7d c6 29 74 13 8d  |B..TM.!e.d}.)t..|
+00000250  69 5f 20 8c f1 88 e8 1e  2d c3 13 d5 f5 52 70 24  |i_ .....-....Rp$|
+00000260  de ec 64 c7 00 3f 57 e2  3f c4 23 fe e9 65 e6 d9  |..d..?W.?.#..e..|
+00000270  92 ae f0 2f 05 4d 01 72  be 0d 7d c0 f4 30 ac 69  |.../.M.r..}..0.i|
+00000280  3c 7c c1 72 c1 b7 c4 c9  17 03 03 00 1e 73 8f 48  |<|.r.........s.H|
+00000290  cf 34 35 31 9b 63 59 59  1b 23 e1 6b b2 3a 0f df  |.451.cYY.#.k.:..|
+000002a0  21 69 8e 73 1a 61 09 5b  82 c7 78 17 03 03 00 13  |!i.s.a.[..x.....|
+000002b0  4f a0 ab 25 3f a4 85 9e  78 58 69 d2 2c c3 b6 df  |O..%?...xXi.,...|
+000002c0  32 4a 7f                                          |2J.|
diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven
index 7a06770a57889b..b839c9587945c5 100644
--- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven
+++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven
@@ -1,105 +1,103 @@
 >>> Flow 1 (client to server)
-00000000  16 03 01 00 ca 01 00 00  c6 03 03 00 69 af 00 d0  |............i...|
-00000010  54 e8 0e 25 4c 62 db 87  e1 af 15 9e cf 14 ac b6  |T..%Lb..........|
-00000020  ce 8c 5a 65 99 f3 c0 48  2e b6 00 20 c4 bf 7a 0b  |..Ze...H... ..z.|
-00000030  d8 da 4f 37 b8 12 7c ff  2e 1e ac 80 d4 32 77 0f  |..O7..|......2w.|
-00000040  92 8c b4 76 53 57 ba 7d  bb 15 78 c8 00 04 13 01  |...vSW.}..x.....|
+00000000  16 03 01 00 ca 01 00 00  c6 03 03 4a ea 7e 77 82  |...........J.~w.|
+00000010  17 37 46 db 49 14 d2 41  e4 14 b0 46 20 9d 50 45  |.7F.I..A...F .PE|
+00000020  d1 75 08 82 2b 8d bc 9a  75 e3 71 20 ce 77 9a 79  |.u..+...u.q .w.y|
+00000030  98 24 bc 15 be ac 30 fe  66 35 ab 51 be bd b4 fa  |.$....0.f5.Q....|
+00000040  6f 53 1f e9 5f 54 58 75  ce 94 f9 47 00 04 13 01  |oS.._TXu...G....|
 00000050  00 ff 01 00 00 79 00 0b  00 04 03 00 01 02 00 0a  |.....y..........|
 00000060  00 0c 00 0a 00 1d 00 17  00 1e 00 19 00 18 00 16  |................|
 00000070  00 00 00 17 00 00 00 0d  00 1e 00 1c 04 03 05 03  |................|
 00000080  06 03 08 07 08 08 08 09  08 0a 08 0b 08 04 08 05  |................|
 00000090  08 06 04 01 05 01 06 01  00 2b 00 03 02 03 04 00  |.........+......|
-000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 30  |-.....3.&.$... 0|
-000000b0  a0 2a f8 e2 67 08 84 a8  c9 fc f8 de 0e fb 3c 0c  |.*..g.........<.|
-000000c0  59 10 2d 50 e9 cc d4 32  5c 86 e2 6e 0d ba 03     |Y.-P...2\..n...|
+000000a0  2d 00 02 01 01 00 33 00  26 00 24 00 1d 00 20 e0  |-.....3.&.$... .|
+000000b0  64 7e 58 b6 e7 32 fc c9  d6 3e f7 e0 f5 6a 9c 3a  |d~X..2...>...j.:|
+000000c0  e6 8f 83 d7 1c 27 62 72  71 06 71 de 49 96 05     |.....'brq.q.I..|
 >>> Flow 2 (server to client)
 00000000  16 03 03 00 7a 02 00 00  76 03 03 00 00 00 00 00  |....z...v.......|
 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000020  00 00 00 00 00 00 00 00  00 00 00 20 c4 bf 7a 0b  |........... ..z.|
-00000030  d8 da 4f 37 b8 12 7c ff  2e 1e ac 80 d4 32 77 0f  |..O7..|......2w.|
-00000040  92 8c b4 76 53 57 ba 7d  bb 15 78 c8 13 01 00 00  |...vSW.}..x.....|
+00000020  00 00 00 00 00 00 00 00  00 00 00 20 ce 77 9a 79  |........... .w.y|
+00000030  98 24 bc 15 be ac 30 fe  66 35 ab 51 be bd b4 fa  |.$....0.f5.Q....|
+00000040  6f 53 1f e9 5f 54 58 75  ce 94 f9 47 13 01 00 00  |oS.._TXu...G....|
 00000050  2e 00 2b 00 02 03 04 00  33 00 24 00 1d 00 20 2f  |..+.....3.$... /|
 00000060  e5 7d a3 47 cd 62 43 15  28 da ac 5f bb 29 07 30  |.}.G.bC.(.._.).0|
 00000070  ff f6 84 af c4 cf c2 ed  90 99 5f 58 cb 3b 74 14  |.........._X.;t.|
-00000080  03 03 00 01 01 17 03 03  00 17 47 a8 92 ce cd bb  |..........G.....|
-00000090  b5 b2 f6 47 50 c3 e7 c4  44 59 20 07 13 9a ca 98  |...GP...DY .....|
-000000a0  f5 17 03 03 00 52 b6 9d  37 b2 ed bf 53 10 e2 28  |.....R..7...S..(|
-000000b0  09 25 e5 f1 f8 6d 10 99  f8 b0 b8 1d cd 5c 82 ff  |.%...m.......\..|
-000000c0  de fd 9d 8e 89 94 2e 7a  7f ed 30 80 7e f0 e5 ef  |.......z..0.~...|
-000000d0  13 06 7b cf 8f 91 c9 38  e0 77 52 80 0d 74 a2 28  |..{....8.wR..t.(|
-000000e0  a7 73 cd 06 df c4 7e 04  ad 6e e3 44 04 86 98 95  |.s....~..n.D....|
-000000f0  b7 2d 76 99 3e 8b cd 7c  17 03 03 02 6d cb e5 77  |.-v.>..|....m..w|
-00000100  58 3e c2 74 44 db 85 f8  54 12 02 89 8d 2b 8d 24  |X>.tD...T....+.$|
-00000110  2a c0 db 71 25 b8 23 a1  86 1a 09 66 8e 60 b9 58  |*..q%.#....f.`.X|
-00000120  40 0f 72 34 95 e2 6b 7c  76 8a 85 e5 dd cd be 0a  |@.r4..k|v.......|
-00000130  1f a3 13 42 aa 58 d7 95  0a 69 fc 60 5a 4d 17 db  |...B.X...i.`ZM..|
-00000140  19 59 d3 86 04 3e c2 1b  93 76 68 27 53 ae 07 af  |.Y...>...vh'S...|
-00000150  47 4e e6 03 b8 fe 8e c5  06 f1 84 54 0c e5 24 be  |GN.........T..$.|
-00000160  83 43 1f da 1e 3e 7e a3  2f 2f 4d bc cd e5 a5 b5  |.C...>~.//M.....|
-00000170  5d 66 e1 2a 9b 1e 76 6c  be e7 9d f7 ed c5 1b e9  |]f.*..vl........|
-00000180  91 39 18 30 22 b5 d8 71  66 4d 62 b8 6f 94 7f 5f  |.9.0"..qfMb.o.._|
-00000190  84 77 a2 b5 79 02 a1 44  6a 5c d2 39 c2 95 d6 8e  |.w..y..Dj\.9....|
-000001a0  49 36 91 97 2e 02 59 47  e8 fa 78 b9 a7 0e 41 f2  |I6....YG..x...A.|
-000001b0  df 92 44 7b 59 8f 9c e9  c8 1b 0a 15 cf 1a fe 5a  |..D{Y..........Z|
-000001c0  b2 5a 9d 9c b2 0b 1e 48  03 a9 2b 73 df 9f dd b2  |.Z.....H..+s....|
-000001d0  30 d1 ba bd 46 e6 50 30  ed e3 c5 f7 d8 96 d5 cc  |0...F.P0........|
-000001e0  d2 3a 39 3b f0 a1 f2 8e  29 c4 be e9 ee af cb 7b  |.:9;....)......{|
-000001f0  f6 7d c3 be 4e 20 6e 63  21 50 d5 34 9a b4 9c 7f  |.}..N nc!P.4....|
-00000200  95 22 15 e3 ad 12 c8 6a  9c 68 a3 c1 35 c1 e1 fa  |.".....j.h..5...|
-00000210  ce 15 ef 12 b5 50 5b d3  56 8a 24 b0 61 ca 67 1d  |.....P[.V.$.a.g.|
-00000220  60 12 b3 4b 42 6a 3d ba  ef 80 b1 b9 74 cf ba e0  |`..KBj=.....t...|
-00000230  95 5f 1a b9 c6 24 d7 c5  ec 96 3f 6c e8 13 39 66  |._...$....?l..9f|
-00000240  da e6 49 39 dc ca bc 2a  50 10 cf 51 fe d0 eb 80  |..I9...*P..Q....|
-00000250  9c 21 dc 9d ae 10 31 d6  9c 9b ac 3e d6 84 36 e6  |.!....1....>..6.|
-00000260  76 a1 d2 86 2a a0 2b d8  91 ba c3 f0 17 f7 7a 69  |v...*.+.......zi|
-00000270  0d d3 14 6f ca ba 33 d2  d0 2e 85 a9 d7 dc d2 4a  |...o..3........J|
-00000280  dc bf 88 68 73 4f b1 35  e0 36 3b ed bd f6 37 0b  |...hsO.5.6;...7.|
-00000290  07 32 a1 96 81 29 63 e1  38 4d 52 7c 5a d0 4c 6c  |.2...)c.8MR|Z.Ll|
-000002a0  dd 65 83 75 1d 9e bc e4  c8 e7 75 13 5f 71 11 87  |.e.u......u._q..|
-000002b0  ea 4b f3 ee d2 fd 38 2a  88 a6 35 e4 a8 63 77 0e  |.K....8*..5..cw.|
-000002c0  5f 57 ac a6 a2 e7 43 3c  79 1a 2d c9 1d 5f 65 22  |_W....C.K.5.|
-000003c0  29 1d 3e ba a0 91 22 0a  8a aa a3 f8 9b eb 77 fe  |).>...".......w.|
-000003d0  19 ac 2e a7 29 ab 8f 61  91 af 09 b1 3b b3 4b 69  |....)..a....;.Ki|
-000003e0  e6 96 a3 05 46 db 28 9b  1d d0 79 71 3d 93 4e 66  |....F.(...yq=.Nf|
-000003f0  5d f4 22 38 91 a1 30 c5  c3 b7 72 fa e6 91 d8 a4  |]."8..0...r.....|
-00000400  e9 a0 47 cc 5a 87 5e 60  17 03 03 00 35 ce b7 6e  |..G.Z.^`....5..n|
-00000410  2c 11 dc d4 b8 e1 a4 4b  d8 d6 09 1e fe e3 d3 d3  |,......K........|
-00000420  52 be fc cc af 5d 73 45  db 1e 05 b6 b1 38 59 65  |R....]sE.....8Ye|
-00000430  df 72 6d 7b af b5 7a 3d  e1 8a 27 44 6e 72 25 04  |.rm{..z=..'Dnr%.|
-00000440  7c 61                                             ||a|
+00000080  03 03 00 01 01 17 03 03  00 17 d0 8f 0a 7e 6c 33  |.............~l3|
+00000090  0b be 2a 24 0e fc af df  6e 7d ad 22 28 82 77 60  |..*$....n}."(.w`|
+000000a0  3d 17 03 03 00 3e 8f 87  8f f1 5a f6 6f eb eb d9  |=....>....Z.o...|
+000000b0  da aa fc 3c 6d ac 73 94  a3 13 5f fe 01 bb 75 eb  |........|
+000001f0  50 76 d6 79 39 e8 25 bc  3b d9 5a a4 a8 5e 08 6a  |Pv.y9.%.;.Z..^.j|
+00000200  1c 48 b1 11 f0 d9 b9 48  39 e1 23 db 41 8c bf bd  |.H.....H9.#.A...|
+00000210  20 27 7b 0c 89 10 1f b0  ae 70 18 9a 7f f2 b4 1d  | '{......p......|
+00000220  20 cd 6d 80 38 00 a4 33  de 22 ef f6 42 52 c7 66  | .m.8..3."..BR.f|
+00000230  83 4a 67 18 6b a6 38 27  d3 40 cf a2 a9 3e 58 06  |.Jg.k.8'.@...>X.|
+00000240  91 a7 36 08 29 10 4d 8f  1b f9 7c 5a 17 05 81 b9  |..6.).M...|Z....|
+00000250  4b 60 48 40 49 73 63 8a  ef 9f f2 9e 80 85 57 fa  |K`H@Isc.......W.|
+00000260  0a b8 72 83 f3 26 fa 07  ae d2 47 99 b5 a6 5d c5  |..r..&....G...].|
+00000270  1e b5 fc ea 0f 17 f8 ba  e2 5c 7d 59 70 53 2e 23  |.........\}YpS.#|
+00000280  f7 55 75 cb de 82 dc ca  b1 bf 3f 5f 7d 7d 92 3c  |.Uu.......?_}}.<|
+00000290  29 29 64 30 74 0a 01 0b  c0 95 db 45 fe 20 be 38  |))d0t......E. .8|
+000002a0  c5 87 b7 e4 a9 93 63 67  6b 9a 2f 24 9e 62 8f 1d  |......cgk./$.b..|
+000002b0  bd 8c 4a d4 b0 0f 95 2f  56 b2 1c e8 5a 58 81 2e  |..J..../V...ZX..|
+000002c0  b5 b5 b5 f2 1b 7f 6c 39  58 75 51 dc 83 2a 59 0b  |......l9XuQ..*Y.|
+000002d0  78 5e 22 7e af ee 59 af  b9 8f dc 65 97 af a5 b5  |x^"~..Y....e....|
+000002e0  b8 50 af 35 51 30 e7 0a  75 e2 d0 33 e2 fb f4 b1  |.P.5Q0..u..3....|
+000002f0  99 cd 5f 72 6b a9 f8 85  a1 a5 19 7e 2b 91 01 19  |.._rk......~+...|
+00000300  09 dd 88 6e a7 d6 54 57  cd ef d0 97 6a 68 d9 6e  |...n..TW....jh.n|
+00000310  52 38 ef a5 fa 84 63 70  f0 6d 64 ec 66 1a c9 b5  |R8....cp.md.f...|
+00000320  78 ba 17 74 f4 b4 2b a2  fe 9a 7f 38 b8 5e 8b 56  |x..t..+....8.^.V|
+00000330  a6 7b 2c 92 7f db 58 c8  fa f9 2d 6b 00 25 dc 0a  |.{,...X...-k.%..|
+00000340  aa 13 e8 40 f3 fd 47 23  f6 bf 1c 30 fc 91 18 95  |...@..G#...0....|
+00000350  ac a8 82 3d f5 ef 17 03  03 00 99 7e 30 4f f1 00  |...=.......~0O..|
+00000360  1e dd eb c6 54 d2 f5 f7  21 aa 6b b0 83 0c fa 8b  |....T...!.k.....|
+00000370  12 af ac 15 3e 54 b6 1c  85 9b 0c 80 02 d8 e3 5f  |....>T........._|
+00000380  36 57 64 fe 7a b8 31 d0  aa 59 f1 e6 af e0 27 c5  |6Wd.z.1..Y....'.|
+00000390  b8 d8 2f ab e0 cc c3 02  18 73 30 36 b5 2a 0d 12  |../......s06.*..|
+000003a0  a4 45 e6 c3 79 9f 54 cb  51 61 1a b8 aa 87 45 43  |.E..y.T.Qa....EC|
+000003b0  8e 93 58 66 f2 97 cb 3b  44 df ae 93 17 de 22 99  |..Xf...;D.....".|
+000003c0  3c b4 9d 21 a6 db 03 ce  7b fb 67 b9 6e fb ab 50  |<..!....{.g.n..P|
+000003d0  f8 33 9f 20 a0 fb e9 54  bb 62 16 19 d6 df 8c fe  |.3. ...T.b......|
+000003e0  3d 63 42 7c b0 72 2b 0d  87 1e f7 7d bb 59 ba f5  |=cB|.r+....}.Y..|
+000003f0  d6 e8 f3 57 17 03 03 00  35 9e 6f 39 92 2e 32 10  |...W....5.o9..2.|
+00000400  03 cd f0 28 2c 1a 32 77  19 c8 39 38 60 0c 28 b7  |...(,.2w..98`.(.|
+00000410  8c 3a d8 50 a1 44 e4 d6  c5 64 59 88 2d a4 23 c9  |.:.P.D...dY.-.#.|
+00000420  26 d1 96 0c c9 5d da 84  3e 8a 7d fe 80 77        |&....]..>.}..w|
 >>> Flow 3 (client to server)
-00000000  14 03 03 00 01 01 17 03  03 00 19 01 ab 91 41 25  |..............A%|
-00000010  d3 52 97 b2 f8 4e 57 9d  c5 d3 7d 34 c4 c3 44 93  |.R...NW...}4..D.|
-00000020  79 a5 0c fe 17 03 03 00  35 ba 56 09 d8 9d 73 5e  |y.......5.V...s^|
-00000030  f4 f4 03 4d bf f7 e4 ab  cc 83 26 28 cc 68 78 91  |...M......&(.hx.|
-00000040  9f 6f f6 dc d5 34 e5 a5  e6 86 11 b3 71 89 70 25  |.o...4......q.p%|
-00000050  8c 83 79 b7 c8 56 92 1d  98 c7 35 cd bb 56        |..y..V....5..V|
+00000000  14 03 03 00 01 01 17 03  03 00 19 87 49 99 a6 d9  |............I...|
+00000010  ed cd f7 7a 75 14 e1 26  41 d2 6e 5c 79 a6 be 7c  |...zu..&A.n\y..||
+00000020  5d 9d 44 36 17 03 03 00  35 1b 51 a9 b1 ce 11 ed  |].D6....5.Q.....|
+00000030  95 47 34 b9 3d 2f 6e 27  b2 e5 31 54 7f e3 8a 11  |.G4.=/n'..1T....|
+00000040  fd 54 75 2c b6 8a 56 25  00 29 a7 5f 7a 1e 16 be  |.Tu,..V%.)._z...|
+00000050  16 e3 86 3a 72 84 0e bc  40 ef fd ad 18 33        |...:r...@....3|
 >>> Flow 4 (server to client)
-00000000  17 03 03 00 8b eb fd 9e  19 36 7f 54 7f 9f 5a 6b  |.........6.T..Zk|
-00000010  31 0e e8 ca f3 40 7d 74  0d 82 6f 97 41 fb 15 52  |1....@}t..o.A..R|
-00000020  36 00 50 c3 c5 36 ea e3  8f ca 02 b1 de ed 61 8e  |6.P..6........a.|
-00000030  60 0a d8 cf 0a 7c 47 60  87 3f fa 00 6f 74 a8 42  |`....|G`.?..ot.B|
-00000040  c1 8d df f7 4d 7c ac c0  52 7c c9 21 5c 45 32 3f  |....M|..R|.!\E2?|
-00000050  42 0d 75 64 76 93 18 29  a1 50 06 36 94 bb 1e 52  |B.udv..).P.6...R|
-00000060  31 5b b7 32 9a b1 9f 59  30 8a da ff 93 4f c1 b3  |1[.2...Y0....O..|
-00000070  e9 8d f2 ec 4a 7b 01 51  5e a2 9b ea 8d a8 53 bd  |....J{.Q^.....S.|
-00000080  db 94 88 73 3b 9f da 77  a8 de 11 55 7b 06 0f c6  |...s;..w...U{...|
-00000090  17 03 03 00 1e 1b 76 21  ea fd a4 47 6e ec 6e 26  |......v!...Gn.n&|
-000000a0  00 3e fc 2f 87 8f 4e ee  08 58 e7 cc 46 aa b7 8c  |.>./..N..X..F...|
-000000b0  c1 5d dd 17 03 03 00 13  dd ed 88 b0 f5 e8 17 f1  |.]..............|
-000000c0  66 85 c4 f5 6b 47 7d 5f  19 21 7f                 |f...kG}_.!.|
+00000000  17 03 03 00 8b 69 2e 81  c4 4d 43 a6 1f 96 b7 8e  |.....i...MC.....|
+00000010  87 4a 9b be 48 3c 31 18  98 f4 8c 04 24 b2 52 96  |.J..H<1.....$.R.|
+00000020  04 b5 12 7c 54 37 83 6d  51 42 c6 52 f4 a5 bc d3  |...|T7.mQB.R....|
+00000030  d1 c8 29 ab 4f e4 02 da  74 ec 8e 13 ad 03 f3 e0  |..).O...t.......|
+00000040  7f 44 58 6b c7 28 a5 6a  75 30 b8 b1 31 38 fe ba  |.DXk.(.ju0..18..|
+00000050  e7 27 ae b3 e7 cb 5e 78  24 82 03 61 ba ae dd 4c  |.'....^x$..a...L|
+00000060  c6 7b f3 45 cf 6f a8 dc  7d 5d 73 65 db ae dc 10  |.{.E.o..}]se....|
+00000070  ff 32 dc 4c b4 5e dc ce  4c 34 37 83 a0 0c d5 20  |.2.L.^..L47.... |
+00000080  f1 f6 81 42 bc 63 65 47  80 d0 d6 f3 08 aa e2 58  |...B.ceG.......X|
+00000090  17 03 03 00 1e 85 84 f3  e4 0f a8 24 c0 fe fa 2c  |...........$...,|
+000000a0  8b 60 52 32 73 2b 95 e9  37 3d 1c bd 2f ee ff e2  |.`R2s+..7=../...|
+000000b0  70 13 df 17 03 03 00 13  65 2b 11 5f 50 7c 11 eb  |p.......e+._P|..|
+000000c0  3b 06 75 23 28 13 ca 4a  b5 fb dc                 |;.u#(..J...|
diff --git a/src/crypto/tls/ticket.go b/src/crypto/tls/ticket.go
index c56898c6f79813..dbbcef763710a0 100644
--- a/src/crypto/tls/ticket.go
+++ b/src/crypto/tls/ticket.go
@@ -84,14 +84,15 @@ type SessionState struct {
 	// createdAt is the generation time of the secret on the sever (which for
 	// TLS 1.0–1.2 might be earlier than the current session) and the time at
 	// which the ticket was received on the client.
-	createdAt        uint64 // seconds since UNIX epoch
-	secret           []byte // master secret for TLS 1.2, or the PSK for TLS 1.3
-	extMasterSecret  bool
-	peerCertificates []*x509.Certificate
-	ocspResponse     []byte
-	scts             [][]byte
-	verifiedChains   [][]*x509.Certificate
-	alpnProtocol     string // only set if EarlyData is true
+	createdAt         uint64 // seconds since UNIX epoch
+	secret            []byte // master secret for TLS 1.2, or the PSK for TLS 1.3
+	extMasterSecret   bool
+	peerCertificates  []*x509.Certificate
+	activeCertHandles []*activeCert
+	ocspResponse      []byte
+	scts              [][]byte
+	verifiedChains    [][]*x509.Certificate
+	alpnProtocol      string // only set if EarlyData is true
 
 	// Client-side TLS 1.3-only fields.
 	useBy  uint64 // seconds since UNIX epoch
@@ -238,7 +239,8 @@ func ParseSessionState(data []byte) (*SessionState, error) {
 		if err != nil {
 			return nil, err
 		}
-		ss.peerCertificates = append(ss.peerCertificates, c)
+		ss.activeCertHandles = append(ss.activeCertHandles, c)
+		ss.peerCertificates = append(ss.peerCertificates, c.cert)
 	}
 	if ss.isClient && len(ss.peerCertificates) == 0 {
 		return nil, errors.New("tls: no server certificates in client session")
@@ -268,7 +270,8 @@ func ParseSessionState(data []byte) (*SessionState, error) {
 			if err != nil {
 				return nil, err
 			}
-			chain = append(chain, c)
+			ss.activeCertHandles = append(ss.activeCertHandles, c)
+			chain = append(chain, c.cert)
 		}
 		ss.verifiedChains = append(ss.verifiedChains, chain)
 	}
@@ -297,17 +300,18 @@ func ParseSessionState(data []byte) (*SessionState, error) {
 // from the current connection.
 func (c *Conn) sessionState() *SessionState {
 	return &SessionState{
-		version:          c.vers,
-		cipherSuite:      c.cipherSuite,
-		createdAt:        uint64(c.config.time().Unix()),
-		alpnProtocol:     c.clientProtocol,
-		peerCertificates: c.peerCertificates,
-		ocspResponse:     c.ocspResponse,
-		scts:             c.scts,
-		isClient:         c.isClient,
-		extMasterSecret:  c.extMasterSecret,
-		verifiedChains:   c.verifiedChains,
-		curveID:          c.curveID,
+		version:           c.vers,
+		cipherSuite:       c.cipherSuite,
+		createdAt:         uint64(c.config.time().Unix()),
+		alpnProtocol:      c.clientProtocol,
+		peerCertificates:  c.peerCertificates,
+		activeCertHandles: c.activeCertHandles,
+		ocspResponse:      c.ocspResponse,
+		scts:              c.scts,
+		isClient:          c.isClient,
+		extMasterSecret:   c.extMasterSecret,
+		verifiedChains:    c.verifiedChains,
+		curveID:           c.curveID,
 	}
 }
 
diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go
index bfcc62ccfb8ba0..9c08600f8f0a57 100644
--- a/src/crypto/tls/tls_test.go
+++ b/src/crypto/tls/tls_test.go
@@ -811,7 +811,7 @@ func TestWarningAlertFlood(t *testing.T) {
 }
 
 func TestCloneFuncFields(t *testing.T) {
-	const expectedCount = 10
+	const expectedCount = 9
 	called := 0
 
 	c1 := Config{
@@ -851,10 +851,6 @@ func TestCloneFuncFields(t *testing.T) {
 			called |= 1 << 8
 			return nil
 		},
-		GetEncryptedClientHelloKeys: func(*ClientHelloInfo) ([]EncryptedClientHelloKey, error) {
-			called |= 1 << 9
-			return nil, nil
-		},
 	}
 
 	c2 := c1.Clone()
@@ -868,7 +864,6 @@ func TestCloneFuncFields(t *testing.T) {
 	c2.UnwrapSession(nil, ConnectionState{})
 	c2.WrapSession(ConnectionState{}, nil)
 	c2.EncryptedClientHelloRejectionVerify(ConnectionState{})
-	c2.GetEncryptedClientHelloKeys(nil)
 
 	if called != (1< math.MaxInt {
+		if !der.ReadASN1Integer(&maxPathLen) {
 			return false, 0, errors.New("x509: invalid basic constraints")
 		}
-		maxPathLen = int(mpl)
 	}
 
+	// TODO: map out.MaxPathLen to 0 if it has the -1 default value? (Issue 19285)
 	return isCA, maxPathLen, nil
 }
 
diff --git a/src/crypto/x509/parser_test.go b/src/crypto/x509/parser_test.go
index 3b9d9aed826b01..e7c1d87bfa8efe 100644
--- a/src/crypto/x509/parser_test.go
+++ b/src/crypto/x509/parser_test.go
@@ -208,46 +208,3 @@ func TestParsePolicies(t *testing.T) {
 		})
 	}
 }
-
-func TestParseCertificateNegativeMaxPathLength(t *testing.T) {
-	certs := []string{
-		// Certificate with MaxPathLen set to -1.
-		`
------BEGIN CERTIFICATE-----
-MIIByTCCATKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRURVNU
-MB4XDTcwMDEwMTAwMTY0MFoXDTcwMDEwMjAzNDY0MFowDzENMAsGA1UEAxMEVEVT
-VDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsaHglFuSicTT8TKfipgsSi3N
-Wb/TcvuAhanFF1VGB+vS95kO7yFqyfRgX3GgOwT0KlJVsVjPjghEGR9RGTSLqkTD
-UFbiBgm8+VEPMOrUtIHIHXhl+ye44AkOEStxfz7gjN/EAS2h8ffPKhvDTHOlShKw
-Y3LQlxR0LdeJXq3eSqUCAwEAAaM1MDMwEgYDVR0TAQH/BAgwBgEB/wIB/zAdBgNV
-HQ4EFgQUrbrk0tqQAEsce8uYifP0BIVhuFAwDQYJKoZIhvcNAQELBQADgYEAIkhV
-ZBj1ThT+eyh50XsoU570NUysTg3Nj/3lbkEolzdcE+wu0CPXvgxLRM6Y62u1ey82
-8d5VQHstzF4dXgc3W+O9UySa+CKdcHx/q7o7seOGXdysT0IJtAY3w66mFkuF7PIn
-y9b7M5t6pmWjb7N0QqGuWeNqi4ZvS8gLKmVEgGY=
------END CERTIFICATE-----
-`,
-		// Certificate with MaxPathLen set to -2.
-		`
------BEGIN CERTIFICATE-----
-MIIByTCCATKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRURVNU
-MB4XDTcwMDEwMTAwMTY0MFoXDTcwMDEwMjAzNDY0MFowDzENMAsGA1UEAxMEVEVT
-VDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsaHglFuSicTT8TKfipgsSi3N
-Wb/TcvuAhanFF1VGB+vS95kO7yFqyfRgX3GgOwT0KlJVsVjPjghEGR9RGTSLqkTD
-UFbiBgm8+VEPMOrUtIHIHXhl+ye44AkOEStxfz7gjN/EAS2h8ffPKhvDTHOlShKw
-Y3LQlxR0LdeJXq3eSqUCAwEAAaM1MDMwEgYDVR0TAQH/BAgwBgEB/wIB/jAdBgNV
-HQ4EFgQUrbrk0tqQAEsce8uYifP0BIVhuFAwDQYJKoZIhvcNAQELBQADgYEAGjIr
-YGQc7Ods+BuKck7p+vpAMONM8SLEuUtKorCP3ecsO51MoA4/niLbgMHaOGNHwzMp
-ajg0zLbY0Dj6Ml0VZ+lS3rjgTEhYXc626eZkoQqgUzL1jhe3S0ZbSxxmHMBKjJFl
-d5l1tRhScKu2NBgm74nYmJxJYgvuTA38wGhRrGU=
------END CERTIFICATE-----
-`,
-	}
-
-	for _, cert := range certs {
-		b, _ := pem.Decode([]byte(cert))
-		_, err := ParseCertificate(b.Bytes)
-		if err == nil || err.Error() != "x509: invalid basic constraints" {
-			t.Errorf(`ParseCertificate() = %v; want = "x509: invalid basic constraints"`, err)
-		}
-	}
-}
diff --git a/src/crypto/x509/verify.go b/src/crypto/x509/verify.go
index 7cc0fb2e3e0385..5fe93c6124a989 100644
--- a/src/crypto/x509/verify.go
+++ b/src/crypto/x509/verify.go
@@ -841,45 +841,31 @@ func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err e
 		}
 	}
 
-	chains = make([][]*Certificate, 0, len(candidateChains))
-
-	var invalidPoliciesChains int
-	for _, candidate := range candidateChains {
-		if !policiesValid(candidate, opts) {
-			invalidPoliciesChains++
-			continue
-		}
-		chains = append(chains, candidate)
-	}
-
-	if len(chains) == 0 {
-		return nil, CertificateInvalidError{c, NoValidChains, "all candidate chains have invalid policies"}
+	if len(opts.KeyUsages) == 0 {
+		opts.KeyUsages = []ExtKeyUsage{ExtKeyUsageServerAuth}
 	}
 
 	for _, eku := range opts.KeyUsages {
 		if eku == ExtKeyUsageAny {
 			// If any key usage is acceptable, no need to check the chain for
 			// key usages.
-			return chains, nil
+			return candidateChains, nil
 		}
 	}
 
-	if len(opts.KeyUsages) == 0 {
-		opts.KeyUsages = []ExtKeyUsage{ExtKeyUsageServerAuth}
-	}
-
-	candidateChains = chains
-	chains = chains[:0]
-
-	var incompatibleKeyUsageChains int
+	chains = make([][]*Certificate, 0, len(candidateChains))
+	var incompatibleKeyUsageChains, invalidPoliciesChains int
 	for _, candidate := range candidateChains {
 		if !checkChainForKeyUsage(candidate, opts.KeyUsages) {
 			incompatibleKeyUsageChains++
 			continue
 		}
+		if !policiesValid(candidate, opts) {
+			invalidPoliciesChains++
+			continue
+		}
 		chains = append(chains, candidate)
 	}
-
 	if len(chains) == 0 {
 		var details []string
 		if incompatibleKeyUsageChains > 0 {
diff --git a/src/crypto/x509/verify_test.go b/src/crypto/x509/verify_test.go
index 7991f49946d587..1175e7d80850d2 100644
--- a/src/crypto/x509/verify_test.go
+++ b/src/crypto/x509/verify_test.go
@@ -3012,39 +3012,3 @@ func TestPoliciesValid(t *testing.T) {
 		})
 	}
 }
-
-func TestInvalidPolicyWithAnyKeyUsage(t *testing.T) {
-	loadTestCert := func(t *testing.T, path string) *Certificate {
-		b, err := os.ReadFile(path)
-		if err != nil {
-			t.Fatal(err)
-		}
-		p, _ := pem.Decode(b)
-		c, err := ParseCertificate(p.Bytes)
-		if err != nil {
-			t.Fatal(err)
-		}
-		return c
-	}
-
-	testOID3 := mustNewOIDFromInts([]uint64{1, 2, 840, 113554, 4, 1, 72585, 2, 3})
-	root, intermediate, leaf := loadTestCert(t, "testdata/policy_root.pem"), loadTestCert(t, "testdata/policy_intermediate_require.pem"), loadTestCert(t, "testdata/policy_leaf.pem")
-
-	expectedErr := "x509: no valid chains built: all candidate chains have invalid policies"
-
-	roots, intermediates := NewCertPool(), NewCertPool()
-	roots.AddCert(root)
-	intermediates.AddCert(intermediate)
-
-	_, err := leaf.Verify(VerifyOptions{
-		Roots:               roots,
-		Intermediates:       intermediates,
-		KeyUsages:           []ExtKeyUsage{ExtKeyUsageAny},
-		CertificatePolicies: []OID{testOID3},
-	})
-	if err == nil {
-		t.Fatal("unexpected success, invalid policy shouldn't be bypassed by passing VerifyOptions.KeyUsages with ExtKeyUsageAny")
-	} else if err.Error() != expectedErr {
-		t.Fatalf("unexpected error, got %q, want %q", err, expectedErr)
-	}
-}
diff --git a/src/crypto/x509/x509.go b/src/crypto/x509/x509.go
index 1f06b4fbc578fe..cbcc582a3ff68a 100644
--- a/src/crypto/x509/x509.go
+++ b/src/crypto/x509/x509.go
@@ -29,7 +29,6 @@ import (
 	"crypto/elliptic"
 	"crypto/rsa"
 	"crypto/sha1"
-	"crypto/sha256"
 	"crypto/x509/pkix"
 	"encoding/asn1"
 	"encoding/pem"
@@ -1569,7 +1568,13 @@ func signingParamsForKey(key crypto.Signer, sigAlgo SignatureAlgorithm) (Signatu
 }
 
 func signTBS(tbs []byte, key crypto.Signer, sigAlg SignatureAlgorithm, rand io.Reader) ([]byte, error) {
+	signed := tbs
 	hashFunc := sigAlg.hashFunc()
+	if hashFunc != 0 {
+		h := hashFunc.New()
+		h.Write(signed)
+		signed = h.Sum(nil)
+	}
 
 	var signerOpts crypto.SignerOpts = hashFunc
 	if sigAlg.isRSAPSS() {
@@ -1579,7 +1584,7 @@ func signTBS(tbs []byte, key crypto.Signer, sigAlg SignatureAlgorithm, rand io.R
 		}
 	}
 
-	signature, err := crypto.SignMessage(key, rand, tbs, signerOpts)
+	signature, err := key.Sign(rand, signed, signerOpts)
 	if err != nil {
 		return nil, err
 	}
@@ -1641,7 +1646,7 @@ var emptyASN1Subject = []byte{0x30, 0}
 //
 // The currently supported key types are *rsa.PublicKey, *ecdsa.PublicKey and
 // ed25519.PublicKey. pub must be a supported key type, and priv must be a
-// crypto.Signer or crypto.MessageSigner with a supported public key.
+// crypto.Signer with a supported public key.
 //
 // The AuthorityKeyId will be taken from the SubjectKeyId of parent, if any,
 // unless the resulting certificate is self-signed. Otherwise the value from
@@ -1691,10 +1696,6 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv
 		return nil, errors.New("x509: serial number must be positive")
 	}
 
-	if template.BasicConstraintsValid && template.MaxPathLen < -1 {
-		return nil, errors.New("x509: invalid MaxPathLen, must be greater or equal to -1")
-	}
-
 	if template.BasicConstraintsValid && !template.IsCA && template.MaxPathLen != -1 && (template.MaxPathLen != 0 || template.MaxPathLenZero) {
 		return nil, errors.New("x509: only CAs are allowed to specify MaxPathLen")
 	}
@@ -1729,22 +1730,12 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv
 
 	subjectKeyId := template.SubjectKeyId
 	if len(subjectKeyId) == 0 && template.IsCA {
-		if x509sha256skid.Value() == "0" {
-			x509sha256skid.IncNonDefault()
-			// SubjectKeyId generated using method 1 in RFC 5280, Section 4.2.1.2:
-			//   (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
-			//   value of the BIT STRING subjectPublicKey (excluding the tag,
-			//   length, and number of unused bits).
-			h := sha1.Sum(publicKeyBytes)
-			subjectKeyId = h[:]
-		} else {
-			// SubjectKeyId generated using method 1 in RFC 7093, Section 2:
-			//    1) The keyIdentifier is composed of the leftmost 160-bits of the
-			//    SHA-256 hash of the value of the BIT STRING subjectPublicKey
-			//    (excluding the tag, length, and number of unused bits).
-			h := sha256.Sum256(publicKeyBytes)
-			subjectKeyId = h[:20]
-		}
+		// SubjectKeyId generated using method 1 in RFC 5280, Section 4.2.1.2:
+		//   (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
+		//   value of the BIT STRING subjectPublicKey (excluding the tag,
+		//   length, and number of unused bits).
+		h := sha1.Sum(publicKeyBytes)
+		subjectKeyId = h[:]
 	}
 
 	// Check that the signer's public key matches the private key, if available.
@@ -1792,8 +1783,6 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv
 	})
 }
 
-var x509sha256skid = godebug.New("x509sha256skid")
-
 // pemCRLPrefix is the magic string that indicates that we have a PEM encoded
 // CRL.
 var pemCRLPrefix = []byte("-----BEGIN X509 CRL")
@@ -2042,10 +2031,10 @@ func parseCSRExtensions(rawAttributes []asn1.RawValue) ([]pkix.Extension, error)
 //   - Attributes (deprecated)
 //
 // priv is the private key to sign the CSR with, and the corresponding public
-// key will be included in the CSR. It must implement crypto.Signer or
-// crypto.MessageSigner and its Public() method must return a *rsa.PublicKey or
-// a *ecdsa.PublicKey or a ed25519.PublicKey. (A *rsa.PrivateKey,
-// *ecdsa.PrivateKey or ed25519.PrivateKey satisfies this.)
+// key will be included in the CSR. It must implement crypto.Signer and its
+// Public() method must return a *rsa.PublicKey or a *ecdsa.PublicKey or a
+// ed25519.PublicKey. (A *rsa.PrivateKey, *ecdsa.PrivateKey or
+// ed25519.PrivateKey satisfies this.)
 //
 // The returned slice is the certificate request in DER encoding.
 func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error) {
@@ -2387,9 +2376,8 @@ type tbsCertificateList struct {
 // CreateRevocationList creates a new X.509 v2 [Certificate] Revocation List,
 // according to RFC 5280, based on template.
 //
-// The CRL is signed by priv which should be a crypto.Signer or
-// crypto.MessageSigner associated with the public key in the issuer
-// certificate.
+// The CRL is signed by priv which should be the private key associated with
+// the public key in the issuer certificate.
 //
 // The issuer may not be nil, and the crlSign bit must be set in [KeyUsage] in
 // order to use it as a CRL issuer.
diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go
index 98f3f7941c8d63..f67f40778b930b 100644
--- a/src/crypto/x509/x509_test.go
+++ b/src/crypto/x509/x509_test.go
@@ -22,7 +22,6 @@ import (
 	"encoding/gob"
 	"encoding/hex"
 	"encoding/pem"
-	"errors"
 	"fmt"
 	"internal/testenv"
 	"io"
@@ -4197,69 +4196,3 @@ func TestRejectCriticalSKI(t *testing.T) {
 		t.Fatalf("ParseCertificate() unexpected error: %v, want: %s", err, expectedErr)
 	}
 }
-
-type messageSigner struct{}
-
-func (ms *messageSigner) Public() crypto.PublicKey { return rsaPrivateKey.Public() }
-
-func (ms *messageSigner) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) (signature []byte, err error) {
-	return nil, errors.New("unimplemented")
-}
-
-func (ms *messageSigner) SignMessage(rand io.Reader, msg []byte, opts crypto.SignerOpts) (signature []byte, err error) {
-	if _, ok := opts.(*rsa.PSSOptions); ok {
-		return nil, errors.New("PSSOptions passed instead of hash")
-	}
-	h := opts.HashFunc().New()
-	h.Write(msg)
-	tbs := h.Sum(nil)
-	return rsa.SignPKCS1v15(rand, rsaPrivateKey, opts.HashFunc(), tbs)
-}
-
-func TestMessageSigner(t *testing.T) {
-	template := Certificate{
-		SignatureAlgorithm:    SHA256WithRSA,
-		SerialNumber:          big.NewInt(1),
-		Subject:               pkix.Name{CommonName: "Cert"},
-		NotBefore:             time.Unix(1000, 0),
-		NotAfter:              time.Unix(100000, 0),
-		BasicConstraintsValid: true,
-		IsCA:                  true,
-	}
-	certDER, err := CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), &messageSigner{})
-	if err != nil {
-		t.Fatalf("CreateCertificate failed: %s", err)
-	}
-	cert, err := ParseCertificate(certDER)
-	if err != nil {
-		t.Fatalf("ParseCertificate failed: %s", err)
-	}
-	if err := cert.CheckSignatureFrom(cert); err != nil {
-		t.Fatalf("CheckSignatureFrom failed: %s", err)
-	}
-}
-
-func TestCreateCertificateNegativeMaxPathLength(t *testing.T) {
-	template := Certificate{
-		SerialNumber:          big.NewInt(1),
-		Subject:               pkix.Name{CommonName: "TEST"},
-		NotBefore:             time.Unix(1000, 0),
-		NotAfter:              time.Unix(100000, 0),
-		BasicConstraintsValid: true,
-		IsCA:                  true,
-
-		// CreateCertificate treats -1 in the same way as: MaxPathLen == 0 && MaxPathLenZero == false.
-		MaxPathLen: -1,
-	}
-
-	_, err := CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey)
-	if err != nil {
-		t.Fatalf("CreateCertificate() unexpected error: %v", err)
-	}
-
-	template.MaxPathLen = -2
-	_, err = CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey)
-	if err == nil || err.Error() != "x509: invalid MaxPathLen, must be greater or equal to -1" {
-		t.Fatalf(`CreateCertificate() = %v; want = "x509: invalid MaxPathLen, must be greater or equal to -1"`, err)
-	}
-}
diff --git a/src/encoding/json/bench_test.go b/src/encoding/json/bench_test.go
index cd55ceed90133c..032114cac14b8e 100644
--- a/src/encoding/json/bench_test.go
+++ b/src/encoding/json/bench_test.go
@@ -8,8 +8,6 @@
 // We benchmark converting between the JSON form
 // and in-memory data structures.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go
index 4e195e0948daa2..3b398c9fc323f5 100644
--- a/src/encoding/json/decode.go
+++ b/src/encoding/json/decode.go
@@ -5,8 +5,6 @@
 // Represents JSON data structure using native Go types: booleans, floats,
 // strings, arrays, and maps.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go
index 5bc3d3c8564139..8aad11b8bfbce2 100644
--- a/src/encoding/json/decode_test.go
+++ b/src/encoding/json/decode_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go
index 1992e7372ecdd6..7b4bfff70050f7 100644
--- a/src/encoding/json/encode.go
+++ b/src/encoding/json/encode.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 // Package json implements encoding and decoding of JSON as defined in
 // RFC 7159. The mapping between JSON and Go values is described
 // in the documentation for the Marshal and Unmarshal functions.
@@ -359,22 +357,25 @@ func typeEncoder(t reflect.Type) encoderFunc {
 	}
 
 	// To deal with recursive types, populate the map with an
-	// indirect func before we build it. If the type is recursive,
-	// the second lookup for the type will return the indirect func.
-	//
-	// This indirect func is only used for recursive types,
-	// and briefly during racing calls to typeEncoder.
-	indirect := sync.OnceValue(func() encoderFunc {
-		return newTypeEncoder(t, true)
-	})
+	// indirect func before we build it. This type waits on the
+	// real func (f) to be ready and then calls it. This indirect
+	// func is only used for recursive types.
+	var (
+		wg sync.WaitGroup
+		f  encoderFunc
+	)
+	wg.Add(1)
 	fi, loaded := encoderCache.LoadOrStore(t, encoderFunc(func(e *encodeState, v reflect.Value, opts encOpts) {
-		indirect()(e, v, opts)
+		wg.Wait()
+		f(e, v, opts)
 	}))
 	if loaded {
 		return fi.(encoderFunc)
 	}
 
-	f := indirect()
+	// Compute the real encoder and replace the indirect func with it.
+	f = newTypeEncoder(t, true)
+	wg.Done()
 	encoderCache.Store(t, f)
 	return f
 }
diff --git a/src/encoding/json/encode_test.go b/src/encoding/json/encode_test.go
index 87074eabd46399..79c481754e0057 100644
--- a/src/encoding/json/encode_test.go
+++ b/src/encoding/json/encode_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
@@ -16,9 +14,7 @@ import (
 	"regexp"
 	"runtime/debug"
 	"strconv"
-	"sync"
 	"testing"
-	"testing/synctest"
 	"time"
 )
 
@@ -1405,21 +1401,3 @@ func TestIssue63379(t *testing.T) {
 		}
 	}
 }
-
-// Issue #73733: encoding/json used a WaitGroup to coordinate access to cache entries.
-// Since WaitGroup.Wait is durably blocking, this caused apparent deadlocks when
-// multiple bubbles called json.Marshal at the same time.
-func TestSynctestMarshal(t *testing.T) {
-	var wg sync.WaitGroup
-	for range 5 {
-		wg.Go(func() {
-			synctest.Test(t, func(t *testing.T) {
-				_, err := Marshal([]string{})
-				if err != nil {
-					t.Errorf("Marshal: %v", err)
-				}
-			})
-		})
-	}
-	wg.Wait()
-}
diff --git a/src/encoding/json/example_marshaling_test.go b/src/encoding/json/example_marshaling_test.go
index 72f4cca8ad8326..7f15c742b8ef86 100644
--- a/src/encoding/json/example_marshaling_test.go
+++ b/src/encoding/json/example_marshaling_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json_test
 
 import (
diff --git a/src/encoding/json/example_test.go b/src/encoding/json/example_test.go
index 15c2538349444a..2261c770c01f27 100644
--- a/src/encoding/json/example_test.go
+++ b/src/encoding/json/example_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json_test
 
 import (
diff --git a/src/encoding/json/example_text_marshaling_test.go b/src/encoding/json/example_text_marshaling_test.go
index 178c7bafd2079c..04c7813b267835 100644
--- a/src/encoding/json/example_text_marshaling_test.go
+++ b/src/encoding/json/example_text_marshaling_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json_test
 
 import (
diff --git a/src/encoding/json/fold.go b/src/encoding/json/fold.go
index f096ed60543b26..c4c671b52765a4 100644
--- a/src/encoding/json/fold.go
+++ b/src/encoding/json/fold.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/fold_test.go b/src/encoding/json/fold_test.go
index 4d03e3d1c2f736..9d6fd0559d69ef 100644
--- a/src/encoding/json/fold_test.go
+++ b/src/encoding/json/fold_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/fuzz_test.go b/src/encoding/json/fuzz_test.go
index 37dc436fcdb9dc..f01960398a0e88 100644
--- a/src/encoding/json/fuzz_test.go
+++ b/src/encoding/json/fuzz_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/indent.go b/src/encoding/json/indent.go
index b6f31fb5103fec..01bfdf65e7d5e1 100644
--- a/src/encoding/json/indent.go
+++ b/src/encoding/json/indent.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import "bytes"
diff --git a/src/encoding/json/internal/internal.go b/src/encoding/json/internal/internal.go
deleted file mode 100644
index f587c7b32c9647..00000000000000
--- a/src/encoding/json/internal/internal.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package internal
-
-import "errors"
-
-// NotForPublicUse is a marker type that an API is for internal use only.
-// It does not perfectly prevent usage of that API, but helps to restrict usage.
-// Anything with this marker is not covered by the Go compatibility agreement.
-type NotForPublicUse struct{}
-
-// AllowInternalUse is passed from "json" to "jsontext" to authenticate
-// that the caller can have access to internal functionality.
-var AllowInternalUse NotForPublicUse
-
-// Sentinel error values internally shared between jsonv1 and jsonv2.
-var (
-	ErrCycle           = errors.New("encountered a cycle")
-	ErrNonNilReference = errors.New("value must be passed as a non-nil pointer reference")
-)
-
-var (
-	// TransformMarshalError converts a v2 error into a v1 error.
-	// It is called only at the top-level of a Marshal function.
-	TransformMarshalError func(any, error) error
-	// NewMarshalerError constructs a jsonv1.MarshalerError.
-	// It is called after a user-defined Marshal method/function fails.
-	NewMarshalerError func(any, error, string) error
-	// TransformUnmarshalError converts a v2 error into a v1 error.
-	// It is called only at the top-level of a Unmarshal function.
-	TransformUnmarshalError func(any, error) error
-
-	// NewRawNumber returns new(jsonv1.Number).
-	NewRawNumber func() any
-	// RawNumberOf returns jsonv1.Number(b).
-	RawNumberOf func(b []byte) any
-)
diff --git a/src/encoding/json/internal/jsonflags/flags.go b/src/encoding/json/internal/jsonflags/flags.go
deleted file mode 100644
index 4496359c895e17..00000000000000
--- a/src/encoding/json/internal/jsonflags/flags.go
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-// jsonflags implements all the optional boolean flags.
-// These flags are shared across both "json", "jsontext", and "jsonopts".
-package jsonflags
-
-import "encoding/json/internal"
-
-// Bools represents zero or more boolean flags, all set to true or false.
-// The least-significant bit is the boolean value of all flags in the set.
-// The remaining bits identify which particular flags.
-//
-// In common usage, this is OR'd with 0 or 1. For example:
-//   - (AllowInvalidUTF8 | 0) means "AllowInvalidUTF8 is false"
-//   - (Multiline | Indent | 1) means "Multiline and Indent are true"
-type Bools uint64
-
-func (Bools) JSONOptions(internal.NotForPublicUse) {}
-
-const (
-	// AllFlags is the set of all flags.
-	AllFlags = AllCoderFlags | AllArshalV2Flags | AllArshalV1Flags
-
-	// AllCoderFlags is the set of all encoder/decoder flags.
-	AllCoderFlags = (maxCoderFlag - 1) - initFlag
-
-	// AllArshalV2Flags is the set of all v2 marshal/unmarshal flags.
-	AllArshalV2Flags = (maxArshalV2Flag - 1) - (maxCoderFlag - 1)
-
-	// AllArshalV1Flags is the set of all v1 marshal/unmarshal flags.
-	AllArshalV1Flags = (maxArshalV1Flag - 1) - (maxArshalV2Flag - 1)
-
-	// NonBooleanFlags is the set of non-boolean flags,
-	// where the value is some other concrete Go type.
-	// The value of the flag is stored within jsonopts.Struct.
-	NonBooleanFlags = 0 |
-		Indent |
-		IndentPrefix |
-		ByteLimit |
-		DepthLimit |
-		Marshalers |
-		Unmarshalers
-
-	// DefaultV1Flags is the set of booleans flags that default to true under
-	// v1 semantics. None of the non-boolean flags differ between v1 and v2.
-	DefaultV1Flags = 0 |
-		AllowDuplicateNames |
-		AllowInvalidUTF8 |
-		EscapeForHTML |
-		EscapeForJS |
-		EscapeInvalidUTF8 |
-		PreserveRawStrings |
-		Deterministic |
-		FormatNilMapAsNull |
-		FormatNilSliceAsNull |
-		MatchCaseInsensitiveNames |
-		CallMethodsWithLegacySemantics |
-		FormatBytesWithLegacySemantics |
-		FormatTimeWithLegacySemantics |
-		MatchCaseSensitiveDelimiter |
-		MergeWithLegacySemantics |
-		OmitEmptyWithLegacyDefinition |
-		ReportErrorsWithLegacySemantics |
-		StringifyWithLegacySemantics |
-		UnmarshalArrayFromAnyLength
-
-	// AnyWhitespace reports whether the encoded output might have any whitespace.
-	AnyWhitespace = Multiline | SpaceAfterColon | SpaceAfterComma
-
-	// WhitespaceFlags is the set of flags related to whitespace formatting.
-	// In contrast to AnyWhitespace, this includes Indent and IndentPrefix
-	// as those settings take no effect if Multiline is false.
-	WhitespaceFlags = AnyWhitespace | Indent | IndentPrefix
-
-	// AnyEscape is the set of flags related to escaping in a JSON string.
-	AnyEscape = EscapeForHTML | EscapeForJS | EscapeInvalidUTF8
-
-	// CanonicalizeNumbers is the set of flags related to raw number canonicalization.
-	CanonicalizeNumbers = CanonicalizeRawInts | CanonicalizeRawFloats
-)
-
-// Encoder and decoder flags.
-const (
-	initFlag Bools = 1 << iota // reserved for the boolean value itself
-
-	AllowDuplicateNames   // encode or decode
-	AllowInvalidUTF8      // encode or decode
-	WithinArshalCall      // encode or decode; for internal use by json.Marshal and json.Unmarshal
-	OmitTopLevelNewline   // encode only; for internal use by json.Marshal and json.MarshalWrite
-	PreserveRawStrings    // encode only
-	CanonicalizeRawInts   // encode only
-	CanonicalizeRawFloats // encode only
-	ReorderRawObjects     // encode only
-	EscapeForHTML         // encode only
-	EscapeForJS           // encode only
-	EscapeInvalidUTF8     // encode only; only exposed in v1
-	Multiline             // encode only
-	SpaceAfterColon       // encode only
-	SpaceAfterComma       // encode only
-	Indent                // encode only; non-boolean flag
-	IndentPrefix          // encode only; non-boolean flag
-	ByteLimit             // encode or decode; non-boolean flag
-	DepthLimit            // encode or decode; non-boolean flag
-
-	maxCoderFlag
-)
-
-// Marshal and Unmarshal flags (for v2).
-const (
-	_ Bools = (maxCoderFlag >> 1) << iota
-
-	StringifyNumbers          // marshal or unmarshal
-	Deterministic             // marshal only
-	FormatNilMapAsNull        // marshal only
-	FormatNilSliceAsNull      // marshal only
-	OmitZeroStructFields      // marshal only
-	MatchCaseInsensitiveNames // marshal or unmarshal
-	DiscardUnknownMembers     // marshal only
-	RejectUnknownMembers      // unmarshal only
-	Marshalers                // marshal only; non-boolean flag
-	Unmarshalers              // unmarshal only; non-boolean flag
-
-	maxArshalV2Flag
-)
-
-// Marshal and Unmarshal flags (for v1).
-const (
-	_ Bools = (maxArshalV2Flag >> 1) << iota
-
-	CallMethodsWithLegacySemantics  // marshal or unmarshal
-	FormatBytesWithLegacySemantics  // marshal or unmarshal
-	FormatTimeWithLegacySemantics   // marshal or unmarshal
-	MatchCaseSensitiveDelimiter     // marshal or unmarshal
-	MergeWithLegacySemantics        // unmarshal
-	OmitEmptyWithLegacyDefinition   // marshal
-	ReportErrorsWithLegacySemantics // marshal or unmarshal
-	StringifyWithLegacySemantics    // marshal or unmarshal
-	StringifyBoolsAndStrings        // marshal or unmarshal; for internal use by jsonv2.makeStructArshaler
-	UnmarshalAnyWithRawNumber       // unmarshal; for internal use by jsonv1.Decoder.UseNumber
-	UnmarshalArrayFromAnyLength     // unmarshal
-
-	maxArshalV1Flag
-)
-
-// Flags is a set of boolean flags.
-// If the presence bit is zero, then the value bit must also be zero.
-// The least-significant bit of both fields is always zero.
-//
-// Unlike Bools, which can represent a set of bools that are all true or false,
-// Flags represents a set of bools, each individually may be true or false.
-type Flags struct{ Presence, Values uint64 }
-
-// Join joins two sets of flags such that the latter takes precedence.
-func (dst *Flags) Join(src Flags) {
-	// Copy over all source presence bits over to the destination (using OR),
-	// then invert the source presence bits to clear out source value (using AND-NOT),
-	// then copy over source value bits over to the destination (using OR).
-	//	e.g., dst := Flags{Presence: 0b_1100_0011, Value: 0b_1000_0011}
-	//	e.g., src := Flags{Presence: 0b_0101_1010, Value: 0b_1001_0010}
-	dst.Presence |= src.Presence // e.g., 0b_1100_0011 | 0b_0101_1010 -> 0b_110_11011
-	dst.Values &= ^src.Presence  // e.g., 0b_1000_0011 & 0b_1010_0101 -> 0b_100_00001
-	dst.Values |= src.Values     // e.g., 0b_1000_0001 | 0b_1001_0010 -> 0b_100_10011
-}
-
-// Set sets both the presence and value for the provided bool (or set of bools).
-func (fs *Flags) Set(f Bools) {
-	// Select out the bits for the flag identifiers (everything except LSB),
-	// then set the presence for all the identifier bits (using OR),
-	// then invert the identifier bits to clear out the values (using AND-NOT),
-	// then copy over all the identifier bits to the value if LSB is 1.
-	//	e.g., fs := Flags{Presence: 0b_0101_0010, Value: 0b_0001_0010}
-	//	e.g., f := 0b_1001_0001
-	id := uint64(f) &^ uint64(1)  // e.g., 0b_1001_0001 & 0b_1111_1110 -> 0b_1001_0000
-	fs.Presence |= id             // e.g., 0b_0101_0010 | 0b_1001_0000 -> 0b_1101_0011
-	fs.Values &= ^id              // e.g., 0b_0001_0010 & 0b_0110_1111 -> 0b_0000_0010
-	fs.Values |= uint64(f&1) * id // e.g., 0b_0000_0010 | 0b_1001_0000 -> 0b_1001_0010
-}
-
-// Get reports whether the bool (or any of the bools) is true.
-// This is generally only used with a singular bool.
-// The value bit of f (i.e., the LSB) is ignored.
-func (fs Flags) Get(f Bools) bool {
-	return fs.Values&uint64(f) > 0
-}
-
-// Has reports whether the bool (or any of the bools) is set.
-// The value bit of f (i.e., the LSB) is ignored.
-func (fs Flags) Has(f Bools) bool {
-	return fs.Presence&uint64(f) > 0
-}
-
-// Clear clears both the presence and value for the provided bool or bools.
-// The value bit of f (i.e., the LSB) is ignored.
-func (fs *Flags) Clear(f Bools) {
-	// Invert f to produce a mask to clear all bits in f (using AND).
-	//	e.g., fs := Flags{Presence: 0b_0101_0010, Value: 0b_0001_0010}
-	//	e.g., f := 0b_0001_1000
-	mask := uint64(^f)  // e.g., 0b_0001_1000 -> 0b_1110_0111
-	fs.Presence &= mask // e.g., 0b_0101_0010 &  0b_1110_0111 -> 0b_0100_0010
-	fs.Values &= mask   // e.g., 0b_0001_0010 &  0b_1110_0111 -> 0b_0000_0010
-}
diff --git a/src/encoding/json/internal/jsonflags/flags_test.go b/src/encoding/json/internal/jsonflags/flags_test.go
deleted file mode 100644
index e4d3358bffdde1..00000000000000
--- a/src/encoding/json/internal/jsonflags/flags_test.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonflags
-
-import "testing"
-
-func TestFlags(t *testing.T) {
-	type Check struct{ want Flags }
-	type Join struct{ in Flags }
-	type Set struct{ in Bools }
-	type Clear struct{ in Bools }
-	type Get struct {
-		in     Bools
-		want   bool
-		wantOk bool
-	}
-
-	calls := []any{
-		Get{in: AllowDuplicateNames, want: false, wantOk: false},
-		Set{in: AllowDuplicateNames | 0},
-		Get{in: AllowDuplicateNames, want: false, wantOk: true},
-		Set{in: AllowDuplicateNames | 1},
-		Get{in: AllowDuplicateNames, want: true, wantOk: true},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames), Values: uint64(AllowDuplicateNames)}},
-		Get{in: AllowInvalidUTF8, want: false, wantOk: false},
-		Set{in: AllowInvalidUTF8 | 1},
-		Get{in: AllowInvalidUTF8, want: true, wantOk: true},
-		Set{in: AllowInvalidUTF8 | 0},
-		Get{in: AllowInvalidUTF8, want: false, wantOk: true},
-		Get{in: AllowDuplicateNames, want: true, wantOk: true},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(AllowDuplicateNames)}},
-		Set{in: AllowDuplicateNames | AllowInvalidUTF8 | 0},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(0)}},
-		Set{in: AllowDuplicateNames | AllowInvalidUTF8 | 0},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(0)}},
-		Set{in: AllowDuplicateNames | AllowInvalidUTF8 | 1},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(AllowDuplicateNames | AllowInvalidUTF8)}},
-		Join{in: Flags{Presence: 0, Values: 0}},
-		Check{want: Flags{Presence: uint64(AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(AllowDuplicateNames | AllowInvalidUTF8)}},
-		Join{in: Flags{Presence: uint64(Multiline | AllowInvalidUTF8), Values: uint64(AllowDuplicateNames)}},
-		Check{want: Flags{Presence: uint64(Multiline | AllowDuplicateNames | AllowInvalidUTF8), Values: uint64(AllowDuplicateNames)}},
-		Clear{in: AllowDuplicateNames | AllowInvalidUTF8},
-		Check{want: Flags{Presence: uint64(Multiline), Values: uint64(0)}},
-		Set{in: AllowInvalidUTF8 | Deterministic | ReportErrorsWithLegacySemantics | 1},
-		Set{in: Multiline | StringifyNumbers | 0},
-		Check{want: Flags{Presence: uint64(AllowInvalidUTF8 | Deterministic | ReportErrorsWithLegacySemantics | Multiline | StringifyNumbers), Values: uint64(AllowInvalidUTF8 | Deterministic | ReportErrorsWithLegacySemantics)}},
-		Clear{in: ^AllCoderFlags},
-		Check{want: Flags{Presence: uint64(AllowInvalidUTF8 | Multiline), Values: uint64(AllowInvalidUTF8)}},
-	}
-	var fs Flags
-	for i, call := range calls {
-		switch call := call.(type) {
-		case Join:
-			fs.Join(call.in)
-		case Set:
-			fs.Set(call.in)
-		case Clear:
-			fs.Clear(call.in)
-		case Get:
-			got := fs.Get(call.in)
-			gotOk := fs.Has(call.in)
-			if got != call.want || gotOk != call.wantOk {
-				t.Fatalf("%d: GetOk = (%v, %v), want (%v, %v)", i, got, gotOk, call.want, call.wantOk)
-			}
-		case Check:
-			if fs != call.want {
-				t.Fatalf("%d: got %x, want %x", i, fs, call.want)
-			}
-		}
-	}
-}
diff --git a/src/encoding/json/internal/jsonopts/options.go b/src/encoding/json/internal/jsonopts/options.go
deleted file mode 100644
index 2226830b6bcd99..00000000000000
--- a/src/encoding/json/internal/jsonopts/options.go
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonopts
-
-import (
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-)
-
-// Options is the common options type shared across json packages.
-type Options interface {
-	// JSONOptions is exported so related json packages can implement Options.
-	JSONOptions(internal.NotForPublicUse)
-}
-
-// Struct is the combination of all options in struct form.
-// This is efficient to pass down the call stack and to query.
-type Struct struct {
-	Flags jsonflags.Flags
-
-	CoderValues
-	ArshalValues
-}
-
-type CoderValues struct {
-	Indent       string // jsonflags.Indent
-	IndentPrefix string // jsonflags.IndentPrefix
-	ByteLimit    int64  // jsonflags.ByteLimit
-	DepthLimit   int    // jsonflags.DepthLimit
-}
-
-type ArshalValues struct {
-	// The Marshalers and Unmarshalers fields use the any type to avoid a
-	// concrete dependency on *json.Marshalers and *json.Unmarshalers,
-	// which would in turn create a dependency on the "reflect" package.
-
-	Marshalers   any // jsonflags.Marshalers
-	Unmarshalers any // jsonflags.Unmarshalers
-
-	Format      string
-	FormatDepth int
-}
-
-// DefaultOptionsV2 is the set of all options that define default v2 behavior.
-var DefaultOptionsV2 = Struct{
-	Flags: jsonflags.Flags{
-		Presence: uint64(jsonflags.AllFlags & ^jsonflags.WhitespaceFlags),
-		Values:   uint64(0),
-	},
-}
-
-// DefaultOptionsV1 is the set of all options that define default v1 behavior.
-var DefaultOptionsV1 = Struct{
-	Flags: jsonflags.Flags{
-		Presence: uint64(jsonflags.AllFlags & ^jsonflags.WhitespaceFlags),
-		Values:   uint64(jsonflags.DefaultV1Flags),
-	},
-}
-
-func (*Struct) JSONOptions(internal.NotForPublicUse) {}
-
-// GetUnknownOption is injected by the "json" package to handle Options
-// declared in that package so that "jsonopts" can handle them.
-var GetUnknownOption = func(*Struct, Options) (any, bool) { panic("unknown option") }
-
-func GetOption[T any](opts Options, setter func(T) Options) (T, bool) {
-	// Collapse the options to *Struct to simplify lookup.
-	structOpts, ok := opts.(*Struct)
-	if !ok {
-		var structOpts2 Struct
-		structOpts2.Join(opts)
-		structOpts = &structOpts2
-	}
-
-	// Lookup the option based on the return value of the setter.
-	var zero T
-	switch opt := setter(zero).(type) {
-	case jsonflags.Bools:
-		v := structOpts.Flags.Get(opt)
-		ok := structOpts.Flags.Has(opt)
-		return any(v).(T), ok
-	case Indent:
-		if !structOpts.Flags.Has(jsonflags.Indent) {
-			return zero, false
-		}
-		return any(structOpts.Indent).(T), true
-	case IndentPrefix:
-		if !structOpts.Flags.Has(jsonflags.IndentPrefix) {
-			return zero, false
-		}
-		return any(structOpts.IndentPrefix).(T), true
-	case ByteLimit:
-		if !structOpts.Flags.Has(jsonflags.ByteLimit) {
-			return zero, false
-		}
-		return any(structOpts.ByteLimit).(T), true
-	case DepthLimit:
-		if !structOpts.Flags.Has(jsonflags.DepthLimit) {
-			return zero, false
-		}
-		return any(structOpts.DepthLimit).(T), true
-	default:
-		v, ok := GetUnknownOption(structOpts, opt)
-		return v.(T), ok
-	}
-}
-
-// JoinUnknownOption is injected by the "json" package to handle Options
-// declared in that package so that "jsonopts" can handle them.
-var JoinUnknownOption = func(*Struct, Options) { panic("unknown option") }
-
-func (dst *Struct) Join(srcs ...Options) {
-	dst.join(false, srcs...)
-}
-
-func (dst *Struct) JoinWithoutCoderOptions(srcs ...Options) {
-	dst.join(true, srcs...)
-}
-
-func (dst *Struct) join(excludeCoderOptions bool, srcs ...Options) {
-	for _, src := range srcs {
-		switch src := src.(type) {
-		case nil:
-			continue
-		case jsonflags.Bools:
-			if excludeCoderOptions {
-				src &= ^jsonflags.AllCoderFlags
-			}
-			dst.Flags.Set(src)
-		case Indent:
-			if excludeCoderOptions {
-				continue
-			}
-			dst.Flags.Set(jsonflags.Multiline | jsonflags.Indent | 1)
-			dst.Indent = string(src)
-		case IndentPrefix:
-			if excludeCoderOptions {
-				continue
-			}
-			dst.Flags.Set(jsonflags.Multiline | jsonflags.IndentPrefix | 1)
-			dst.IndentPrefix = string(src)
-		case ByteLimit:
-			if excludeCoderOptions {
-				continue
-			}
-			dst.Flags.Set(jsonflags.ByteLimit | 1)
-			dst.ByteLimit = int64(src)
-		case DepthLimit:
-			if excludeCoderOptions {
-				continue
-			}
-			dst.Flags.Set(jsonflags.DepthLimit | 1)
-			dst.DepthLimit = int(src)
-		case *Struct:
-			srcFlags := src.Flags // shallow copy the flags
-			if excludeCoderOptions {
-				srcFlags.Clear(jsonflags.AllCoderFlags)
-			}
-			dst.Flags.Join(srcFlags)
-			if srcFlags.Has(jsonflags.NonBooleanFlags) {
-				if srcFlags.Has(jsonflags.Indent) {
-					dst.Indent = src.Indent
-				}
-				if srcFlags.Has(jsonflags.IndentPrefix) {
-					dst.IndentPrefix = src.IndentPrefix
-				}
-				if srcFlags.Has(jsonflags.ByteLimit) {
-					dst.ByteLimit = src.ByteLimit
-				}
-				if srcFlags.Has(jsonflags.DepthLimit) {
-					dst.DepthLimit = src.DepthLimit
-				}
-				if srcFlags.Has(jsonflags.Marshalers) {
-					dst.Marshalers = src.Marshalers
-				}
-				if srcFlags.Has(jsonflags.Unmarshalers) {
-					dst.Unmarshalers = src.Unmarshalers
-				}
-			}
-		default:
-			JoinUnknownOption(dst, src)
-		}
-	}
-}
-
-type (
-	Indent       string // jsontext.WithIndent
-	IndentPrefix string // jsontext.WithIndentPrefix
-	ByteLimit    int64  // jsontext.WithByteLimit
-	DepthLimit   int    // jsontext.WithDepthLimit
-	// type for jsonflags.Marshalers declared in "json" package
-	// type for jsonflags.Unmarshalers declared in "json" package
-)
-
-func (Indent) JSONOptions(internal.NotForPublicUse)       {}
-func (IndentPrefix) JSONOptions(internal.NotForPublicUse) {}
-func (ByteLimit) JSONOptions(internal.NotForPublicUse)    {}
-func (DepthLimit) JSONOptions(internal.NotForPublicUse)   {}
diff --git a/src/encoding/json/internal/jsonopts/options_test.go b/src/encoding/json/internal/jsonopts/options_test.go
deleted file mode 100644
index ebfaf05c833e05..00000000000000
--- a/src/encoding/json/internal/jsonopts/options_test.go
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonopts_test
-
-import (
-	"reflect"
-	"testing"
-
-	"encoding/json/internal/jsonflags"
-	. "encoding/json/internal/jsonopts"
-	"encoding/json/jsontext"
-	"encoding/json/v2"
-)
-
-func makeFlags(f ...jsonflags.Bools) (fs jsonflags.Flags) {
-	for _, f := range f {
-		fs.Set(f)
-	}
-	return fs
-}
-
-func TestJoin(t *testing.T) {
-	tests := []struct {
-		in            Options
-		excludeCoders bool
-		want          *Struct
-	}{{
-		in:   jsonflags.AllowInvalidUTF8 | 1,
-		want: &Struct{Flags: makeFlags(jsonflags.AllowInvalidUTF8 | 1)},
-	}, {
-		in: jsonflags.Multiline | 0,
-		want: &Struct{
-			Flags: makeFlags(jsonflags.AllowInvalidUTF8|1, jsonflags.Multiline|0)},
-	}, {
-		in: Indent("\t"), // implicitly sets Multiline=true
-		want: &Struct{
-			Flags:       makeFlags(jsonflags.AllowInvalidUTF8 | jsonflags.Multiline | jsonflags.Indent | 1),
-			CoderValues: CoderValues{Indent: "\t"},
-		},
-	}, {
-		in: &Struct{
-			Flags: makeFlags(jsonflags.Multiline|jsonflags.EscapeForJS|0, jsonflags.AllowInvalidUTF8|1),
-		},
-		want: &Struct{
-			Flags:       makeFlags(jsonflags.AllowInvalidUTF8|jsonflags.Indent|1, jsonflags.Multiline|jsonflags.EscapeForJS|0),
-			CoderValues: CoderValues{Indent: "\t"},
-		},
-	}, {
-		in: &DefaultOptionsV1,
-		want: func() *Struct {
-			v1 := DefaultOptionsV1
-			v1.Flags.Set(jsonflags.Indent | 1)
-			v1.Flags.Set(jsonflags.Multiline | 0)
-			v1.Indent = "\t"
-			return &v1
-		}(), // v1 fully replaces before (except for whitespace related flags)
-	}, {
-		in: &DefaultOptionsV2,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.Multiline | 0)
-			v2.Indent = "\t"
-			return &v2
-		}(), // v2 fully replaces before (except for whitespace related flags)
-	}, {
-		in: jsonflags.Deterministic | jsonflags.AllowInvalidUTF8 | 1, excludeCoders: true,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Deterministic | 1)
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.Multiline | 0)
-			v2.Indent = "\t"
-			return &v2
-		}(),
-	}, {
-		in: jsontext.WithIndentPrefix("    "), excludeCoders: true,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Deterministic | 1)
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.Multiline | 0)
-			v2.Indent = "\t"
-			return &v2
-		}(),
-	}, {
-		in: jsontext.WithIndentPrefix("    "), excludeCoders: false,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Deterministic | 1)
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.IndentPrefix | 1)
-			v2.Flags.Set(jsonflags.Multiline | 1)
-			v2.Indent = "\t"
-			v2.IndentPrefix = "    "
-			return &v2
-		}(),
-	}, {
-		in: &Struct{
-			Flags: jsonflags.Flags{
-				Presence: uint64(jsonflags.Deterministic | jsonflags.Indent | jsonflags.IndentPrefix),
-				Values:   uint64(jsonflags.Indent | jsonflags.IndentPrefix),
-			},
-			CoderValues: CoderValues{Indent: "  ", IndentPrefix: "  "},
-		},
-		excludeCoders: true,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.IndentPrefix | 1)
-			v2.Flags.Set(jsonflags.Multiline | 1)
-			v2.Indent = "\t"
-			v2.IndentPrefix = "    "
-			return &v2
-		}(),
-	}, {
-		in: &Struct{
-			Flags: jsonflags.Flags{
-				Presence: uint64(jsonflags.Deterministic | jsonflags.Indent | jsonflags.IndentPrefix),
-				Values:   uint64(jsonflags.Indent | jsonflags.IndentPrefix),
-			},
-			CoderValues: CoderValues{Indent: "  ", IndentPrefix: "  "},
-		},
-		excludeCoders: false,
-		want: func() *Struct {
-			v2 := DefaultOptionsV2
-			v2.Flags.Set(jsonflags.Indent | 1)
-			v2.Flags.Set(jsonflags.IndentPrefix | 1)
-			v2.Flags.Set(jsonflags.Multiline | 1)
-			v2.Indent = "  "
-			v2.IndentPrefix = "  "
-			return &v2
-		}(),
-	}}
-	got := new(Struct)
-	for i, tt := range tests {
-		if tt.excludeCoders {
-			got.JoinWithoutCoderOptions(tt.in)
-		} else {
-			got.Join(tt.in)
-		}
-		if !reflect.DeepEqual(got, tt.want) {
-			t.Fatalf("%d: Join:\n\tgot:  %+v\n\twant: %+v", i, got, tt.want)
-		}
-	}
-}
-
-func TestGet(t *testing.T) {
-	opts := &Struct{
-		Flags:        makeFlags(jsonflags.Indent|jsonflags.Deterministic|jsonflags.Marshalers|1, jsonflags.Multiline|0),
-		CoderValues:  CoderValues{Indent: "\t"},
-		ArshalValues: ArshalValues{Marshalers: new(json.Marshalers)},
-	}
-	if v, ok := json.GetOption(nil, jsontext.AllowDuplicateNames); v || ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (false, false)", v, ok)
-	}
-	if v, ok := json.GetOption(jsonflags.AllowInvalidUTF8|0, jsontext.AllowDuplicateNames); v || ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (false, false)", v, ok)
-	}
-	if v, ok := json.GetOption(jsonflags.AllowDuplicateNames|0, jsontext.AllowDuplicateNames); v || !ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (false, true)", v, ok)
-	}
-	if v, ok := json.GetOption(jsonflags.AllowDuplicateNames|1, jsontext.AllowDuplicateNames); !v || !ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (true, true)", v, ok)
-	}
-	if v, ok := json.GetOption(Indent(""), jsontext.AllowDuplicateNames); v || ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (false, false)", v, ok)
-	}
-	if v, ok := json.GetOption(Indent(" "), jsontext.WithIndent); v != " " || !ok {
-		t.Errorf(`GetOption(..., WithIndent) = (%q, %v), want (" ", true)`, v, ok)
-	}
-	if v, ok := json.GetOption(jsonflags.AllowDuplicateNames|1, jsontext.WithIndent); v != "" || ok {
-		t.Errorf(`GetOption(..., WithIndent) = (%q, %v), want ("", false)`, v, ok)
-	}
-	if v, ok := json.GetOption(opts, jsontext.AllowDuplicateNames); v || ok {
-		t.Errorf("GetOption(..., AllowDuplicateNames) = (%v, %v), want (false, false)", v, ok)
-	}
-	if v, ok := json.GetOption(opts, json.Deterministic); !v || !ok {
-		t.Errorf("GetOption(..., Deterministic) = (%v, %v), want (true, true)", v, ok)
-	}
-	if v, ok := json.GetOption(opts, jsontext.Multiline); v || !ok {
-		t.Errorf("GetOption(..., Multiline) = (%v, %v), want (false, true)", v, ok)
-	}
-	if v, ok := json.GetOption(opts, jsontext.AllowInvalidUTF8); v || ok {
-		t.Errorf("GetOption(..., AllowInvalidUTF8) = (%v, %v), want (false, false)", v, ok)
-	}
-	if v, ok := json.GetOption(opts, jsontext.WithIndent); v != "\t" || !ok {
-		t.Errorf(`GetOption(..., WithIndent) = (%q, %v), want ("\t", true)`, v, ok)
-	}
-	if v, ok := json.GetOption(opts, jsontext.WithIndentPrefix); v != "" || ok {
-		t.Errorf(`GetOption(..., WithIndentPrefix) = (%q, %v), want ("", false)`, v, ok)
-	}
-	if v, ok := json.GetOption(opts, json.WithMarshalers); v == nil || !ok {
-		t.Errorf(`GetOption(..., WithMarshalers) = (%v, %v), want (non-nil, true)`, v, ok)
-	}
-	if v, ok := json.GetOption(opts, json.WithUnmarshalers); v != nil || ok {
-		t.Errorf(`GetOption(..., WithUnmarshalers) = (%v, %v), want (nil, false)`, v, ok)
-	}
-}
-
-var sink struct {
-	Bool       bool
-	String     string
-	Marshalers *json.Marshalers
-}
-
-func BenchmarkGetBool(b *testing.B) {
-	b.ReportAllocs()
-	opts := json.DefaultOptionsV2()
-	for range b.N {
-		sink.Bool, sink.Bool = json.GetOption(opts, jsontext.AllowDuplicateNames)
-	}
-}
-
-func BenchmarkGetIndent(b *testing.B) {
-	b.ReportAllocs()
-	opts := json.DefaultOptionsV2()
-	for range b.N {
-		sink.String, sink.Bool = json.GetOption(opts, jsontext.WithIndent)
-	}
-}
-
-func BenchmarkGetMarshalers(b *testing.B) {
-	b.ReportAllocs()
-	opts := json.JoinOptions(json.DefaultOptionsV2(), json.WithMarshalers(nil))
-	for range b.N {
-		sink.Marshalers, sink.Bool = json.GetOption(opts, json.WithMarshalers)
-	}
-}
diff --git a/src/encoding/json/internal/jsontest/testcase.go b/src/encoding/json/internal/jsontest/testcase.go
deleted file mode 100644
index 73a64c8cfada3b..00000000000000
--- a/src/encoding/json/internal/jsontest/testcase.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontest
-
-import (
-	"fmt"
-	"path"
-	"runtime"
-)
-
-// TODO(https://go.dev/issue/52751): Replace with native testing support.
-
-// CaseName is a case name annotated with a file and line.
-type CaseName struct {
-	Name  string
-	Where CasePos
-}
-
-// Name annotates a case name with the file and line of the caller.
-func Name(s string) (c CaseName) {
-	c.Name = s
-	runtime.Callers(2, c.Where.pc[:])
-	return c
-}
-
-// CasePos represents a file and line number.
-type CasePos struct{ pc [1]uintptr }
-
-func (pos CasePos) String() string {
-	frames := runtime.CallersFrames(pos.pc[:])
-	frame, _ := frames.Next()
-	return fmt.Sprintf("%s:%d", path.Base(frame.File), frame.Line)
-}
diff --git a/src/encoding/json/internal/jsontest/testdata.go b/src/encoding/json/internal/jsontest/testdata.go
deleted file mode 100644
index 74de366136ce97..00000000000000
--- a/src/encoding/json/internal/jsontest/testdata.go
+++ /dev/null
@@ -1,607 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-// Package jsontest contains functionality to assist in testing JSON.
-package jsontest
-
-import (
-	"bytes"
-	"embed"
-	"errors"
-	"internal/zstd"
-	"io"
-	"io/fs"
-	"path"
-	"slices"
-	"strings"
-	"sync"
-	"time"
-)
-
-// Embed the testdata directory as a fs.FS because this package is imported
-// by other packages such that the location of testdata may change relative
-// to the working directory of the test itself.
-//
-//go:embed testdata/*.json.zst
-var testdataFS embed.FS
-
-type Entry struct {
-	Name string
-	Data func() []byte
-	New  func() any // nil if there is no concrete type for this
-}
-
-func mustGet[T any](v T, err error) T {
-	if err != nil {
-		panic(err)
-	}
-	return v
-}
-
-// Data is a list of JSON testdata.
-var Data = func() (entries []Entry) {
-	fis := mustGet(fs.ReadDir(testdataFS, "testdata"))
-	slices.SortFunc(fis, func(x, y fs.DirEntry) int { return strings.Compare(x.Name(), y.Name()) })
-	for _, fi := range fis {
-		var entry Entry
-
-		// Convert snake_case file name to CamelCase.
-		words := strings.Split(strings.TrimSuffix(fi.Name(), ".json.zst"), "_")
-		for i := range words {
-			words[i] = strings.Title(words[i])
-		}
-		entry.Name = strings.Join(words, "")
-
-		// Lazily read and decompress the test data.
-		entry.Data = sync.OnceValue(func() []byte {
-			filePath := path.Join("testdata", fi.Name())
-			b := mustGet(fs.ReadFile(testdataFS, filePath))
-			zr := zstd.NewReader(bytes.NewReader(b))
-			return mustGet(io.ReadAll(zr))
-		})
-
-		// Check whether there is a concrete type for this data.
-		switch entry.Name {
-		case "CanadaGeometry":
-			entry.New = func() any { return new(canadaRoot) }
-		case "CitmCatalog":
-			entry.New = func() any { return new(citmRoot) }
-		case "GolangSource":
-			entry.New = func() any { return new(golangRoot) }
-		case "StringEscaped":
-			entry.New = func() any { return new(stringRoot) }
-		case "StringUnicode":
-			entry.New = func() any { return new(stringRoot) }
-		case "SyntheaFhir":
-			entry.New = func() any { return new(syntheaRoot) }
-		case "TwitterStatus":
-			entry.New = func() any { return new(twitterRoot) }
-		}
-
-		entries = append(entries, entry)
-	}
-	return entries
-}()
-
-type (
-	canadaRoot struct {
-		Type     string `json:"type"`
-		Features []struct {
-			Type       string `json:"type"`
-			Properties struct {
-				Name string `json:"name"`
-			} `json:"properties"`
-			Geometry struct {
-				Type        string         `json:"type"`
-				Coordinates [][][2]float64 `json:"coordinates"`
-			} `json:"geometry"`
-		} `json:"features"`
-	}
-)
-
-type (
-	citmRoot struct {
-		AreaNames                map[int64]string `json:"areaNames"`
-		AudienceSubCategoryNames map[int64]string `json:"audienceSubCategoryNames"`
-		BlockNames               map[int64]string `json:"blockNames"`
-		Events                   map[int64]struct {
-			Description string `json:"description"`
-			ID          int    `json:"id"`
-			Logo        string `json:"logo"`
-			Name        string `json:"name"`
-			SubTopicIds []int  `json:"subTopicIds"`
-			SubjectCode any    `json:"subjectCode"`
-			Subtitle    any    `json:"subtitle"`
-			TopicIds    []int  `json:"topicIds"`
-		} `json:"events"`
-		Performances []struct {
-			EventID int `json:"eventId"`
-			ID      int `json:"id"`
-			Logo    any `json:"logo"`
-			Name    any `json:"name"`
-			Prices  []struct {
-				Amount                int   `json:"amount"`
-				AudienceSubCategoryID int64 `json:"audienceSubCategoryId"`
-				SeatCategoryID        int64 `json:"seatCategoryId"`
-			} `json:"prices"`
-			SeatCategories []struct {
-				Areas []struct {
-					AreaID   int   `json:"areaId"`
-					BlockIds []any `json:"blockIds"`
-				} `json:"areas"`
-				SeatCategoryID int `json:"seatCategoryId"`
-			} `json:"seatCategories"`
-			SeatMapImage any    `json:"seatMapImage"`
-			Start        int64  `json:"start"`
-			VenueCode    string `json:"venueCode"`
-		} `json:"performances"`
-		SeatCategoryNames map[uint64]string   `json:"seatCategoryNames"`
-		SubTopicNames     map[uint64]string   `json:"subTopicNames"`
-		SubjectNames      map[uint64]string   `json:"subjectNames"`
-		TopicNames        map[uint64]string   `json:"topicNames"`
-		TopicSubTopics    map[uint64][]uint64 `json:"topicSubTopics"`
-		VenueNames        map[string]string   `json:"venueNames"`
-	}
-)
-
-type (
-	golangRoot struct {
-		Tree     *golangNode `json:"tree"`
-		Username string      `json:"username"`
-	}
-	golangNode struct {
-		Name     string       `json:"name"`
-		Kids     []golangNode `json:"kids"`
-		CLWeight float64      `json:"cl_weight"`
-		Touches  int          `json:"touches"`
-		MinT     uint64       `json:"min_t"`
-		MaxT     uint64       `json:"max_t"`
-		MeanT    uint64       `json:"mean_t"`
-	}
-)
-
-type (
-	stringRoot struct {
-		Arabic                             string `json:"Arabic"`
-		ArabicPresentationFormsA           string `json:"Arabic Presentation Forms-A"`
-		ArabicPresentationFormsB           string `json:"Arabic Presentation Forms-B"`
-		Armenian                           string `json:"Armenian"`
-		Arrows                             string `json:"Arrows"`
-		Bengali                            string `json:"Bengali"`
-		Bopomofo                           string `json:"Bopomofo"`
-		BoxDrawing                         string `json:"Box Drawing"`
-		CJKCompatibility                   string `json:"CJK Compatibility"`
-		CJKCompatibilityForms              string `json:"CJK Compatibility Forms"`
-		CJKCompatibilityIdeographs         string `json:"CJK Compatibility Ideographs"`
-		CJKSymbolsAndPunctuation           string `json:"CJK Symbols and Punctuation"`
-		CJKUnifiedIdeographs               string `json:"CJK Unified Ideographs"`
-		CJKUnifiedIdeographsExtensionA     string `json:"CJK Unified Ideographs Extension A"`
-		CJKUnifiedIdeographsExtensionB     string `json:"CJK Unified Ideographs Extension B"`
-		Cherokee                           string `json:"Cherokee"`
-		CurrencySymbols                    string `json:"Currency Symbols"`
-		Cyrillic                           string `json:"Cyrillic"`
-		CyrillicSupplementary              string `json:"Cyrillic Supplementary"`
-		Devanagari                         string `json:"Devanagari"`
-		EnclosedAlphanumerics              string `json:"Enclosed Alphanumerics"`
-		EnclosedCJKLettersAndMonths        string `json:"Enclosed CJK Letters and Months"`
-		Ethiopic                           string `json:"Ethiopic"`
-		GeometricShapes                    string `json:"Geometric Shapes"`
-		Georgian                           string `json:"Georgian"`
-		GreekAndCoptic                     string `json:"Greek and Coptic"`
-		Gujarati                           string `json:"Gujarati"`
-		Gurmukhi                           string `json:"Gurmukhi"`
-		HangulCompatibilityJamo            string `json:"Hangul Compatibility Jamo"`
-		HangulJamo                         string `json:"Hangul Jamo"`
-		HangulSyllables                    string `json:"Hangul Syllables"`
-		Hebrew                             string `json:"Hebrew"`
-		Hiragana                           string `json:"Hiragana"`
-		IPAExtentions                      string `json:"IPA Extentions"`
-		KangxiRadicals                     string `json:"Kangxi Radicals"`
-		Katakana                           string `json:"Katakana"`
-		Khmer                              string `json:"Khmer"`
-		KhmerSymbols                       string `json:"Khmer Symbols"`
-		Latin                              string `json:"Latin"`
-		LatinExtendedAdditional            string `json:"Latin Extended Additional"`
-		Latin1Supplement                   string `json:"Latin-1 Supplement"`
-		LatinExtendedA                     string `json:"Latin-Extended A"`
-		LatinExtendedB                     string `json:"Latin-Extended B"`
-		LetterlikeSymbols                  string `json:"Letterlike Symbols"`
-		Malayalam                          string `json:"Malayalam"`
-		MathematicalAlphanumericSymbols    string `json:"Mathematical Alphanumeric Symbols"`
-		MathematicalOperators              string `json:"Mathematical Operators"`
-		MiscellaneousSymbols               string `json:"Miscellaneous Symbols"`
-		Mongolian                          string `json:"Mongolian"`
-		NumberForms                        string `json:"Number Forms"`
-		Oriya                              string `json:"Oriya"`
-		PhoneticExtensions                 string `json:"Phonetic Extensions"`
-		SupplementalArrowsB                string `json:"Supplemental Arrows-B"`
-		Syriac                             string `json:"Syriac"`
-		Tamil                              string `json:"Tamil"`
-		Thaana                             string `json:"Thaana"`
-		Thai                               string `json:"Thai"`
-		UnifiedCanadianAboriginalSyllabics string `json:"Unified Canadian Aboriginal Syllabics"`
-		YiRadicals                         string `json:"Yi Radicals"`
-		YiSyllables                        string `json:"Yi Syllables"`
-	}
-)
-
-type (
-	syntheaRoot struct {
-		Entry []struct {
-			FullURL string `json:"fullUrl"`
-			Request *struct {
-				Method string `json:"method"`
-				URL    string `json:"url"`
-			} `json:"request"`
-			Resource *struct {
-				AbatementDateTime time.Time   `json:"abatementDateTime"`
-				AchievementStatus syntheaCode `json:"achievementStatus"`
-				Active            bool        `json:"active"`
-				Activity          []struct {
-					Detail *struct {
-						Code     syntheaCode      `json:"code"`
-						Location syntheaReference `json:"location"`
-						Status   string           `json:"status"`
-					} `json:"detail"`
-				} `json:"activity"`
-				Address        []syntheaAddress   `json:"address"`
-				Addresses      []syntheaReference `json:"addresses"`
-				AuthoredOn     time.Time          `json:"authoredOn"`
-				BillablePeriod syntheaRange       `json:"billablePeriod"`
-				BirthDate      string             `json:"birthDate"`
-				CareTeam       []struct {
-					Provider  syntheaReference `json:"provider"`
-					Reference string           `json:"reference"`
-					Role      syntheaCode      `json:"role"`
-					Sequence  int64            `json:"sequence"`
-				} `json:"careTeam"`
-				Category       []syntheaCode    `json:"category"`
-				Claim          syntheaReference `json:"claim"`
-				Class          syntheaCoding    `json:"class"`
-				ClinicalStatus syntheaCode      `json:"clinicalStatus"`
-				Code           syntheaCode      `json:"code"`
-				Communication  []struct {
-					Language syntheaCode `json:"language"`
-				} `json:"communication"`
-				Component []struct {
-					Code          syntheaCode   `json:"code"`
-					ValueQuantity syntheaCoding `json:"valueQuantity"`
-				} `json:"component"`
-				Contained []struct {
-					Beneficiary  syntheaReference   `json:"beneficiary"`
-					ID           string             `json:"id"`
-					Intent       string             `json:"intent"`
-					Payor        []syntheaReference `json:"payor"`
-					Performer    []syntheaReference `json:"performer"`
-					Requester    syntheaReference   `json:"requester"`
-					ResourceType string             `json:"resourceType"`
-					Status       string             `json:"status"`
-					Subject      syntheaReference   `json:"subject"`
-					Type         syntheaCode        `json:"type"`
-				} `json:"contained"`
-				Created          time.Time   `json:"created"`
-				DeceasedDateTime time.Time   `json:"deceasedDateTime"`
-				Description      syntheaCode `json:"description"`
-				Diagnosis        []struct {
-					DiagnosisReference syntheaReference `json:"diagnosisReference"`
-					Sequence           int64            `json:"sequence"`
-					Type               []syntheaCode    `json:"type"`
-				} `json:"diagnosis"`
-				DosageInstruction []struct {
-					AsNeededBoolean bool `json:"asNeededBoolean"`
-					DoseAndRate     []struct {
-						DoseQuantity *struct {
-							Value float64 `json:"value"`
-						} `json:"doseQuantity"`
-						Type syntheaCode `json:"type"`
-					} `json:"doseAndRate"`
-					Sequence int64 `json:"sequence"`
-					Timing   *struct {
-						Repeat *struct {
-							Frequency  int64   `json:"frequency"`
-							Period     float64 `json:"period"`
-							PeriodUnit string  `json:"periodUnit"`
-						} `json:"repeat"`
-					} `json:"timing"`
-				} `json:"dosageInstruction"`
-				EffectiveDateTime time.Time          `json:"effectiveDateTime"`
-				Encounter         syntheaReference   `json:"encounter"`
-				Extension         []syntheaExtension `json:"extension"`
-				Gender            string             `json:"gender"`
-				Goal              []syntheaReference `json:"goal"`
-				ID                string             `json:"id"`
-				Identifier        []struct {
-					System string      `json:"system"`
-					Type   syntheaCode `json:"type"`
-					Use    string      `json:"use"`
-					Value  string      `json:"value"`
-				} `json:"identifier"`
-				Insurance []struct {
-					Coverage syntheaReference `json:"coverage"`
-					Focal    bool             `json:"focal"`
-					Sequence int64            `json:"sequence"`
-				} `json:"insurance"`
-				Insurer syntheaReference `json:"insurer"`
-				Intent  string           `json:"intent"`
-				Issued  time.Time        `json:"issued"`
-				Item    []struct {
-					Adjudication []struct {
-						Amount   syntheaCurrency `json:"amount"`
-						Category syntheaCode     `json:"category"`
-					} `json:"adjudication"`
-					Category                syntheaCode        `json:"category"`
-					DiagnosisSequence       []int64            `json:"diagnosisSequence"`
-					Encounter               []syntheaReference `json:"encounter"`
-					InformationSequence     []int64            `json:"informationSequence"`
-					LocationCodeableConcept syntheaCode        `json:"locationCodeableConcept"`
-					Net                     syntheaCurrency    `json:"net"`
-					ProcedureSequence       []int64            `json:"procedureSequence"`
-					ProductOrService        syntheaCode        `json:"productOrService"`
-					Sequence                int64              `json:"sequence"`
-					ServicedPeriod          syntheaRange       `json:"servicedPeriod"`
-				} `json:"item"`
-				LifecycleStatus           string             `json:"lifecycleStatus"`
-				ManagingOrganization      []syntheaReference `json:"managingOrganization"`
-				MaritalStatus             syntheaCode        `json:"maritalStatus"`
-				MedicationCodeableConcept syntheaCode        `json:"medicationCodeableConcept"`
-				MultipleBirthBoolean      bool               `json:"multipleBirthBoolean"`
-				Name                      rawValue           `json:"name"`
-				NumberOfInstances         int64              `json:"numberOfInstances"`
-				NumberOfSeries            int64              `json:"numberOfSeries"`
-				OccurrenceDateTime        time.Time          `json:"occurrenceDateTime"`
-				OnsetDateTime             time.Time          `json:"onsetDateTime"`
-				Outcome                   string             `json:"outcome"`
-				Participant               []struct {
-					Individual syntheaReference `json:"individual"`
-					Member     syntheaReference `json:"member"`
-					Role       []syntheaCode    `json:"role"`
-				} `json:"participant"`
-				Patient syntheaReference `json:"patient"`
-				Payment *struct {
-					Amount syntheaCurrency `json:"amount"`
-				} `json:"payment"`
-				PerformedPeriod syntheaRange     `json:"performedPeriod"`
-				Period          syntheaRange     `json:"period"`
-				Prescription    syntheaReference `json:"prescription"`
-				PrimarySource   bool             `json:"primarySource"`
-				Priority        syntheaCode      `json:"priority"`
-				Procedure       []struct {
-					ProcedureReference syntheaReference `json:"procedureReference"`
-					Sequence           int64            `json:"sequence"`
-				} `json:"procedure"`
-				Provider        syntheaReference   `json:"provider"`
-				ReasonCode      []syntheaCode      `json:"reasonCode"`
-				ReasonReference []syntheaReference `json:"reasonReference"`
-				RecordedDate    time.Time          `json:"recordedDate"`
-				Referral        syntheaReference   `json:"referral"`
-				Requester       syntheaReference   `json:"requester"`
-				ResourceType    string             `json:"resourceType"`
-				Result          []syntheaReference `json:"result"`
-				Series          []struct {
-					BodySite syntheaCoding `json:"bodySite"`
-					Instance []struct {
-						Number   int64         `json:"number"`
-						SopClass syntheaCoding `json:"sopClass"`
-						Title    string        `json:"title"`
-						UID      string        `json:"uid"`
-					} `json:"instance"`
-					Modality          syntheaCoding `json:"modality"`
-					Number            int64         `json:"number"`
-					NumberOfInstances int64         `json:"numberOfInstances"`
-					Started           string        `json:"started"`
-					UID               string        `json:"uid"`
-				} `json:"series"`
-				ServiceProvider syntheaReference `json:"serviceProvider"`
-				Started         time.Time        `json:"started"`
-				Status          string           `json:"status"`
-				Subject         syntheaReference `json:"subject"`
-				SupportingInfo  []struct {
-					Category       syntheaCode      `json:"category"`
-					Sequence       int64            `json:"sequence"`
-					ValueReference syntheaReference `json:"valueReference"`
-				} `json:"supportingInfo"`
-				Telecom              []map[string]string `json:"telecom"`
-				Text                 map[string]string   `json:"text"`
-				Total                rawValue            `json:"total"`
-				Type                 rawValue            `json:"type"`
-				Use                  string              `json:"use"`
-				VaccineCode          syntheaCode         `json:"vaccineCode"`
-				ValueCodeableConcept syntheaCode         `json:"valueCodeableConcept"`
-				ValueQuantity        syntheaCoding       `json:"valueQuantity"`
-				VerificationStatus   syntheaCode         `json:"verificationStatus"`
-			} `json:"resource"`
-		} `json:"entry"`
-		ResourceType string `json:"resourceType"`
-		Type         string `json:"type"`
-	}
-	syntheaCode struct {
-		Coding []syntheaCoding `json:"coding"`
-		Text   string          `json:"text"`
-	}
-	syntheaCoding struct {
-		Code    string  `json:"code"`
-		Display string  `json:"display"`
-		System  string  `json:"system"`
-		Unit    string  `json:"unit"`
-		Value   float64 `json:"value"`
-	}
-	syntheaReference struct {
-		Display   string `json:"display"`
-		Reference string `json:"reference"`
-	}
-	syntheaAddress struct {
-		City       string             `json:"city"`
-		Country    string             `json:"country"`
-		Extension  []syntheaExtension `json:"extension"`
-		Line       []string           `json:"line"`
-		PostalCode string             `json:"postalCode"`
-		State      string             `json:"state"`
-	}
-	syntheaExtension struct {
-		URL          string             `json:"url"`
-		ValueAddress syntheaAddress     `json:"valueAddress"`
-		ValueCode    string             `json:"valueCode"`
-		ValueDecimal float64            `json:"valueDecimal"`
-		ValueString  string             `json:"valueString"`
-		Extension    []syntheaExtension `json:"extension"`
-	}
-	syntheaRange struct {
-		End   time.Time `json:"end"`
-		Start time.Time `json:"start"`
-	}
-	syntheaCurrency struct {
-		Currency string  `json:"currency"`
-		Value    float64 `json:"value"`
-	}
-)
-
-type (
-	twitterRoot struct {
-		Statuses       []twitterStatus `json:"statuses"`
-		SearchMetadata struct {
-			CompletedIn float64 `json:"completed_in"`
-			MaxID       int64   `json:"max_id"`
-			MaxIDStr    int64   `json:"max_id_str,string"`
-			NextResults string  `json:"next_results"`
-			Query       string  `json:"query"`
-			RefreshURL  string  `json:"refresh_url"`
-			Count       int     `json:"count"`
-			SinceID     int     `json:"since_id"`
-			SinceIDStr  int     `json:"since_id_str,string"`
-		} `json:"search_metadata"`
-	}
-	twitterStatus struct {
-		Metadata struct {
-			ResultType      string `json:"result_type"`
-			IsoLanguageCode string `json:"iso_language_code"`
-		} `json:"metadata"`
-		CreatedAt            string          `json:"created_at"`
-		ID                   int64           `json:"id"`
-		IDStr                int64           `json:"id_str,string"`
-		Text                 string          `json:"text"`
-		Source               string          `json:"source"`
-		Truncated            bool            `json:"truncated"`
-		InReplyToStatusID    int64           `json:"in_reply_to_status_id"`
-		InReplyToStatusIDStr int64           `json:"in_reply_to_status_id_str,string"`
-		InReplyToUserID      int64           `json:"in_reply_to_user_id"`
-		InReplyToUserIDStr   int64           `json:"in_reply_to_user_id_str,string"`
-		InReplyToScreenName  string          `json:"in_reply_to_screen_name"`
-		User                 twitterUser     `json:"user,omitempty"`
-		Geo                  any             `json:"geo"`
-		Coordinates          any             `json:"coordinates"`
-		Place                any             `json:"place"`
-		Contributors         any             `json:"contributors"`
-		RetweeetedStatus     *twitterStatus  `json:"retweeted_status"`
-		RetweetCount         int             `json:"retweet_count"`
-		FavoriteCount        int             `json:"favorite_count"`
-		Entities             twitterEntities `json:"entities,omitempty"`
-		Favorited            bool            `json:"favorited"`
-		Retweeted            bool            `json:"retweeted"`
-		PossiblySensitive    bool            `json:"possibly_sensitive"`
-		Lang                 string          `json:"lang"`
-	}
-	twitterUser struct {
-		ID                             int64           `json:"id"`
-		IDStr                          string          `json:"id_str"`
-		Name                           string          `json:"name"`
-		ScreenName                     string          `json:"screen_name"`
-		Location                       string          `json:"location"`
-		Description                    string          `json:"description"`
-		URL                            any             `json:"url"`
-		Entities                       twitterEntities `json:"entities"`
-		Protected                      bool            `json:"protected"`
-		FollowersCount                 int             `json:"followers_count"`
-		FriendsCount                   int             `json:"friends_count"`
-		ListedCount                    int             `json:"listed_count"`
-		CreatedAt                      string          `json:"created_at"`
-		FavouritesCount                int             `json:"favourites_count"`
-		UtcOffset                      int             `json:"utc_offset"`
-		TimeZone                       string          `json:"time_zone"`
-		GeoEnabled                     bool            `json:"geo_enabled"`
-		Verified                       bool            `json:"verified"`
-		StatusesCount                  int             `json:"statuses_count"`
-		Lang                           string          `json:"lang"`
-		ContributorsEnabled            bool            `json:"contributors_enabled"`
-		IsTranslator                   bool            `json:"is_translator"`
-		IsTranslationEnabled           bool            `json:"is_translation_enabled"`
-		ProfileBackgroundColor         string          `json:"profile_background_color"`
-		ProfileBackgroundImageURL      string          `json:"profile_background_image_url"`
-		ProfileBackgroundImageURLHTTPS string          `json:"profile_background_image_url_https"`
-		ProfileBackgroundTile          bool            `json:"profile_background_tile"`
-		ProfileImageURL                string          `json:"profile_image_url"`
-		ProfileImageURLHTTPS           string          `json:"profile_image_url_https"`
-		ProfileBannerURL               string          `json:"profile_banner_url"`
-		ProfileLinkColor               string          `json:"profile_link_color"`
-		ProfileSidebarBorderColor      string          `json:"profile_sidebar_border_color"`
-		ProfileSidebarFillColor        string          `json:"profile_sidebar_fill_color"`
-		ProfileTextColor               string          `json:"profile_text_color"`
-		ProfileUseBackgroundImage      bool            `json:"profile_use_background_image"`
-		DefaultProfile                 bool            `json:"default_profile"`
-		DefaultProfileImage            bool            `json:"default_profile_image"`
-		Following                      bool            `json:"following"`
-		FollowRequestSent              bool            `json:"follow_request_sent"`
-		Notifications                  bool            `json:"notifications"`
-	}
-	twitterEntities struct {
-		Hashtags     []any        `json:"hashtags"`
-		Symbols      []any        `json:"symbols"`
-		URL          *twitterURL  `json:"url"`
-		URLs         []twitterURL `json:"urls"`
-		UserMentions []struct {
-			ScreenName string `json:"screen_name"`
-			Name       string `json:"name"`
-			ID         int64  `json:"id"`
-			IDStr      int64  `json:"id_str,string"`
-			Indices    []int  `json:"indices"`
-		} `json:"user_mentions"`
-		Description struct {
-			URLs []twitterURL `json:"urls"`
-		} `json:"description"`
-		Media []struct {
-			ID            int64  `json:"id"`
-			IDStr         string `json:"id_str"`
-			Indices       []int  `json:"indices"`
-			MediaURL      string `json:"media_url"`
-			MediaURLHTTPS string `json:"media_url_https"`
-			URL           string `json:"url"`
-			DisplayURL    string `json:"display_url"`
-			ExpandedURL   string `json:"expanded_url"`
-			Type          string `json:"type"`
-			Sizes         map[string]struct {
-				W      int    `json:"w"`
-				H      int    `json:"h"`
-				Resize string `json:"resize"`
-			} `json:"sizes"`
-			SourceStatusID    int64 `json:"source_status_id"`
-			SourceStatusIDStr int64 `json:"source_status_id_str,string"`
-		} `json:"media"`
-	}
-	twitterURL struct {
-		URL         string       `json:"url"`
-		URLs        []twitterURL `json:"urls"`
-		ExpandedURL string       `json:"expanded_url"`
-		DisplayURL  string       `json:"display_url"`
-		Indices     []int        `json:"indices"`
-	}
-)
-
-// rawValue is the raw encoded JSON value.
-type rawValue []byte
-
-func (v rawValue) MarshalJSON() ([]byte, error) {
-	if v == nil {
-		return []byte("null"), nil
-	}
-	return v, nil
-}
-
-func (v *rawValue) UnmarshalJSON(b []byte) error {
-	if v == nil {
-		return errors.New("jsontest.rawValue: UnmarshalJSON on nil pointer")
-	}
-	*v = append((*v)[:0], b...)
-	return nil
-}
diff --git a/src/encoding/json/internal/jsontest/testdata/canada_geometry.json.zst b/src/encoding/json/internal/jsontest/testdata/canada_geometry.json.zst
deleted file mode 100644
index e0f56291c4d79a..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/canada_geometry.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/citm_catalog.json.zst b/src/encoding/json/internal/jsontest/testdata/citm_catalog.json.zst
deleted file mode 100644
index 3a74ae7af7cac2..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/citm_catalog.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/golang_source.json.zst b/src/encoding/json/internal/jsontest/testdata/golang_source.json.zst
deleted file mode 100644
index 7ff5f04767bfff..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/golang_source.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/string_escaped.json.zst b/src/encoding/json/internal/jsontest/testdata/string_escaped.json.zst
deleted file mode 100644
index 932b1e2513712b..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/string_escaped.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/string_unicode.json.zst b/src/encoding/json/internal/jsontest/testdata/string_unicode.json.zst
deleted file mode 100644
index dc13c4f47e4e9f..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/string_unicode.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/synthea_fhir.json.zst b/src/encoding/json/internal/jsontest/testdata/synthea_fhir.json.zst
deleted file mode 100644
index 3f869a2713a171..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/synthea_fhir.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsontest/testdata/twitter_status.json.zst b/src/encoding/json/internal/jsontest/testdata/twitter_status.json.zst
deleted file mode 100644
index f5a456be899031..00000000000000
Binary files a/src/encoding/json/internal/jsontest/testdata/twitter_status.json.zst and /dev/null differ
diff --git a/src/encoding/json/internal/jsonwire/decode.go b/src/encoding/json/internal/jsonwire/decode.go
deleted file mode 100644
index 42eeedcddf94cf..00000000000000
--- a/src/encoding/json/internal/jsonwire/decode.go
+++ /dev/null
@@ -1,629 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonwire
-
-import (
-	"io"
-	"math"
-	"slices"
-	"strconv"
-	"unicode/utf16"
-	"unicode/utf8"
-)
-
-type ValueFlags uint
-
-const (
-	_ ValueFlags = (1 << iota) / 2 // powers of two starting with zero
-
-	stringNonVerbatim  // string cannot be naively treated as valid UTF-8
-	stringNonCanonical // string not formatted according to RFC 8785, section 3.2.2.2.
-	// TODO: Track whether a number is a non-integer?
-)
-
-func (f *ValueFlags) Join(f2 ValueFlags) { *f |= f2 }
-func (f ValueFlags) IsVerbatim() bool    { return f&stringNonVerbatim == 0 }
-func (f ValueFlags) IsCanonical() bool   { return f&stringNonCanonical == 0 }
-
-// ConsumeWhitespace consumes leading JSON whitespace per RFC 7159, section 2.
-func ConsumeWhitespace(b []byte) (n int) {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	for len(b) > n && (b[n] == ' ' || b[n] == '\t' || b[n] == '\r' || b[n] == '\n') {
-		n++
-	}
-	return n
-}
-
-// ConsumeNull consumes the next JSON null literal per RFC 7159, section 3.
-// It returns 0 if it is invalid, in which case consumeLiteral should be used.
-func ConsumeNull(b []byte) int {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	const literal = "null"
-	if len(b) >= len(literal) && string(b[:len(literal)]) == literal {
-		return len(literal)
-	}
-	return 0
-}
-
-// ConsumeFalse consumes the next JSON false literal per RFC 7159, section 3.
-// It returns 0 if it is invalid, in which case consumeLiteral should be used.
-func ConsumeFalse(b []byte) int {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	const literal = "false"
-	if len(b) >= len(literal) && string(b[:len(literal)]) == literal {
-		return len(literal)
-	}
-	return 0
-}
-
-// ConsumeTrue consumes the next JSON true literal per RFC 7159, section 3.
-// It returns 0 if it is invalid, in which case consumeLiteral should be used.
-func ConsumeTrue(b []byte) int {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	const literal = "true"
-	if len(b) >= len(literal) && string(b[:len(literal)]) == literal {
-		return len(literal)
-	}
-	return 0
-}
-
-// ConsumeLiteral consumes the next JSON literal per RFC 7159, section 3.
-// If the input appears truncated, it returns io.ErrUnexpectedEOF.
-func ConsumeLiteral(b []byte, lit string) (n int, err error) {
-	for i := 0; i < len(b) && i < len(lit); i++ {
-		if b[i] != lit[i] {
-			return i, NewInvalidCharacterError(b[i:], "in literal "+lit+" (expecting "+strconv.QuoteRune(rune(lit[i]))+")")
-		}
-	}
-	if len(b) < len(lit) {
-		return len(b), io.ErrUnexpectedEOF
-	}
-	return len(lit), nil
-}
-
-// ConsumeSimpleString consumes the next JSON string per RFC 7159, section 7
-// but is limited to the grammar for an ASCII string without escape sequences.
-// It returns 0 if it is invalid or more complicated than a simple string,
-// in which case consumeString should be called.
-//
-// It rejects '<', '>', and '&' for compatibility reasons since these were
-// always escaped in the v1 implementation. Thus, if this function reports
-// non-zero then we know that the string would be encoded the same way
-// under both v1 or v2 escape semantics.
-func ConsumeSimpleString(b []byte) (n int) {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	if len(b) > 0 && b[0] == '"' {
-		n++
-		for len(b) > n && b[n] < utf8.RuneSelf && escapeASCII[b[n]] == 0 {
-			n++
-		}
-		if uint(len(b)) > uint(n) && b[n] == '"' {
-			n++
-			return n
-		}
-	}
-	return 0
-}
-
-// ConsumeString consumes the next JSON string per RFC 7159, section 7.
-// If validateUTF8 is false, then this allows the presence of invalid UTF-8
-// characters within the string itself.
-// It reports the number of bytes consumed and whether an error was encountered.
-// If the input appears truncated, it returns io.ErrUnexpectedEOF.
-func ConsumeString(flags *ValueFlags, b []byte, validateUTF8 bool) (n int, err error) {
-	return ConsumeStringResumable(flags, b, 0, validateUTF8)
-}
-
-// ConsumeStringResumable is identical to consumeString but supports resuming
-// from a previous call that returned io.ErrUnexpectedEOF.
-func ConsumeStringResumable(flags *ValueFlags, b []byte, resumeOffset int, validateUTF8 bool) (n int, err error) {
-	// Consume the leading double quote.
-	switch {
-	case resumeOffset > 0:
-		n = resumeOffset // already handled the leading quote
-	case uint(len(b)) == 0:
-		return n, io.ErrUnexpectedEOF
-	case b[0] == '"':
-		n++
-	default:
-		return n, NewInvalidCharacterError(b[n:], `at start of string (expecting '"')`)
-	}
-
-	// Consume every character in the string.
-	for uint(len(b)) > uint(n) {
-		// Optimize for long sequences of unescaped characters.
-		noEscape := func(c byte) bool {
-			return c < utf8.RuneSelf && ' ' <= c && c != '\\' && c != '"'
-		}
-		for uint(len(b)) > uint(n) && noEscape(b[n]) {
-			n++
-		}
-		if uint(len(b)) <= uint(n) {
-			return n, io.ErrUnexpectedEOF
-		}
-
-		// Check for terminating double quote.
-		if b[n] == '"' {
-			n++
-			return n, nil
-		}
-
-		switch r, rn := utf8.DecodeRune(b[n:]); {
-		// Handle UTF-8 encoded byte sequence.
-		// Due to specialized handling of ASCII above, we know that
-		// all normal sequences at this point must be 2 bytes or larger.
-		case rn > 1:
-			n += rn
-		// Handle escape sequence.
-		case r == '\\':
-			flags.Join(stringNonVerbatim)
-			resumeOffset = n
-			if uint(len(b)) < uint(n+2) {
-				return resumeOffset, io.ErrUnexpectedEOF
-			}
-			switch r := b[n+1]; r {
-			case '/':
-				// Forward slash is the only character with 3 representations.
-				// Per RFC 8785, section 3.2.2.2., this must not be escaped.
-				flags.Join(stringNonCanonical)
-				n += 2
-			case '"', '\\', 'b', 'f', 'n', 'r', 't':
-				n += 2
-			case 'u':
-				if uint(len(b)) < uint(n+6) {
-					if hasEscapedUTF16Prefix(b[n:], false) {
-						return resumeOffset, io.ErrUnexpectedEOF
-					}
-					flags.Join(stringNonCanonical)
-					return n, NewInvalidEscapeSequenceError(b[n:])
-				}
-				v1, ok := parseHexUint16(b[n+2 : n+6])
-				if !ok {
-					flags.Join(stringNonCanonical)
-					return n, NewInvalidEscapeSequenceError(b[n : n+6])
-				}
-				// Only certain control characters can use the \uFFFF notation
-				// for canonical formatting (per RFC 8785, section 3.2.2.2.).
-				switch v1 {
-				// \uFFFF notation not permitted for these characters.
-				case '\b', '\f', '\n', '\r', '\t':
-					flags.Join(stringNonCanonical)
-				default:
-					// \uFFFF notation only permitted for control characters.
-					if v1 >= ' ' {
-						flags.Join(stringNonCanonical)
-					} else {
-						// \uFFFF notation must be lower case.
-						for _, c := range b[n+2 : n+6] {
-							if 'A' <= c && c <= 'F' {
-								flags.Join(stringNonCanonical)
-							}
-						}
-					}
-				}
-				n += 6
-
-				r := rune(v1)
-				if validateUTF8 && utf16.IsSurrogate(r) {
-					if uint(len(b)) < uint(n+6) {
-						if hasEscapedUTF16Prefix(b[n:], true) {
-							return resumeOffset, io.ErrUnexpectedEOF
-						}
-						flags.Join(stringNonCanonical)
-						return n - 6, NewInvalidEscapeSequenceError(b[n-6:])
-					} else if v2, ok := parseHexUint16(b[n+2 : n+6]); b[n] != '\\' || b[n+1] != 'u' || !ok {
-						flags.Join(stringNonCanonical)
-						return n - 6, NewInvalidEscapeSequenceError(b[n-6 : n+6])
-					} else if r = utf16.DecodeRune(rune(v1), rune(v2)); r == utf8.RuneError {
-						flags.Join(stringNonCanonical)
-						return n - 6, NewInvalidEscapeSequenceError(b[n-6 : n+6])
-					} else {
-						n += 6
-					}
-				}
-			default:
-				flags.Join(stringNonCanonical)
-				return n, NewInvalidEscapeSequenceError(b[n : n+2])
-			}
-		// Handle invalid UTF-8.
-		case r == utf8.RuneError:
-			if !utf8.FullRune(b[n:]) {
-				return n, io.ErrUnexpectedEOF
-			}
-			flags.Join(stringNonVerbatim | stringNonCanonical)
-			if validateUTF8 {
-				return n, ErrInvalidUTF8
-			}
-			n++
-		// Handle invalid control characters.
-		case r < ' ':
-			flags.Join(stringNonVerbatim | stringNonCanonical)
-			return n, NewInvalidCharacterError(b[n:], "in string (expecting non-control character)")
-		default:
-			panic("BUG: unhandled character " + QuoteRune(b[n:]))
-		}
-	}
-	return n, io.ErrUnexpectedEOF
-}
-
-// AppendUnquote appends the unescaped form of a JSON string in src to dst.
-// Any invalid UTF-8 within the string will be replaced with utf8.RuneError,
-// but the error will be specified as having encountered such an error.
-// The input must be an entire JSON string with no surrounding whitespace.
-func AppendUnquote[Bytes ~[]byte | ~string](dst []byte, src Bytes) (v []byte, err error) {
-	dst = slices.Grow(dst, len(src))
-
-	// Consume the leading double quote.
-	var i, n int
-	switch {
-	case uint(len(src)) == 0:
-		return dst, io.ErrUnexpectedEOF
-	case src[0] == '"':
-		i, n = 1, 1
-	default:
-		return dst, NewInvalidCharacterError(src, `at start of string (expecting '"')`)
-	}
-
-	// Consume every character in the string.
-	for uint(len(src)) > uint(n) {
-		// Optimize for long sequences of unescaped characters.
-		noEscape := func(c byte) bool {
-			return c < utf8.RuneSelf && ' ' <= c && c != '\\' && c != '"'
-		}
-		for uint(len(src)) > uint(n) && noEscape(src[n]) {
-			n++
-		}
-		if uint(len(src)) <= uint(n) {
-			dst = append(dst, src[i:n]...)
-			return dst, io.ErrUnexpectedEOF
-		}
-
-		// Check for terminating double quote.
-		if src[n] == '"' {
-			dst = append(dst, src[i:n]...)
-			n++
-			if n < len(src) {
-				err = NewInvalidCharacterError(src[n:], "after string value")
-			}
-			return dst, err
-		}
-
-		switch r, rn := utf8.DecodeRuneInString(string(truncateMaxUTF8(src[n:]))); {
-		// Handle UTF-8 encoded byte sequence.
-		// Due to specialized handling of ASCII above, we know that
-		// all normal sequences at this point must be 2 bytes or larger.
-		case rn > 1:
-			n += rn
-		// Handle escape sequence.
-		case r == '\\':
-			dst = append(dst, src[i:n]...)
-
-			// Handle escape sequence.
-			if uint(len(src)) < uint(n+2) {
-				return dst, io.ErrUnexpectedEOF
-			}
-			switch r := src[n+1]; r {
-			case '"', '\\', '/':
-				dst = append(dst, r)
-				n += 2
-			case 'b':
-				dst = append(dst, '\b')
-				n += 2
-			case 'f':
-				dst = append(dst, '\f')
-				n += 2
-			case 'n':
-				dst = append(dst, '\n')
-				n += 2
-			case 'r':
-				dst = append(dst, '\r')
-				n += 2
-			case 't':
-				dst = append(dst, '\t')
-				n += 2
-			case 'u':
-				if uint(len(src)) < uint(n+6) {
-					if hasEscapedUTF16Prefix(src[n:], false) {
-						return dst, io.ErrUnexpectedEOF
-					}
-					return dst, NewInvalidEscapeSequenceError(src[n:])
-				}
-				v1, ok := parseHexUint16(src[n+2 : n+6])
-				if !ok {
-					return dst, NewInvalidEscapeSequenceError(src[n : n+6])
-				}
-				n += 6
-
-				// Check whether this is a surrogate half.
-				r := rune(v1)
-				if utf16.IsSurrogate(r) {
-					r = utf8.RuneError // assume failure unless the following succeeds
-					if uint(len(src)) < uint(n+6) {
-						if hasEscapedUTF16Prefix(src[n:], true) {
-							return utf8.AppendRune(dst, r), io.ErrUnexpectedEOF
-						}
-						err = NewInvalidEscapeSequenceError(src[n-6:])
-					} else if v2, ok := parseHexUint16(src[n+2 : n+6]); src[n] != '\\' || src[n+1] != 'u' || !ok {
-						err = NewInvalidEscapeSequenceError(src[n-6 : n+6])
-					} else if r = utf16.DecodeRune(rune(v1), rune(v2)); r == utf8.RuneError {
-						err = NewInvalidEscapeSequenceError(src[n-6 : n+6])
-					} else {
-						n += 6
-					}
-				}
-
-				dst = utf8.AppendRune(dst, r)
-			default:
-				return dst, NewInvalidEscapeSequenceError(src[n : n+2])
-			}
-			i = n
-		// Handle invalid UTF-8.
-		case r == utf8.RuneError:
-			dst = append(dst, src[i:n]...)
-			if !utf8.FullRuneInString(string(truncateMaxUTF8(src[n:]))) {
-				return dst, io.ErrUnexpectedEOF
-			}
-			// NOTE: An unescaped string may be longer than the escaped string
-			// because invalid UTF-8 bytes are being replaced.
-			dst = append(dst, "\uFFFD"...)
-			n += rn
-			i = n
-			err = ErrInvalidUTF8
-		// Handle invalid control characters.
-		case r < ' ':
-			dst = append(dst, src[i:n]...)
-			return dst, NewInvalidCharacterError(src[n:], "in string (expecting non-control character)")
-		default:
-			panic("BUG: unhandled character " + QuoteRune(src[n:]))
-		}
-	}
-	dst = append(dst, src[i:n]...)
-	return dst, io.ErrUnexpectedEOF
-}
-
-// hasEscapedUTF16Prefix reports whether b is possibly
-// the truncated prefix of a \uFFFF escape sequence.
-func hasEscapedUTF16Prefix[Bytes ~[]byte | ~string](b Bytes, lowerSurrogateHalf bool) bool {
-	for i := range len(b) {
-		switch c := b[i]; {
-		case i == 0 && c != '\\':
-			return false
-		case i == 1 && c != 'u':
-			return false
-		case i == 2 && lowerSurrogateHalf && c != 'd' && c != 'D':
-			return false // not within ['\uDC00':'\uDFFF']
-		case i == 3 && lowerSurrogateHalf && !('c' <= c && c <= 'f') && !('C' <= c && c <= 'F'):
-			return false // not within ['\uDC00':'\uDFFF']
-		case i >= 2 && i < 6 && !('0' <= c && c <= '9') && !('a' <= c && c <= 'f') && !('A' <= c && c <= 'F'):
-			return false
-		}
-	}
-	return true
-}
-
-// UnquoteMayCopy returns the unescaped form of b.
-// If there are no escaped characters, the output is simply a subslice of
-// the input with the surrounding quotes removed.
-// Otherwise, a new buffer is allocated for the output.
-// It assumes the input is valid.
-func UnquoteMayCopy(b []byte, isVerbatim bool) []byte {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	if isVerbatim {
-		return b[len(`"`) : len(b)-len(`"`)]
-	}
-	b, _ = AppendUnquote(nil, b)
-	return b
-}
-
-// ConsumeSimpleNumber consumes the next JSON number per RFC 7159, section 6
-// but is limited to the grammar for a positive integer.
-// It returns 0 if it is invalid or more complicated than a simple integer,
-// in which case consumeNumber should be called.
-func ConsumeSimpleNumber(b []byte) (n int) {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	if len(b) > 0 {
-		if b[0] == '0' {
-			n++
-		} else if '1' <= b[0] && b[0] <= '9' {
-			n++
-			for len(b) > n && ('0' <= b[n] && b[n] <= '9') {
-				n++
-			}
-		} else {
-			return 0
-		}
-		if uint(len(b)) <= uint(n) || (b[n] != '.' && b[n] != 'e' && b[n] != 'E') {
-			return n
-		}
-	}
-	return 0
-}
-
-type ConsumeNumberState uint
-
-const (
-	consumeNumberInit ConsumeNumberState = iota
-	beforeIntegerDigits
-	withinIntegerDigits
-	beforeFractionalDigits
-	withinFractionalDigits
-	beforeExponentDigits
-	withinExponentDigits
-)
-
-// ConsumeNumber consumes the next JSON number per RFC 7159, section 6.
-// It reports the number of bytes consumed and whether an error was encountered.
-// If the input appears truncated, it returns io.ErrUnexpectedEOF.
-//
-// Note that JSON numbers are not self-terminating.
-// If the entire input is consumed, then the caller needs to consider whether
-// there may be subsequent unread data that may still be part of this number.
-func ConsumeNumber(b []byte) (n int, err error) {
-	n, _, err = ConsumeNumberResumable(b, 0, consumeNumberInit)
-	return n, err
-}
-
-// ConsumeNumberResumable is identical to consumeNumber but supports resuming
-// from a previous call that returned io.ErrUnexpectedEOF.
-func ConsumeNumberResumable(b []byte, resumeOffset int, state ConsumeNumberState) (n int, _ ConsumeNumberState, err error) {
-	// Jump to the right state when resuming from a partial consumption.
-	n = resumeOffset
-	if state > consumeNumberInit {
-		switch state {
-		case withinIntegerDigits, withinFractionalDigits, withinExponentDigits:
-			// Consume leading digits.
-			for uint(len(b)) > uint(n) && ('0' <= b[n] && b[n] <= '9') {
-				n++
-			}
-			if uint(len(b)) <= uint(n) {
-				return n, state, nil // still within the same state
-			}
-			state++ // switches "withinX" to "beforeY" where Y is the state after X
-		}
-		switch state {
-		case beforeIntegerDigits:
-			goto beforeInteger
-		case beforeFractionalDigits:
-			goto beforeFractional
-		case beforeExponentDigits:
-			goto beforeExponent
-		default:
-			return n, state, nil
-		}
-	}
-
-	// Consume required integer component (with optional minus sign).
-beforeInteger:
-	resumeOffset = n
-	if uint(len(b)) > 0 && b[0] == '-' {
-		n++
-	}
-	switch {
-	case uint(len(b)) <= uint(n):
-		return resumeOffset, beforeIntegerDigits, io.ErrUnexpectedEOF
-	case b[n] == '0':
-		n++
-		state = beforeFractionalDigits
-	case '1' <= b[n] && b[n] <= '9':
-		n++
-		for uint(len(b)) > uint(n) && ('0' <= b[n] && b[n] <= '9') {
-			n++
-		}
-		state = withinIntegerDigits
-	default:
-		return n, state, NewInvalidCharacterError(b[n:], "in number (expecting digit)")
-	}
-
-	// Consume optional fractional component.
-beforeFractional:
-	if uint(len(b)) > uint(n) && b[n] == '.' {
-		resumeOffset = n
-		n++
-		switch {
-		case uint(len(b)) <= uint(n):
-			return resumeOffset, beforeFractionalDigits, io.ErrUnexpectedEOF
-		case '0' <= b[n] && b[n] <= '9':
-			n++
-		default:
-			return n, state, NewInvalidCharacterError(b[n:], "in number (expecting digit)")
-		}
-		for uint(len(b)) > uint(n) && ('0' <= b[n] && b[n] <= '9') {
-			n++
-		}
-		state = withinFractionalDigits
-	}
-
-	// Consume optional exponent component.
-beforeExponent:
-	if uint(len(b)) > uint(n) && (b[n] == 'e' || b[n] == 'E') {
-		resumeOffset = n
-		n++
-		if uint(len(b)) > uint(n) && (b[n] == '-' || b[n] == '+') {
-			n++
-		}
-		switch {
-		case uint(len(b)) <= uint(n):
-			return resumeOffset, beforeExponentDigits, io.ErrUnexpectedEOF
-		case '0' <= b[n] && b[n] <= '9':
-			n++
-		default:
-			return n, state, NewInvalidCharacterError(b[n:], "in number (expecting digit)")
-		}
-		for uint(len(b)) > uint(n) && ('0' <= b[n] && b[n] <= '9') {
-			n++
-		}
-		state = withinExponentDigits
-	}
-
-	return n, state, nil
-}
-
-// parseHexUint16 is similar to strconv.ParseUint,
-// but operates directly on []byte and is optimized for base-16.
-// See https://go.dev/issue/42429.
-func parseHexUint16[Bytes ~[]byte | ~string](b Bytes) (v uint16, ok bool) {
-	if len(b) != 4 {
-		return 0, false
-	}
-	for i := range 4 {
-		c := b[i]
-		switch {
-		case '0' <= c && c <= '9':
-			c = c - '0'
-		case 'a' <= c && c <= 'f':
-			c = 10 + c - 'a'
-		case 'A' <= c && c <= 'F':
-			c = 10 + c - 'A'
-		default:
-			return 0, false
-		}
-		v = v*16 + uint16(c)
-	}
-	return v, true
-}
-
-// ParseUint parses b as a decimal unsigned integer according to
-// a strict subset of the JSON number grammar, returning the value if valid.
-// It returns (0, false) if there is a syntax error and
-// returns (math.MaxUint64, false) if there is an overflow.
-func ParseUint(b []byte) (v uint64, ok bool) {
-	const unsafeWidth = 20 // len(fmt.Sprint(uint64(math.MaxUint64)))
-	var n int
-	for ; len(b) > n && ('0' <= b[n] && b[n] <= '9'); n++ {
-		v = 10*v + uint64(b[n]-'0')
-	}
-	switch {
-	case n == 0 || len(b) != n || (b[0] == '0' && string(b) != "0"):
-		return 0, false
-	case n >= unsafeWidth && (b[0] != '1' || v < 1e19 || n > unsafeWidth):
-		return math.MaxUint64, false
-	}
-	return v, true
-}
-
-// ParseFloat parses a floating point number according to the Go float grammar.
-// Note that the JSON number grammar is a strict subset.
-//
-// If the number overflows the finite representation of a float,
-// then we return MaxFloat since any finite value will always be infinitely
-// more accurate at representing another finite value than an infinite value.
-func ParseFloat(b []byte, bits int) (v float64, ok bool) {
-	fv, err := strconv.ParseFloat(string(b), bits)
-	if math.IsInf(fv, 0) {
-		switch {
-		case bits == 32 && math.IsInf(fv, +1):
-			fv = +math.MaxFloat32
-		case bits == 64 && math.IsInf(fv, +1):
-			fv = +math.MaxFloat64
-		case bits == 32 && math.IsInf(fv, -1):
-			fv = -math.MaxFloat32
-		case bits == 64 && math.IsInf(fv, -1):
-			fv = -math.MaxFloat64
-		}
-	}
-	return fv, err == nil
-}
diff --git a/src/encoding/json/internal/jsonwire/decode_test.go b/src/encoding/json/internal/jsonwire/decode_test.go
deleted file mode 100644
index 549c1a1f62b283..00000000000000
--- a/src/encoding/json/internal/jsonwire/decode_test.go
+++ /dev/null
@@ -1,443 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonwire
-
-import (
-	"errors"
-	"io"
-	"math"
-	"reflect"
-	"strings"
-	"testing"
-)
-
-func TestConsumeWhitespace(t *testing.T) {
-	tests := []struct {
-		in   string
-		want int
-	}{
-		{"", 0},
-		{"a", 0},
-		{" a", 1},
-		{" a ", 1},
-		{" \n\r\ta", 4},
-		{" \n\r\t \n\r\t \n\r\t \n\r\t", 16},
-		{"\u00a0", 0}, // non-breaking space is not JSON whitespace
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			if got := ConsumeWhitespace([]byte(tt.in)); got != tt.want {
-				t.Errorf("ConsumeWhitespace(%q) = %v, want %v", tt.in, got, tt.want)
-			}
-		})
-	}
-}
-
-func TestConsumeLiteral(t *testing.T) {
-	tests := []struct {
-		literal string
-		in      string
-		want    int
-		wantErr error
-	}{
-		{"null", "", 0, io.ErrUnexpectedEOF},
-		{"null", "n", 1, io.ErrUnexpectedEOF},
-		{"null", "nu", 2, io.ErrUnexpectedEOF},
-		{"null", "nul", 3, io.ErrUnexpectedEOF},
-		{"null", "null", 4, nil},
-		{"null", "nullx", 4, nil},
-		{"null", "x", 0, NewInvalidCharacterError("x", "in literal null (expecting 'n')")},
-		{"null", "nuxx", 2, NewInvalidCharacterError("x", "in literal null (expecting 'l')")},
-
-		{"false", "", 0, io.ErrUnexpectedEOF},
-		{"false", "f", 1, io.ErrUnexpectedEOF},
-		{"false", "fa", 2, io.ErrUnexpectedEOF},
-		{"false", "fal", 3, io.ErrUnexpectedEOF},
-		{"false", "fals", 4, io.ErrUnexpectedEOF},
-		{"false", "false", 5, nil},
-		{"false", "falsex", 5, nil},
-		{"false", "x", 0, NewInvalidCharacterError("x", "in literal false (expecting 'f')")},
-		{"false", "falsx", 4, NewInvalidCharacterError("x", "in literal false (expecting 'e')")},
-
-		{"true", "", 0, io.ErrUnexpectedEOF},
-		{"true", "t", 1, io.ErrUnexpectedEOF},
-		{"true", "tr", 2, io.ErrUnexpectedEOF},
-		{"true", "tru", 3, io.ErrUnexpectedEOF},
-		{"true", "true", 4, nil},
-		{"true", "truex", 4, nil},
-		{"true", "x", 0, NewInvalidCharacterError("x", "in literal true (expecting 't')")},
-		{"true", "trux", 3, NewInvalidCharacterError("x", "in literal true (expecting 'e')")},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			var got int
-			switch tt.literal {
-			case "null":
-				got = ConsumeNull([]byte(tt.in))
-			case "false":
-				got = ConsumeFalse([]byte(tt.in))
-			case "true":
-				got = ConsumeTrue([]byte(tt.in))
-			default:
-				t.Errorf("invalid literal: %v", tt.literal)
-			}
-			switch {
-			case tt.wantErr == nil && got != tt.want:
-				t.Errorf("Consume%v(%q) = %v, want %v", strings.Title(tt.literal), tt.in, got, tt.want)
-			case tt.wantErr != nil && got != 0:
-				t.Errorf("Consume%v(%q) = %v, want %v", strings.Title(tt.literal), tt.in, got, 0)
-			}
-
-			got, gotErr := ConsumeLiteral([]byte(tt.in), tt.literal)
-			if got != tt.want || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("ConsumeLiteral(%q, %q) = (%v, %v), want (%v, %v)", tt.in, tt.literal, got, gotErr, tt.want, tt.wantErr)
-			}
-		})
-	}
-}
-
-func TestConsumeString(t *testing.T) {
-	var errPrev = errors.New("same as previous error")
-	tests := []struct {
-		in             string
-		simple         bool
-		want           int
-		wantUTF8       int // consumed bytes if validateUTF8 is specified
-		wantFlags      ValueFlags
-		wantUnquote    string
-		wantErr        error
-		wantErrUTF8    error // error if validateUTF8 is specified
-		wantErrUnquote error
-	}{
-		{``, false, 0, 0, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"`, false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`""`, true, 2, 2, 0, "", nil, nil, nil},
-		{`""x`, true, 2, 2, 0, "", nil, nil, NewInvalidCharacterError("x", "after string value")},
-		{` ""x`, false, 0, 0, 0, "", NewInvalidCharacterError(" ", "at start of string (expecting '\"')"), errPrev, errPrev},
-		{`"hello`, false, 6, 6, 0, "hello", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"hello"`, true, 7, 7, 0, "hello", nil, nil, nil},
-		{"\"\x00\"", false, 1, 1, stringNonVerbatim | stringNonCanonical, "", NewInvalidCharacterError("\x00", "in string (expecting non-control character)"), errPrev, errPrev},
-		{`"\u0000"`, false, 8, 8, stringNonVerbatim, "\x00", nil, nil, nil},
-		{"\"\x1f\"", false, 1, 1, stringNonVerbatim | stringNonCanonical, "", NewInvalidCharacterError("\x1f", "in string (expecting non-control character)"), errPrev, errPrev},
-		{`"\u001f"`, false, 8, 8, stringNonVerbatim, "\x1f", nil, nil, nil},
-		{`"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"`, true, 54, 54, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", nil, nil, nil},
-		{"\" !#$%'()*+,-./0123456789:;=?@[]^_`{|}~\x7f\"", true, 41, 41, 0, " !#$%'()*+,-./0123456789:;=?@[]^_`{|}~\x7f", nil, nil, nil},
-		{`"&"`, false, 3, 3, 0, "&", nil, nil, nil},
-		{`"<"`, false, 3, 3, 0, "<", nil, nil, nil},
-		{`">"`, false, 3, 3, 0, ">", nil, nil, nil},
-		{"\"x\x80\"", false, 4, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"x\xff\"", false, 4, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"x\xc0", false, 3, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd", io.ErrUnexpectedEOF, ErrInvalidUTF8, io.ErrUnexpectedEOF},
-		{"\"x\xc0\x80\"", false, 5, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"x\xe0", false, 2, 2, 0, "x", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{"\"x\xe0\x80", false, 4, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd", io.ErrUnexpectedEOF, ErrInvalidUTF8, io.ErrUnexpectedEOF},
-		{"\"x\xe0\x80\x80\"", false, 6, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"x\xf0", false, 2, 2, 0, "x", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{"\"x\xf0\x80", false, 4, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd", io.ErrUnexpectedEOF, ErrInvalidUTF8, io.ErrUnexpectedEOF},
-		{"\"x\xf0\x80\x80", false, 5, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd\ufffd", io.ErrUnexpectedEOF, ErrInvalidUTF8, io.ErrUnexpectedEOF},
-		{"\"x\xf0\x80\x80\x80\"", false, 7, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd\ufffd\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"x\xed\xba\xad\"", false, 6, 2, stringNonVerbatim | stringNonCanonical, "x\ufffd\ufffd\ufffd", nil, ErrInvalidUTF8, errPrev},
-		{"\"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602\"", false, 25, 25, 0, "\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602", nil, nil, nil},
-		{`"¢"`[:2], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"¢"`[:3], false, 3, 3, 0, "¢", io.ErrUnexpectedEOF, errPrev, errPrev}, // missing terminating quote
-		{`"¢"`[:4], false, 4, 4, 0, "¢", nil, nil, nil},
-		{`"€"`[:2], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"€"`[:3], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"€"`[:4], false, 4, 4, 0, "€", io.ErrUnexpectedEOF, errPrev, errPrev}, // missing terminating quote
-		{`"€"`[:5], false, 5, 5, 0, "€", nil, nil, nil},
-		{`"𐍈"`[:2], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"𐍈"`[:3], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"𐍈"`[:4], false, 1, 1, 0, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"𐍈"`[:5], false, 5, 5, 0, "𐍈", io.ErrUnexpectedEOF, errPrev, errPrev}, // missing terminating quote
-		{`"𐍈"`[:6], false, 6, 6, 0, "𐍈", nil, nil, nil},
-		{`"x\`, false, 2, 2, stringNonVerbatim, "x", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"x\"`, false, 4, 4, stringNonVerbatim, "x\"", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"x\x"`, false, 2, 2, stringNonVerbatim | stringNonCanonical, "x", NewInvalidEscapeSequenceError(`\x`), errPrev, errPrev},
-		{`"\"\\\b\f\n\r\t"`, false, 16, 16, stringNonVerbatim, "\"\\\b\f\n\r\t", nil, nil, nil},
-		{`"/"`, true, 3, 3, 0, "/", nil, nil, nil},
-		{`"\/"`, false, 4, 4, stringNonVerbatim | stringNonCanonical, "/", nil, nil, nil},
-		{`"\u002f"`, false, 8, 8, stringNonVerbatim | stringNonCanonical, "/", nil, nil, nil},
-		{`"\u`, false, 1, 1, stringNonVerbatim, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\uf`, false, 1, 1, stringNonVerbatim, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\uff`, false, 1, 1, stringNonVerbatim, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\ufff`, false, 1, 1, stringNonVerbatim, "", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\ufffd`, false, 7, 7, stringNonVerbatim | stringNonCanonical, "\ufffd", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\ufffd"`, false, 8, 8, stringNonVerbatim | stringNonCanonical, "\ufffd", nil, nil, nil},
-		{`"\uABCD"`, false, 8, 8, stringNonVerbatim | stringNonCanonical, "\uabcd", nil, nil, nil},
-		{`"\uefX0"`, false, 1, 1, stringNonVerbatim | stringNonCanonical, "", NewInvalidEscapeSequenceError(`\uefX0`), errPrev, errPrev},
-		{`"\uDEAD`, false, 7, 1, stringNonVerbatim | stringNonCanonical, "\ufffd", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\uDEAD"`, false, 8, 1, stringNonVerbatim | stringNonCanonical, "\ufffd", nil, NewInvalidEscapeSequenceError(`\uDEAD"`), errPrev},
-		{`"\uDEAD______"`, false, 14, 1, stringNonVerbatim | stringNonCanonical, "\ufffd______", nil, NewInvalidEscapeSequenceError(`\uDEAD______`), errPrev},
-		{`"\uDEAD\uXXXX"`, false, 7, 1, stringNonVerbatim | stringNonCanonical, "\ufffd", NewInvalidEscapeSequenceError(`\uXXXX`), NewInvalidEscapeSequenceError(`\uDEAD\uXXXX`), NewInvalidEscapeSequenceError(`\uXXXX`)},
-		{`"\uDEAD\uBEEF"`, false, 14, 1, stringNonVerbatim | stringNonCanonical, "\ufffd\ubeef", nil, NewInvalidEscapeSequenceError(`\uDEAD\uBEEF`), errPrev},
-		{`"\uD800\udea`, false, 7, 1, stringNonVerbatim | stringNonCanonical, "\ufffd", io.ErrUnexpectedEOF, errPrev, errPrev},
-		{`"\uD800\udb`, false, 7, 1, stringNonVerbatim | stringNonCanonical, "\ufffd", io.ErrUnexpectedEOF, NewInvalidEscapeSequenceError(`\uD800\udb`), io.ErrUnexpectedEOF},
-		{`"\uD800\udead"`, false, 14, 14, stringNonVerbatim | stringNonCanonical, "\U000102ad", nil, nil, nil},
-		{`"\u0022\u005c\u002f\u0008\u000c\u000a\u000d\u0009"`, false, 50, 50, stringNonVerbatim | stringNonCanonical, "\"\\/\b\f\n\r\t", nil, nil, nil},
-		{`"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\ud83d\ude02"`, false, 56, 56, stringNonVerbatim | stringNonCanonical, "\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602", nil, nil, nil},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			if tt.wantErrUTF8 == errPrev {
-				tt.wantErrUTF8 = tt.wantErr
-			}
-			if tt.wantErrUnquote == errPrev {
-				tt.wantErrUnquote = tt.wantErrUTF8
-			}
-
-			switch got := ConsumeSimpleString([]byte(tt.in)); {
-			case tt.simple && got != tt.want:
-				t.Errorf("consumeSimpleString(%q) = %v, want %v", tt.in, got, tt.want)
-			case !tt.simple && got != 0:
-				t.Errorf("consumeSimpleString(%q) = %v, want %v", tt.in, got, 0)
-			}
-
-			var gotFlags ValueFlags
-			got, gotErr := ConsumeString(&gotFlags, []byte(tt.in), false)
-			if gotFlags != tt.wantFlags {
-				t.Errorf("consumeString(%q, false) flags = %v, want %v", tt.in, gotFlags, tt.wantFlags)
-			}
-			if got != tt.want || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("consumeString(%q, false) = (%v, %v), want (%v, %v)", tt.in, got, gotErr, tt.want, tt.wantErr)
-			}
-
-			got, gotErr = ConsumeString(&gotFlags, []byte(tt.in), true)
-			if got != tt.wantUTF8 || !reflect.DeepEqual(gotErr, tt.wantErrUTF8) {
-				t.Errorf("consumeString(%q, false) = (%v, %v), want (%v, %v)", tt.in, got, gotErr, tt.wantUTF8, tt.wantErrUTF8)
-			}
-
-			gotUnquote, gotErr := AppendUnquote(nil, tt.in)
-			if string(gotUnquote) != tt.wantUnquote || !reflect.DeepEqual(gotErr, tt.wantErrUnquote) {
-				t.Errorf("AppendUnquote(nil, %q) = (%q, %v), want (%q, %v)", tt.in[:got], gotUnquote, gotErr, tt.wantUnquote, tt.wantErrUnquote)
-			}
-		})
-	}
-}
-
-func TestConsumeNumber(t *testing.T) {
-	tests := []struct {
-		in      string
-		simple  bool
-		want    int
-		wantErr error
-	}{
-		{"", false, 0, io.ErrUnexpectedEOF},
-		{`"NaN"`, false, 0, NewInvalidCharacterError("\"", "in number (expecting digit)")},
-		{`"Infinity"`, false, 0, NewInvalidCharacterError("\"", "in number (expecting digit)")},
-		{`"-Infinity"`, false, 0, NewInvalidCharacterError("\"", "in number (expecting digit)")},
-		{".0", false, 0, NewInvalidCharacterError(".", "in number (expecting digit)")},
-		{"0", true, 1, nil},
-		{"-0", false, 2, nil},
-		{"+0", false, 0, NewInvalidCharacterError("+", "in number (expecting digit)")},
-		{"1", true, 1, nil},
-		{"-1", false, 2, nil},
-		{"00", true, 1, nil},
-		{"-00", false, 2, nil},
-		{"01", true, 1, nil},
-		{"-01", false, 2, nil},
-		{"0i", true, 1, nil},
-		{"-0i", false, 2, nil},
-		{"0f", true, 1, nil},
-		{"-0f", false, 2, nil},
-		{"9876543210", true, 10, nil},
-		{"-9876543210", false, 11, nil},
-		{"9876543210x", true, 10, nil},
-		{"-9876543210x", false, 11, nil},
-		{" 9876543210", true, 0, NewInvalidCharacterError(" ", "in number (expecting digit)")},
-		{"- 9876543210", false, 1, NewInvalidCharacterError(" ", "in number (expecting digit)")},
-		{strings.Repeat("9876543210", 1000), true, 10000, nil},
-		{"-" + strings.Repeat("9876543210", 1000), false, 1 + 10000, nil},
-		{"0.", false, 1, io.ErrUnexpectedEOF},
-		{"-0.", false, 2, io.ErrUnexpectedEOF},
-		{"0e", false, 1, io.ErrUnexpectedEOF},
-		{"-0e", false, 2, io.ErrUnexpectedEOF},
-		{"0E", false, 1, io.ErrUnexpectedEOF},
-		{"-0E", false, 2, io.ErrUnexpectedEOF},
-		{"0.0", false, 3, nil},
-		{"-0.0", false, 4, nil},
-		{"0e0", false, 3, nil},
-		{"-0e0", false, 4, nil},
-		{"0E0", false, 3, nil},
-		{"-0E0", false, 4, nil},
-		{"0.0123456789", false, 12, nil},
-		{"-0.0123456789", false, 13, nil},
-		{"1.f", false, 2, NewInvalidCharacterError("f", "in number (expecting digit)")},
-		{"-1.f", false, 3, NewInvalidCharacterError("f", "in number (expecting digit)")},
-		{"1.e", false, 2, NewInvalidCharacterError("e", "in number (expecting digit)")},
-		{"-1.e", false, 3, NewInvalidCharacterError("e", "in number (expecting digit)")},
-		{"1e0", false, 3, nil},
-		{"-1e0", false, 4, nil},
-		{"1E0", false, 3, nil},
-		{"-1E0", false, 4, nil},
-		{"1Ex", false, 2, NewInvalidCharacterError("x", "in number (expecting digit)")},
-		{"-1Ex", false, 3, NewInvalidCharacterError("x", "in number (expecting digit)")},
-		{"1e-0", false, 4, nil},
-		{"-1e-0", false, 5, nil},
-		{"1e+0", false, 4, nil},
-		{"-1e+0", false, 5, nil},
-		{"1E-0", false, 4, nil},
-		{"-1E-0", false, 5, nil},
-		{"1E+0", false, 4, nil},
-		{"-1E+0", false, 5, nil},
-		{"1E+00500", false, 8, nil},
-		{"-1E+00500", false, 9, nil},
-		{"1E+00500x", false, 8, nil},
-		{"-1E+00500x", false, 9, nil},
-		{"9876543210.0123456789e+01234589x", false, 31, nil},
-		{"-9876543210.0123456789e+01234589x", false, 32, nil},
-		{"1_000_000", true, 1, nil},
-		{"0x12ef", true, 1, nil},
-		{"0x1p-2", true, 1, nil},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			switch got := ConsumeSimpleNumber([]byte(tt.in)); {
-			case tt.simple && got != tt.want:
-				t.Errorf("ConsumeSimpleNumber(%q) = %v, want %v", tt.in, got, tt.want)
-			case !tt.simple && got != 0:
-				t.Errorf("ConsumeSimpleNumber(%q) = %v, want %v", tt.in, got, 0)
-			}
-
-			got, gotErr := ConsumeNumber([]byte(tt.in))
-			if got != tt.want || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("ConsumeNumber(%q) = (%v, %v), want (%v, %v)", tt.in, got, gotErr, tt.want, tt.wantErr)
-			}
-		})
-	}
-}
-
-func TestParseHexUint16(t *testing.T) {
-	tests := []struct {
-		in     string
-		want   uint16
-		wantOk bool
-	}{
-		{"", 0, false},
-		{"a", 0, false},
-		{"ab", 0, false},
-		{"abc", 0, false},
-		{"abcd", 0xabcd, true},
-		{"abcde", 0, false},
-		{"9eA1", 0x9ea1, true},
-		{"gggg", 0, false},
-		{"0000", 0x0000, true},
-		{"1234", 0x1234, true},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			got, gotOk := parseHexUint16([]byte(tt.in))
-			if got != tt.want || gotOk != tt.wantOk {
-				t.Errorf("parseHexUint16(%q) = (0x%04x, %v), want (0x%04x, %v)", tt.in, got, gotOk, tt.want, tt.wantOk)
-			}
-		})
-	}
-}
-
-func TestParseUint(t *testing.T) {
-	tests := []struct {
-		in     string
-		want   uint64
-		wantOk bool
-	}{
-		{"", 0, false},
-		{"0", 0, true},
-		{"1", 1, true},
-		{"-1", 0, false},
-		{"1f", 0, false},
-		{"00", 0, false},
-		{"01", 0, false},
-		{"10", 10, true},
-		{"10.9", 0, false},
-		{" 10", 0, false},
-		{"10 ", 0, false},
-		{"123456789", 123456789, true},
-		{"123456789d", 0, false},
-		{"18446744073709551614", math.MaxUint64 - 1, true},
-		{"18446744073709551615", math.MaxUint64, true},
-		{"18446744073709551616", math.MaxUint64, false},
-		{"18446744073709551620", math.MaxUint64, false},
-		{"18446744073709551700", math.MaxUint64, false},
-		{"18446744073709552000", math.MaxUint64, false},
-		{"18446744073709560000", math.MaxUint64, false},
-		{"18446744073709600000", math.MaxUint64, false},
-		{"18446744073710000000", math.MaxUint64, false},
-		{"18446744073800000000", math.MaxUint64, false},
-		{"18446744074000000000", math.MaxUint64, false},
-		{"18446744080000000000", math.MaxUint64, false},
-		{"18446744100000000000", math.MaxUint64, false},
-		{"18446745000000000000", math.MaxUint64, false},
-		{"18446750000000000000", math.MaxUint64, false},
-		{"18446800000000000000", math.MaxUint64, false},
-		{"18447000000000000000", math.MaxUint64, false},
-		{"18450000000000000000", math.MaxUint64, false},
-		{"18500000000000000000", math.MaxUint64, false},
-		{"19000000000000000000", math.MaxUint64, false},
-		{"19999999999999999999", math.MaxUint64, false},
-		{"20000000000000000000", math.MaxUint64, false},
-		{"100000000000000000000", math.MaxUint64, false},
-		{"99999999999999999999999999999999", math.MaxUint64, false},
-		{"99999999999999999999999999999999f", 0, false},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			got, gotOk := ParseUint([]byte(tt.in))
-			if got != tt.want || gotOk != tt.wantOk {
-				t.Errorf("ParseUint(%q) = (%v, %v), want (%v, %v)", tt.in, got, gotOk, tt.want, tt.wantOk)
-			}
-		})
-	}
-}
-
-func TestParseFloat(t *testing.T) {
-	tests := []struct {
-		in     string
-		want32 float64
-		want64 float64
-		wantOk bool
-	}{
-		{"0", 0, 0, true},
-		{"-1", -1, -1, true},
-		{"1", 1, 1, true},
-
-		{"-16777215", -16777215, -16777215, true}, // -(1<<24 - 1)
-		{"16777215", 16777215, 16777215, true},    // +(1<<24 - 1)
-		{"-16777216", -16777216, -16777216, true}, // -(1<<24)
-		{"16777216", 16777216, 16777216, true},    // +(1<<24)
-		{"-16777217", -16777216, -16777217, true}, // -(1<<24 + 1)
-		{"16777217", 16777216, 16777217, true},    // +(1<<24 + 1)
-
-		{"-9007199254740991", -9007199254740992, -9007199254740991, true}, // -(1<<53 - 1)
-		{"9007199254740991", 9007199254740992, 9007199254740991, true},    // +(1<<53 - 1)
-		{"-9007199254740992", -9007199254740992, -9007199254740992, true}, // -(1<<53)
-		{"9007199254740992", 9007199254740992, 9007199254740992, true},    // +(1<<53)
-		{"-9007199254740993", -9007199254740992, -9007199254740992, true}, // -(1<<53 + 1)
-		{"9007199254740993", 9007199254740992, 9007199254740992, true},    // +(1<<53 + 1)
-
-		{"-1e1000", -math.MaxFloat32, -math.MaxFloat64, false},
-		{"1e1000", +math.MaxFloat32, +math.MaxFloat64, false},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			got32, gotOk32 := ParseFloat([]byte(tt.in), 32)
-			if got32 != tt.want32 || gotOk32 != tt.wantOk {
-				t.Errorf("ParseFloat(%q, 32) = (%v, %v), want (%v, %v)", tt.in, got32, gotOk32, tt.want32, tt.wantOk)
-			}
-
-			got64, gotOk64 := ParseFloat([]byte(tt.in), 64)
-			if got64 != tt.want64 || gotOk64 != tt.wantOk {
-				t.Errorf("ParseFloat(%q, 64) = (%v, %v), want (%v, %v)", tt.in, got64, gotOk64, tt.want64, tt.wantOk)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/internal/jsonwire/encode.go b/src/encoding/json/internal/jsonwire/encode.go
deleted file mode 100644
index 3901ff8bed6417..00000000000000
--- a/src/encoding/json/internal/jsonwire/encode.go
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonwire
-
-import (
-	"math"
-	"slices"
-	"strconv"
-	"unicode/utf16"
-	"unicode/utf8"
-
-	"encoding/json/internal/jsonflags"
-)
-
-// escapeASCII reports whether the ASCII character needs to be escaped.
-// It conservatively assumes EscapeForHTML.
-var escapeASCII = [...]uint8{
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // escape control characters
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // escape control characters
-	0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // escape '"' and '&'
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, // escape '<' and '>'
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // escape '\\'
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-}
-
-// NeedEscape reports whether src needs escaping of any characters.
-// It conservatively assumes EscapeForHTML and EscapeForJS.
-// It reports true for inputs with invalid UTF-8.
-func NeedEscape[Bytes ~[]byte | ~string](src Bytes) bool {
-	var i int
-	for uint(len(src)) > uint(i) {
-		if c := src[i]; c < utf8.RuneSelf {
-			if escapeASCII[c] > 0 {
-				return true
-			}
-			i++
-		} else {
-			r, rn := utf8.DecodeRuneInString(string(truncateMaxUTF8(src[i:])))
-			if r == utf8.RuneError || r == '\u2028' || r == '\u2029' {
-				return true
-			}
-			i += rn
-		}
-	}
-	return false
-}
-
-// AppendQuote appends src to dst as a JSON string per RFC 7159, section 7.
-//
-// It takes in flags and respects the following:
-//   - EscapeForHTML escapes '<', '>', and '&'.
-//   - EscapeForJS escapes '\u2028' and '\u2029'.
-//   - AllowInvalidUTF8 avoids reporting an error for invalid UTF-8.
-//
-// Regardless of whether AllowInvalidUTF8 is specified,
-// invalid bytes are replaced with the Unicode replacement character ('\ufffd').
-// If no escape flags are set, then the shortest representable form is used,
-// which is also the canonical form for strings (RFC 8785, section 3.2.2.2).
-func AppendQuote[Bytes ~[]byte | ~string](dst []byte, src Bytes, flags *jsonflags.Flags) ([]byte, error) {
-	var i, n int
-	var hasInvalidUTF8 bool
-	dst = slices.Grow(dst, len(`"`)+len(src)+len(`"`))
-	dst = append(dst, '"')
-	for uint(len(src)) > uint(n) {
-		if c := src[n]; c < utf8.RuneSelf {
-			// Handle single-byte ASCII.
-			n++
-			if escapeASCII[c] == 0 {
-				continue // no escaping possibly needed
-			}
-			// Handle escaping of single-byte ASCII.
-			if !(c == '<' || c == '>' || c == '&') || flags.Get(jsonflags.EscapeForHTML) {
-				dst = append(dst, src[i:n-1]...)
-				dst = appendEscapedASCII(dst, c)
-				i = n
-			}
-		} else {
-			// Handle multi-byte Unicode.
-			r, rn := utf8.DecodeRuneInString(string(truncateMaxUTF8(src[n:])))
-			n += rn
-			if r != utf8.RuneError && r != '\u2028' && r != '\u2029' {
-				continue // no escaping possibly needed
-			}
-			// Handle escaping of multi-byte Unicode.
-			switch {
-			case isInvalidUTF8(r, rn):
-				hasInvalidUTF8 = true
-				dst = append(dst, src[i:n-rn]...)
-				if flags.Get(jsonflags.EscapeInvalidUTF8) {
-					dst = append(dst, `\ufffd`...)
-				} else {
-					dst = append(dst, "\ufffd"...)
-				}
-				i = n
-			case (r == '\u2028' || r == '\u2029') && flags.Get(jsonflags.EscapeForJS):
-				dst = append(dst, src[i:n-rn]...)
-				dst = appendEscapedUnicode(dst, r)
-				i = n
-			}
-		}
-	}
-	dst = append(dst, src[i:n]...)
-	dst = append(dst, '"')
-	if hasInvalidUTF8 && !flags.Get(jsonflags.AllowInvalidUTF8) {
-		return dst, ErrInvalidUTF8
-	}
-	return dst, nil
-}
-
-func appendEscapedASCII(dst []byte, c byte) []byte {
-	switch c {
-	case '"', '\\':
-		dst = append(dst, '\\', c)
-	case '\b':
-		dst = append(dst, "\\b"...)
-	case '\f':
-		dst = append(dst, "\\f"...)
-	case '\n':
-		dst = append(dst, "\\n"...)
-	case '\r':
-		dst = append(dst, "\\r"...)
-	case '\t':
-		dst = append(dst, "\\t"...)
-	default:
-		dst = appendEscapedUTF16(dst, uint16(c))
-	}
-	return dst
-}
-
-func appendEscapedUnicode(dst []byte, r rune) []byte {
-	if r1, r2 := utf16.EncodeRune(r); r1 != '\ufffd' && r2 != '\ufffd' {
-		dst = appendEscapedUTF16(dst, uint16(r1))
-		dst = appendEscapedUTF16(dst, uint16(r2))
-	} else {
-		dst = appendEscapedUTF16(dst, uint16(r))
-	}
-	return dst
-}
-
-func appendEscapedUTF16(dst []byte, x uint16) []byte {
-	const hex = "0123456789abcdef"
-	return append(dst, '\\', 'u', hex[(x>>12)&0xf], hex[(x>>8)&0xf], hex[(x>>4)&0xf], hex[(x>>0)&0xf])
-}
-
-// ReformatString consumes a JSON string from src and appends it to dst,
-// reformatting it if necessary according to the specified flags.
-// It returns the appended output and the number of consumed input bytes.
-func ReformatString(dst, src []byte, flags *jsonflags.Flags) ([]byte, int, error) {
-	// TODO: Should this update ValueFlags as input?
-	var valFlags ValueFlags
-	n, err := ConsumeString(&valFlags, src, !flags.Get(jsonflags.AllowInvalidUTF8))
-	if err != nil {
-		return dst, n, err
-	}
-
-	// If the output requires no special escapes, and the input
-	// is already in canonical form or should be preserved verbatim,
-	// then directly copy the input to the output.
-	if !flags.Get(jsonflags.AnyEscape) &&
-		(valFlags.IsCanonical() || flags.Get(jsonflags.PreserveRawStrings)) {
-		dst = append(dst, src[:n]...) // copy the string verbatim
-		return dst, n, nil
-	}
-
-	// Under [jsonflags.PreserveRawStrings], any pre-escaped sequences
-	// remain escaped, however we still need to respect the
-	// [jsonflags.EscapeForHTML] and [jsonflags.EscapeForJS] options.
-	if flags.Get(jsonflags.PreserveRawStrings) {
-		var i, lastAppendIndex int
-		for i < n {
-			if c := src[i]; c < utf8.RuneSelf {
-				if (c == '<' || c == '>' || c == '&') && flags.Get(jsonflags.EscapeForHTML) {
-					dst = append(dst, src[lastAppendIndex:i]...)
-					dst = appendEscapedASCII(dst, c)
-					lastAppendIndex = i + 1
-				}
-				i++
-			} else {
-				r, rn := utf8.DecodeRune(truncateMaxUTF8(src[i:]))
-				if (r == '\u2028' || r == '\u2029') && flags.Get(jsonflags.EscapeForJS) {
-					dst = append(dst, src[lastAppendIndex:i]...)
-					dst = appendEscapedUnicode(dst, r)
-					lastAppendIndex = i + rn
-				}
-				i += rn
-			}
-		}
-		return append(dst, src[lastAppendIndex:n]...), n, nil
-	}
-
-	// The input contains characters that might need escaping,
-	// unnecessary escape sequences, or invalid UTF-8.
-	// Perform a round-trip unquote and quote to properly reformat
-	// these sequences according the current flags.
-	b, _ := AppendUnquote(nil, src[:n])
-	dst, _ = AppendQuote(dst, b, flags)
-	return dst, n, nil
-}
-
-// AppendFloat appends src to dst as a JSON number per RFC 7159, section 6.
-// It formats numbers similar to the ES6 number-to-string conversion.
-// See https://go.dev/issue/14135.
-//
-// The output is identical to ECMA-262, 6th edition, section 7.1.12.1 and with
-// RFC 8785, section 3.2.2.3 for 64-bit floating-point numbers except for -0,
-// which is formatted as -0 instead of just 0.
-//
-// For 32-bit floating-point numbers,
-// the output is a 32-bit equivalent of the algorithm.
-// Note that ECMA-262 specifies no algorithm for 32-bit numbers.
-func AppendFloat(dst []byte, src float64, bits int) []byte {
-	if bits == 32 {
-		src = float64(float32(src))
-	}
-
-	abs := math.Abs(src)
-	fmt := byte('f')
-	if abs != 0 {
-		if bits == 64 && (float64(abs) < 1e-6 || float64(abs) >= 1e21) ||
-			bits == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) {
-			fmt = 'e'
-		}
-	}
-	dst = strconv.AppendFloat(dst, src, fmt, -1, bits)
-	if fmt == 'e' {
-		// Clean up e-09 to e-9.
-		n := len(dst)
-		if n >= 4 && dst[n-4] == 'e' && dst[n-3] == '-' && dst[n-2] == '0' {
-			dst[n-2] = dst[n-1]
-			dst = dst[:n-1]
-		}
-	}
-	return dst
-}
-
-// ReformatNumber consumes a JSON string from src and appends it to dst,
-// canonicalizing it if specified.
-// It returns the appended output and the number of consumed input bytes.
-func ReformatNumber(dst, src []byte, flags *jsonflags.Flags) ([]byte, int, error) {
-	n, err := ConsumeNumber(src)
-	if err != nil {
-		return dst, n, err
-	}
-	if !flags.Get(jsonflags.CanonicalizeNumbers) {
-		dst = append(dst, src[:n]...) // copy the number verbatim
-		return dst, n, nil
-	}
-
-	// Identify the kind of number.
-	var isFloat bool
-	for _, c := range src[:n] {
-		if c == '.' || c == 'e' || c == 'E' {
-			isFloat = true // has fraction or exponent
-			break
-		}
-	}
-
-	// Check if need to canonicalize this kind of number.
-	switch {
-	case string(src[:n]) == "-0":
-		break // canonicalize -0 as 0 regardless of kind
-	case isFloat:
-		if !flags.Get(jsonflags.CanonicalizeRawFloats) {
-			dst = append(dst, src[:n]...) // copy the number verbatim
-			return dst, n, nil
-		}
-	default:
-		// As an optimization, we can copy integer numbers below 2⁵³ verbatim
-		// since the canonical form is always identical.
-		const maxExactIntegerDigits = 16 // len(strconv.AppendUint(nil, 1<<53, 10))
-		if !flags.Get(jsonflags.CanonicalizeRawInts) || n < maxExactIntegerDigits {
-			dst = append(dst, src[:n]...) // copy the number verbatim
-			return dst, n, nil
-		}
-	}
-
-	// Parse and reformat the number (which uses a canonical format).
-	fv, _ := strconv.ParseFloat(string(src[:n]), 64)
-	switch {
-	case fv == 0:
-		fv = 0 // normalize negative zero as just zero
-	case math.IsInf(fv, +1):
-		fv = +math.MaxFloat64
-	case math.IsInf(fv, -1):
-		fv = -math.MaxFloat64
-	}
-	return AppendFloat(dst, fv, 64), n, nil
-}
diff --git a/src/encoding/json/internal/jsonwire/encode_test.go b/src/encoding/json/internal/jsonwire/encode_test.go
deleted file mode 100644
index 6459d20e0951ea..00000000000000
--- a/src/encoding/json/internal/jsonwire/encode_test.go
+++ /dev/null
@@ -1,332 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonwire
-
-import (
-	"bufio"
-	"bytes"
-	"compress/gzip"
-	"crypto/sha256"
-	"encoding/binary"
-	"encoding/hex"
-	"flag"
-	"math"
-	"net/http"
-	"reflect"
-	"strconv"
-	"strings"
-	"testing"
-	"time"
-
-	"encoding/json/internal/jsonflags"
-)
-
-func TestAppendQuote(t *testing.T) {
-	tests := []struct {
-		in          string
-		flags       jsonflags.Bools
-		want        string
-		wantErr     error
-		wantErrUTF8 error
-	}{
-		{"", 0, `""`, nil, nil},
-		{"hello", 0, `"hello"`, nil, nil},
-		{"\x00", 0, `"\u0000"`, nil, nil},
-		{"\x1f", 0, `"\u001f"`, nil, nil},
-		{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 0, `"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"`, nil, nil},
-		{" !#$%&'()*+,-./0123456789:;<=>?@[]^_`{|}~\x7f", 0, "\" !#$%&'()*+,-./0123456789:;<=>?@[]^_`{|}~\x7f\"", nil, nil},
-		{" !#$%&'()*+,-./0123456789:;<=>?@[]^_`{|}~\x7f", jsonflags.EscapeForHTML, "\" !#$%\\u0026'()*+,-./0123456789:;\\u003c=\\u003e?@[]^_`{|}~\x7f\"", nil, nil},
-		{" !#$%&'()*+,-./0123456789:;<=>?@[]^_`{|}~\x7f", jsonflags.EscapeForJS, "\" !#$%&'()*+,-./0123456789:;<=>?@[]^_`{|}~\x7f\"", nil, nil},
-		{"\u2027\u2028\u2029\u2030", 0, "\"\u2027\u2028\u2029\u2030\"", nil, nil},
-		{"\u2027\u2028\u2029\u2030", jsonflags.EscapeForHTML, "\"\u2027\u2028\u2029\u2030\"", nil, nil},
-		{"\u2027\u2028\u2029\u2030", jsonflags.EscapeForJS, "\"\u2027\\u2028\\u2029\u2030\"", nil, nil},
-		{"x\x80\ufffd", 0, "\"x\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xff\ufffd", 0, "\"x\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xc0", 0, "\"x\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xc0\x80", 0, "\"x\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xe0", 0, "\"x\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xe0\x80", 0, "\"x\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xe0\x80\x80", 0, "\"x\ufffd\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xf0", 0, "\"x\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xf0\x80", 0, "\"x\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xf0\x80\x80", 0, "\"x\ufffd\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xf0\x80\x80\x80", 0, "\"x\ufffd\ufffd\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"x\xed\xba\xad", 0, "\"x\ufffd\ufffd\ufffd\"", nil, ErrInvalidUTF8},
-		{"\"\\/\b\f\n\r\t", 0, `"\"\\/\b\f\n\r\t"`, nil, nil},
-		{"٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃).", 0, `"٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃)."`, nil, nil},
-		{"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602", 0, "\"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602\"", nil, nil},
-		{"\u0000\u001f\u0020\u0022\u0026\u003c\u003e\u005c\u007f\u0080\u2028\u2029\ufffd\U0001f602", 0, "\"\\u0000\\u001f\u0020\\\"\u0026\u003c\u003e\\\\\u007f\u0080\u2028\u2029\ufffd\U0001f602\"", nil, nil},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			var flags jsonflags.Flags
-			flags.Set(tt.flags | 1)
-
-			flags.Set(jsonflags.AllowInvalidUTF8 | 1)
-			got, gotErr := AppendQuote(nil, tt.in, &flags)
-			if string(got) != tt.want || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("AppendQuote(nil, %q, ...) = (%s, %v), want (%s, %v)", tt.in, got, gotErr, tt.want, tt.wantErr)
-			}
-			flags.Set(jsonflags.AllowInvalidUTF8 | 0)
-			switch got, gotErr := AppendQuote(nil, tt.in, &flags); {
-			case tt.wantErrUTF8 == nil && (string(got) != tt.want || !reflect.DeepEqual(gotErr, tt.wantErr)):
-				t.Errorf("AppendQuote(nil, %q, ...) = (%s, %v), want (%s, %v)", tt.in, got, gotErr, tt.want, tt.wantErr)
-			case tt.wantErrUTF8 != nil && (!strings.HasPrefix(tt.want, string(got)) || !reflect.DeepEqual(gotErr, tt.wantErrUTF8)):
-				t.Errorf("AppendQuote(nil, %q, ...) = (%s, %v), want (%s, %v)", tt.in, got, gotErr, tt.want, tt.wantErrUTF8)
-			}
-		})
-	}
-}
-
-func TestAppendNumber(t *testing.T) {
-	tests := []struct {
-		in     float64
-		want32 string
-		want64 string
-	}{
-		{math.E, "2.7182817", "2.718281828459045"},
-		{math.Pi, "3.1415927", "3.141592653589793"},
-		{math.SmallestNonzeroFloat32, "1e-45", "1.401298464324817e-45"},
-		{math.SmallestNonzeroFloat64, "0", "5e-324"},
-		{math.MaxFloat32, "3.4028235e+38", "3.4028234663852886e+38"},
-		{math.MaxFloat64, "", "1.7976931348623157e+308"},
-		{0.1111111111111111, "0.11111111", "0.1111111111111111"},
-		{0.2222222222222222, "0.22222222", "0.2222222222222222"},
-		{0.3333333333333333, "0.33333334", "0.3333333333333333"},
-		{0.4444444444444444, "0.44444445", "0.4444444444444444"},
-		{0.5555555555555555, "0.5555556", "0.5555555555555555"},
-		{0.6666666666666666, "0.6666667", "0.6666666666666666"},
-		{0.7777777777777777, "0.7777778", "0.7777777777777777"},
-		{0.8888888888888888, "0.8888889", "0.8888888888888888"},
-		{0.9999999999999999, "1", "0.9999999999999999"},
-
-		// The following entries are from RFC 8785, appendix B
-		// which are designed to ensure repeatable formatting of 64-bit floats.
-		{math.Float64frombits(0x0000000000000000), "0", "0"},
-		{math.Float64frombits(0x8000000000000000), "-0", "-0"}, // differs from RFC 8785
-		{math.Float64frombits(0x0000000000000001), "0", "5e-324"},
-		{math.Float64frombits(0x8000000000000001), "-0", "-5e-324"},
-		{math.Float64frombits(0x7fefffffffffffff), "", "1.7976931348623157e+308"},
-		{math.Float64frombits(0xffefffffffffffff), "", "-1.7976931348623157e+308"},
-		{math.Float64frombits(0x4340000000000000), "9007199000000000", "9007199254740992"},
-		{math.Float64frombits(0xc340000000000000), "-9007199000000000", "-9007199254740992"},
-		{math.Float64frombits(0x4430000000000000), "295147900000000000000", "295147905179352830000"},
-		{math.Float64frombits(0x44b52d02c7e14af5), "1e+23", "9.999999999999997e+22"},
-		{math.Float64frombits(0x44b52d02c7e14af6), "1e+23", "1e+23"},
-		{math.Float64frombits(0x44b52d02c7e14af7), "1e+23", "1.0000000000000001e+23"},
-		{math.Float64frombits(0x444b1ae4d6e2ef4e), "1e+21", "999999999999999700000"},
-		{math.Float64frombits(0x444b1ae4d6e2ef4f), "1e+21", "999999999999999900000"},
-		{math.Float64frombits(0x444b1ae4d6e2ef50), "1e+21", "1e+21"},
-		{math.Float64frombits(0x3eb0c6f7a0b5ed8c), "0.000001", "9.999999999999997e-7"},
-		{math.Float64frombits(0x3eb0c6f7a0b5ed8d), "0.000001", "0.000001"},
-		{math.Float64frombits(0x41b3de4355555553), "333333340", "333333333.3333332"},
-		{math.Float64frombits(0x41b3de4355555554), "333333340", "333333333.33333325"},
-		{math.Float64frombits(0x41b3de4355555555), "333333340", "333333333.3333333"},
-		{math.Float64frombits(0x41b3de4355555556), "333333340", "333333333.3333334"},
-		{math.Float64frombits(0x41b3de4355555557), "333333340", "333333333.33333343"},
-		{math.Float64frombits(0xbecbf647612f3696), "-0.0000033333333", "-0.0000033333333333333333"},
-		{math.Float64frombits(0x43143ff3c1cb0959), "1424953900000000", "1424953923781206.2"},
-
-		// The following are select entries from RFC 8785, appendix B,
-		// but modified for equivalent 32-bit behavior.
-		{float64(math.Float32frombits(0x65a96815)), "9.999999e+22", "9.999998877476383e+22"},
-		{float64(math.Float32frombits(0x65a96816)), "1e+23", "9.999999778196308e+22"},
-		{float64(math.Float32frombits(0x65a96817)), "1.0000001e+23", "1.0000000678916234e+23"},
-		{float64(math.Float32frombits(0x6258d725)), "999999900000000000000", "999999879303389000000"},
-		{float64(math.Float32frombits(0x6258d726)), "999999950000000000000", "999999949672133200000"},
-		{float64(math.Float32frombits(0x6258d727)), "1e+21", "1.0000000200408773e+21"},
-		{float64(math.Float32frombits(0x6258d728)), "1.0000001e+21", "1.0000000904096215e+21"},
-		{float64(math.Float32frombits(0x358637bc)), "9.999999e-7", "9.99999883788405e-7"},
-		{float64(math.Float32frombits(0x358637bd)), "0.000001", "9.999999974752427e-7"},
-		{float64(math.Float32frombits(0x358637be)), "0.0000010000001", "0.0000010000001111620804"},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			if got32 := string(AppendFloat(nil, tt.in, 32)); got32 != tt.want32 && tt.want32 != "" {
-				t.Errorf("AppendFloat(nil, %v, 32) = %v, want %v", tt.in, got32, tt.want32)
-			}
-			if got64 := string(AppendFloat(nil, tt.in, 64)); got64 != tt.want64 && tt.want64 != "" {
-				t.Errorf("AppendFloat(nil, %v, 64) = %v, want %v", tt.in, got64, tt.want64)
-			}
-		})
-	}
-}
-
-// The default of 1e4 lines was chosen since it is sufficiently large to include
-// test numbers from all three categories (i.e., static, series, and random).
-// Yet, it is sufficiently low to execute quickly relative to other tests.
-//
-// Processing 1e8 lines takes a minute and processes about 4GiB worth of text.
-var testCanonicalNumberLines = flag.Float64("canonical-number-lines", 1e4, "specify the number of lines to check from the canonical numbers testdata")
-
-// TestCanonicalNumber verifies that appendNumber complies with RFC 8785
-// according to the testdata provided by the reference implementation.
-// See https://github.com/cyberphone/json-canonicalization/tree/master/testdata#es6-numbers.
-func TestCanonicalNumber(t *testing.T) {
-	const testfileURL = "https://github.com/cyberphone/json-canonicalization/releases/download/es6testfile/es6testfile100m.txt.gz"
-	hashes := map[float64]string{
-		1e3: "be18b62b6f69cdab33a7e0dae0d9cfa869fda80ddc712221570f9f40a5878687",
-		1e4: "b9f7a8e75ef22a835685a52ccba7f7d6bdc99e34b010992cbc5864cd12be6892",
-		1e5: "22776e6d4b49fa294a0d0f349268e5c28808fe7e0cb2bcbe28f63894e494d4c7",
-		1e6: "49415fee2c56c77864931bd3624faad425c3c577d6d74e89a83bc725506dad16",
-		1e7: "b9f8a44a91d46813b21b9602e72f112613c91408db0b8341fb94603d9db135e0",
-		1e8: "0f7dda6b0837dde083c5d6b896f7d62340c8a2415b0c7121d83145e08a755272",
-	}
-	wantHash := hashes[*testCanonicalNumberLines]
-	if wantHash == "" {
-		t.Fatalf("canonical-number-lines must be one of the following values: 1e3, 1e4, 1e5, 1e6, 1e7, 1e8")
-	}
-	numLines := int(*testCanonicalNumberLines)
-
-	// generator returns a function that generates the next float64 to format.
-	// This implements the algorithm specified in the reference implementation.
-	generator := func() func() float64 {
-		static := [...]uint64{
-			0x0000000000000000, 0x8000000000000000, 0x0000000000000001, 0x8000000000000001,
-			0xc46696695dbd1cc3, 0xc43211ede4974a35, 0xc3fce97ca0f21056, 0xc3c7213080c1a6ac,
-			0xc39280f39a348556, 0xc35d9b1f5d20d557, 0xc327af4c4a80aaac, 0xc2f2f2a36ecd5556,
-			0xc2be51057e155558, 0xc28840d131aaaaac, 0xc253670dc1555557, 0xc21f0b4935555557,
-			0xc1e8d5d42aaaaaac, 0xc1b3de4355555556, 0xc17fca0555555556, 0xc1496e6aaaaaaaab,
-			0xc114585555555555, 0xc0e046aaaaaaaaab, 0xc0aa0aaaaaaaaaaa, 0xc074d55555555555,
-			0xc040aaaaaaaaaaab, 0xc00aaaaaaaaaaaab, 0xbfd5555555555555, 0xbfa1111111111111,
-			0xbf6b4e81b4e81b4f, 0xbf35d867c3ece2a5, 0xbf0179ec9cbd821e, 0xbecbf647612f3696,
-			0xbe965e9f80f29212, 0xbe61e54c672874db, 0xbe2ca213d840baf8, 0xbdf6e80fe033c8c6,
-			0xbdc2533fe68fd3d2, 0xbd8d51ffd74c861c, 0xbd5774ccac3d3817, 0xbd22c3d6f030f9ac,
-			0xbcee0624b3818f79, 0xbcb804ea293472c7, 0xbc833721ba905bd3, 0xbc4ebe9c5db3c61e,
-			0xbc18987d17c304e5, 0xbbe3ad30dfcf371d, 0xbbaf7b816618582f, 0xbb792f9ab81379bf,
-			0xbb442615600f9499, 0xbb101e77800c76e1, 0xbad9ca58cce0be35, 0xbaa4a1e0a3e6fe90,
-			0xba708180831f320d, 0xba3a68cd9e985016, 0x446696695dbd1cc3, 0x443211ede4974a35,
-			0x43fce97ca0f21056, 0x43c7213080c1a6ac, 0x439280f39a348556, 0x435d9b1f5d20d557,
-			0x4327af4c4a80aaac, 0x42f2f2a36ecd5556, 0x42be51057e155558, 0x428840d131aaaaac,
-			0x4253670dc1555557, 0x421f0b4935555557, 0x41e8d5d42aaaaaac, 0x41b3de4355555556,
-			0x417fca0555555556, 0x41496e6aaaaaaaab, 0x4114585555555555, 0x40e046aaaaaaaaab,
-			0x40aa0aaaaaaaaaaa, 0x4074d55555555555, 0x4040aaaaaaaaaaab, 0x400aaaaaaaaaaaab,
-			0x3fd5555555555555, 0x3fa1111111111111, 0x3f6b4e81b4e81b4f, 0x3f35d867c3ece2a5,
-			0x3f0179ec9cbd821e, 0x3ecbf647612f3696, 0x3e965e9f80f29212, 0x3e61e54c672874db,
-			0x3e2ca213d840baf8, 0x3df6e80fe033c8c6, 0x3dc2533fe68fd3d2, 0x3d8d51ffd74c861c,
-			0x3d5774ccac3d3817, 0x3d22c3d6f030f9ac, 0x3cee0624b3818f79, 0x3cb804ea293472c7,
-			0x3c833721ba905bd3, 0x3c4ebe9c5db3c61e, 0x3c18987d17c304e5, 0x3be3ad30dfcf371d,
-			0x3baf7b816618582f, 0x3b792f9ab81379bf, 0x3b442615600f9499, 0x3b101e77800c76e1,
-			0x3ad9ca58cce0be35, 0x3aa4a1e0a3e6fe90, 0x3a708180831f320d, 0x3a3a68cd9e985016,
-			0x4024000000000000, 0x4014000000000000, 0x3fe0000000000000, 0x3fa999999999999a,
-			0x3f747ae147ae147b, 0x3f40624dd2f1a9fc, 0x3f0a36e2eb1c432d, 0x3ed4f8b588e368f1,
-			0x3ea0c6f7a0b5ed8d, 0x3e6ad7f29abcaf48, 0x3e35798ee2308c3a, 0x3ed539223589fa95,
-			0x3ed4ff26cd5a7781, 0x3ed4f95a762283ff, 0x3ed4f8c60703520c, 0x3ed4f8b72f19cd0d,
-			0x3ed4f8b5b31c0c8d, 0x3ed4f8b58d1c461a, 0x3ed4f8b5894f7f0e, 0x3ed4f8b588ee37f3,
-			0x3ed4f8b588e47da4, 0x3ed4f8b588e3849c, 0x3ed4f8b588e36bb5, 0x3ed4f8b588e36937,
-			0x3ed4f8b588e368f8, 0x3ed4f8b588e368f1, 0x3ff0000000000000, 0xbff0000000000000,
-			0xbfeffffffffffffa, 0xbfeffffffffffffb, 0x3feffffffffffffa, 0x3feffffffffffffb,
-			0x3feffffffffffffc, 0x3feffffffffffffe, 0xbfefffffffffffff, 0xbfefffffffffffff,
-			0x3fefffffffffffff, 0x3fefffffffffffff, 0x3fd3333333333332, 0x3fd3333333333333,
-			0x3fd3333333333334, 0x0010000000000000, 0x000ffffffffffffd, 0x000fffffffffffff,
-			0x7fefffffffffffff, 0xffefffffffffffff, 0x4340000000000000, 0xc340000000000000,
-			0x4430000000000000, 0x44b52d02c7e14af5, 0x44b52d02c7e14af6, 0x44b52d02c7e14af7,
-			0x444b1ae4d6e2ef4e, 0x444b1ae4d6e2ef4f, 0x444b1ae4d6e2ef50, 0x3eb0c6f7a0b5ed8c,
-			0x3eb0c6f7a0b5ed8d, 0x41b3de4355555553, 0x41b3de4355555554, 0x41b3de4355555555,
-			0x41b3de4355555556, 0x41b3de4355555557, 0xbecbf647612f3696, 0x43143ff3c1cb0959,
-		}
-		var state struct {
-			idx   int
-			data  []byte
-			block [sha256.Size]byte
-		}
-		return func() float64 {
-			const numSerial = 2000
-			var f float64
-			switch {
-			case state.idx < len(static):
-				f = math.Float64frombits(static[state.idx])
-			case state.idx < len(static)+numSerial:
-				f = math.Float64frombits(0x0010000000000000 + uint64(state.idx-len(static)))
-			default:
-				for f == 0 || math.IsNaN(f) || math.IsInf(f, 0) {
-					if len(state.data) == 0 {
-						state.block = sha256.Sum256(state.block[:])
-						state.data = state.block[:]
-					}
-					f = math.Float64frombits(binary.LittleEndian.Uint64(state.data))
-					state.data = state.data[8:]
-				}
-			}
-			state.idx++
-			return f
-		}
-	}
-
-	// Pass through the test twice. In the first pass we only hash the output,
-	// while in the second pass we check every line against the golden testdata.
-	// If the hashes match in the first pass, then we skip the second pass.
-	for _, checkGolden := range []bool{false, true} {
-		var br *bufio.Reader // for line-by-line reading of es6testfile100m.txt
-		if checkGolden {
-			resp, err := http.Get(testfileURL)
-			if err != nil {
-				t.Fatalf("http.Get error: %v", err)
-			}
-			defer resp.Body.Close()
-
-			zr, err := gzip.NewReader(resp.Body)
-			if err != nil {
-				t.Fatalf("gzip.NewReader error: %v", err)
-			}
-
-			br = bufio.NewReader(zr)
-		}
-
-		// appendNumberJCS differs from appendNumber only for -0.
-		appendNumberJCS := func(b []byte, f float64) []byte {
-			if math.Signbit(f) && f == 0 {
-				return append(b, '0')
-			}
-			return AppendFloat(b, f, 64)
-		}
-
-		var gotLine []byte
-		next := generator()
-		hash := sha256.New()
-		start := time.Now()
-		lastPrint := start
-		for n := 1; n <= numLines; n++ {
-			// Generate the formatted line for this number.
-			f := next()
-			gotLine = gotLine[:0] // reset from previous usage
-			gotLine = strconv.AppendUint(gotLine, math.Float64bits(f), 16)
-			gotLine = append(gotLine, ',')
-			gotLine = appendNumberJCS(gotLine, f)
-			gotLine = append(gotLine, '\n')
-			hash.Write(gotLine)
-
-			// Check that the formatted line matches.
-			if checkGolden {
-				wantLine, err := br.ReadBytes('\n')
-				if err != nil {
-					t.Fatalf("bufio.Reader.ReadBytes error: %v", err)
-				}
-				if !bytes.Equal(gotLine, wantLine) {
-					t.Errorf("mismatch on line %d:\n\tgot  %v\n\twant %v",
-						n, strings.TrimSpace(string(gotLine)), strings.TrimSpace(string(wantLine)))
-				}
-			}
-
-			// Print progress.
-			if now := time.Now(); now.Sub(lastPrint) > time.Second || n == numLines {
-				remaining := float64(now.Sub(start)) * float64(numLines-n) / float64(n)
-				t.Logf("%0.3f%% (%v remaining)",
-					100.0*float64(n)/float64(numLines),
-					time.Duration(remaining).Round(time.Second))
-				lastPrint = now
-			}
-		}
-
-		gotHash := hex.EncodeToString(hash.Sum(nil))
-		if gotHash == wantHash {
-			return // hashes match, no need to check golden testdata
-		}
-	}
-}
diff --git a/src/encoding/json/internal/jsonwire/wire.go b/src/encoding/json/internal/jsonwire/wire.go
deleted file mode 100644
index 6cf19c5cfe62bb..00000000000000
--- a/src/encoding/json/internal/jsonwire/wire.go
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-// Package jsonwire implements stateless functionality for handling JSON text.
-package jsonwire
-
-import (
-	"cmp"
-	"errors"
-	"strconv"
-	"strings"
-	"unicode"
-	"unicode/utf16"
-	"unicode/utf8"
-)
-
-// TrimSuffixWhitespace trims JSON from the end of b.
-func TrimSuffixWhitespace(b []byte) []byte {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	n := len(b) - 1
-	for n >= 0 && (b[n] == ' ' || b[n] == '\t' || b[n] == '\r' || b[n] == '\n') {
-		n--
-	}
-	return b[:n+1]
-}
-
-// TrimSuffixString trims a valid JSON string at the end of b.
-// The behavior is undefined if there is not a valid JSON string present.
-func TrimSuffixString(b []byte) []byte {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	if len(b) > 0 && b[len(b)-1] == '"' {
-		b = b[:len(b)-1]
-	}
-	for len(b) >= 2 && !(b[len(b)-1] == '"' && b[len(b)-2] != '\\') {
-		b = b[:len(b)-1] // trim all characters except an unescaped quote
-	}
-	if len(b) > 0 && b[len(b)-1] == '"' {
-		b = b[:len(b)-1]
-	}
-	return b
-}
-
-// HasSuffixByte reports whether b ends with c.
-func HasSuffixByte(b []byte, c byte) bool {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	return len(b) > 0 && b[len(b)-1] == c
-}
-
-// TrimSuffixByte removes c from the end of b if it is present.
-func TrimSuffixByte(b []byte, c byte) []byte {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	if len(b) > 0 && b[len(b)-1] == c {
-		return b[:len(b)-1]
-	}
-	return b
-}
-
-// QuoteRune quotes the first rune in the input.
-func QuoteRune[Bytes ~[]byte | ~string](b Bytes) string {
-	r, n := utf8.DecodeRuneInString(string(truncateMaxUTF8(b)))
-	if r == utf8.RuneError && n == 1 {
-		return `'\x` + strconv.FormatUint(uint64(b[0]), 16) + `'`
-	}
-	return strconv.QuoteRune(r)
-}
-
-// CompareUTF16 lexicographically compares x to y according
-// to the UTF-16 codepoints of the UTF-8 encoded input strings.
-// This implements the ordering specified in RFC 8785, section 3.2.3.
-func CompareUTF16[Bytes ~[]byte | ~string](x, y Bytes) int {
-	// NOTE: This is an optimized, mostly allocation-free implementation
-	// of CompareUTF16Simple in wire_test.go. FuzzCompareUTF16 verifies that the
-	// two implementations agree on the result of comparing any two strings.
-	isUTF16Self := func(r rune) bool {
-		return ('\u0000' <= r && r <= '\uD7FF') || ('\uE000' <= r && r <= '\uFFFF')
-	}
-
-	for {
-		if len(x) == 0 || len(y) == 0 {
-			return cmp.Compare(len(x), len(y))
-		}
-
-		// ASCII fast-path.
-		if x[0] < utf8.RuneSelf || y[0] < utf8.RuneSelf {
-			if x[0] != y[0] {
-				return cmp.Compare(x[0], y[0])
-			}
-			x, y = x[1:], y[1:]
-			continue
-		}
-
-		// Decode next pair of runes as UTF-8.
-		rx, nx := utf8.DecodeRuneInString(string(truncateMaxUTF8(x)))
-		ry, ny := utf8.DecodeRuneInString(string(truncateMaxUTF8(y)))
-
-		selfx := isUTF16Self(rx)
-		selfy := isUTF16Self(ry)
-		switch {
-		// The x rune is a single UTF-16 codepoint, while
-		// the y rune is a surrogate pair of UTF-16 codepoints.
-		case selfx && !selfy:
-			ry, _ = utf16.EncodeRune(ry)
-		// The y rune is a single UTF-16 codepoint, while
-		// the x rune is a surrogate pair of UTF-16 codepoints.
-		case selfy && !selfx:
-			rx, _ = utf16.EncodeRune(rx)
-		}
-		if rx != ry {
-			return cmp.Compare(rx, ry)
-		}
-
-		// Check for invalid UTF-8, in which case,
-		// we just perform a byte-for-byte comparison.
-		if isInvalidUTF8(rx, nx) || isInvalidUTF8(ry, ny) {
-			if x[0] != y[0] {
-				return cmp.Compare(x[0], y[0])
-			}
-		}
-		x, y = x[nx:], y[ny:]
-	}
-}
-
-// truncateMaxUTF8 truncates b such it contains at least one rune.
-//
-// The utf8 package currently lacks generic variants, which complicates
-// generic functions that operates on either []byte or string.
-// As a hack, we always call the utf8 function operating on strings,
-// but always truncate the input such that the result is identical.
-//
-// Example usage:
-//
-//	utf8.DecodeRuneInString(string(truncateMaxUTF8(b)))
-//
-// Converting a []byte to a string is stack allocated since
-// truncateMaxUTF8 guarantees that the []byte is short.
-func truncateMaxUTF8[Bytes ~[]byte | ~string](b Bytes) Bytes {
-	// TODO(https://go.dev/issue/56948): Remove this function and
-	// instead directly call generic utf8 functions wherever used.
-	if len(b) > utf8.UTFMax {
-		return b[:utf8.UTFMax]
-	}
-	return b
-}
-
-// TODO(https://go.dev/issue/70547): Use utf8.ErrInvalid instead.
-var ErrInvalidUTF8 = errors.New("invalid UTF-8")
-
-func NewInvalidCharacterError[Bytes ~[]byte | ~string](prefix Bytes, where string) error {
-	what := QuoteRune(prefix)
-	return errors.New("invalid character " + what + " " + where)
-}
-
-func NewInvalidEscapeSequenceError[Bytes ~[]byte | ~string](what Bytes) error {
-	label := "escape sequence"
-	if len(what) > 6 {
-		label = "surrogate pair"
-	}
-	needEscape := strings.IndexFunc(string(what), func(r rune) bool {
-		return r == '`' || r == utf8.RuneError || unicode.IsSpace(r) || !unicode.IsPrint(r)
-	}) >= 0
-	if needEscape {
-		return errors.New("invalid " + label + " " + strconv.Quote(string(what)) + " in string")
-	} else {
-		return errors.New("invalid " + label + " `" + string(what) + "` in string")
-	}
-}
-
-// TruncatePointer optionally truncates the JSON pointer,
-// enforcing that the length roughly does not exceed n.
-func TruncatePointer(s string, n int) string {
-	if len(s) <= n {
-		return s
-	}
-	i := n / 2
-	j := len(s) - n/2
-
-	// Avoid truncating a name if there are multiple names present.
-	if k := strings.LastIndexByte(s[:i], '/'); k > 0 {
-		i = k
-	}
-	if k := strings.IndexByte(s[j:], '/'); k >= 0 {
-		j += k + len("/")
-	}
-
-	// Avoid truncation in the middle of a UTF-8 rune.
-	for i > 0 && isInvalidUTF8(utf8.DecodeLastRuneInString(s[:i])) {
-		i--
-	}
-	for j < len(s) && isInvalidUTF8(utf8.DecodeRuneInString(s[j:])) {
-		j++
-	}
-
-	// Determine the right middle fragment to use.
-	var middle string
-	switch strings.Count(s[i:j], "/") {
-	case 0:
-		middle = "…"
-	case 1:
-		middle = "…/…"
-	default:
-		middle = "…/…/…"
-	}
-	if strings.HasPrefix(s[i:j], "/") && middle != "…" {
-		middle = strings.TrimPrefix(middle, "…")
-	}
-	if strings.HasSuffix(s[i:j], "/") && middle != "…" {
-		middle = strings.TrimSuffix(middle, "…")
-	}
-	return s[:i] + middle + s[j:]
-}
-
-func isInvalidUTF8(r rune, rn int) bool {
-	return r == utf8.RuneError && rn == 1
-}
diff --git a/src/encoding/json/internal/jsonwire/wire_test.go b/src/encoding/json/internal/jsonwire/wire_test.go
deleted file mode 100644
index a0bf1d1368e686..00000000000000
--- a/src/encoding/json/internal/jsonwire/wire_test.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsonwire
-
-import (
-	"cmp"
-	"slices"
-	"testing"
-	"unicode/utf16"
-	"unicode/utf8"
-)
-
-func TestQuoteRune(t *testing.T) {
-	tests := []struct{ in, want string }{
-		{"x", `'x'`},
-		{"\n", `'\n'`},
-		{"'", `'\''`},
-		{"\xff", `'\xff'`},
-		{"💩", `'💩'`},
-		{"💩"[:1], `'\xf0'`},
-		{"\uffff", `'\uffff'`},
-		{"\U00101234", `'\U00101234'`},
-	}
-	for _, tt := range tests {
-		got := QuoteRune([]byte(tt.in))
-		if got != tt.want {
-			t.Errorf("quoteRune(%q) = %s, want %s", tt.in, got, tt.want)
-		}
-	}
-}
-
-var compareUTF16Testdata = []string{"", "\r", "1", "f\xfe", "f\xfe\xff", "f\xff", "\u0080", "\u00f6", "\u20ac", "\U0001f600", "\ufb33"}
-
-func TestCompareUTF16(t *testing.T) {
-	for i, si := range compareUTF16Testdata {
-		for j, sj := range compareUTF16Testdata {
-			got := CompareUTF16([]byte(si), []byte(sj))
-			want := cmp.Compare(i, j)
-			if got != want {
-				t.Errorf("CompareUTF16(%q, %q) = %v, want %v", si, sj, got, want)
-			}
-		}
-	}
-}
-
-func FuzzCompareUTF16(f *testing.F) {
-	for _, td1 := range compareUTF16Testdata {
-		for _, td2 := range compareUTF16Testdata {
-			f.Add([]byte(td1), []byte(td2))
-		}
-	}
-
-	// CompareUTF16Simple is identical to CompareUTF16,
-	// but relies on naively converting a string to a []uint16 codepoints.
-	// It is easy to verify as correct, but is slow.
-	CompareUTF16Simple := func(x, y []byte) int {
-		ux := utf16.Encode([]rune(string(x)))
-		uy := utf16.Encode([]rune(string(y)))
-		return slices.Compare(ux, uy)
-	}
-
-	f.Fuzz(func(t *testing.T, s1, s2 []byte) {
-		// Compare the optimized and simplified implementations.
-		got := CompareUTF16(s1, s2)
-		want := CompareUTF16Simple(s1, s2)
-		if got != want && utf8.Valid(s1) && utf8.Valid(s2) {
-			t.Errorf("CompareUTF16(%q, %q) = %v, want %v", s1, s2, got, want)
-		}
-	})
-}
-
-func TestTruncatePointer(t *testing.T) {
-	tests := []struct{ in, want string }{
-		{"hello", "hello"},
-		{"/a/b/c", "/a/b/c"},
-		{"/a/b/c/d/e/f/g", "/a/b/…/f/g"},
-		{"supercalifragilisticexpialidocious", "super…cious"},
-		{"/supercalifragilisticexpialidocious/supercalifragilisticexpialidocious", "/supe…/…cious"},
-		{"/supercalifragilisticexpialidocious/supercalifragilisticexpialidocious/supercalifragilisticexpialidocious", "/supe…/…/…cious"},
-		{"/a/supercalifragilisticexpialidocious/supercalifragilisticexpialidocious", "/a/…/…cious"},
-		{"/supercalifragilisticexpialidocious/supercalifragilisticexpialidocious/b", "/supe…/…/b"},
-		{"/fizz/buzz/bazz", "/fizz/…/bazz"},
-		{"/fizz/buzz/bazz/razz", "/fizz/…/razz"},
-		{"/////////////////////////////", "/////…/////"},
-		{"/🎄❤️✨/🎁✅😊/🎅🔥⭐", "/🎄…/…/…⭐"},
-	}
-	for _, tt := range tests {
-		got := TruncatePointer(tt.in, 10)
-		if got != tt.want {
-			t.Errorf("TruncatePointer(%q) = %q, want %q", tt.in, got, tt.want)
-		}
-	}
-
-}
diff --git a/src/encoding/json/jsontext/coder_test.go b/src/encoding/json/jsontext/coder_test.go
deleted file mode 100644
index 4a9efb3b8f97a5..00000000000000
--- a/src/encoding/json/jsontext/coder_test.go
+++ /dev/null
@@ -1,856 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"io"
-	"math"
-	"math/rand"
-	"path"
-	"reflect"
-	"strings"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-	"encoding/json/internal/jsonwire"
-)
-
-func E(err error) *SyntacticError {
-	return &SyntacticError{Err: err}
-}
-
-func newInvalidCharacterError(prefix, where string) *SyntacticError {
-	return E(jsonwire.NewInvalidCharacterError(prefix, where))
-}
-
-func newInvalidEscapeSequenceError(what string) *SyntacticError {
-	return E(jsonwire.NewInvalidEscapeSequenceError(what))
-}
-
-func (e *SyntacticError) withPos(prefix string, pointer Pointer) *SyntacticError {
-	e.ByteOffset = int64(len(prefix))
-	e.JSONPointer = pointer
-	return e
-}
-
-func equalError(x, y error) bool {
-	return reflect.DeepEqual(x, y)
-}
-
-var (
-	zeroToken Token
-	zeroValue Value
-)
-
-// tokOrVal is either a Token or a Value.
-type tokOrVal interface{ Kind() Kind }
-
-type coderTestdataEntry struct {
-	name             jsontest.CaseName
-	in               string
-	outCompacted     string
-	outEscaped       string // outCompacted if empty; escapes all runes in a string
-	outIndented      string // outCompacted if empty; uses "  " for indent prefix and "\t" for indent
-	outCanonicalized string // outCompacted if empty
-	tokens           []Token
-	pointers         []Pointer
-}
-
-var coderTestdata = []coderTestdataEntry{{
-	name:         jsontest.Name("Null"),
-	in:           ` null `,
-	outCompacted: `null`,
-	tokens:       []Token{Null},
-	pointers:     []Pointer{""},
-}, {
-	name:         jsontest.Name("False"),
-	in:           ` false `,
-	outCompacted: `false`,
-	tokens:       []Token{False},
-}, {
-	name:         jsontest.Name("True"),
-	in:           ` true `,
-	outCompacted: `true`,
-	tokens:       []Token{True},
-}, {
-	name:         jsontest.Name("EmptyString"),
-	in:           ` "" `,
-	outCompacted: `""`,
-	tokens:       []Token{String("")},
-}, {
-	name:         jsontest.Name("SimpleString"),
-	in:           ` "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" `,
-	outCompacted: `"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"`,
-	outEscaped:   `"\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006a\u006b\u006c\u006d\u006e\u006f\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007a\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005a"`,
-	tokens:       []Token{String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")},
-}, {
-	name:             jsontest.Name("ComplicatedString"),
-	in:               " \"Hello, 世界 🌟★☆✩🌠 " + "\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602" + ` \ud800\udead \"\\\/\b\f\n\r\t \u0022\u005c\u002f\u0008\u000c\u000a\u000d\u0009" `,
-	outCompacted:     "\"Hello, 世界 🌟★☆✩🌠 " + "\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602" + " 𐊭 \\\"\\\\/\\b\\f\\n\\r\\t \\\"\\\\/\\b\\f\\n\\r\\t\"",
-	outEscaped:       `"\u0048\u0065\u006c\u006c\u006f\u002c\u0020\u4e16\u754c\u0020\ud83c\udf1f\u2605\u2606\u2729\ud83c\udf20\u0020\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\ud83d\ude02\u0020\ud800\udead\u0020\u0022\u005c\u002f\u0008\u000c\u000a\u000d\u0009\u0020\u0022\u005c\u002f\u0008\u000c\u000a\u000d\u0009"`,
-	outCanonicalized: `"Hello, 世界 🌟★☆✩🌠 €ö€힙דּ�😂 𐊭 \"\\/\b\f\n\r\t \"\\/\b\f\n\r\t"`,
-	tokens:           []Token{rawToken("\"Hello, 世界 🌟★☆✩🌠 " + "\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602" + " 𐊭 \\\"\\\\/\\b\\f\\n\\r\\t \\\"\\\\/\\b\\f\\n\\r\\t\"")},
-}, {
-	name:         jsontest.Name("ZeroNumber"),
-	in:           ` 0 `,
-	outCompacted: `0`,
-	tokens:       []Token{Uint(0)},
-}, {
-	name:         jsontest.Name("SimpleNumber"),
-	in:           ` 123456789 `,
-	outCompacted: `123456789`,
-	tokens:       []Token{Uint(123456789)},
-}, {
-	name:         jsontest.Name("NegativeNumber"),
-	in:           ` -123456789 `,
-	outCompacted: `-123456789`,
-	tokens:       []Token{Int(-123456789)},
-}, {
-	name:         jsontest.Name("FractionalNumber"),
-	in:           " 0.123456789 ",
-	outCompacted: `0.123456789`,
-	tokens:       []Token{Float(0.123456789)},
-}, {
-	name:             jsontest.Name("ExponentNumber"),
-	in:               " 0e12456789 ",
-	outCompacted:     `0e12456789`,
-	outCanonicalized: `0`,
-	tokens:           []Token{rawToken(`0e12456789`)},
-}, {
-	name:             jsontest.Name("ExponentNumberP"),
-	in:               " 0e+12456789 ",
-	outCompacted:     `0e+12456789`,
-	outCanonicalized: `0`,
-	tokens:           []Token{rawToken(`0e+12456789`)},
-}, {
-	name:             jsontest.Name("ExponentNumberN"),
-	in:               " 0e-12456789 ",
-	outCompacted:     `0e-12456789`,
-	outCanonicalized: `0`,
-	tokens:           []Token{rawToken(`0e-12456789`)},
-}, {
-	name:             jsontest.Name("ComplicatedNumber"),
-	in:               ` -123456789.987654321E+0123456789 `,
-	outCompacted:     `-123456789.987654321E+0123456789`,
-	outCanonicalized: `-1.7976931348623157e+308`,
-	tokens:           []Token{rawToken(`-123456789.987654321E+0123456789`)},
-}, {
-	name: jsontest.Name("Numbers"),
-	in: ` [
-		0, -0, 0.0, -0.0, 1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, 1e1000,
-		-5e-324, 1e+100, 1.7976931348623157e+308,
-		9007199254740990, 9007199254740991, 9007199254740992, 9007199254740993, 9007199254740994,
-		-9223372036854775808, 9223372036854775807, 0, 18446744073709551615
-	] `,
-	outCompacted: "[0,-0,0.0,-0.0,1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,1e1000,-5e-324,1e+100,1.7976931348623157e+308,9007199254740990,9007199254740991,9007199254740992,9007199254740993,9007199254740994,-9223372036854775808,9223372036854775807,0,18446744073709551615]",
-	outIndented: `[
-	    0,
-	    -0,
-	    0.0,
-	    -0.0,
-	    1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,
-	    1e1000,
-	    -5e-324,
-	    1e+100,
-	    1.7976931348623157e+308,
-	    9007199254740990,
-	    9007199254740991,
-	    9007199254740992,
-	    9007199254740993,
-	    9007199254740994,
-	    -9223372036854775808,
-	    9223372036854775807,
-	    0,
-	    18446744073709551615
-	]`,
-	outCanonicalized: `[0,0,0,0,1,1.7976931348623157e+308,-5e-324,1e+100,1.7976931348623157e+308,9007199254740990,9007199254740991,9007199254740992,9007199254740992,9007199254740994,-9223372036854776000,9223372036854776000,0,18446744073709552000]`,
-	tokens: []Token{
-		BeginArray,
-		Float(0), Float(math.Copysign(0, -1)), rawToken(`0.0`), rawToken(`-0.0`), rawToken(`1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001`), rawToken(`1e1000`),
-		Float(-5e-324), Float(1e100), Float(1.7976931348623157e+308),
-		Float(9007199254740990), Float(9007199254740991), Float(9007199254740992), rawToken(`9007199254740993`), rawToken(`9007199254740994`),
-		Int(minInt64), Int(maxInt64), Uint(minUint64), Uint(maxUint64),
-		EndArray,
-	},
-	pointers: []Pointer{
-		"", "/0", "/1", "/2", "/3", "/4", "/5", "/6", "/7", "/8", "/9", "/10", "/11", "/12", "/13", "/14", "/15", "/16", "/17", "",
-	},
-}, {
-	name:         jsontest.Name("ObjectN0"),
-	in:           ` { } `,
-	outCompacted: `{}`,
-	tokens:       []Token{BeginObject, EndObject},
-	pointers:     []Pointer{"", ""},
-}, {
-	name:         jsontest.Name("ObjectN1"),
-	in:           ` { "0" : 0 } `,
-	outCompacted: `{"0":0}`,
-	outEscaped:   `{"\u0030":0}`,
-	outIndented: `{
-	    "0": 0
-	}`,
-	tokens:   []Token{BeginObject, String("0"), Uint(0), EndObject},
-	pointers: []Pointer{"", "/0", "/0", ""},
-}, {
-	name:         jsontest.Name("ObjectN2"),
-	in:           ` { "0" : 0 , "1" : 1 } `,
-	outCompacted: `{"0":0,"1":1}`,
-	outEscaped:   `{"\u0030":0,"\u0031":1}`,
-	outIndented: `{
-	    "0": 0,
-	    "1": 1
-	}`,
-	tokens:   []Token{BeginObject, String("0"), Uint(0), String("1"), Uint(1), EndObject},
-	pointers: []Pointer{"", "/0", "/0", "/1", "/1", ""},
-}, {
-	name:         jsontest.Name("ObjectNested"),
-	in:           ` { "0" : { "1" : { "2" : { "3" : { "4" : {  } } } } } } `,
-	outCompacted: `{"0":{"1":{"2":{"3":{"4":{}}}}}}`,
-	outEscaped:   `{"\u0030":{"\u0031":{"\u0032":{"\u0033":{"\u0034":{}}}}}}`,
-	outIndented: `{
-	    "0": {
-	        "1": {
-	            "2": {
-	                "3": {
-	                    "4": {}
-	                }
-	            }
-	        }
-	    }
-	}`,
-	tokens: []Token{BeginObject, String("0"), BeginObject, String("1"), BeginObject, String("2"), BeginObject, String("3"), BeginObject, String("4"), BeginObject, EndObject, EndObject, EndObject, EndObject, EndObject, EndObject},
-	pointers: []Pointer{
-		"",
-		"/0", "/0",
-		"/0/1", "/0/1",
-		"/0/1/2", "/0/1/2",
-		"/0/1/2/3", "/0/1/2/3",
-		"/0/1/2/3/4", "/0/1/2/3/4",
-		"/0/1/2/3/4",
-		"/0/1/2/3",
-		"/0/1/2",
-		"/0/1",
-		"/0",
-		"",
-	},
-}, {
-	name: jsontest.Name("ObjectSuperNested"),
-	in: `{"": {
-		"44444": {
-			"6666666":  "ccccccc",
-			"77777777": "bb",
-			"555555":   "aaaa"
-		},
-		"0": {
-			"3333": "bbb",
-			"11":   "",
-			"222":  "aaaaa"
-		}
-	}}`,
-	outCompacted: `{"":{"44444":{"6666666":"ccccccc","77777777":"bb","555555":"aaaa"},"0":{"3333":"bbb","11":"","222":"aaaaa"}}}`,
-	outEscaped:   `{"":{"\u0034\u0034\u0034\u0034\u0034":{"\u0036\u0036\u0036\u0036\u0036\u0036\u0036":"\u0063\u0063\u0063\u0063\u0063\u0063\u0063","\u0037\u0037\u0037\u0037\u0037\u0037\u0037\u0037":"\u0062\u0062","\u0035\u0035\u0035\u0035\u0035\u0035":"\u0061\u0061\u0061\u0061"},"\u0030":{"\u0033\u0033\u0033\u0033":"\u0062\u0062\u0062","\u0031\u0031":"","\u0032\u0032\u0032":"\u0061\u0061\u0061\u0061\u0061"}}}`,
-	outIndented: `{
-	    "": {
-	        "44444": {
-	            "6666666": "ccccccc",
-	            "77777777": "bb",
-	            "555555": "aaaa"
-	        },
-	        "0": {
-	            "3333": "bbb",
-	            "11": "",
-	            "222": "aaaaa"
-	        }
-	    }
-	}`,
-	outCanonicalized: `{"":{"0":{"11":"","222":"aaaaa","3333":"bbb"},"44444":{"555555":"aaaa","6666666":"ccccccc","77777777":"bb"}}}`,
-	tokens: []Token{
-		BeginObject,
-		String(""),
-		BeginObject,
-		String("44444"),
-		BeginObject,
-		String("6666666"), String("ccccccc"),
-		String("77777777"), String("bb"),
-		String("555555"), String("aaaa"),
-		EndObject,
-		String("0"),
-		BeginObject,
-		String("3333"), String("bbb"),
-		String("11"), String(""),
-		String("222"), String("aaaaa"),
-		EndObject,
-		EndObject,
-		EndObject,
-	},
-	pointers: []Pointer{
-		"",
-		"/", "/",
-		"//44444", "//44444",
-		"//44444/6666666", "//44444/6666666",
-		"//44444/77777777", "//44444/77777777",
-		"//44444/555555", "//44444/555555",
-		"//44444",
-		"//0", "//0",
-		"//0/3333", "//0/3333",
-		"//0/11", "//0/11",
-		"//0/222", "//0/222",
-		"//0",
-		"/",
-		"",
-	},
-}, {
-	name:         jsontest.Name("ArrayN0"),
-	in:           ` [ ] `,
-	outCompacted: `[]`,
-	tokens:       []Token{BeginArray, EndArray},
-	pointers:     []Pointer{"", ""},
-}, {
-	name:         jsontest.Name("ArrayN1"),
-	in:           ` [ 0 ] `,
-	outCompacted: `[0]`,
-	outIndented: `[
-	    0
-	]`,
-	tokens:   []Token{BeginArray, Uint(0), EndArray},
-	pointers: []Pointer{"", "/0", ""},
-}, {
-	name:         jsontest.Name("ArrayN2"),
-	in:           ` [ 0 , 1 ] `,
-	outCompacted: `[0,1]`,
-	outIndented: `[
-	    0,
-	    1
-	]`,
-	tokens: []Token{BeginArray, Uint(0), Uint(1), EndArray},
-}, {
-	name:         jsontest.Name("ArrayNested"),
-	in:           ` [ [ [ [ [ ] ] ] ] ] `,
-	outCompacted: `[[[[[]]]]]`,
-	outIndented: `[
-	    [
-	        [
-	            [
-	                []
-	            ]
-	        ]
-	    ]
-	]`,
-	tokens: []Token{BeginArray, BeginArray, BeginArray, BeginArray, BeginArray, EndArray, EndArray, EndArray, EndArray, EndArray},
-	pointers: []Pointer{
-		"",
-		"/0",
-		"/0/0",
-		"/0/0/0",
-		"/0/0/0/0",
-		"/0/0/0/0",
-		"/0/0/0",
-		"/0/0",
-		"/0",
-		"",
-	},
-}, {
-	name: jsontest.Name("Everything"),
-	in: ` {
-		"literals" : [ null , false , true ],
-		"string" : "Hello, 世界" ,
-		"number" : 3.14159 ,
-		"arrayN0" : [ ] ,
-		"arrayN1" : [ 0 ] ,
-		"arrayN2" : [ 0 , 1 ] ,
-		"objectN0" : { } ,
-		"objectN1" : { "0" : 0 } ,
-		"objectN2" : { "0" : 0 , "1" : 1 }
-	} `,
-	outCompacted: `{"literals":[null,false,true],"string":"Hello, 世界","number":3.14159,"arrayN0":[],"arrayN1":[0],"arrayN2":[0,1],"objectN0":{},"objectN1":{"0":0},"objectN2":{"0":0,"1":1}}`,
-	outEscaped:   `{"\u006c\u0069\u0074\u0065\u0072\u0061\u006c\u0073":[null,false,true],"\u0073\u0074\u0072\u0069\u006e\u0067":"\u0048\u0065\u006c\u006c\u006f\u002c\u0020\u4e16\u754c","\u006e\u0075\u006d\u0062\u0065\u0072":3.14159,"\u0061\u0072\u0072\u0061\u0079\u004e\u0030":[],"\u0061\u0072\u0072\u0061\u0079\u004e\u0031":[0],"\u0061\u0072\u0072\u0061\u0079\u004e\u0032":[0,1],"\u006f\u0062\u006a\u0065\u0063\u0074\u004e\u0030":{},"\u006f\u0062\u006a\u0065\u0063\u0074\u004e\u0031":{"\u0030":0},"\u006f\u0062\u006a\u0065\u0063\u0074\u004e\u0032":{"\u0030":0,"\u0031":1}}`,
-	outIndented: `{
-	    "literals": [
-	        null,
-	        false,
-	        true
-	    ],
-	    "string": "Hello, 世界",
-	    "number": 3.14159,
-	    "arrayN0": [],
-	    "arrayN1": [
-	        0
-	    ],
-	    "arrayN2": [
-	        0,
-	        1
-	    ],
-	    "objectN0": {},
-	    "objectN1": {
-	        "0": 0
-	    },
-	    "objectN2": {
-	        "0": 0,
-	        "1": 1
-	    }
-	}`,
-	outCanonicalized: `{"arrayN0":[],"arrayN1":[0],"arrayN2":[0,1],"literals":[null,false,true],"number":3.14159,"objectN0":{},"objectN1":{"0":0},"objectN2":{"0":0,"1":1},"string":"Hello, 世界"}`,
-	tokens: []Token{
-		BeginObject,
-		String("literals"), BeginArray, Null, False, True, EndArray,
-		String("string"), String("Hello, 世界"),
-		String("number"), Float(3.14159),
-		String("arrayN0"), BeginArray, EndArray,
-		String("arrayN1"), BeginArray, Uint(0), EndArray,
-		String("arrayN2"), BeginArray, Uint(0), Uint(1), EndArray,
-		String("objectN0"), BeginObject, EndObject,
-		String("objectN1"), BeginObject, String("0"), Uint(0), EndObject,
-		String("objectN2"), BeginObject, String("0"), Uint(0), String("1"), Uint(1), EndObject,
-		EndObject,
-	},
-	pointers: []Pointer{
-		"",
-		"/literals", "/literals",
-		"/literals/0",
-		"/literals/1",
-		"/literals/2",
-		"/literals",
-		"/string", "/string",
-		"/number", "/number",
-		"/arrayN0", "/arrayN0", "/arrayN0",
-		"/arrayN1", "/arrayN1",
-		"/arrayN1/0",
-		"/arrayN1",
-		"/arrayN2", "/arrayN2",
-		"/arrayN2/0",
-		"/arrayN2/1",
-		"/arrayN2",
-		"/objectN0", "/objectN0", "/objectN0",
-		"/objectN1", "/objectN1",
-		"/objectN1/0", "/objectN1/0",
-		"/objectN1",
-		"/objectN2", "/objectN2",
-		"/objectN2/0", "/objectN2/0",
-		"/objectN2/1", "/objectN2/1",
-		"/objectN2",
-		"",
-	},
-}}
-
-// TestCoderInterleaved tests that we can interleave calls that operate on
-// tokens and raw values. The only error condition is trying to operate on a
-// raw value when the next token is an end of object or array.
-func TestCoderInterleaved(t *testing.T) {
-	for _, td := range coderTestdata {
-		// In TokenFirst and ValueFirst, alternate between tokens and values.
-		// In TokenDelims, only use tokens for object and array delimiters.
-		for _, modeName := range []string{"TokenFirst", "ValueFirst", "TokenDelims"} {
-			t.Run(path.Join(td.name.Name, modeName), func(t *testing.T) {
-				testCoderInterleaved(t, td.name.Where, modeName, td)
-			})
-		}
-	}
-}
-func testCoderInterleaved(t *testing.T, where jsontest.CasePos, modeName string, td coderTestdataEntry) {
-	src := strings.NewReader(td.in)
-	dst := new(bytes.Buffer)
-	dec := NewDecoder(src)
-	enc := NewEncoder(dst)
-	tickTock := modeName == "TokenFirst"
-	for {
-		if modeName == "TokenDelims" {
-			switch dec.PeekKind() {
-			case '{', '}', '[', ']':
-				tickTock = true // as token
-			default:
-				tickTock = false // as value
-			}
-		}
-		if tickTock {
-			tok, err := dec.ReadToken()
-			if err != nil {
-				if err == io.EOF {
-					break
-				}
-				t.Fatalf("%s: Decoder.ReadToken error: %v", where, err)
-			}
-			if err := enc.WriteToken(tok); err != nil {
-				t.Fatalf("%s: Encoder.WriteToken error: %v", where, err)
-			}
-		} else {
-			val, err := dec.ReadValue()
-			if err != nil {
-				// It is a syntactic error to call ReadValue
-				// at the end of an object or array.
-				// Retry as a ReadToken call.
-				expectError := dec.PeekKind() == '}' || dec.PeekKind() == ']'
-				if expectError {
-					if !errors.As(err, new(*SyntacticError)) {
-						t.Fatalf("%s: Decoder.ReadToken error is %T, want %T", where, err, new(SyntacticError))
-					}
-					tickTock = !tickTock
-					continue
-				}
-
-				if err == io.EOF {
-					break
-				}
-				t.Fatalf("%s: Decoder.ReadValue error: %v", where, err)
-			}
-			if err := enc.WriteValue(val); err != nil {
-				t.Fatalf("%s: Encoder.WriteValue error: %v", where, err)
-			}
-		}
-		tickTock = !tickTock
-	}
-
-	got := dst.String()
-	want := td.outCompacted + "\n"
-	if got != want {
-		t.Fatalf("%s: output mismatch:\ngot  %q\nwant %q", where, got, want)
-	}
-}
-
-func TestCoderStackPointer(t *testing.T) {
-	tests := []struct {
-		token Token
-		want  Pointer
-	}{
-		{Null, ""},
-
-		{BeginArray, ""},
-		{EndArray, ""},
-
-		{BeginArray, ""},
-		{Bool(true), "/0"},
-		{EndArray, ""},
-
-		{BeginArray, ""},
-		{String("hello"), "/0"},
-		{String("goodbye"), "/1"},
-		{EndArray, ""},
-
-		{BeginObject, ""},
-		{EndObject, ""},
-
-		{BeginObject, ""},
-		{String("hello"), "/hello"},
-		{String("goodbye"), "/hello"},
-		{EndObject, ""},
-
-		{BeginObject, ""},
-		{String(""), "/"},
-		{Null, "/"},
-		{String("0"), "/0"},
-		{Null, "/0"},
-		{String("~"), "/~0"},
-		{Null, "/~0"},
-		{String("/"), "/~1"},
-		{Null, "/~1"},
-		{String("a//b~/c/~d~~e"), "/a~1~1b~0~1c~1~0d~0~0e"},
-		{Null, "/a~1~1b~0~1c~1~0d~0~0e"},
-		{String(" \r\n\t"), "/ \r\n\t"},
-		{Null, "/ \r\n\t"},
-		{EndObject, ""},
-
-		{BeginArray, ""},
-		{BeginObject, "/0"},
-		{String(""), "/0/"},
-		{BeginArray, "/0/"},
-		{BeginObject, "/0//0"},
-		{String("#"), "/0//0/#"},
-		{Null, "/0//0/#"},
-		{EndObject, "/0//0"},
-		{EndArray, "/0/"},
-		{EndObject, "/0"},
-		{EndArray, ""},
-	}
-
-	for _, allowDupes := range []bool{false, true} {
-		var name string
-		switch allowDupes {
-		case false:
-			name = "RejectDuplicateNames"
-		case true:
-			name = "AllowDuplicateNames"
-		}
-
-		t.Run(name, func(t *testing.T) {
-			bb := new(bytes.Buffer)
-
-			enc := NewEncoder(bb, AllowDuplicateNames(allowDupes))
-			for i, tt := range tests {
-				if err := enc.WriteToken(tt.token); err != nil {
-					t.Fatalf("%d: Encoder.WriteToken error: %v", i, err)
-				}
-				if got := enc.StackPointer(); got != tests[i].want {
-					t.Fatalf("%d: Encoder.StackPointer = %v, want %v", i, got, tests[i].want)
-				}
-			}
-
-			dec := NewDecoder(bb, AllowDuplicateNames(allowDupes))
-			for i := range tests {
-				if _, err := dec.ReadToken(); err != nil {
-					t.Fatalf("%d: Decoder.ReadToken error: %v", i, err)
-				}
-				if got := dec.StackPointer(); got != tests[i].want {
-					t.Fatalf("%d: Decoder.StackPointer = %v, want %v", i, got, tests[i].want)
-				}
-			}
-		})
-	}
-}
-
-func TestCoderMaxDepth(t *testing.T) {
-	trimArray := func(b []byte) []byte { return b[len(`[`) : len(b)-len(`]`)] }
-	maxArrays := []byte(strings.Repeat(`[`, maxNestingDepth+1) + strings.Repeat(`]`, maxNestingDepth+1))
-	trimObject := func(b []byte) []byte { return b[len(`{"":`) : len(b)-len(`}`)] }
-	maxObjects := []byte(strings.Repeat(`{"":`, maxNestingDepth+1) + `""` + strings.Repeat(`}`, maxNestingDepth+1))
-
-	t.Run("Decoder", func(t *testing.T) {
-		var dec Decoder
-		checkReadToken := func(t *testing.T, wantKind Kind, wantErr error) {
-			t.Helper()
-			if tok, err := dec.ReadToken(); tok.Kind() != wantKind || !equalError(err, wantErr) {
-				t.Fatalf("Decoder.ReadToken = (%q, %v), want (%q, %v)", byte(tok.Kind()), err, byte(wantKind), wantErr)
-			}
-		}
-		checkReadValue := func(t *testing.T, wantLen int, wantErr error) {
-			t.Helper()
-			if val, err := dec.ReadValue(); len(val) != wantLen || !equalError(err, wantErr) {
-				t.Fatalf("Decoder.ReadValue = (%d, %v), want (%d, %v)", len(val), err, wantLen, wantErr)
-			}
-		}
-
-		t.Run("ArraysValid/SingleValue", func(t *testing.T) {
-			dec.s.reset(trimArray(maxArrays), nil)
-			checkReadValue(t, maxNestingDepth*len(`[]`), nil)
-		})
-		t.Run("ArraysValid/TokenThenValue", func(t *testing.T) {
-			dec.s.reset(trimArray(maxArrays), nil)
-			checkReadToken(t, '[', nil)
-			checkReadValue(t, (maxNestingDepth-1)*len(`[]`), nil)
-			checkReadToken(t, ']', nil)
-		})
-		t.Run("ArraysValid/AllTokens", func(t *testing.T) {
-			dec.s.reset(trimArray(maxArrays), nil)
-			for range maxNestingDepth {
-				checkReadToken(t, '[', nil)
-			}
-			for range maxNestingDepth {
-				checkReadToken(t, ']', nil)
-			}
-		})
-
-		wantErr := &SyntacticError{
-			ByteOffset:  maxNestingDepth,
-			JSONPointer: Pointer(strings.Repeat("/0", maxNestingDepth)),
-			Err:         errMaxDepth,
-		}
-		t.Run("ArraysInvalid/SingleValue", func(t *testing.T) {
-			dec.s.reset(maxArrays, nil)
-			checkReadValue(t, 0, wantErr)
-		})
-		t.Run("ArraysInvalid/TokenThenValue", func(t *testing.T) {
-			dec.s.reset(maxArrays, nil)
-			checkReadToken(t, '[', nil)
-			checkReadValue(t, 0, wantErr)
-		})
-		t.Run("ArraysInvalid/AllTokens", func(t *testing.T) {
-			dec.s.reset(maxArrays, nil)
-			for range maxNestingDepth {
-				checkReadToken(t, '[', nil)
-			}
-			checkReadValue(t, 0, wantErr)
-		})
-
-		t.Run("ObjectsValid/SingleValue", func(t *testing.T) {
-			dec.s.reset(trimObject(maxObjects), nil)
-			checkReadValue(t, maxNestingDepth*len(`{"":}`)+len(`""`), nil)
-		})
-		t.Run("ObjectsValid/TokenThenValue", func(t *testing.T) {
-			dec.s.reset(trimObject(maxObjects), nil)
-			checkReadToken(t, '{', nil)
-			checkReadToken(t, '"', nil)
-			checkReadValue(t, (maxNestingDepth-1)*len(`{"":}`)+len(`""`), nil)
-			checkReadToken(t, '}', nil)
-		})
-		t.Run("ObjectsValid/AllTokens", func(t *testing.T) {
-			dec.s.reset(trimObject(maxObjects), nil)
-			for range maxNestingDepth {
-				checkReadToken(t, '{', nil)
-				checkReadToken(t, '"', nil)
-			}
-			checkReadToken(t, '"', nil)
-			for range maxNestingDepth {
-				checkReadToken(t, '}', nil)
-			}
-		})
-
-		wantErr = &SyntacticError{
-			ByteOffset:  maxNestingDepth * int64(len(`{"":`)),
-			JSONPointer: Pointer(strings.Repeat("/", maxNestingDepth)),
-			Err:         errMaxDepth,
-		}
-		t.Run("ObjectsInvalid/SingleValue", func(t *testing.T) {
-			dec.s.reset(maxObjects, nil)
-			checkReadValue(t, 0, wantErr)
-		})
-		t.Run("ObjectsInvalid/TokenThenValue", func(t *testing.T) {
-			dec.s.reset(maxObjects, nil)
-			checkReadToken(t, '{', nil)
-			checkReadToken(t, '"', nil)
-			checkReadValue(t, 0, wantErr)
-		})
-		t.Run("ObjectsInvalid/AllTokens", func(t *testing.T) {
-			dec.s.reset(maxObjects, nil)
-			for range maxNestingDepth {
-				checkReadToken(t, '{', nil)
-				checkReadToken(t, '"', nil)
-			}
-			checkReadToken(t, 0, wantErr)
-		})
-	})
-
-	t.Run("Encoder", func(t *testing.T) {
-		var enc Encoder
-		checkWriteToken := func(t *testing.T, tok Token, wantErr error) {
-			t.Helper()
-			if err := enc.WriteToken(tok); !equalError(err, wantErr) {
-				t.Fatalf("Encoder.WriteToken = %v, want %v", err, wantErr)
-			}
-		}
-		checkWriteValue := func(t *testing.T, val Value, wantErr error) {
-			t.Helper()
-			if err := enc.WriteValue(val); !equalError(err, wantErr) {
-				t.Fatalf("Encoder.WriteValue = %v, want %v", err, wantErr)
-			}
-		}
-
-		wantErr := &SyntacticError{
-			ByteOffset:  maxNestingDepth,
-			JSONPointer: Pointer(strings.Repeat("/0", maxNestingDepth)),
-			Err:         errMaxDepth,
-		}
-		t.Run("Arrays/SingleValue", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			checkWriteValue(t, maxArrays, wantErr)
-			checkWriteValue(t, trimArray(maxArrays), nil)
-		})
-		t.Run("Arrays/TokenThenValue", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			checkWriteToken(t, BeginArray, nil)
-			checkWriteValue(t, trimArray(maxArrays), wantErr)
-			checkWriteValue(t, trimArray(trimArray(maxArrays)), nil)
-			checkWriteToken(t, EndArray, nil)
-		})
-		t.Run("Arrays/AllTokens", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			for range maxNestingDepth {
-				checkWriteToken(t, BeginArray, nil)
-			}
-			checkWriteToken(t, BeginArray, wantErr)
-			for range maxNestingDepth {
-				checkWriteToken(t, EndArray, nil)
-			}
-		})
-
-		wantErr = &SyntacticError{
-			ByteOffset:  maxNestingDepth * int64(len(`{"":`)),
-			JSONPointer: Pointer(strings.Repeat("/", maxNestingDepth)),
-			Err:         errMaxDepth,
-		}
-		t.Run("Objects/SingleValue", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			checkWriteValue(t, maxObjects, wantErr)
-			checkWriteValue(t, trimObject(maxObjects), nil)
-		})
-		t.Run("Objects/TokenThenValue", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			checkWriteToken(t, BeginObject, nil)
-			checkWriteToken(t, String(""), nil)
-			checkWriteValue(t, trimObject(maxObjects), wantErr)
-			checkWriteValue(t, trimObject(trimObject(maxObjects)), nil)
-			checkWriteToken(t, EndObject, nil)
-		})
-		t.Run("Objects/AllTokens", func(t *testing.T) {
-			enc.s.reset(enc.s.Buf[:0], nil)
-			for range maxNestingDepth - 1 {
-				checkWriteToken(t, BeginObject, nil)
-				checkWriteToken(t, String(""), nil)
-			}
-			checkWriteToken(t, BeginObject, nil)
-			checkWriteToken(t, String(""), nil)
-			checkWriteToken(t, BeginObject, wantErr)
-			checkWriteToken(t, String(""), nil)
-			for range maxNestingDepth {
-				checkWriteToken(t, EndObject, nil)
-			}
-		})
-	})
-}
-
-// FaultyBuffer implements io.Reader and io.Writer.
-// It may process fewer bytes than the provided buffer
-// and may randomly return an error.
-type FaultyBuffer struct {
-	B []byte
-
-	// MaxBytes is the maximum number of bytes read/written.
-	// A random number of bytes within [0, MaxBytes] are processed.
-	// A non-positive value is treated as infinity.
-	MaxBytes int
-
-	// MayError specifies whether to randomly provide this error.
-	// Even if an error is returned, no bytes are dropped.
-	MayError error
-
-	// Rand to use for pseudo-random behavior.
-	// If nil, it will be initialized with rand.NewSource(0).
-	Rand rand.Source
-}
-
-func (p *FaultyBuffer) Read(b []byte) (int, error) {
-	b = b[:copy(b[:p.mayTruncate(len(b))], p.B)]
-	p.B = p.B[len(b):]
-	if len(p.B) == 0 && (len(b) == 0 || p.randN(2) == 0) {
-		return len(b), io.EOF
-	}
-	return len(b), p.mayError()
-}
-
-func (p *FaultyBuffer) Write(b []byte) (int, error) {
-	b2 := b[:p.mayTruncate(len(b))]
-	p.B = append(p.B, b2...)
-	if len(b2) < len(b) {
-		return len(b2), io.ErrShortWrite
-	}
-	return len(b2), p.mayError()
-}
-
-// mayTruncate may return a value between [0, n].
-func (p *FaultyBuffer) mayTruncate(n int) int {
-	if p.MaxBytes > 0 {
-		if n > p.MaxBytes {
-			n = p.MaxBytes
-		}
-		return p.randN(n + 1)
-	}
-	return n
-}
-
-// mayError may return a non-nil error.
-func (p *FaultyBuffer) mayError() error {
-	if p.MayError != nil && p.randN(2) == 0 {
-		return p.MayError
-	}
-	return nil
-}
-
-func (p *FaultyBuffer) randN(n int) int {
-	if p.Rand == nil {
-		p.Rand = rand.NewSource(0)
-	}
-	return int(p.Rand.Int63() % int64(n))
-}
diff --git a/src/encoding/json/jsontext/decode.go b/src/encoding/json/jsontext/decode.go
deleted file mode 100644
index 784ae4709ae5b6..00000000000000
--- a/src/encoding/json/jsontext/decode.go
+++ /dev/null
@@ -1,1168 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"io"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-)
-
-// NOTE: The logic for decoding is complicated by the fact that reading from
-// an io.Reader into a temporary buffer means that the buffer may contain a
-// truncated portion of some valid input, requiring the need to fetch more data.
-//
-// This file is structured in the following way:
-//
-//   - consumeXXX functions parse an exact JSON token from a []byte.
-//     If the buffer appears truncated, then it returns io.ErrUnexpectedEOF.
-//     The consumeSimpleXXX functions are so named because they only handle
-//     a subset of the grammar for the JSON token being parsed.
-//     They do not handle the full grammar to keep these functions inlinable.
-//
-//   - Decoder.consumeXXX methods parse the next JSON token from Decoder.buf,
-//     automatically fetching more input if necessary. These methods take
-//     a position relative to the start of Decoder.buf as an argument and
-//     return the end of the consumed JSON token as a position,
-//     also relative to the start of Decoder.buf.
-//
-//   - In the event of an I/O errors or state machine violations,
-//     the implementation avoids mutating the state of Decoder
-//     (aside from the book-keeping needed to implement Decoder.fetch).
-//     For this reason, only Decoder.ReadToken and Decoder.ReadValue are
-//     responsible for updated Decoder.prevStart and Decoder.prevEnd.
-//
-//   - For performance, much of the implementation uses the pattern of calling
-//     the inlinable consumeXXX functions first, and if more work is necessary,
-//     then it calls the slower Decoder.consumeXXX methods.
-//     TODO: Revisit this pattern if the Go compiler provides finer control
-//     over exactly which calls are inlined or not.
-
-// Decoder is a streaming decoder for raw JSON tokens and values.
-// It is used to read a stream of top-level JSON values,
-// each separated by optional whitespace characters.
-//
-// [Decoder.ReadToken] and [Decoder.ReadValue] calls may be interleaved.
-// For example, the following JSON value:
-//
-//	{"name":"value","array":[null,false,true,3.14159],"object":{"k":"v"}}
-//
-// can be parsed with the following calls (ignoring errors for brevity):
-//
-//	d.ReadToken() // {
-//	d.ReadToken() // "name"
-//	d.ReadToken() // "value"
-//	d.ReadValue() // "array"
-//	d.ReadToken() // [
-//	d.ReadToken() // null
-//	d.ReadToken() // false
-//	d.ReadValue() // true
-//	d.ReadToken() // 3.14159
-//	d.ReadToken() // ]
-//	d.ReadValue() // "object"
-//	d.ReadValue() // {"k":"v"}
-//	d.ReadToken() // }
-//
-// The above is one of many possible sequence of calls and
-// may not represent the most sensible method to call for any given token/value.
-// For example, it is probably more common to call [Decoder.ReadToken] to obtain a
-// string token for object names.
-type Decoder struct {
-	s decoderState
-}
-
-// decoderState is the low-level state of Decoder.
-// It has exported fields and method for use by the "json" package.
-type decoderState struct {
-	state
-	decodeBuffer
-	jsonopts.Struct
-
-	StringCache *[256]string // only used when unmarshaling; identical to json.stringCache
-}
-
-// decodeBuffer is a buffer split into 4 segments:
-//
-//   - buf[0:prevEnd]         // already read portion of the buffer
-//   - buf[prevStart:prevEnd] // previously read value
-//   - buf[prevEnd:len(buf)]  // unread portion of the buffer
-//   - buf[len(buf):cap(buf)] // unused portion of the buffer
-//
-// Invariants:
-//
-//	0 ≤ prevStart ≤ prevEnd ≤ len(buf) ≤ cap(buf)
-type decodeBuffer struct {
-	peekPos int   // non-zero if valid offset into buf for start of next token
-	peekErr error // implies peekPos is -1
-
-	buf       []byte // may alias rd if it is a bytes.Buffer
-	prevStart int
-	prevEnd   int
-
-	// baseOffset is added to prevStart and prevEnd to obtain
-	// the absolute offset relative to the start of io.Reader stream.
-	baseOffset int64
-
-	rd io.Reader
-}
-
-// NewDecoder constructs a new streaming decoder reading from r.
-//
-// If r is a [bytes.Buffer], then the decoder parses directly from the buffer
-// without first copying the contents to an intermediate buffer.
-// Additional writes to the buffer must not occur while the decoder is in use.
-func NewDecoder(r io.Reader, opts ...Options) *Decoder {
-	d := new(Decoder)
-	d.Reset(r, opts...)
-	return d
-}
-
-// Reset resets a decoder such that it is reading afresh from r and
-// configured with the provided options. Reset must not be called on an
-// a Decoder passed to the [encoding/json/v2.UnmarshalerFrom.UnmarshalJSONFrom] method
-// or the [encoding/json/v2.UnmarshalFromFunc] function.
-func (d *Decoder) Reset(r io.Reader, opts ...Options) {
-	switch {
-	case d == nil:
-		panic("jsontext: invalid nil Decoder")
-	case r == nil:
-		panic("jsontext: invalid nil io.Reader")
-	case d.s.Flags.Get(jsonflags.WithinArshalCall):
-		panic("jsontext: cannot reset Decoder passed to json.UnmarshalerFrom")
-	}
-	d.s.reset(nil, r, opts...)
-}
-
-func (d *decoderState) reset(b []byte, r io.Reader, opts ...Options) {
-	d.state.reset()
-	d.decodeBuffer = decodeBuffer{buf: b, rd: r}
-	opts2 := jsonopts.Struct{} // avoid mutating d.Struct in case it is part of opts
-	opts2.Join(opts...)
-	d.Struct = opts2
-}
-
-// Options returns the options used to construct the encoder and
-// may additionally contain semantic options passed to a
-// [encoding/json/v2.UnmarshalDecode] call.
-//
-// If operating within
-// a [encoding/json/v2.UnmarshalerFrom.UnmarshalJSONFrom] method call or
-// a [encoding/json/v2.UnmarshalFromFunc] function call,
-// then the returned options are only valid within the call.
-func (d *Decoder) Options() Options {
-	return &d.s.Struct
-}
-
-var errBufferWriteAfterNext = errors.New("invalid bytes.Buffer.Write call after calling bytes.Buffer.Next")
-
-// fetch reads at least 1 byte from the underlying io.Reader.
-// It returns io.ErrUnexpectedEOF if zero bytes were read and io.EOF was seen.
-func (d *decoderState) fetch() error {
-	if d.rd == nil {
-		return io.ErrUnexpectedEOF
-	}
-
-	// Inform objectNameStack that we are about to fetch new buffer content.
-	d.Names.copyQuotedBuffer(d.buf)
-
-	// Specialize bytes.Buffer for better performance.
-	if bb, ok := d.rd.(*bytes.Buffer); ok {
-		switch {
-		case bb.Len() == 0:
-			return io.ErrUnexpectedEOF
-		case len(d.buf) == 0:
-			d.buf = bb.Next(bb.Len()) // "read" all data in the buffer
-			return nil
-		default:
-			// This only occurs if a partially filled bytes.Buffer was provided
-			// and more data is written to it while Decoder is reading from it.
-			// This practice will lead to data corruption since future writes
-			// may overwrite the contents of the current buffer.
-			//
-			// The user is trying to use a bytes.Buffer as a pipe,
-			// but a bytes.Buffer is poor implementation of a pipe,
-			// the purpose-built io.Pipe should be used instead.
-			return &ioError{action: "read", err: errBufferWriteAfterNext}
-		}
-	}
-
-	// Allocate initial buffer if empty.
-	if cap(d.buf) == 0 {
-		d.buf = make([]byte, 0, 64)
-	}
-
-	// Check whether to grow the buffer.
-	const maxBufferSize = 4 << 10
-	const growthSizeFactor = 2 // higher value is faster
-	const growthRateFactor = 2 // higher value is slower
-	// By default, grow if below the maximum buffer size.
-	grow := cap(d.buf) <= maxBufferSize/growthSizeFactor
-	// Growing can be expensive, so only grow
-	// if a sufficient number of bytes have been processed.
-	grow = grow && int64(cap(d.buf)) < d.previousOffsetEnd()/growthRateFactor
-	// If prevStart==0, then fetch was called in order to fetch more data
-	// to finish consuming a large JSON value contiguously.
-	// Grow if less than 25% of the remaining capacity is available.
-	// Note that this may cause the input buffer to exceed maxBufferSize.
-	grow = grow || (d.prevStart == 0 && len(d.buf) >= 3*cap(d.buf)/4)
-
-	if grow {
-		// Allocate a new buffer and copy the contents of the old buffer over.
-		// TODO: Provide a hard limit on the maximum internal buffer size?
-		buf := make([]byte, 0, cap(d.buf)*growthSizeFactor)
-		d.buf = append(buf, d.buf[d.prevStart:]...)
-	} else {
-		// Move unread portion of the data to the front.
-		n := copy(d.buf[:cap(d.buf)], d.buf[d.prevStart:])
-		d.buf = d.buf[:n]
-	}
-	d.baseOffset += int64(d.prevStart)
-	d.prevEnd -= d.prevStart
-	d.prevStart = 0
-
-	// Read more data into the internal buffer.
-	for {
-		n, err := d.rd.Read(d.buf[len(d.buf):cap(d.buf)])
-		switch {
-		case n > 0:
-			d.buf = d.buf[:len(d.buf)+n]
-			return nil // ignore errors if any bytes are read
-		case err == io.EOF:
-			return io.ErrUnexpectedEOF
-		case err != nil:
-			return &ioError{action: "read", err: err}
-		default:
-			continue // Read returned (0, nil)
-		}
-	}
-}
-
-const invalidateBufferByte = '#' // invalid starting character for JSON grammar
-
-// invalidatePreviousRead invalidates buffers returned by Peek and Read calls
-// so that the first byte is an invalid character.
-// This Hyrum-proofs the API against faulty application code that assumes
-// values returned by ReadValue remain valid past subsequent Read calls.
-func (d *decodeBuffer) invalidatePreviousRead() {
-	// Avoid mutating the buffer if d.rd is nil which implies that d.buf
-	// is provided by the user code and may not expect mutations.
-	isBytesBuffer := func(r io.Reader) bool {
-		_, ok := r.(*bytes.Buffer)
-		return ok
-	}
-	if d.rd != nil && !isBytesBuffer(d.rd) && d.prevStart < d.prevEnd && uint(d.prevStart) < uint(len(d.buf)) {
-		d.buf[d.prevStart] = invalidateBufferByte
-		d.prevStart = d.prevEnd
-	}
-}
-
-// needMore reports whether there are no more unread bytes.
-func (d *decodeBuffer) needMore(pos int) bool {
-	// NOTE: The arguments and logic are kept simple to keep this inlinable.
-	return pos == len(d.buf)
-}
-
-func (d *decodeBuffer) offsetAt(pos int) int64     { return d.baseOffset + int64(pos) }
-func (d *decodeBuffer) previousOffsetStart() int64 { return d.baseOffset + int64(d.prevStart) }
-func (d *decodeBuffer) previousOffsetEnd() int64   { return d.baseOffset + int64(d.prevEnd) }
-func (d *decodeBuffer) previousBuffer() []byte     { return d.buf[d.prevStart:d.prevEnd] }
-func (d *decodeBuffer) unreadBuffer() []byte       { return d.buf[d.prevEnd:len(d.buf)] }
-
-// PreviousTokenOrValue returns the previously read token or value
-// unless it has been invalidated by a call to PeekKind.
-// If a token is just a delimiter, then this returns a 1-byte buffer.
-// This method is used for error reporting at the semantic layer.
-func (d *decodeBuffer) PreviousTokenOrValue() []byte {
-	b := d.previousBuffer()
-	// If peek was called, then the previous token or buffer is invalidated.
-	if d.peekPos > 0 || len(b) > 0 && b[0] == invalidateBufferByte {
-		return nil
-	}
-	// ReadToken does not preserve the buffer for null, bools, or delimiters.
-	// Manually re-construct that buffer.
-	if len(b) == 0 {
-		b = d.buf[:d.prevEnd] // entirety of the previous buffer
-		for _, tok := range []string{"null", "false", "true", "{", "}", "[", "]"} {
-			if len(b) >= len(tok) && string(b[len(b)-len(tok):]) == tok {
-				return b[len(b)-len(tok):]
-			}
-		}
-	}
-	return b
-}
-
-// PeekKind retrieves the next token kind, but does not advance the read offset.
-//
-// It returns 0 if an error occurs. Any such error is cached until
-// the next read call and it is the caller's responsibility to eventually
-// follow up a PeekKind call with a read call.
-func (d *Decoder) PeekKind() Kind {
-	return d.s.PeekKind()
-}
-func (d *decoderState) PeekKind() Kind {
-	// Check whether we have a cached peek result.
-	if d.peekPos > 0 {
-		return Kind(d.buf[d.peekPos]).normalize()
-	}
-
-	var err error
-	d.invalidatePreviousRead()
-	pos := d.prevEnd
-
-	// Consume leading whitespace.
-	pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-	if d.needMore(pos) {
-		if pos, err = d.consumeWhitespace(pos); err != nil {
-			if err == io.ErrUnexpectedEOF && d.Tokens.Depth() == 1 {
-				err = io.EOF // EOF possibly if no Tokens present after top-level value
-			}
-			d.peekPos, d.peekErr = -1, wrapSyntacticError(d, err, pos, 0)
-			return invalidKind
-		}
-	}
-
-	// Consume colon or comma.
-	var delim byte
-	if c := d.buf[pos]; c == ':' || c == ',' {
-		delim = c
-		pos += 1
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				err = wrapSyntacticError(d, err, pos, 0)
-				d.peekPos, d.peekErr = -1, d.checkDelimBeforeIOError(delim, err)
-				return invalidKind
-			}
-		}
-	}
-	next := Kind(d.buf[pos]).normalize()
-	if d.Tokens.needDelim(next) != delim {
-		d.peekPos, d.peekErr = -1, d.checkDelim(delim, next)
-		return invalidKind
-	}
-
-	// This may set peekPos to zero, which is indistinguishable from
-	// the uninitialized state. While a small hit to performance, it is correct
-	// since ReadValue and ReadToken will disregard the cached result and
-	// recompute the next kind.
-	d.peekPos, d.peekErr = pos, nil
-	return next
-}
-
-// checkDelimBeforeIOError checks whether the delim is even valid
-// before returning an IO error, which occurs after the delim.
-func (d *decoderState) checkDelimBeforeIOError(delim byte, err error) error {
-	// Since an IO error occurred, we do not know what the next kind is.
-	// However, knowing the next kind is necessary to validate
-	// whether the current delim is at least potentially valid.
-	// Since a JSON string is always valid as the next token,
-	// conservatively assume that is the next kind for validation.
-	const next = Kind('"')
-	if d.Tokens.needDelim(next) != delim {
-		err = d.checkDelim(delim, next)
-	}
-	return err
-}
-
-// CountNextDelimWhitespace counts the number of upcoming bytes of
-// delimiter or whitespace characters.
-// This method is used for error reporting at the semantic layer.
-func (d *decoderState) CountNextDelimWhitespace() int {
-	d.PeekKind() // populate unreadBuffer
-	return len(d.unreadBuffer()) - len(bytes.TrimLeft(d.unreadBuffer(), ",: \n\r\t"))
-}
-
-// checkDelim checks whether delim is valid for the given next kind.
-func (d *decoderState) checkDelim(delim byte, next Kind) error {
-	where := "at start of value"
-	switch d.Tokens.needDelim(next) {
-	case delim:
-		return nil
-	case ':':
-		where = "after object name (expecting ':')"
-	case ',':
-		if d.Tokens.Last.isObject() {
-			where = "after object value (expecting ',' or '}')"
-		} else {
-			where = "after array element (expecting ',' or ']')"
-		}
-	}
-	pos := d.prevEnd // restore position to right after leading whitespace
-	pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-	err := jsonwire.NewInvalidCharacterError(d.buf[pos:], where)
-	return wrapSyntacticError(d, err, pos, 0)
-}
-
-// SkipValue is semantically equivalent to calling [Decoder.ReadValue] and discarding
-// the result except that memory is not wasted trying to hold the entire result.
-func (d *Decoder) SkipValue() error {
-	return d.s.SkipValue()
-}
-func (d *decoderState) SkipValue() error {
-	switch d.PeekKind() {
-	case '{', '[':
-		// For JSON objects and arrays, keep skipping all tokens
-		// until the depth matches the starting depth.
-		depth := d.Tokens.Depth()
-		for {
-			if _, err := d.ReadToken(); err != nil {
-				return err
-			}
-			if depth >= d.Tokens.Depth() {
-				return nil
-			}
-		}
-	default:
-		// Trying to skip a value when the next token is a '}' or ']'
-		// will result in an error being returned here.
-		var flags jsonwire.ValueFlags
-		if _, err := d.ReadValue(&flags); err != nil {
-			return err
-		}
-		return nil
-	}
-}
-
-// SkipValueRemainder skips the remainder of a value
-// after reading a '{' or '[' token.
-func (d *decoderState) SkipValueRemainder() error {
-	if d.Tokens.Depth()-1 > 0 && d.Tokens.Last.Length() == 0 {
-		for n := d.Tokens.Depth(); d.Tokens.Depth() >= n; {
-			if _, err := d.ReadToken(); err != nil {
-				return err
-			}
-		}
-	}
-	return nil
-}
-
-// SkipUntil skips all tokens until the state machine
-// is at or past the specified depth and length.
-func (d *decoderState) SkipUntil(depth int, length int64) error {
-	for d.Tokens.Depth() > depth || (d.Tokens.Depth() == depth && d.Tokens.Last.Length() < length) {
-		if _, err := d.ReadToken(); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// ReadToken reads the next [Token], advancing the read offset.
-// The returned token is only valid until the next Peek, Read, or Skip call.
-// It returns [io.EOF] if there are no more tokens.
-func (d *Decoder) ReadToken() (Token, error) {
-	return d.s.ReadToken()
-}
-func (d *decoderState) ReadToken() (Token, error) {
-	// Determine the next kind.
-	var err error
-	var next Kind
-	pos := d.peekPos
-	if pos != 0 {
-		// Use cached peek result.
-		if d.peekErr != nil {
-			err := d.peekErr
-			d.peekPos, d.peekErr = 0, nil // possibly a transient I/O error
-			return Token{}, err
-		}
-		next = Kind(d.buf[pos]).normalize()
-		d.peekPos = 0 // reset cache
-	} else {
-		d.invalidatePreviousRead()
-		pos = d.prevEnd
-
-		// Consume leading whitespace.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				if err == io.ErrUnexpectedEOF && d.Tokens.Depth() == 1 {
-					err = io.EOF // EOF possibly if no Tokens present after top-level value
-				}
-				return Token{}, wrapSyntacticError(d, err, pos, 0)
-			}
-		}
-
-		// Consume colon or comma.
-		var delim byte
-		if c := d.buf[pos]; c == ':' || c == ',' {
-			delim = c
-			pos += 1
-			pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-			if d.needMore(pos) {
-				if pos, err = d.consumeWhitespace(pos); err != nil {
-					err = wrapSyntacticError(d, err, pos, 0)
-					return Token{}, d.checkDelimBeforeIOError(delim, err)
-				}
-			}
-		}
-		next = Kind(d.buf[pos]).normalize()
-		if d.Tokens.needDelim(next) != delim {
-			return Token{}, d.checkDelim(delim, next)
-		}
-	}
-
-	// Handle the next token.
-	var n int
-	switch next {
-	case 'n':
-		if jsonwire.ConsumeNull(d.buf[pos:]) == 0 {
-			pos, err = d.consumeLiteral(pos, "null")
-			if err != nil {
-				return Token{}, wrapSyntacticError(d, err, pos, +1)
-			}
-		} else {
-			pos += len("null")
-		}
-		if err = d.Tokens.appendLiteral(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos-len("null"), +1) // report position at start of literal
-		}
-		d.prevStart, d.prevEnd = pos, pos
-		return Null, nil
-
-	case 'f':
-		if jsonwire.ConsumeFalse(d.buf[pos:]) == 0 {
-			pos, err = d.consumeLiteral(pos, "false")
-			if err != nil {
-				return Token{}, wrapSyntacticError(d, err, pos, +1)
-			}
-		} else {
-			pos += len("false")
-		}
-		if err = d.Tokens.appendLiteral(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos-len("false"), +1) // report position at start of literal
-		}
-		d.prevStart, d.prevEnd = pos, pos
-		return False, nil
-
-	case 't':
-		if jsonwire.ConsumeTrue(d.buf[pos:]) == 0 {
-			pos, err = d.consumeLiteral(pos, "true")
-			if err != nil {
-				return Token{}, wrapSyntacticError(d, err, pos, +1)
-			}
-		} else {
-			pos += len("true")
-		}
-		if err = d.Tokens.appendLiteral(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos-len("true"), +1) // report position at start of literal
-		}
-		d.prevStart, d.prevEnd = pos, pos
-		return True, nil
-
-	case '"':
-		var flags jsonwire.ValueFlags // TODO: Preserve this in Token?
-		if n = jsonwire.ConsumeSimpleString(d.buf[pos:]); n == 0 {
-			oldAbsPos := d.baseOffset + int64(pos)
-			pos, err = d.consumeString(&flags, pos)
-			newAbsPos := d.baseOffset + int64(pos)
-			n = int(newAbsPos - oldAbsPos)
-			if err != nil {
-				return Token{}, wrapSyntacticError(d, err, pos, +1)
-			}
-		} else {
-			pos += n
-		}
-		if d.Tokens.Last.NeedObjectName() {
-			if !d.Flags.Get(jsonflags.AllowDuplicateNames) {
-				if !d.Tokens.Last.isValidNamespace() {
-					return Token{}, wrapSyntacticError(d, errInvalidNamespace, pos-n, +1)
-				}
-				if d.Tokens.Last.isActiveNamespace() && !d.Namespaces.Last().insertQuoted(d.buf[pos-n:pos], flags.IsVerbatim()) {
-					err = wrapWithObjectName(ErrDuplicateName, d.buf[pos-n:pos])
-					return Token{}, wrapSyntacticError(d, err, pos-n, +1) // report position at start of string
-				}
-			}
-			d.Names.ReplaceLastQuotedOffset(pos - n) // only replace if insertQuoted succeeds
-		}
-		if err = d.Tokens.appendString(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos-n, +1) // report position at start of string
-		}
-		d.prevStart, d.prevEnd = pos-n, pos
-		return Token{raw: &d.decodeBuffer, num: uint64(d.previousOffsetStart())}, nil
-
-	case '0':
-		// NOTE: Since JSON numbers are not self-terminating,
-		// we need to make sure that the next byte is not part of a number.
-		if n = jsonwire.ConsumeSimpleNumber(d.buf[pos:]); n == 0 || d.needMore(pos+n) {
-			oldAbsPos := d.baseOffset + int64(pos)
-			pos, err = d.consumeNumber(pos)
-			newAbsPos := d.baseOffset + int64(pos)
-			n = int(newAbsPos - oldAbsPos)
-			if err != nil {
-				return Token{}, wrapSyntacticError(d, err, pos, +1)
-			}
-		} else {
-			pos += n
-		}
-		if err = d.Tokens.appendNumber(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos-n, +1) // report position at start of number
-		}
-		d.prevStart, d.prevEnd = pos-n, pos
-		return Token{raw: &d.decodeBuffer, num: uint64(d.previousOffsetStart())}, nil
-
-	case '{':
-		if err = d.Tokens.pushObject(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos, +1)
-		}
-		d.Names.push()
-		if !d.Flags.Get(jsonflags.AllowDuplicateNames) {
-			d.Namespaces.push()
-		}
-		pos += 1
-		d.prevStart, d.prevEnd = pos, pos
-		return BeginObject, nil
-
-	case '}':
-		if err = d.Tokens.popObject(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos, +1)
-		}
-		d.Names.pop()
-		if !d.Flags.Get(jsonflags.AllowDuplicateNames) {
-			d.Namespaces.pop()
-		}
-		pos += 1
-		d.prevStart, d.prevEnd = pos, pos
-		return EndObject, nil
-
-	case '[':
-		if err = d.Tokens.pushArray(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos, +1)
-		}
-		pos += 1
-		d.prevStart, d.prevEnd = pos, pos
-		return BeginArray, nil
-
-	case ']':
-		if err = d.Tokens.popArray(); err != nil {
-			return Token{}, wrapSyntacticError(d, err, pos, +1)
-		}
-		pos += 1
-		d.prevStart, d.prevEnd = pos, pos
-		return EndArray, nil
-
-	default:
-		err = jsonwire.NewInvalidCharacterError(d.buf[pos:], "at start of value")
-		return Token{}, wrapSyntacticError(d, err, pos, +1)
-	}
-}
-
-// ReadValue returns the next raw JSON value, advancing the read offset.
-// The value is stripped of any leading or trailing whitespace and
-// contains the exact bytes of the input, which may contain invalid UTF-8
-// if [AllowInvalidUTF8] is specified.
-//
-// The returned value is only valid until the next Peek, Read, or Skip call and
-// may not be mutated while the Decoder remains in use.
-// If the decoder is currently at the end token for an object or array,
-// then it reports a [SyntacticError] and the internal state remains unchanged.
-// It returns [io.EOF] if there are no more values.
-func (d *Decoder) ReadValue() (Value, error) {
-	var flags jsonwire.ValueFlags
-	return d.s.ReadValue(&flags)
-}
-func (d *decoderState) ReadValue(flags *jsonwire.ValueFlags) (Value, error) {
-	// Determine the next kind.
-	var err error
-	var next Kind
-	pos := d.peekPos
-	if pos != 0 {
-		// Use cached peek result.
-		if d.peekErr != nil {
-			err := d.peekErr
-			d.peekPos, d.peekErr = 0, nil // possibly a transient I/O error
-			return nil, err
-		}
-		next = Kind(d.buf[pos]).normalize()
-		d.peekPos = 0 // reset cache
-	} else {
-		d.invalidatePreviousRead()
-		pos = d.prevEnd
-
-		// Consume leading whitespace.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				if err == io.ErrUnexpectedEOF && d.Tokens.Depth() == 1 {
-					err = io.EOF // EOF possibly if no Tokens present after top-level value
-				}
-				return nil, wrapSyntacticError(d, err, pos, 0)
-			}
-		}
-
-		// Consume colon or comma.
-		var delim byte
-		if c := d.buf[pos]; c == ':' || c == ',' {
-			delim = c
-			pos += 1
-			pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-			if d.needMore(pos) {
-				if pos, err = d.consumeWhitespace(pos); err != nil {
-					err = wrapSyntacticError(d, err, pos, 0)
-					return nil, d.checkDelimBeforeIOError(delim, err)
-				}
-			}
-		}
-		next = Kind(d.buf[pos]).normalize()
-		if d.Tokens.needDelim(next) != delim {
-			return nil, d.checkDelim(delim, next)
-		}
-	}
-
-	// Handle the next value.
-	oldAbsPos := d.baseOffset + int64(pos)
-	pos, err = d.consumeValue(flags, pos, d.Tokens.Depth())
-	newAbsPos := d.baseOffset + int64(pos)
-	n := int(newAbsPos - oldAbsPos)
-	if err != nil {
-		return nil, wrapSyntacticError(d, err, pos, +1)
-	}
-	switch next {
-	case 'n', 't', 'f':
-		err = d.Tokens.appendLiteral()
-	case '"':
-		if d.Tokens.Last.NeedObjectName() {
-			if !d.Flags.Get(jsonflags.AllowDuplicateNames) {
-				if !d.Tokens.Last.isValidNamespace() {
-					err = errInvalidNamespace
-					break
-				}
-				if d.Tokens.Last.isActiveNamespace() && !d.Namespaces.Last().insertQuoted(d.buf[pos-n:pos], flags.IsVerbatim()) {
-					err = wrapWithObjectName(ErrDuplicateName, d.buf[pos-n:pos])
-					break
-				}
-			}
-			d.Names.ReplaceLastQuotedOffset(pos - n) // only replace if insertQuoted succeeds
-		}
-		err = d.Tokens.appendString()
-	case '0':
-		err = d.Tokens.appendNumber()
-	case '{':
-		if err = d.Tokens.pushObject(); err != nil {
-			break
-		}
-		if err = d.Tokens.popObject(); err != nil {
-			panic("BUG: popObject should never fail immediately after pushObject: " + err.Error())
-		}
-	case '[':
-		if err = d.Tokens.pushArray(); err != nil {
-			break
-		}
-		if err = d.Tokens.popArray(); err != nil {
-			panic("BUG: popArray should never fail immediately after pushArray: " + err.Error())
-		}
-	}
-	if err != nil {
-		return nil, wrapSyntacticError(d, err, pos-n, +1) // report position at start of value
-	}
-	d.prevEnd = pos
-	d.prevStart = pos - n
-	return d.buf[pos-n : pos : pos], nil
-}
-
-// CheckNextValue checks whether the next value is syntactically valid,
-// but does not advance the read offset.
-func (d *decoderState) CheckNextValue() error {
-	d.PeekKind() // populates d.peekPos and d.peekErr
-	pos, err := d.peekPos, d.peekErr
-	d.peekPos, d.peekErr = 0, nil
-	if err != nil {
-		return err
-	}
-
-	var flags jsonwire.ValueFlags
-	if pos, err := d.consumeValue(&flags, pos, d.Tokens.Depth()); err != nil {
-		return wrapSyntacticError(d, err, pos, +1)
-	}
-	return nil
-}
-
-// CheckEOF verifies that the input has no more data.
-func (d *decoderState) CheckEOF() error {
-	switch pos, err := d.consumeWhitespace(d.prevEnd); err {
-	case nil:
-		err := jsonwire.NewInvalidCharacterError(d.buf[pos:], "after top-level value")
-		return wrapSyntacticError(d, err, pos, 0)
-	case io.ErrUnexpectedEOF:
-		return nil
-	default:
-		return err
-	}
-}
-
-// consumeWhitespace consumes all whitespace starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the last whitespace.
-// If it returns nil, there is guaranteed to at least be one unread byte.
-//
-// The following pattern is common in this implementation:
-//
-//	pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-//	if d.needMore(pos) {
-//		if pos, err = d.consumeWhitespace(pos); err != nil {
-//			return ...
-//		}
-//	}
-//
-// It is difficult to simplify this without sacrificing performance since
-// consumeWhitespace must be inlined. The body of the if statement is
-// executed only in rare situations where we need to fetch more data.
-// Since fetching may return an error, we also need to check the error.
-func (d *decoderState) consumeWhitespace(pos int) (newPos int, err error) {
-	for {
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			absPos := d.baseOffset + int64(pos)
-			err = d.fetch() // will mutate d.buf and invalidate pos
-			pos = int(absPos - d.baseOffset)
-			if err != nil {
-				return pos, err
-			}
-			continue
-		}
-		return pos, nil
-	}
-}
-
-// consumeValue consumes a single JSON value starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the value.
-func (d *decoderState) consumeValue(flags *jsonwire.ValueFlags, pos, depth int) (newPos int, err error) {
-	for {
-		var n int
-		var err error
-		switch next := Kind(d.buf[pos]).normalize(); next {
-		case 'n':
-			if n = jsonwire.ConsumeNull(d.buf[pos:]); n == 0 {
-				n, err = jsonwire.ConsumeLiteral(d.buf[pos:], "null")
-			}
-		case 'f':
-			if n = jsonwire.ConsumeFalse(d.buf[pos:]); n == 0 {
-				n, err = jsonwire.ConsumeLiteral(d.buf[pos:], "false")
-			}
-		case 't':
-			if n = jsonwire.ConsumeTrue(d.buf[pos:]); n == 0 {
-				n, err = jsonwire.ConsumeLiteral(d.buf[pos:], "true")
-			}
-		case '"':
-			if n = jsonwire.ConsumeSimpleString(d.buf[pos:]); n == 0 {
-				return d.consumeString(flags, pos)
-			}
-		case '0':
-			// NOTE: Since JSON numbers are not self-terminating,
-			// we need to make sure that the next byte is not part of a number.
-			if n = jsonwire.ConsumeSimpleNumber(d.buf[pos:]); n == 0 || d.needMore(pos+n) {
-				return d.consumeNumber(pos)
-			}
-		case '{':
-			return d.consumeObject(flags, pos, depth)
-		case '[':
-			return d.consumeArray(flags, pos, depth)
-		default:
-			if (d.Tokens.Last.isObject() && next == ']') || (d.Tokens.Last.isArray() && next == '}') {
-				return pos, errMismatchDelim
-			}
-			return pos, jsonwire.NewInvalidCharacterError(d.buf[pos:], "at start of value")
-		}
-		if err == io.ErrUnexpectedEOF {
-			absPos := d.baseOffset + int64(pos)
-			err = d.fetch() // will mutate d.buf and invalidate pos
-			pos = int(absPos - d.baseOffset)
-			if err != nil {
-				return pos + n, err
-			}
-			continue
-		}
-		return pos + n, err
-	}
-}
-
-// consumeLiteral consumes a single JSON literal starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the literal.
-func (d *decoderState) consumeLiteral(pos int, lit string) (newPos int, err error) {
-	for {
-		n, err := jsonwire.ConsumeLiteral(d.buf[pos:], lit)
-		if err == io.ErrUnexpectedEOF {
-			absPos := d.baseOffset + int64(pos)
-			err = d.fetch() // will mutate d.buf and invalidate pos
-			pos = int(absPos - d.baseOffset)
-			if err != nil {
-				return pos + n, err
-			}
-			continue
-		}
-		return pos + n, err
-	}
-}
-
-// consumeString consumes a single JSON string starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the string.
-func (d *decoderState) consumeString(flags *jsonwire.ValueFlags, pos int) (newPos int, err error) {
-	var n int
-	for {
-		n, err = jsonwire.ConsumeStringResumable(flags, d.buf[pos:], n, !d.Flags.Get(jsonflags.AllowInvalidUTF8))
-		if err == io.ErrUnexpectedEOF {
-			absPos := d.baseOffset + int64(pos)
-			err = d.fetch() // will mutate d.buf and invalidate pos
-			pos = int(absPos - d.baseOffset)
-			if err != nil {
-				return pos + n, err
-			}
-			continue
-		}
-		return pos + n, err
-	}
-}
-
-// consumeNumber consumes a single JSON number starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the number.
-func (d *decoderState) consumeNumber(pos int) (newPos int, err error) {
-	var n int
-	var state jsonwire.ConsumeNumberState
-	for {
-		n, state, err = jsonwire.ConsumeNumberResumable(d.buf[pos:], n, state)
-		// NOTE: Since JSON numbers are not self-terminating,
-		// we need to make sure that the next byte is not part of a number.
-		if err == io.ErrUnexpectedEOF || d.needMore(pos+n) {
-			mayTerminate := err == nil
-			absPos := d.baseOffset + int64(pos)
-			err = d.fetch() // will mutate d.buf and invalidate pos
-			pos = int(absPos - d.baseOffset)
-			if err != nil {
-				if mayTerminate && err == io.ErrUnexpectedEOF {
-					return pos + n, nil
-				}
-				return pos, err
-			}
-			continue
-		}
-		return pos + n, err
-	}
-}
-
-// consumeObject consumes a single JSON object starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the object.
-func (d *decoderState) consumeObject(flags *jsonwire.ValueFlags, pos, depth int) (newPos int, err error) {
-	var n int
-	var names *objectNamespace
-	if !d.Flags.Get(jsonflags.AllowDuplicateNames) {
-		d.Namespaces.push()
-		defer d.Namespaces.pop()
-		names = d.Namespaces.Last()
-	}
-
-	// Handle before start.
-	if uint(pos) >= uint(len(d.buf)) || d.buf[pos] != '{' {
-		panic("BUG: consumeObject must be called with a buffer that starts with '{'")
-	} else if depth == maxNestingDepth+1 {
-		return pos, errMaxDepth
-	}
-	pos++
-
-	// Handle after start.
-	pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-	if d.needMore(pos) {
-		if pos, err = d.consumeWhitespace(pos); err != nil {
-			return pos, err
-		}
-	}
-	if d.buf[pos] == '}' {
-		pos++
-		return pos, nil
-	}
-
-	depth++
-	for {
-		// Handle before name.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, err
-			}
-		}
-		var flags2 jsonwire.ValueFlags
-		if n = jsonwire.ConsumeSimpleString(d.buf[pos:]); n == 0 {
-			oldAbsPos := d.baseOffset + int64(pos)
-			pos, err = d.consumeString(&flags2, pos)
-			newAbsPos := d.baseOffset + int64(pos)
-			n = int(newAbsPos - oldAbsPos)
-			flags.Join(flags2)
-			if err != nil {
-				return pos, err
-			}
-		} else {
-			pos += n
-		}
-		quotedName := d.buf[pos-n : pos]
-		if !d.Flags.Get(jsonflags.AllowDuplicateNames) && !names.insertQuoted(quotedName, flags2.IsVerbatim()) {
-			return pos - n, wrapWithObjectName(ErrDuplicateName, quotedName)
-		}
-
-		// Handle after name.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, wrapWithObjectName(err, quotedName)
-			}
-		}
-		if d.buf[pos] != ':' {
-			err := jsonwire.NewInvalidCharacterError(d.buf[pos:], "after object name (expecting ':')")
-			return pos, wrapWithObjectName(err, quotedName)
-		}
-		pos++
-
-		// Handle before value.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, wrapWithObjectName(err, quotedName)
-			}
-		}
-		pos, err = d.consumeValue(flags, pos, depth)
-		if err != nil {
-			return pos, wrapWithObjectName(err, quotedName)
-		}
-
-		// Handle after value.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, err
-			}
-		}
-		switch d.buf[pos] {
-		case ',':
-			pos++
-			continue
-		case '}':
-			pos++
-			return pos, nil
-		default:
-			return pos, jsonwire.NewInvalidCharacterError(d.buf[pos:], "after object value (expecting ',' or '}')")
-		}
-	}
-}
-
-// consumeArray consumes a single JSON array starting at d.buf[pos:].
-// It returns the new position in d.buf immediately after the array.
-func (d *decoderState) consumeArray(flags *jsonwire.ValueFlags, pos, depth int) (newPos int, err error) {
-	// Handle before start.
-	if uint(pos) >= uint(len(d.buf)) || d.buf[pos] != '[' {
-		panic("BUG: consumeArray must be called with a buffer that starts with '['")
-	} else if depth == maxNestingDepth+1 {
-		return pos, errMaxDepth
-	}
-	pos++
-
-	// Handle after start.
-	pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-	if d.needMore(pos) {
-		if pos, err = d.consumeWhitespace(pos); err != nil {
-			return pos, err
-		}
-	}
-	if d.buf[pos] == ']' {
-		pos++
-		return pos, nil
-	}
-
-	var idx int64
-	depth++
-	for {
-		// Handle before value.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, err
-			}
-		}
-		pos, err = d.consumeValue(flags, pos, depth)
-		if err != nil {
-			return pos, wrapWithArrayIndex(err, idx)
-		}
-
-		// Handle after value.
-		pos += jsonwire.ConsumeWhitespace(d.buf[pos:])
-		if d.needMore(pos) {
-			if pos, err = d.consumeWhitespace(pos); err != nil {
-				return pos, err
-			}
-		}
-		switch d.buf[pos] {
-		case ',':
-			pos++
-			idx++
-			continue
-		case ']':
-			pos++
-			return pos, nil
-		default:
-			return pos, jsonwire.NewInvalidCharacterError(d.buf[pos:], "after array element (expecting ',' or ']')")
-		}
-	}
-}
-
-// InputOffset returns the current input byte offset. It gives the location
-// of the next byte immediately after the most recently returned token or value.
-// The number of bytes actually read from the underlying [io.Reader] may be more
-// than this offset due to internal buffering effects.
-func (d *Decoder) InputOffset() int64 {
-	return d.s.previousOffsetEnd()
-}
-
-// UnreadBuffer returns the data remaining in the unread buffer,
-// which may contain zero or more bytes.
-// The returned buffer must not be mutated while Decoder continues to be used.
-// The buffer contents are valid until the next Peek, Read, or Skip call.
-func (d *Decoder) UnreadBuffer() []byte {
-	return d.s.unreadBuffer()
-}
-
-// StackDepth returns the depth of the state machine for read JSON data.
-// Each level on the stack represents a nested JSON object or array.
-// It is incremented whenever an [BeginObject] or [BeginArray] token is encountered
-// and decremented whenever an [EndObject] or [EndArray] token is encountered.
-// The depth is zero-indexed, where zero represents the top-level JSON value.
-func (d *Decoder) StackDepth() int {
-	// NOTE: Keep in sync with Encoder.StackDepth.
-	return d.s.Tokens.Depth() - 1
-}
-
-// StackIndex returns information about the specified stack level.
-// It must be a number between 0 and [Decoder.StackDepth], inclusive.
-// For each level, it reports the kind:
-//
-//   - 0 for a level of zero,
-//   - '{' for a level representing a JSON object, and
-//   - '[' for a level representing a JSON array.
-//
-// It also reports the length of that JSON object or array.
-// Each name and value in a JSON object is counted separately,
-// so the effective number of members would be half the length.
-// A complete JSON object must have an even length.
-func (d *Decoder) StackIndex(i int) (Kind, int64) {
-	// NOTE: Keep in sync with Encoder.StackIndex.
-	switch s := d.s.Tokens.index(i); {
-	case i > 0 && s.isObject():
-		return '{', s.Length()
-	case i > 0 && s.isArray():
-		return '[', s.Length()
-	default:
-		return 0, s.Length()
-	}
-}
-
-// StackPointer returns a JSON Pointer (RFC 6901) to the most recently read value.
-func (d *Decoder) StackPointer() Pointer {
-	return Pointer(d.s.AppendStackPointer(nil, -1))
-}
-
-func (d *decoderState) AppendStackPointer(b []byte, where int) []byte {
-	d.Names.copyQuotedBuffer(d.buf)
-	return d.state.appendStackPointer(b, where)
-}
diff --git a/src/encoding/json/jsontext/decode_test.go b/src/encoding/json/jsontext/decode_test.go
deleted file mode 100644
index 67580e6f4f0eab..00000000000000
--- a/src/encoding/json/jsontext/decode_test.go
+++ /dev/null
@@ -1,1267 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"io"
-	"net"
-	"path"
-	"reflect"
-	"slices"
-	"strings"
-	"testing"
-	"testing/iotest"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsontest"
-	"encoding/json/internal/jsonwire"
-)
-
-// equalTokens reports whether to sequences of tokens formats the same way.
-func equalTokens(xs, ys []Token) bool {
-	if len(xs) != len(ys) {
-		return false
-	}
-	for i := range xs {
-		if !(reflect.DeepEqual(xs[i], ys[i]) || xs[i].String() == ys[i].String()) {
-			return false
-		}
-	}
-	return true
-}
-
-// TestDecoder tests whether we can parse JSON with either tokens or raw values.
-func TestDecoder(t *testing.T) {
-	for _, td := range coderTestdata {
-		for _, typeName := range []string{"Token", "Value", "TokenDelims"} {
-			t.Run(path.Join(td.name.Name, typeName), func(t *testing.T) {
-				testDecoder(t, td.name.Where, typeName, td)
-			})
-		}
-	}
-}
-func testDecoder(t *testing.T, where jsontest.CasePos, typeName string, td coderTestdataEntry) {
-	dec := NewDecoder(bytes.NewBufferString(td.in))
-	switch typeName {
-	case "Token":
-		var tokens []Token
-		var pointers []Pointer
-		for {
-			tok, err := dec.ReadToken()
-			if err != nil {
-				if err == io.EOF {
-					break
-				}
-				t.Fatalf("%s: Decoder.ReadToken error: %v", where, err)
-			}
-			tokens = append(tokens, tok.Clone())
-			if td.pointers != nil {
-				pointers = append(pointers, dec.StackPointer())
-			}
-		}
-		if !equalTokens(tokens, td.tokens) {
-			t.Fatalf("%s: tokens mismatch:\ngot  %v\nwant %v", where, tokens, td.tokens)
-		}
-		if !slices.Equal(pointers, td.pointers) {
-			t.Fatalf("%s: pointers mismatch:\ngot  %q\nwant %q", where, pointers, td.pointers)
-		}
-	case "Value":
-		val, err := dec.ReadValue()
-		if err != nil {
-			t.Fatalf("%s: Decoder.ReadValue error: %v", where, err)
-		}
-		got := string(val)
-		want := strings.TrimSpace(td.in)
-		if got != want {
-			t.Fatalf("%s: Decoder.ReadValue = %s, want %s", where, got, want)
-		}
-	case "TokenDelims":
-		// Use ReadToken for object/array delimiters, ReadValue otherwise.
-		var tokens []Token
-	loop:
-		for {
-			switch dec.PeekKind() {
-			case '{', '}', '[', ']':
-				tok, err := dec.ReadToken()
-				if err != nil {
-					if err == io.EOF {
-						break loop
-					}
-					t.Fatalf("%s: Decoder.ReadToken error: %v", where, err)
-				}
-				tokens = append(tokens, tok.Clone())
-			default:
-				val, err := dec.ReadValue()
-				if err != nil {
-					if err == io.EOF {
-						break loop
-					}
-					t.Fatalf("%s: Decoder.ReadValue error: %v", where, err)
-				}
-				tokens = append(tokens, rawToken(string(val)))
-			}
-		}
-		if !equalTokens(tokens, td.tokens) {
-			t.Fatalf("%s: tokens mismatch:\ngot  %v\nwant %v", where, tokens, td.tokens)
-		}
-	}
-}
-
-// TestFaultyDecoder tests that temporary I/O errors are not fatal.
-func TestFaultyDecoder(t *testing.T) {
-	for _, td := range coderTestdata {
-		for _, typeName := range []string{"Token", "Value"} {
-			t.Run(path.Join(td.name.Name, typeName), func(t *testing.T) {
-				testFaultyDecoder(t, td.name.Where, typeName, td)
-			})
-		}
-	}
-}
-func testFaultyDecoder(t *testing.T, where jsontest.CasePos, typeName string, td coderTestdataEntry) {
-	b := &FaultyBuffer{
-		B:        []byte(td.in),
-		MaxBytes: 1,
-		MayError: io.ErrNoProgress,
-	}
-
-	// Read all the tokens.
-	// If the underlying io.Reader is faulty, then Read may return
-	// an error without changing the internal state machine.
-	// In other words, I/O errors occur before syntactic errors.
-	dec := NewDecoder(b)
-	switch typeName {
-	case "Token":
-		var tokens []Token
-		for {
-			tok, err := dec.ReadToken()
-			if err != nil {
-				if err == io.EOF {
-					break
-				}
-				if !errors.Is(err, io.ErrNoProgress) {
-					t.Fatalf("%s: %d: Decoder.ReadToken error: %v", where, len(tokens), err)
-				}
-				continue
-			}
-			tokens = append(tokens, tok.Clone())
-		}
-		if !equalTokens(tokens, td.tokens) {
-			t.Fatalf("%s: tokens mismatch:\ngot  %s\nwant %s", where, tokens, td.tokens)
-		}
-	case "Value":
-		for {
-			val, err := dec.ReadValue()
-			if err != nil {
-				if err == io.EOF {
-					break
-				}
-				if !errors.Is(err, io.ErrNoProgress) {
-					t.Fatalf("%s: Decoder.ReadValue error: %v", where, err)
-				}
-				continue
-			}
-			got := string(val)
-			want := strings.TrimSpace(td.in)
-			if got != want {
-				t.Fatalf("%s: Decoder.ReadValue = %s, want %s", where, got, want)
-			}
-		}
-	}
-}
-
-type decoderMethodCall struct {
-	wantKind    Kind
-	wantOut     tokOrVal
-	wantErr     error
-	wantPointer Pointer
-}
-
-var decoderErrorTestdata = []struct {
-	name       jsontest.CaseName
-	opts       []Options
-	in         string
-	calls      []decoderMethodCall
-	wantOffset int
-}{{
-	name: jsontest.Name("InvalidStart"),
-	in:   ` #`,
-	calls: []decoderMethodCall{
-		{'#', zeroToken, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
-		{'#', zeroValue, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
-	},
-}, {
-	name: jsontest.Name("StreamN0"),
-	in:   ` `,
-	calls: []decoderMethodCall{
-		{0, zeroToken, io.EOF, ""},
-		{0, zeroValue, io.EOF, ""},
-	},
-}, {
-	name: jsontest.Name("StreamN1"),
-	in:   ` null `,
-	calls: []decoderMethodCall{
-		{'n', Null, nil, ""},
-		{0, zeroToken, io.EOF, ""},
-		{0, zeroValue, io.EOF, ""},
-	},
-	wantOffset: len(` null`),
-}, {
-	name: jsontest.Name("StreamN2"),
-	in:   ` nullnull `,
-	calls: []decoderMethodCall{
-		{'n', Null, nil, ""},
-		{'n', Null, nil, ""},
-		{0, zeroToken, io.EOF, ""},
-		{0, zeroValue, io.EOF, ""},
-	},
-	wantOffset: len(` nullnull`),
-}, {
-	name: jsontest.Name("StreamN2/ExtraComma"), // stream is whitespace delimited, not comma delimited
-	in:   ` null , null `,
-	calls: []decoderMethodCall{
-		{'n', Null, nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", `at start of value`).withPos(` null `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(",", `at start of value`).withPos(` null `, ""), ""},
-	},
-	wantOffset: len(` null`),
-}, {
-	name: jsontest.Name("TruncatedNull"),
-	in:   `nul`,
-	calls: []decoderMethodCall{
-		{'n', zeroToken, E(io.ErrUnexpectedEOF).withPos(`nul`, ""), ""},
-		{'n', zeroValue, E(io.ErrUnexpectedEOF).withPos(`nul`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidNull"),
-	in:   `nulL`,
-	calls: []decoderMethodCall{
-		{'n', zeroToken, newInvalidCharacterError("L", `in literal null (expecting 'l')`).withPos(`nul`, ""), ""},
-		{'n', zeroValue, newInvalidCharacterError("L", `in literal null (expecting 'l')`).withPos(`nul`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedFalse"),
-	in:   `fals`,
-	calls: []decoderMethodCall{
-		{'f', zeroToken, E(io.ErrUnexpectedEOF).withPos(`fals`, ""), ""},
-		{'f', zeroValue, E(io.ErrUnexpectedEOF).withPos(`fals`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidFalse"),
-	in:   `falsE`,
-	calls: []decoderMethodCall{
-		{'f', zeroToken, newInvalidCharacterError("E", `in literal false (expecting 'e')`).withPos(`fals`, ""), ""},
-		{'f', zeroValue, newInvalidCharacterError("E", `in literal false (expecting 'e')`).withPos(`fals`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedTrue"),
-	in:   `tru`,
-	calls: []decoderMethodCall{
-		{'t', zeroToken, E(io.ErrUnexpectedEOF).withPos(`tru`, ""), ""},
-		{'t', zeroValue, E(io.ErrUnexpectedEOF).withPos(`tru`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidTrue"),
-	in:   `truE`,
-	calls: []decoderMethodCall{
-		{'t', zeroToken, newInvalidCharacterError("E", `in literal true (expecting 'e')`).withPos(`tru`, ""), ""},
-		{'t', zeroValue, newInvalidCharacterError("E", `in literal true (expecting 'e')`).withPos(`tru`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedString"),
-	in:   `"start`,
-	calls: []decoderMethodCall{
-		{'"', zeroToken, E(io.ErrUnexpectedEOF).withPos(`"start`, ""), ""},
-		{'"', zeroValue, E(io.ErrUnexpectedEOF).withPos(`"start`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidString"),
-	in:   `"ok` + "\x00",
-	calls: []decoderMethodCall{
-		{'"', zeroToken, newInvalidCharacterError("\x00", `in string (expecting non-control character)`).withPos(`"ok`, ""), ""},
-		{'"', zeroValue, newInvalidCharacterError("\x00", `in string (expecting non-control character)`).withPos(`"ok`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("ValidString/AllowInvalidUTF8/Token"),
-	opts: []Options{AllowInvalidUTF8(true)},
-	in:   "\"living\xde\xad\xbe\xef\"",
-	calls: []decoderMethodCall{
-		{'"', rawToken("\"living\xde\xad\xbe\xef\""), nil, ""},
-	},
-	wantOffset: len("\"living\xde\xad\xbe\xef\""),
-}, {
-	name: jsontest.Name("ValidString/AllowInvalidUTF8/Value"),
-	opts: []Options{AllowInvalidUTF8(true)},
-	in:   "\"living\xde\xad\xbe\xef\"",
-	calls: []decoderMethodCall{
-		{'"', Value("\"living\xde\xad\xbe\xef\""), nil, ""},
-	},
-	wantOffset: len("\"living\xde\xad\xbe\xef\""),
-}, {
-	name: jsontest.Name("InvalidString/RejectInvalidUTF8"),
-	opts: []Options{AllowInvalidUTF8(false)},
-	in:   "\"living\xde\xad\xbe\xef\"",
-	calls: []decoderMethodCall{
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos("\"living\xde\xad", ""), ""},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos("\"living\xde\xad", ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedNumber"),
-	in:   `0.`,
-	calls: []decoderMethodCall{
-		{'0', zeroToken, E(io.ErrUnexpectedEOF), ""},
-		{'0', zeroValue, E(io.ErrUnexpectedEOF), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidNumber"),
-	in:   `0.e`,
-	calls: []decoderMethodCall{
-		{'0', zeroToken, newInvalidCharacterError("e", "in number (expecting digit)").withPos(`0.`, ""), ""},
-		{'0', zeroValue, newInvalidCharacterError("e", "in number (expecting digit)").withPos(`0.`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterStart"),
-	in:   `{`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos("{", ""), ""},
-		{'{', BeginObject, nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos("{", ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos("{", ""), ""},
-	},
-	wantOffset: len(`{`),
-}, {
-	name: jsontest.Name("TruncatedObject/AfterName"),
-	in:   `{"0"`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0"`, "/0"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"0"`, "/0"), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0"`, "/0"), ""},
-	},
-	wantOffset: len(`{"0"`),
-}, {
-	name: jsontest.Name("TruncatedObject/AfterColon"),
-	in:   `{"0":`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":`, "/0"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"0":`, "/0"), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":`, "/0"), ""},
-	},
-	wantOffset: len(`{"0"`),
-}, {
-	name: jsontest.Name("TruncatedObject/AfterValue"),
-	in:   `{"0":0`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":0`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{'0', Uint(0), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"0":0`, ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":0`, ""), ""},
-	},
-	wantOffset: len(`{"0":0`),
-}, {
-	name: jsontest.Name("TruncatedObject/AfterComma"),
-	in:   `{"0":0,`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":0,`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{'0', Uint(0), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"0":0,`, ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"0":0,`, ""), ""},
-	},
-	wantOffset: len(`{"0":0`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingColon"),
-	in:   ` { "fizz" "buzz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("\"", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError("\"", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{0, zeroValue, newInvalidCharacterError("\"", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-	},
-	wantOffset: len(` { "fizz"`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingColon/GotComma"),
-	in:   ` { "fizz" , "buzz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{0, zeroValue, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-	},
-	wantOffset: len(` { "fizz"`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingColon/GotHash"),
-	in:   ` { "fizz" # "buzz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("#", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError("#", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{0, zeroValue, newInvalidCharacterError("#", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-	},
-	wantOffset: len(` { "fizz"`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingComma"),
-	in:   ` { "fizz" : "buzz" "gazz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("\"", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{'"', String("buzz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError("\"", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError("\"", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-	},
-	wantOffset: len(` { "fizz" : "buzz"`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingComma/GotColon"),
-	in:   ` { "fizz" : "buzz" : "gazz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{'"', String("buzz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-	},
-	wantOffset: len(` { "fizz" : "buzz"`),
-}, {
-	name: jsontest.Name("InvalidObject/MissingComma/GotHash"),
-	in:   ` { "fizz" : "buzz" # "gazz" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("#", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{'"', String("buzz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError("#", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError("#", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-	},
-	wantOffset: len(` { "fizz" : "buzz"`),
-}, {
-	name: jsontest.Name("InvalidObject/ExtraComma/AfterStart"),
-	in:   ` { , } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(",", `at start of string (expecting '"')`).withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", `at start of value`).withPos(` { `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(",", `at start of value`).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/ExtraComma/AfterValue"),
-	in:   ` { "fizz" : "buzz" , } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("}", `at start of string (expecting '"')`).withPos(` { "fizz" : "buzz" , `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{'"', String("buzz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", `at start of value`).withPos(` { "fizz" : "buzz" `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(",", `at start of value`).withPos(` { "fizz" : "buzz" `, ""), ""},
-	},
-	wantOffset: len(` { "fizz" : "buzz"`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotNull"),
-	in:   ` { null : null } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("n", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'n', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'n', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotFalse"),
-	in:   ` { false : false } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("f", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'f', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'f', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotTrue"),
-	in:   ` { true : true } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("t", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'t', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'t', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotNumber"),
-	in:   ` { 0 : 0 } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("0", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'0', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'0', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotObject"),
-	in:   ` { {} : {} } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("{", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'{', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'{', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName/GotArray"),
-	in:   ` { [] : [] } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("[", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'[', zeroToken, E(ErrNonStringName).withPos(` { `, ""), ""},
-		{'[', zeroValue, E(ErrNonStringName).withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("InvalidObject/MismatchingDelim"),
-	in:   ` { ] `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError("]", "at start of string (expecting '\"')").withPos(` { `, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{']', zeroToken, newInvalidCharacterError("]", "at start of value").withPos(` { `, ""), ""},
-		{']', zeroValue, newInvalidCharacterError("]", "at start of value").withPos(` { `, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("ValidObject/InvalidValue"),
-	in:   ` { } `,
-	calls: []decoderMethodCall{
-		{'{', BeginObject, nil, ""},
-		{'}', zeroValue, newInvalidCharacterError("}", "at start of value").withPos(" { ", ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("ValidObject/UniqueNames"),
-	in:   `{"0":0,"1":1} `,
-	calls: []decoderMethodCall{
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{'0', Uint(0), nil, ""},
-		{'"', String("1"), nil, ""},
-		{'0', Uint(1), nil, ""},
-		{'}', EndObject, nil, ""},
-	},
-	wantOffset: len(`{"0":0,"1":1}`),
-}, {
-	name: jsontest.Name("ValidObject/DuplicateNames"),
-	opts: []Options{AllowDuplicateNames(true)},
-	in:   `{"0":0,"0":0} `,
-	calls: []decoderMethodCall{
-		{'{', BeginObject, nil, ""},
-		{'"', String("0"), nil, ""},
-		{'0', Uint(0), nil, ""},
-		{'"', String("0"), nil, ""},
-		{'0', Uint(0), nil, ""},
-		{'}', EndObject, nil, ""},
-	},
-	wantOffset: len(`{"0":0,"0":0}`),
-}, {
-	name: jsontest.Name("InvalidObject/DuplicateNames"),
-	in:   `{"X":{},"Y":{},"X":{}} `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/X"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("X"), nil, ""},
-		{'{', BeginObject, nil, ""},
-		{'}', EndObject, nil, ""},
-		{'"', String("Y"), nil, ""},
-		{'{', BeginObject, nil, ""},
-		{'}', EndObject, nil, ""},
-		{'"', zeroToken, E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/X"), "/Y"},
-		{'"', zeroValue, E(ErrDuplicateName).withPos(`{"0":{},"Y":{},`, "/X"), "/Y"},
-	},
-	wantOffset: len(`{"0":{},"1":{}`),
-}, {
-	name: jsontest.Name("TruncatedArray/AfterStart"),
-	in:   `[`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(io.ErrUnexpectedEOF).withPos("[", ""), ""},
-		{'[', BeginArray, nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos("[", ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos("[", ""), ""},
-	},
-	wantOffset: len(`[`),
-}, {
-	name: jsontest.Name("TruncatedArray/AfterValue"),
-	in:   `[0`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(io.ErrUnexpectedEOF).withPos("[0", ""), ""},
-		{'[', BeginArray, nil, ""},
-		{'0', Uint(0), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos("[0", ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos("[0", ""), ""},
-	},
-	wantOffset: len(`[0`),
-}, {
-	name: jsontest.Name("TruncatedArray/AfterComma"),
-	in:   `[0,`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(io.ErrUnexpectedEOF).withPos("[0,", ""), ""},
-		{'[', BeginArray, nil, ""},
-		{'0', Uint(0), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos("[0,", ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos("[0,", ""), ""},
-	},
-	wantOffset: len(`[0`),
-}, {
-	name: jsontest.Name("InvalidArray/MissingComma"),
-	in:   ` [ "fizz" "buzz" ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, newInvalidCharacterError("\"", "after array element (expecting ',' or ']')").withPos(` [ "fizz" `, ""), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("fizz"), nil, ""},
-		{0, zeroToken, newInvalidCharacterError("\"", "after array element (expecting ',' or ']')").withPos(` [ "fizz" `, ""), ""},
-		{0, zeroValue, newInvalidCharacterError("\"", "after array element (expecting ',' or ']')").withPos(` [ "fizz" `, ""), ""},
-	},
-	wantOffset: len(` [ "fizz"`),
-}, {
-	name: jsontest.Name("InvalidArray/MismatchingDelim"),
-	in:   ` [ } `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, newInvalidCharacterError("}", "at start of value").withPos(` [ `, "/0"), ""},
-		{'[', BeginArray, nil, ""},
-		{'}', zeroToken, newInvalidCharacterError("}", "at start of value").withPos(` [ `, "/0"), ""},
-		{'}', zeroValue, newInvalidCharacterError("}", "at start of value").withPos(` [ `, "/0"), ""},
-	},
-	wantOffset: len(` [`),
-}, {
-	name: jsontest.Name("ValidArray/InvalidValue"),
-	in:   ` [ ] `,
-	calls: []decoderMethodCall{
-		{'[', BeginArray, nil, ""},
-		{']', zeroValue, newInvalidCharacterError("]", "at start of value").withPos(" [ ", "/0"), ""},
-	},
-	wantOffset: len(` [`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterTopLevel"),
-	in:   `"",`,
-	calls: []decoderMethodCall{
-		{'"', String(""), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", "at start of value").withPos(`""`, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(",", "at start of value").withPos(`""`, ""), ""},
-	},
-	wantOffset: len(`""`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterBeginObject"),
-	in:   `{:`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(":", `at start of string (expecting '"')`).withPos(`{`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{0, zeroToken, newInvalidCharacterError(":", "at start of value").withPos(`{`, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(":", "at start of value").withPos(`{`, ""), ""},
-	},
-	wantOffset: len(`{`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterObjectName"),
-	in:   `{"",`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(`{""`, "/"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(`{""`, "/"), ""},
-		{0, zeroValue, newInvalidCharacterError(",", "after object name (expecting ':')").withPos(`{""`, "/"), ""},
-	},
-	wantOffset: len(`{""`),
-}, {
-	name: jsontest.Name("ValidDelim/AfterObjectName"),
-	in:   `{"":`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"":`, "/"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"":`, "/"), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"":`, "/"), ""},
-	},
-	wantOffset: len(`{""`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterObjectValue"),
-	in:   `{"":"":`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(`{"":""`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String(""), nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(`{"":""`, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(`{"":""`, ""), ""},
-	},
-	wantOffset: len(`{"":""`),
-}, {
-	name: jsontest.Name("ValidDelim/AfterObjectValue"),
-	in:   `{"":"",`,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"":"",`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String(""), nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`{"":"",`, ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`{"":"",`, ""), ""},
-	},
-	wantOffset: len(`{"":""`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterBeginArray"),
-	in:   `[,`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, newInvalidCharacterError(",", "at start of value").withPos(`[`, "/0"), ""},
-		{'[', BeginArray, nil, ""},
-		{0, zeroToken, newInvalidCharacterError(",", "at start of value").withPos(`[`, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(",", "at start of value").withPos(`[`, ""), ""},
-	},
-	wantOffset: len(`[`),
-}, {
-	name: jsontest.Name("InvalidDelim/AfterArrayValue"),
-	in:   `["":`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, newInvalidCharacterError(":", "after array element (expecting ',' or ']')").withPos(`[""`, ""), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, newInvalidCharacterError(":", "after array element (expecting ',' or ']')").withPos(`[""`, ""), ""},
-		{0, zeroValue, newInvalidCharacterError(":", "after array element (expecting ',' or ']')").withPos(`[""`, ""), ""},
-	},
-	wantOffset: len(`[""`),
-}, {
-	name: jsontest.Name("ValidDelim/AfterArrayValue"),
-	in:   `["",`,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(io.ErrUnexpectedEOF).withPos(`["",`, ""), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String(""), nil, ""},
-		{0, zeroToken, E(io.ErrUnexpectedEOF).withPos(`["",`, ""), ""},
-		{0, zeroValue, E(io.ErrUnexpectedEOF).withPos(`["",`, ""), ""},
-	},
-	wantOffset: len(`[""`),
-}, {
-	name: jsontest.Name("ErrorPosition"),
-	in:   ` "a` + "\xff" + `0" `,
-	calls: []decoderMethodCall{
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` "a`, ""), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` "a`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("ErrorPosition/0"),
-	in:   ` [ "a` + "\xff" + `1" ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a`, "/0"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a`, "/0"), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a`, "/0"), ""},
-	},
-	wantOffset: len(` [`),
-}, {
-	name: jsontest.Name("ErrorPosition/1"),
-	in:   ` [ "a1" , "b` + "\xff" + `1" ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , "b`, "/1"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("a1"), nil, ""},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , "b`, "/1"), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , "b`, "/1"), ""},
-	},
-	wantOffset: len(` [ "a1"`),
-}, {
-	name: jsontest.Name("ErrorPosition/0/0"),
-	in:   ` [ [ "a` + "\xff" + `2" ] ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a`, "/0/0"), ""},
-		{'[', BeginArray, nil, ""},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a`, "/0/0"), ""},
-		{'[', BeginArray, nil, "/0"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a`, "/0/0"), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a`, "/0/0"), ""},
-	},
-	wantOffset: len(` [ [`),
-}, {
-	name: jsontest.Name("ErrorPosition/1/0"),
-	in:   ` [ "a1" , [ "a` + "\xff" + `2" ] ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a`, "/1/0"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("a1"), nil, "/0"},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a`, "/1/0"), "/0"},
-		{'[', BeginArray, nil, "/1"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a`, "/1/0"), "/1"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a`, "/1/0"), "/1"},
-	},
-	wantOffset: len(` [ "a1" , [`),
-}, {
-	name: jsontest.Name("ErrorPosition/0/1"),
-	in:   ` [ [ "a2" , "b` + "\xff" + `2" ] ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a2" , "b`, "/0/1"), ""},
-		{'[', BeginArray, nil, ""},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a2" , "b`, "/0/1"), ""},
-		{'[', BeginArray, nil, "/0"},
-		{'"', String("a2"), nil, "/0/0"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a2" , "b`, "/0/1"), "/0/0"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a2" , "b`, "/0/1"), "/0/0"},
-	},
-	wantOffset: len(` [ [ "a2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/1/1"),
-	in:   ` [ "a1" , [ "a2" , "b` + "\xff" + `2" ] ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a2" , "b`, "/1/1"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("a1"), nil, "/0"},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a2" , "b`, "/1/1"), ""},
-		{'[', BeginArray, nil, "/1"},
-		{'"', String("a2"), nil, "/1/0"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a2" , "b`, "/1/1"), "/1/0"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a2" , "b`, "/1/1"), "/1/0"},
-	},
-	wantOffset: len(` [ "a1" , [ "a2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1-"),
-	in:   ` { "a` + "\xff" + `1" : "b1" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a`, ""), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a`, ""), ""},
-	},
-	wantOffset: len(` {`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1"),
-	in:   ` { "a1" : "b` + "\xff" + `1" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b`, "/a1"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b`, "/a1"), ""},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b`, "/a1"), ""},
-	},
-	wantOffset: len(` { "a1"`),
-}, {
-	name: jsontest.Name("ErrorPosition/c1-"),
-	in:   ` { "a1" : "b1" , "c` + "\xff" + `1" : "d1" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c`, ""), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'"', String("b1"), nil, "/a1"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" : "c`, ""), "/a1"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" : "c`, ""), "/a1"},
-	},
-	wantOffset: len(` { "a1" : "b1"`),
-}, {
-	name: jsontest.Name("ErrorPosition/c1"),
-	in:   ` { "a1" : "b1" , "c1" : "d` + "\xff" + `1" } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : "d`, "/c1"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'"', String("b1"), nil, "/a1"},
-		{'"', String("c1"), nil, "/c1"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" : "c1" : "d`, "/c1"), "/c1"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" : "c1" : "d`, "/c1"), "/c1"},
-	},
-	wantOffset: len(` { "a1" : "b1" , "c1"`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1/a2-"),
-	in:   ` { "a1" : { "a` + "\xff" + `2" : "b2" } } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a`, "/a1"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a`, "/a1"), ""},
-		{'{', BeginObject, nil, "/a1"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a`, "/a1"), "/a1"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a`, "/a1"), "/a1"},
-	},
-	wantOffset: len(` { "a1" : {`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1/a2"),
-	in:   ` { "a1" : { "a2" : "b` + "\xff" + `2" } } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b`, "/a1/a2"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b`, "/a1/a2"), ""},
-		{'{', BeginObject, nil, "/a1"},
-		{'"', String("a2"), nil, "/a1/a2"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b`, "/a1/a2"), "/a1/a2"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b`, "/a1/a2"), "/a1/a2"},
-	},
-	wantOffset: len(` { "a1" : { "a2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1/c2-"),
-	in:   ` { "a1" : { "a2" : "b2" , "c` + "\xff" + `2" : "d2" } } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c`, "/a1"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'{', BeginObject, nil, "/a1"},
-		{'"', String("a2"), nil, "/a1/a2"},
-		{'"', String("b2"), nil, "/a1/a2"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c`, "/a1"), "/a1/a2"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c`, "/a1"), "/a1/a2"},
-	},
-	wantOffset: len(` { "a1" : { "a2" : "b2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/a1/c2"),
-	in:   ` { "a1" : { "a2" : "b2" , "c2" : "d` + "\xff" + `2" } } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c2" : "d`, "/a1/c2"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c2" : "d`, "/a1/c2"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a2"), nil, "/a1/a2"},
-		{'"', String("b2"), nil, "/a1/a2"},
-		{'"', String("c2"), nil, "/a1/c2"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c2" : "d`, "/a1/c2"), "/a1/c2"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c2" : "d`, "/a1/c2"), "/a1/c2"},
-	},
-	wantOffset: len(` { "a1" : { "a2" : "b2" , "c2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/1/a2"),
-	in:   ` [ "a1" , { "a2" : "b` + "\xff" + `2" } ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , { "a2" : "b`, "/1/a2"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("a1"), nil, "/0"},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , { "a2" : "b`, "/1/a2"), ""},
-		{'{', BeginObject, nil, "/1"},
-		{'"', String("a2"), nil, "/1/a2"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , { "a2" : "b`, "/1/a2"), "/1/a2"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , { "a2" : "b`, "/1/a2"), "/1/a2"},
-	},
-	wantOffset: len(` [ "a1" , { "a2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/c1/1"),
-	in:   ` { "a1" : "b1" , "c1" : [ "a2" , "b` + "\xff" + `2" ] } `,
-	calls: []decoderMethodCall{
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : [ "a2" , "b`, "/c1/1"), ""},
-		{'{', BeginObject, nil, ""},
-		{'"', String("a1"), nil, "/a1"},
-		{'"', String("b1"), nil, "/a1"},
-		{'"', String("c1"), nil, "/c1"},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : [ "a2" , "b`, "/c1/1"), ""},
-		{'[', BeginArray, nil, "/c1"},
-		{'"', String("a2"), nil, "/c1/0"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : [ "a2" , "b`, "/c1/1"), "/c1/0"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : [ "a2" , "b`, "/c1/1"), "/c1/0"},
-	},
-	wantOffset: len(` { "a1" : "b1" , "c1" : [ "a2"`),
-}, {
-	name: jsontest.Name("ErrorPosition/0/a1/1/c3/1"),
-	in:   ` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b` + "\xff" + `4" ] } ] } ] `,
-	calls: []decoderMethodCall{
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{'[', BeginArray, nil, ""},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{'{', BeginObject, nil, "/0"},
-		{'"', String("a1"), nil, "/0/a1"},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{'[', BeginArray, nil, ""},
-		{'"', String("a2"), nil, "/0/a1/0"},
-		{'{', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{'{', BeginObject, nil, "/0/a1/1"},
-		{'"', String("a3"), nil, "/0/a1/1/a3"},
-		{'"', String("b3"), nil, "/0/a1/1/a3"},
-		{'"', String("c3"), nil, "/0/a1/1/c3"},
-		{'[', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{'[', BeginArray, nil, "/0/a1/1/c3"},
-		{'"', String("a4"), nil, "/0/a1/1/c3/0"},
-		{'"', zeroValue, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), "/0/a1/1/c3/0"},
-		{'"', zeroToken, E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), "/0/a1/1/c3/0"},
-	},
-	wantOffset: len(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4"`),
-}}
-
-// TestDecoderErrors test that Decoder errors occur when we expect and
-// leaves the Decoder in a consistent state.
-func TestDecoderErrors(t *testing.T) {
-	for _, td := range decoderErrorTestdata {
-		t.Run(path.Join(td.name.Name), func(t *testing.T) {
-			testDecoderErrors(t, td.name.Where, td.opts, td.in, td.calls, td.wantOffset)
-		})
-	}
-}
-func testDecoderErrors(t *testing.T, where jsontest.CasePos, opts []Options, in string, calls []decoderMethodCall, wantOffset int) {
-	src := bytes.NewBufferString(in)
-	dec := NewDecoder(src, opts...)
-	for i, call := range calls {
-		gotKind := dec.PeekKind()
-		if gotKind != call.wantKind {
-			t.Fatalf("%s: %d: Decoder.PeekKind = %v, want %v", where, i, gotKind, call.wantKind)
-		}
-
-		var gotErr error
-		switch wantOut := call.wantOut.(type) {
-		case Token:
-			var gotOut Token
-			gotOut, gotErr = dec.ReadToken()
-			if gotOut.String() != wantOut.String() {
-				t.Fatalf("%s: %d: Decoder.ReadToken = %v, want %v", where, i, gotOut, wantOut)
-			}
-		case Value:
-			var gotOut Value
-			gotOut, gotErr = dec.ReadValue()
-			if string(gotOut) != string(wantOut) {
-				t.Fatalf("%s: %d: Decoder.ReadValue = %s, want %s", where, i, gotOut, wantOut)
-			}
-		}
-		if !equalError(gotErr, call.wantErr) {
-			t.Fatalf("%s: %d: error mismatch:\ngot  %v\nwant %v", where, i, gotErr, call.wantErr)
-		}
-		if call.wantPointer != "" {
-			gotPointer := dec.StackPointer()
-			if gotPointer != call.wantPointer {
-				t.Fatalf("%s: %d: Decoder.StackPointer = %s, want %s", where, i, gotPointer, call.wantPointer)
-			}
-		}
-	}
-	gotOffset := int(dec.InputOffset())
-	if gotOffset != wantOffset {
-		t.Fatalf("%s: Decoder.InputOffset = %v, want %v", where, gotOffset, wantOffset)
-	}
-	gotUnread := string(dec.s.unreadBuffer()) // should be a prefix of wantUnread
-	wantUnread := in[wantOffset:]
-	if !strings.HasPrefix(wantUnread, gotUnread) {
-		t.Fatalf("%s: Decoder.UnreadBuffer = %v, want %v", where, gotUnread, wantUnread)
-	}
-}
-
-// TestBufferDecoder tests that we detect misuses of bytes.Buffer with Decoder.
-func TestBufferDecoder(t *testing.T) {
-	bb := bytes.NewBufferString("[null, false, true]")
-	dec := NewDecoder(bb)
-	var err error
-	for {
-		if _, err = dec.ReadToken(); err != nil {
-			break
-		}
-		bb.WriteByte(' ') // not allowed to write to the buffer while reading
-	}
-	want := &ioError{action: "read", err: errBufferWriteAfterNext}
-	if !equalError(err, want) {
-		t.Fatalf("error mismatch: got %v, want %v", err, want)
-	}
-}
-
-var resumableDecoderTestdata = []string{
-	`0`,
-	`123456789`,
-	`0.0`,
-	`0.123456789`,
-	`0e0`,
-	`0e+0`,
-	`0e123456789`,
-	`0e+123456789`,
-	`123456789.123456789e+123456789`,
-	`-0`,
-	`-123456789`,
-	`-0.0`,
-	`-0.123456789`,
-	`-0e0`,
-	`-0e-0`,
-	`-0e123456789`,
-	`-0e-123456789`,
-	`-123456789.123456789e-123456789`,
-
-	`""`,
-	`"a"`,
-	`"ab"`,
-	`"abc"`,
-	`"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"`,
-	`"\"\\\/\b\f\n\r\t"`,
-	`"\u0022\u005c\u002f\u0008\u000c\u000a\u000d\u0009"`,
-	`"\ud800\udead"`,
-	"\"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\U0001f602\"",
-	`"\u0080\u00f6\u20ac\ud799\ue000\ufb33\ufffd\ud83d\ude02"`,
-}
-
-// TestResumableDecoder tests that resume logic for parsing a
-// JSON string and number properly works across every possible split point.
-func TestResumableDecoder(t *testing.T) {
-	for _, want := range resumableDecoderTestdata {
-		t.Run("", func(t *testing.T) {
-			dec := NewDecoder(iotest.OneByteReader(strings.NewReader(want)))
-			got, err := dec.ReadValue()
-			if err != nil {
-				t.Fatalf("Decoder.ReadValue error: %v", err)
-			}
-			if string(got) != want {
-				t.Fatalf("Decoder.ReadValue = %s, want %s", got, want)
-			}
-		})
-	}
-}
-
-// TestBlockingDecoder verifies that JSON values except numbers can be
-// synchronously sent and received on a blocking pipe without a deadlock.
-// Numbers are the exception since termination cannot be determined until
-// either the pipe ends or a non-numeric character is encountered.
-func TestBlockingDecoder(t *testing.T) {
-	values := []string{"null", "false", "true", `""`, `{}`, `[]`}
-
-	r, w := net.Pipe()
-	defer r.Close()
-	defer w.Close()
-
-	enc := NewEncoder(w, jsonflags.OmitTopLevelNewline|1)
-	dec := NewDecoder(r)
-
-	errCh := make(chan error)
-
-	// Test synchronous ReadToken calls.
-	for _, want := range values {
-		go func() {
-			errCh <- enc.WriteValue(Value(want))
-		}()
-
-		tok, err := dec.ReadToken()
-		if err != nil {
-			t.Fatalf("Decoder.ReadToken error: %v", err)
-		}
-		got := tok.String()
-		switch tok.Kind() {
-		case '"':
-			got = `"` + got + `"`
-		case '{', '[':
-			tok, err := dec.ReadToken()
-			if err != nil {
-				t.Fatalf("Decoder.ReadToken error: %v", err)
-			}
-			got += tok.String()
-		}
-		if got != want {
-			t.Fatalf("ReadTokens = %s, want %s", got, want)
-		}
-
-		if err := <-errCh; err != nil {
-			t.Fatalf("Encoder.WriteValue error: %v", err)
-		}
-	}
-
-	// Test synchronous ReadValue calls.
-	for _, want := range values {
-		go func() {
-			errCh <- enc.WriteValue(Value(want))
-		}()
-
-		got, err := dec.ReadValue()
-		if err != nil {
-			t.Fatalf("Decoder.ReadValue error: %v", err)
-		}
-		if string(got) != want {
-			t.Fatalf("ReadValue = %s, want %s", got, want)
-		}
-
-		if err := <-errCh; err != nil {
-			t.Fatalf("Encoder.WriteValue error: %v", err)
-		}
-	}
-}
-
-func TestPeekableDecoder(t *testing.T) {
-	type operation any // PeekKind | ReadToken | ReadValue | BufferWrite
-	type PeekKind struct {
-		want Kind
-	}
-	type ReadToken struct {
-		wantKind Kind
-		wantErr  error
-	}
-	type ReadValue struct {
-		wantKind Kind
-		wantErr  error
-	}
-	type WriteString struct {
-		in string
-	}
-	ops := []operation{
-		PeekKind{0},
-		WriteString{"[ "},
-		ReadToken{0, io.EOF}, // previous error from PeekKind is cached once
-		ReadToken{'[', nil},
-
-		PeekKind{0},
-		WriteString{"] "},
-		ReadValue{0, E(io.ErrUnexpectedEOF).withPos("[ ", "")}, // previous error from PeekKind is cached once
-		ReadValue{0, newInvalidCharacterError("]", "at start of value").withPos("[ ", "/0")},
-		ReadToken{']', nil},
-
-		WriteString{"[ "},
-		ReadToken{'[', nil},
-
-		WriteString{" null "},
-		PeekKind{'n'},
-		PeekKind{'n'},
-		ReadToken{'n', nil},
-
-		WriteString{", "},
-		PeekKind{0},
-		WriteString{"fal"},
-		PeekKind{'f'},
-		ReadValue{0, E(io.ErrUnexpectedEOF).withPos("[ ] [  null , fal", "/1")},
-		WriteString{"se "},
-		ReadValue{'f', nil},
-
-		PeekKind{0},
-		WriteString{" , "},
-		PeekKind{0},
-		WriteString{` "" `},
-		ReadValue{0, E(io.ErrUnexpectedEOF).withPos("[ ] [  null , false  , ", "")}, // previous error from PeekKind is cached once
-		ReadValue{'"', nil},
-
-		WriteString{" , 0"},
-		PeekKind{'0'},
-		ReadToken{'0', nil},
-
-		WriteString{" , {} , []"},
-		PeekKind{'{'},
-		ReadValue{'{', nil},
-		ReadValue{'[', nil},
-
-		WriteString{"]"},
-		ReadToken{']', nil},
-	}
-
-	bb := struct{ *bytes.Buffer }{new(bytes.Buffer)}
-	d := NewDecoder(bb)
-	for i, op := range ops {
-		switch op := op.(type) {
-		case PeekKind:
-			if got := d.PeekKind(); got != op.want {
-				t.Fatalf("%d: Decoder.PeekKind() = %v, want %v", i, got, op.want)
-			}
-		case ReadToken:
-			gotTok, gotErr := d.ReadToken()
-			gotKind := gotTok.Kind()
-			if gotKind != op.wantKind || !equalError(gotErr, op.wantErr) {
-				t.Fatalf("%d: Decoder.ReadToken() = (%v, %v), want (%v, %v)", i, gotKind, gotErr, op.wantKind, op.wantErr)
-			}
-		case ReadValue:
-			gotVal, gotErr := d.ReadValue()
-			gotKind := gotVal.Kind()
-			if gotKind != op.wantKind || !equalError(gotErr, op.wantErr) {
-				t.Fatalf("%d: Decoder.ReadValue() = (%v, %v), want (%v, %v)", i, gotKind, gotErr, op.wantKind, op.wantErr)
-			}
-		case WriteString:
-			bb.WriteString(op.in)
-		default:
-			panic(fmt.Sprintf("unknown operation: %T", op))
-		}
-	}
-}
diff --git a/src/encoding/json/jsontext/doc.go b/src/encoding/json/jsontext/doc.go
deleted file mode 100644
index 20ef5271d7f680..00000000000000
--- a/src/encoding/json/jsontext/doc.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-// Package jsontext implements syntactic processing of JSON
-// as specified in RFC 4627, RFC 7159, RFC 7493, RFC 8259, and RFC 8785.
-// JSON is a simple data interchange format that can represent
-// primitive data types such as booleans, strings, and numbers,
-// in addition to structured data types such as objects and arrays.
-//
-// This package (encoding/json/jsontext) is experimental,
-// and not subject to the Go 1 compatibility promise.
-// It only exists when building with the GOEXPERIMENT=jsonv2 environment variable set.
-// Most users should use [encoding/json].
-//
-// The [Encoder] and [Decoder] types are used to encode or decode
-// a stream of JSON tokens or values.
-//
-// # Tokens and Values
-//
-// A JSON token refers to the basic structural elements of JSON:
-//
-//   - a JSON literal (i.e., null, true, or false)
-//   - a JSON string (e.g., "hello, world!")
-//   - a JSON number (e.g., 123.456)
-//   - a start or end delimiter for a JSON object (i.e., '{' or '}')
-//   - a start or end delimiter for a JSON array (i.e., '[' or ']')
-//
-// A JSON token is represented by the [Token] type in Go. Technically,
-// there are two additional structural characters (i.e., ':' and ','),
-// but there is no [Token] representation for them since their presence
-// can be inferred by the structure of the JSON grammar itself.
-// For example, there must always be an implicit colon between
-// the name and value of a JSON object member.
-//
-// A JSON value refers to a complete unit of JSON data:
-//
-//   - a JSON literal, string, or number
-//   - a JSON object (e.g., `{"name":"value"}`)
-//   - a JSON array (e.g., `[1,2,3,]`)
-//
-// A JSON value is represented by the [Value] type in Go and is a []byte
-// containing the raw textual representation of the value. There is some overlap
-// between tokens and values as both contain literals, strings, and numbers.
-// However, only a value can represent the entirety of a JSON object or array.
-//
-// The [Encoder] and [Decoder] types contain methods to read or write the next
-// [Token] or [Value] in a sequence. They maintain a state machine to validate
-// whether the sequence of JSON tokens and/or values produces a valid JSON.
-// [Options] may be passed to the [NewEncoder] or [NewDecoder] constructors
-// to configure the syntactic behavior of encoding and decoding.
-//
-// # Terminology
-//
-// The terms "encode" and "decode" are used for syntactic functionality
-// that is concerned with processing JSON based on its grammar, and
-// the terms "marshal" and "unmarshal" are used for semantic functionality
-// that determines the meaning of JSON values as Go values and vice-versa.
-// This package (i.e., [jsontext]) deals with JSON at a syntactic layer,
-// while [encoding/json/v2] deals with JSON at a semantic layer.
-// The goal is to provide a clear distinction between functionality that
-// is purely concerned with encoding versus that of marshaling.
-// For example, one can directly encode a stream of JSON tokens without
-// needing to marshal a concrete Go value representing them.
-// Similarly, one can decode a stream of JSON tokens without
-// needing to unmarshal them into a concrete Go value.
-//
-// This package uses JSON terminology when discussing JSON, which may differ
-// from related concepts in Go or elsewhere in computing literature.
-//
-//   - a JSON "object" refers to an unordered collection of name/value members.
-//   - a JSON "array" refers to an ordered sequence of elements.
-//   - a JSON "value" refers to either a literal (i.e., null, false, or true),
-//     string, number, object, or array.
-//
-// See RFC 8259 for more information.
-//
-// # Specifications
-//
-// Relevant specifications include RFC 4627, RFC 7159, RFC 7493, RFC 8259,
-// and RFC 8785. Each RFC is generally a stricter subset of another RFC.
-// In increasing order of strictness:
-//
-//   - RFC 4627 and RFC 7159 do not require (but recommend) the use of UTF-8
-//     and also do not require (but recommend) that object names be unique.
-//   - RFC 8259 requires the use of UTF-8,
-//     but does not require (but recommends) that object names be unique.
-//   - RFC 7493 requires the use of UTF-8
-//     and also requires that object names be unique.
-//   - RFC 8785 defines a canonical representation. It requires the use of UTF-8
-//     and also requires that object names be unique and in a specific ordering.
-//     It specifies exactly how strings and numbers must be formatted.
-//
-// The primary difference between RFC 4627 and RFC 7159 is that the former
-// restricted top-level values to only JSON objects and arrays, while
-// RFC 7159 and subsequent RFCs permit top-level values to additionally be
-// JSON nulls, booleans, strings, or numbers.
-//
-// By default, this package operates on RFC 7493, but can be configured
-// to operate according to the other RFC specifications.
-// RFC 7493 is a stricter subset of RFC 8259 and fully compliant with it.
-// In particular, it makes specific choices about behavior that RFC 8259
-// leaves as undefined in order to ensure greater interoperability.
-package jsontext
-
-// requireKeyedLiterals can be embedded in a struct to require keyed literals.
-type requireKeyedLiterals struct{}
-
-// nonComparable can be embedded in a struct to prevent comparability.
-type nonComparable [0]func()
diff --git a/src/encoding/json/jsontext/encode.go b/src/encoding/json/jsontext/encode.go
deleted file mode 100644
index a1e6307adc8bda..00000000000000
--- a/src/encoding/json/jsontext/encode.go
+++ /dev/null
@@ -1,972 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"io"
-	"math/bits"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-)
-
-// Encoder is a streaming encoder from raw JSON tokens and values.
-// It is used to write a stream of top-level JSON values,
-// each terminated with a newline character.
-//
-// [Encoder.WriteToken] and [Encoder.WriteValue] calls may be interleaved.
-// For example, the following JSON value:
-//
-//	{"name":"value","array":[null,false,true,3.14159],"object":{"k":"v"}}
-//
-// can be composed with the following calls (ignoring errors for brevity):
-//
-//	e.WriteToken(BeginObject)        // {
-//	e.WriteToken(String("name"))     // "name"
-//	e.WriteToken(String("value"))    // "value"
-//	e.WriteValue(Value(`"array"`))   // "array"
-//	e.WriteToken(BeginArray)         // [
-//	e.WriteToken(Null)               // null
-//	e.WriteToken(False)              // false
-//	e.WriteValue(Value("true"))      // true
-//	e.WriteToken(Float(3.14159))     // 3.14159
-//	e.WriteToken(EndArray)           // ]
-//	e.WriteValue(Value(`"object"`))  // "object"
-//	e.WriteValue(Value(`{"k":"v"}`)) // {"k":"v"}
-//	e.WriteToken(EndObject)          // }
-//
-// The above is one of many possible sequence of calls and
-// may not represent the most sensible method to call for any given token/value.
-// For example, it is probably more common to call [Encoder.WriteToken] with a string
-// for object names.
-type Encoder struct {
-	s encoderState
-}
-
-// encoderState is the low-level state of Encoder.
-// It has exported fields and method for use by the "json" package.
-type encoderState struct {
-	state
-	encodeBuffer
-	jsonopts.Struct
-
-	SeenPointers map[any]struct{} // only used when marshaling; identical to json.seenPointers
-}
-
-// encodeBuffer is a buffer split into 2 segments:
-//
-//   - buf[0:len(buf)]        // written (but unflushed) portion of the buffer
-//   - buf[len(buf):cap(buf)] // unused portion of the buffer
-type encodeBuffer struct {
-	Buf []byte // may alias wr if it is a bytes.Buffer
-
-	// baseOffset is added to len(buf) to obtain the absolute offset
-	// relative to the start of io.Writer stream.
-	baseOffset int64
-
-	wr io.Writer
-
-	// maxValue is the approximate maximum Value size passed to WriteValue.
-	maxValue int
-	// unusedCache is the buffer returned by the UnusedBuffer method.
-	unusedCache []byte
-	// bufStats is statistics about buffer utilization.
-	// It is only used with pooled encoders in pools.go.
-	bufStats bufferStatistics
-}
-
-// NewEncoder constructs a new streaming encoder writing to w
-// configured with the provided options.
-// It flushes the internal buffer when the buffer is sufficiently full or
-// when a top-level value has been written.
-//
-// If w is a [bytes.Buffer], then the encoder appends directly into the buffer
-// without copying the contents from an intermediate buffer.
-func NewEncoder(w io.Writer, opts ...Options) *Encoder {
-	e := new(Encoder)
-	e.Reset(w, opts...)
-	return e
-}
-
-// Reset resets an encoder such that it is writing afresh to w and
-// configured with the provided options. Reset must not be called on
-// a Encoder passed to the [encoding/json/v2.MarshalerTo.MarshalJSONTo] method
-// or the [encoding/json/v2.MarshalToFunc] function.
-func (e *Encoder) Reset(w io.Writer, opts ...Options) {
-	switch {
-	case e == nil:
-		panic("jsontext: invalid nil Encoder")
-	case w == nil:
-		panic("jsontext: invalid nil io.Writer")
-	case e.s.Flags.Get(jsonflags.WithinArshalCall):
-		panic("jsontext: cannot reset Encoder passed to json.MarshalerTo")
-	}
-	e.s.reset(nil, w, opts...)
-}
-
-func (e *encoderState) reset(b []byte, w io.Writer, opts ...Options) {
-	e.state.reset()
-	e.encodeBuffer = encodeBuffer{Buf: b, wr: w, bufStats: e.bufStats}
-	if bb, ok := w.(*bytes.Buffer); ok && bb != nil {
-		e.Buf = bb.Bytes()[bb.Len():] // alias the unused buffer of bb
-	}
-	opts2 := jsonopts.Struct{} // avoid mutating e.Struct in case it is part of opts
-	opts2.Join(opts...)
-	e.Struct = opts2
-	if e.Flags.Get(jsonflags.Multiline) {
-		if !e.Flags.Has(jsonflags.SpaceAfterColon) {
-			e.Flags.Set(jsonflags.SpaceAfterColon | 1)
-		}
-		if !e.Flags.Has(jsonflags.SpaceAfterComma) {
-			e.Flags.Set(jsonflags.SpaceAfterComma | 0)
-		}
-		if !e.Flags.Has(jsonflags.Indent) {
-			e.Flags.Set(jsonflags.Indent | 1)
-			e.Indent = "\t"
-		}
-	}
-}
-
-// Options returns the options used to construct the decoder and
-// may additionally contain semantic options passed to a
-// [encoding/json/v2.MarshalEncode] call.
-//
-// If operating within
-// a [encoding/json/v2.MarshalerTo.MarshalJSONTo] method call or
-// a [encoding/json/v2.MarshalToFunc] function call,
-// then the returned options are only valid within the call.
-func (e *Encoder) Options() Options {
-	return &e.s.Struct
-}
-
-// NeedFlush determines whether to flush at this point.
-func (e *encoderState) NeedFlush() bool {
-	// NOTE: This function is carefully written to be inlinable.
-
-	// Avoid flushing if e.wr is nil since there is no underlying writer.
-	// Flush if less than 25% of the capacity remains.
-	// Flushing at some constant fraction ensures that the buffer stops growing
-	// so long as the largest Token or Value fits within that unused capacity.
-	return e.wr != nil && (e.Tokens.Depth() == 1 || len(e.Buf) > 3*cap(e.Buf)/4)
-}
-
-// Flush flushes the buffer to the underlying io.Writer.
-// It may append a trailing newline after the top-level value.
-func (e *encoderState) Flush() error {
-	if e.wr == nil || e.avoidFlush() {
-		return nil
-	}
-
-	// In streaming mode, always emit a newline after the top-level value.
-	if e.Tokens.Depth() == 1 && !e.Flags.Get(jsonflags.OmitTopLevelNewline) {
-		e.Buf = append(e.Buf, '\n')
-	}
-
-	// Inform objectNameStack that we are about to flush the buffer content.
-	e.Names.copyQuotedBuffer(e.Buf)
-
-	// Specialize bytes.Buffer for better performance.
-	if bb, ok := e.wr.(*bytes.Buffer); ok {
-		// If e.buf already aliases the internal buffer of bb,
-		// then the Write call simply increments the internal offset,
-		// otherwise Write operates as expected.
-		// See https://go.dev/issue/42986.
-		n, _ := bb.Write(e.Buf) // never fails unless bb is nil
-		e.baseOffset += int64(n)
-
-		// If the internal buffer of bytes.Buffer is too small,
-		// append operations elsewhere in the Encoder may grow the buffer.
-		// This would be semantically correct, but hurts performance.
-		// As such, ensure 25% of the current length is always available
-		// to reduce the probability that other appends must allocate.
-		if avail := bb.Available(); avail < bb.Len()/4 {
-			bb.Grow(avail + 1)
-		}
-
-		e.Buf = bb.AvailableBuffer()
-		return nil
-	}
-
-	// Flush the internal buffer to the underlying io.Writer.
-	n, err := e.wr.Write(e.Buf)
-	e.baseOffset += int64(n)
-	if err != nil {
-		// In the event of an error, preserve the unflushed portion.
-		// Thus, write errors aren't fatal so long as the io.Writer
-		// maintains consistent state after errors.
-		if n > 0 {
-			e.Buf = e.Buf[:copy(e.Buf, e.Buf[n:])]
-		}
-		return &ioError{action: "write", err: err}
-	}
-	e.Buf = e.Buf[:0]
-
-	// Check whether to grow the buffer.
-	// Note that cap(e.buf) may already exceed maxBufferSize since
-	// an append elsewhere already grew it to store a large token.
-	const maxBufferSize = 4 << 10
-	const growthSizeFactor = 2 // higher value is faster
-	const growthRateFactor = 2 // higher value is slower
-	// By default, grow if below the maximum buffer size.
-	grow := cap(e.Buf) <= maxBufferSize/growthSizeFactor
-	// Growing can be expensive, so only grow
-	// if a sufficient number of bytes have been processed.
-	grow = grow && int64(cap(e.Buf)) < e.previousOffsetEnd()/growthRateFactor
-	if grow {
-		e.Buf = make([]byte, 0, cap(e.Buf)*growthSizeFactor)
-	}
-
-	return nil
-}
-func (d *encodeBuffer) offsetAt(pos int) int64   { return d.baseOffset + int64(pos) }
-func (e *encodeBuffer) previousOffsetEnd() int64 { return e.baseOffset + int64(len(e.Buf)) }
-func (e *encodeBuffer) unflushedBuffer() []byte  { return e.Buf }
-
-// avoidFlush indicates whether to avoid flushing to ensure there is always
-// enough in the buffer to unwrite the last object member if it were empty.
-func (e *encoderState) avoidFlush() bool {
-	switch {
-	case e.Tokens.Last.Length() == 0:
-		// Never flush after BeginObject or BeginArray since we don't know yet
-		// if the object or array will end up being empty.
-		return true
-	case e.Tokens.Last.needObjectValue():
-		// Never flush before the object value since we don't know yet
-		// if the object value will end up being empty.
-		return true
-	case e.Tokens.Last.NeedObjectName() && len(e.Buf) >= 2:
-		// Never flush after the object value if it does turn out to be empty.
-		switch string(e.Buf[len(e.Buf)-2:]) {
-		case `ll`, `""`, `{}`, `[]`: // last two bytes of every empty value
-			return true
-		}
-	}
-	return false
-}
-
-// UnwriteEmptyObjectMember unwrites the last object member if it is empty
-// and reports whether it performed an unwrite operation.
-func (e *encoderState) UnwriteEmptyObjectMember(prevName *string) bool {
-	if last := e.Tokens.Last; !last.isObject() || !last.NeedObjectName() || last.Length() == 0 {
-		panic("BUG: must be called on an object after writing a value")
-	}
-
-	// The flushing logic is modified to never flush a trailing empty value.
-	// The encoder never writes trailing whitespace eagerly.
-	b := e.unflushedBuffer()
-
-	// Detect whether the last value was empty.
-	var n int
-	if len(b) >= 3 {
-		switch string(b[len(b)-2:]) {
-		case "ll": // last two bytes of `null`
-			n = len(`null`)
-		case `""`:
-			// It is possible for a non-empty string to have `""` as a suffix
-			// if the second to the last quote was escaped.
-			if b[len(b)-3] == '\\' {
-				return false // e.g., `"\""` is not empty
-			}
-			n = len(`""`)
-		case `{}`:
-			n = len(`{}`)
-		case `[]`:
-			n = len(`[]`)
-		}
-	}
-	if n == 0 {
-		return false
-	}
-
-	// Unwrite the value, whitespace, colon, name, whitespace, and comma.
-	b = b[:len(b)-n]
-	b = jsonwire.TrimSuffixWhitespace(b)
-	b = jsonwire.TrimSuffixByte(b, ':')
-	b = jsonwire.TrimSuffixString(b)
-	b = jsonwire.TrimSuffixWhitespace(b)
-	b = jsonwire.TrimSuffixByte(b, ',')
-	e.Buf = b // store back truncated unflushed buffer
-
-	// Undo state changes.
-	e.Tokens.Last.decrement() // for object member value
-	e.Tokens.Last.decrement() // for object member name
-	if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-		if e.Tokens.Last.isActiveNamespace() {
-			e.Namespaces.Last().removeLast()
-		}
-	}
-	e.Names.clearLast()
-	if prevName != nil {
-		e.Names.copyQuotedBuffer(e.Buf) // required by objectNameStack.replaceLastUnquotedName
-		e.Names.replaceLastUnquotedName(*prevName)
-	}
-	return true
-}
-
-// UnwriteOnlyObjectMemberName unwrites the only object member name
-// and returns the unquoted name.
-func (e *encoderState) UnwriteOnlyObjectMemberName() string {
-	if last := e.Tokens.Last; !last.isObject() || last.Length() != 1 {
-		panic("BUG: must be called on an object after writing first name")
-	}
-
-	// Unwrite the name and whitespace.
-	b := jsonwire.TrimSuffixString(e.Buf)
-	isVerbatim := bytes.IndexByte(e.Buf[len(b):], '\\') < 0
-	name := string(jsonwire.UnquoteMayCopy(e.Buf[len(b):], isVerbatim))
-	e.Buf = jsonwire.TrimSuffixWhitespace(b)
-
-	// Undo state changes.
-	e.Tokens.Last.decrement()
-	if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-		if e.Tokens.Last.isActiveNamespace() {
-			e.Namespaces.Last().removeLast()
-		}
-	}
-	e.Names.clearLast()
-	return name
-}
-
-// WriteToken writes the next token and advances the internal write offset.
-//
-// The provided token kind must be consistent with the JSON grammar.
-// For example, it is an error to provide a number when the encoder
-// is expecting an object name (which is always a string), or
-// to provide an end object delimiter when the encoder is finishing an array.
-// If the provided token is invalid, then it reports a [SyntacticError] and
-// the internal state remains unchanged. The offset reported
-// in [SyntacticError] will be relative to the [Encoder.OutputOffset].
-func (e *Encoder) WriteToken(t Token) error {
-	return e.s.WriteToken(t)
-}
-func (e *encoderState) WriteToken(t Token) error {
-	k := t.Kind()
-	b := e.Buf // use local variable to avoid mutating e in case of error
-
-	// Append any delimiters or optional whitespace.
-	b = e.Tokens.MayAppendDelim(b, k)
-	if e.Flags.Get(jsonflags.AnyWhitespace) {
-		b = e.appendWhitespace(b, k)
-	}
-	pos := len(b) // offset before the token
-
-	// Append the token to the output and to the state machine.
-	var err error
-	switch k {
-	case 'n':
-		b = append(b, "null"...)
-		err = e.Tokens.appendLiteral()
-	case 'f':
-		b = append(b, "false"...)
-		err = e.Tokens.appendLiteral()
-	case 't':
-		b = append(b, "true"...)
-		err = e.Tokens.appendLiteral()
-	case '"':
-		if b, err = t.appendString(b, &e.Flags); err != nil {
-			break
-		}
-		if e.Tokens.Last.NeedObjectName() {
-			if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-				if !e.Tokens.Last.isValidNamespace() {
-					err = errInvalidNamespace
-					break
-				}
-				if e.Tokens.Last.isActiveNamespace() && !e.Namespaces.Last().insertQuoted(b[pos:], false) {
-					err = wrapWithObjectName(ErrDuplicateName, b[pos:])
-					break
-				}
-			}
-			e.Names.ReplaceLastQuotedOffset(pos) // only replace if insertQuoted succeeds
-		}
-		err = e.Tokens.appendString()
-	case '0':
-		if b, err = t.appendNumber(b, &e.Flags); err != nil {
-			break
-		}
-		err = e.Tokens.appendNumber()
-	case '{':
-		b = append(b, '{')
-		if err = e.Tokens.pushObject(); err != nil {
-			break
-		}
-		e.Names.push()
-		if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-			e.Namespaces.push()
-		}
-	case '}':
-		b = append(b, '}')
-		if err = e.Tokens.popObject(); err != nil {
-			break
-		}
-		e.Names.pop()
-		if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-			e.Namespaces.pop()
-		}
-	case '[':
-		b = append(b, '[')
-		err = e.Tokens.pushArray()
-	case ']':
-		b = append(b, ']')
-		err = e.Tokens.popArray()
-	default:
-		err = errInvalidToken
-	}
-	if err != nil {
-		return wrapSyntacticError(e, err, pos, +1)
-	}
-
-	// Finish off the buffer and store it back into e.
-	e.Buf = b
-	if e.NeedFlush() {
-		return e.Flush()
-	}
-	return nil
-}
-
-// AppendRaw appends either a raw string (without double quotes) or number.
-// Specify safeASCII if the string output is guaranteed to be ASCII
-// without any characters (including '<', '>', and '&') that need escaping,
-// otherwise this will validate whether the string needs escaping.
-// The appended bytes for a JSON number must be valid.
-//
-// This is a specialized implementation of Encoder.WriteValue
-// that allows appending directly into the buffer.
-// It is only called from marshal logic in the "json" package.
-func (e *encoderState) AppendRaw(k Kind, safeASCII bool, appendFn func([]byte) ([]byte, error)) error {
-	b := e.Buf // use local variable to avoid mutating e in case of error
-
-	// Append any delimiters or optional whitespace.
-	b = e.Tokens.MayAppendDelim(b, k)
-	if e.Flags.Get(jsonflags.AnyWhitespace) {
-		b = e.appendWhitespace(b, k)
-	}
-	pos := len(b) // offset before the token
-
-	var err error
-	switch k {
-	case '"':
-		// Append directly into the encoder buffer by assuming that
-		// most of the time none of the characters need escaping.
-		b = append(b, '"')
-		if b, err = appendFn(b); err != nil {
-			return err
-		}
-		b = append(b, '"')
-
-		// Check whether we need to escape the string and if necessary
-		// copy it to a scratch buffer and then escape it back.
-		isVerbatim := safeASCII || !jsonwire.NeedEscape(b[pos+len(`"`):len(b)-len(`"`)])
-		if !isVerbatim {
-			var err error
-			b2 := append(e.unusedCache, b[pos+len(`"`):len(b)-len(`"`)]...)
-			b, err = jsonwire.AppendQuote(b[:pos], string(b2), &e.Flags)
-			e.unusedCache = b2[:0]
-			if err != nil {
-				return wrapSyntacticError(e, err, pos, +1)
-			}
-		}
-
-		// Update the state machine.
-		if e.Tokens.Last.NeedObjectName() {
-			if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-				if !e.Tokens.Last.isValidNamespace() {
-					return wrapSyntacticError(e, err, pos, +1)
-				}
-				if e.Tokens.Last.isActiveNamespace() && !e.Namespaces.Last().insertQuoted(b[pos:], isVerbatim) {
-					err = wrapWithObjectName(ErrDuplicateName, b[pos:])
-					return wrapSyntacticError(e, err, pos, +1)
-				}
-			}
-			e.Names.ReplaceLastQuotedOffset(pos) // only replace if insertQuoted succeeds
-		}
-		if err := e.Tokens.appendString(); err != nil {
-			return wrapSyntacticError(e, err, pos, +1)
-		}
-	case '0':
-		if b, err = appendFn(b); err != nil {
-			return err
-		}
-		if err := e.Tokens.appendNumber(); err != nil {
-			return wrapSyntacticError(e, err, pos, +1)
-		}
-	default:
-		panic("BUG: invalid kind")
-	}
-
-	// Finish off the buffer and store it back into e.
-	e.Buf = b
-	if e.NeedFlush() {
-		return e.Flush()
-	}
-	return nil
-}
-
-// WriteValue writes the next raw value and advances the internal write offset.
-// The Encoder does not simply copy the provided value verbatim, but
-// parses it to ensure that it is syntactically valid and reformats it
-// according to how the Encoder is configured to format whitespace and strings.
-// If [AllowInvalidUTF8] is specified, then any invalid UTF-8 is mangled
-// as the Unicode replacement character, U+FFFD.
-//
-// The provided value kind must be consistent with the JSON grammar
-// (see examples on [Encoder.WriteToken]). If the provided value is invalid,
-// then it reports a [SyntacticError] and the internal state remains unchanged.
-// The offset reported in [SyntacticError] will be relative to the
-// [Encoder.OutputOffset] plus the offset into v of any encountered syntax error.
-func (e *Encoder) WriteValue(v Value) error {
-	return e.s.WriteValue(v)
-}
-func (e *encoderState) WriteValue(v Value) error {
-	e.maxValue |= len(v) // bitwise OR is a fast approximation of max
-
-	k := v.Kind()
-	b := e.Buf // use local variable to avoid mutating e in case of error
-
-	// Append any delimiters or optional whitespace.
-	b = e.Tokens.MayAppendDelim(b, k)
-	if e.Flags.Get(jsonflags.AnyWhitespace) {
-		b = e.appendWhitespace(b, k)
-	}
-	pos := len(b) // offset before the value
-
-	// Append the value the output.
-	var n int
-	n += jsonwire.ConsumeWhitespace(v[n:])
-	b, m, err := e.reformatValue(b, v[n:], e.Tokens.Depth())
-	if err != nil {
-		return wrapSyntacticError(e, err, pos+n+m, +1)
-	}
-	n += m
-	n += jsonwire.ConsumeWhitespace(v[n:])
-	if len(v) > n {
-		err = jsonwire.NewInvalidCharacterError(v[n:], "after top-level value")
-		return wrapSyntacticError(e, err, pos+n, 0)
-	}
-
-	// Append the kind to the state machine.
-	switch k {
-	case 'n', 'f', 't':
-		err = e.Tokens.appendLiteral()
-	case '"':
-		if e.Tokens.Last.NeedObjectName() {
-			if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-				if !e.Tokens.Last.isValidNamespace() {
-					err = errInvalidNamespace
-					break
-				}
-				if e.Tokens.Last.isActiveNamespace() && !e.Namespaces.Last().insertQuoted(b[pos:], false) {
-					err = wrapWithObjectName(ErrDuplicateName, b[pos:])
-					break
-				}
-			}
-			e.Names.ReplaceLastQuotedOffset(pos) // only replace if insertQuoted succeeds
-		}
-		err = e.Tokens.appendString()
-	case '0':
-		err = e.Tokens.appendNumber()
-	case '{':
-		if err = e.Tokens.pushObject(); err != nil {
-			break
-		}
-		if err = e.Tokens.popObject(); err != nil {
-			panic("BUG: popObject should never fail immediately after pushObject: " + err.Error())
-		}
-		if e.Flags.Get(jsonflags.ReorderRawObjects) {
-			mustReorderObjects(b[pos:])
-		}
-	case '[':
-		if err = e.Tokens.pushArray(); err != nil {
-			break
-		}
-		if err = e.Tokens.popArray(); err != nil {
-			panic("BUG: popArray should never fail immediately after pushArray: " + err.Error())
-		}
-		if e.Flags.Get(jsonflags.ReorderRawObjects) {
-			mustReorderObjects(b[pos:])
-		}
-	}
-	if err != nil {
-		return wrapSyntacticError(e, err, pos, +1)
-	}
-
-	// Finish off the buffer and store it back into e.
-	e.Buf = b
-	if e.NeedFlush() {
-		return e.Flush()
-	}
-	return nil
-}
-
-// CountNextDelimWhitespace counts the number of bytes of delimiter and
-// whitespace bytes assuming the upcoming token is a JSON value.
-// This method is used for error reporting at the semantic layer.
-func (e *encoderState) CountNextDelimWhitespace() (n int) {
-	const next = Kind('"') // arbitrary kind as next JSON value
-	delim := e.Tokens.needDelim(next)
-	if delim > 0 {
-		n += len(",") | len(":")
-	}
-	if delim == ':' {
-		if e.Flags.Get(jsonflags.SpaceAfterColon) {
-			n += len(" ")
-		}
-	} else {
-		if delim == ',' && e.Flags.Get(jsonflags.SpaceAfterComma) {
-			n += len(" ")
-		}
-		if e.Flags.Get(jsonflags.Multiline) {
-			if m := e.Tokens.NeedIndent(next); m > 0 {
-				n += len("\n") + len(e.IndentPrefix) + (m-1)*len(e.Indent)
-			}
-		}
-	}
-	return n
-}
-
-// appendWhitespace appends whitespace that immediately precedes the next token.
-func (e *encoderState) appendWhitespace(b []byte, next Kind) []byte {
-	if delim := e.Tokens.needDelim(next); delim == ':' {
-		if e.Flags.Get(jsonflags.SpaceAfterColon) {
-			b = append(b, ' ')
-		}
-	} else {
-		if delim == ',' && e.Flags.Get(jsonflags.SpaceAfterComma) {
-			b = append(b, ' ')
-		}
-		if e.Flags.Get(jsonflags.Multiline) {
-			b = e.AppendIndent(b, e.Tokens.NeedIndent(next))
-		}
-	}
-	return b
-}
-
-// AppendIndent appends the appropriate number of indentation characters
-// for the current nested level, n.
-func (e *encoderState) AppendIndent(b []byte, n int) []byte {
-	if n == 0 {
-		return b
-	}
-	b = append(b, '\n')
-	b = append(b, e.IndentPrefix...)
-	for ; n > 1; n-- {
-		b = append(b, e.Indent...)
-	}
-	return b
-}
-
-// reformatValue parses a JSON value from the start of src and
-// appends it to the end of dst, reformatting whitespace and strings as needed.
-// It returns the extended dst buffer and the number of consumed input bytes.
-func (e *encoderState) reformatValue(dst []byte, src Value, depth int) ([]byte, int, error) {
-	// TODO: Should this update ValueFlags as input?
-	if len(src) == 0 {
-		return dst, 0, io.ErrUnexpectedEOF
-	}
-	switch k := Kind(src[0]).normalize(); k {
-	case 'n':
-		if jsonwire.ConsumeNull(src) == 0 {
-			n, err := jsonwire.ConsumeLiteral(src, "null")
-			return dst, n, err
-		}
-		return append(dst, "null"...), len("null"), nil
-	case 'f':
-		if jsonwire.ConsumeFalse(src) == 0 {
-			n, err := jsonwire.ConsumeLiteral(src, "false")
-			return dst, n, err
-		}
-		return append(dst, "false"...), len("false"), nil
-	case 't':
-		if jsonwire.ConsumeTrue(src) == 0 {
-			n, err := jsonwire.ConsumeLiteral(src, "true")
-			return dst, n, err
-		}
-		return append(dst, "true"...), len("true"), nil
-	case '"':
-		if n := jsonwire.ConsumeSimpleString(src); n > 0 {
-			dst = append(dst, src[:n]...) // copy simple strings verbatim
-			return dst, n, nil
-		}
-		return jsonwire.ReformatString(dst, src, &e.Flags)
-	case '0':
-		if n := jsonwire.ConsumeSimpleNumber(src); n > 0 && !e.Flags.Get(jsonflags.CanonicalizeNumbers) {
-			dst = append(dst, src[:n]...) // copy simple numbers verbatim
-			return dst, n, nil
-		}
-		return jsonwire.ReformatNumber(dst, src, &e.Flags)
-	case '{':
-		return e.reformatObject(dst, src, depth)
-	case '[':
-		return e.reformatArray(dst, src, depth)
-	default:
-		return dst, 0, jsonwire.NewInvalidCharacterError(src, "at start of value")
-	}
-}
-
-// reformatObject parses a JSON object from the start of src and
-// appends it to the end of src, reformatting whitespace and strings as needed.
-// It returns the extended dst buffer and the number of consumed input bytes.
-func (e *encoderState) reformatObject(dst []byte, src Value, depth int) ([]byte, int, error) {
-	// Append object start.
-	if len(src) == 0 || src[0] != '{' {
-		panic("BUG: reformatObject must be called with a buffer that starts with '{'")
-	} else if depth == maxNestingDepth+1 {
-		return dst, 0, errMaxDepth
-	}
-	dst = append(dst, '{')
-	n := len("{")
-
-	// Append (possible) object end.
-	n += jsonwire.ConsumeWhitespace(src[n:])
-	if uint(len(src)) <= uint(n) {
-		return dst, n, io.ErrUnexpectedEOF
-	}
-	if src[n] == '}' {
-		dst = append(dst, '}')
-		n += len("}")
-		return dst, n, nil
-	}
-
-	var err error
-	var names *objectNamespace
-	if !e.Flags.Get(jsonflags.AllowDuplicateNames) {
-		e.Namespaces.push()
-		defer e.Namespaces.pop()
-		names = e.Namespaces.Last()
-	}
-	depth++
-	for {
-		// Append optional newline and indentation.
-		if e.Flags.Get(jsonflags.Multiline) {
-			dst = e.AppendIndent(dst, depth)
-		}
-
-		// Append object name.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, io.ErrUnexpectedEOF
-		}
-		m := jsonwire.ConsumeSimpleString(src[n:])
-		isVerbatim := m > 0
-		if isVerbatim {
-			dst = append(dst, src[n:n+m]...)
-		} else {
-			dst, m, err = jsonwire.ReformatString(dst, src[n:], &e.Flags)
-			if err != nil {
-				return dst, n + m, err
-			}
-		}
-		quotedName := src[n : n+m]
-		if !e.Flags.Get(jsonflags.AllowDuplicateNames) && !names.insertQuoted(quotedName, isVerbatim) {
-			return dst, n, wrapWithObjectName(ErrDuplicateName, quotedName)
-		}
-		n += m
-
-		// Append colon.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, wrapWithObjectName(io.ErrUnexpectedEOF, quotedName)
-		}
-		if src[n] != ':' {
-			err = jsonwire.NewInvalidCharacterError(src[n:], "after object name (expecting ':')")
-			return dst, n, wrapWithObjectName(err, quotedName)
-		}
-		dst = append(dst, ':')
-		n += len(":")
-		if e.Flags.Get(jsonflags.SpaceAfterColon) {
-			dst = append(dst, ' ')
-		}
-
-		// Append object value.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, wrapWithObjectName(io.ErrUnexpectedEOF, quotedName)
-		}
-		dst, m, err = e.reformatValue(dst, src[n:], depth)
-		if err != nil {
-			return dst, n + m, wrapWithObjectName(err, quotedName)
-		}
-		n += m
-
-		// Append comma or object end.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, io.ErrUnexpectedEOF
-		}
-		switch src[n] {
-		case ',':
-			dst = append(dst, ',')
-			if e.Flags.Get(jsonflags.SpaceAfterComma) {
-				dst = append(dst, ' ')
-			}
-			n += len(",")
-			continue
-		case '}':
-			if e.Flags.Get(jsonflags.Multiline) {
-				dst = e.AppendIndent(dst, depth-1)
-			}
-			dst = append(dst, '}')
-			n += len("}")
-			return dst, n, nil
-		default:
-			return dst, n, jsonwire.NewInvalidCharacterError(src[n:], "after object value (expecting ',' or '}')")
-		}
-	}
-}
-
-// reformatArray parses a JSON array from the start of src and
-// appends it to the end of dst, reformatting whitespace and strings as needed.
-// It returns the extended dst buffer and the number of consumed input bytes.
-func (e *encoderState) reformatArray(dst []byte, src Value, depth int) ([]byte, int, error) {
-	// Append array start.
-	if len(src) == 0 || src[0] != '[' {
-		panic("BUG: reformatArray must be called with a buffer that starts with '['")
-	} else if depth == maxNestingDepth+1 {
-		return dst, 0, errMaxDepth
-	}
-	dst = append(dst, '[')
-	n := len("[")
-
-	// Append (possible) array end.
-	n += jsonwire.ConsumeWhitespace(src[n:])
-	if uint(len(src)) <= uint(n) {
-		return dst, n, io.ErrUnexpectedEOF
-	}
-	if src[n] == ']' {
-		dst = append(dst, ']')
-		n += len("]")
-		return dst, n, nil
-	}
-
-	var idx int64
-	var err error
-	depth++
-	for {
-		// Append optional newline and indentation.
-		if e.Flags.Get(jsonflags.Multiline) {
-			dst = e.AppendIndent(dst, depth)
-		}
-
-		// Append array value.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, io.ErrUnexpectedEOF
-		}
-		var m int
-		dst, m, err = e.reformatValue(dst, src[n:], depth)
-		if err != nil {
-			return dst, n + m, wrapWithArrayIndex(err, idx)
-		}
-		n += m
-
-		// Append comma or array end.
-		n += jsonwire.ConsumeWhitespace(src[n:])
-		if uint(len(src)) <= uint(n) {
-			return dst, n, io.ErrUnexpectedEOF
-		}
-		switch src[n] {
-		case ',':
-			dst = append(dst, ',')
-			if e.Flags.Get(jsonflags.SpaceAfterComma) {
-				dst = append(dst, ' ')
-			}
-			n += len(",")
-			idx++
-			continue
-		case ']':
-			if e.Flags.Get(jsonflags.Multiline) {
-				dst = e.AppendIndent(dst, depth-1)
-			}
-			dst = append(dst, ']')
-			n += len("]")
-			return dst, n, nil
-		default:
-			return dst, n, jsonwire.NewInvalidCharacterError(src[n:], "after array value (expecting ',' or ']')")
-		}
-	}
-}
-
-// OutputOffset returns the current output byte offset. It gives the location
-// of the next byte immediately after the most recently written token or value.
-// The number of bytes actually written to the underlying [io.Writer] may be less
-// than this offset due to internal buffering effects.
-func (e *Encoder) OutputOffset() int64 {
-	return e.s.previousOffsetEnd()
-}
-
-// UnusedBuffer returns a zero-length buffer with a possible non-zero capacity.
-// This buffer is intended to be used to populate a [Value]
-// being passed to an immediately succeeding [Encoder.WriteValue] call.
-//
-// Example usage:
-//
-//	b := d.UnusedBuffer()
-//	b = append(b, '"')
-//	b = appendString(b, v) // append the string formatting of v
-//	b = append(b, '"')
-//	... := d.WriteValue(b)
-//
-// It is the user's responsibility to ensure that the value is valid JSON.
-func (e *Encoder) UnusedBuffer() []byte {
-	// NOTE: We don't return e.buf[len(e.buf):cap(e.buf)] since WriteValue would
-	// need to take special care to avoid mangling the data while reformatting.
-	// WriteValue can't easily identify whether the input Value aliases e.buf
-	// without using unsafe.Pointer. Thus, we just return a different buffer.
-	// Should this ever alias e.buf, we need to consider how it operates with
-	// the specialized performance optimization for bytes.Buffer.
-	n := 1 << bits.Len(uint(e.s.maxValue|63)) // fast approximation for max length
-	if cap(e.s.unusedCache) < n {
-		e.s.unusedCache = make([]byte, 0, n)
-	}
-	return e.s.unusedCache
-}
-
-// StackDepth returns the depth of the state machine for written JSON data.
-// Each level on the stack represents a nested JSON object or array.
-// It is incremented whenever an [BeginObject] or [BeginArray] token is encountered
-// and decremented whenever an [EndObject] or [EndArray] token is encountered.
-// The depth is zero-indexed, where zero represents the top-level JSON value.
-func (e *Encoder) StackDepth() int {
-	// NOTE: Keep in sync with Decoder.StackDepth.
-	return e.s.Tokens.Depth() - 1
-}
-
-// StackIndex returns information about the specified stack level.
-// It must be a number between 0 and [Encoder.StackDepth], inclusive.
-// For each level, it reports the kind:
-//
-//   - 0 for a level of zero,
-//   - '{' for a level representing a JSON object, and
-//   - '[' for a level representing a JSON array.
-//
-// It also reports the length of that JSON object or array.
-// Each name and value in a JSON object is counted separately,
-// so the effective number of members would be half the length.
-// A complete JSON object must have an even length.
-func (e *Encoder) StackIndex(i int) (Kind, int64) {
-	// NOTE: Keep in sync with Decoder.StackIndex.
-	switch s := e.s.Tokens.index(i); {
-	case i > 0 && s.isObject():
-		return '{', s.Length()
-	case i > 0 && s.isArray():
-		return '[', s.Length()
-	default:
-		return 0, s.Length()
-	}
-}
-
-// StackPointer returns a JSON Pointer (RFC 6901) to the most recently written value.
-func (e *Encoder) StackPointer() Pointer {
-	return Pointer(e.s.AppendStackPointer(nil, -1))
-}
-
-func (e *encoderState) AppendStackPointer(b []byte, where int) []byte {
-	e.Names.copyQuotedBuffer(e.Buf)
-	return e.state.appendStackPointer(b, where)
-}
diff --git a/src/encoding/json/jsontext/encode_test.go b/src/encoding/json/jsontext/encode_test.go
deleted file mode 100644
index 206482263fcd78..00000000000000
--- a/src/encoding/json/jsontext/encode_test.go
+++ /dev/null
@@ -1,737 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"io"
-	"path"
-	"slices"
-	"testing"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsontest"
-	"encoding/json/internal/jsonwire"
-)
-
-// TestEncoder tests whether we can produce JSON with either tokens or raw values.
-func TestEncoder(t *testing.T) {
-	for _, td := range coderTestdata {
-		for _, formatName := range []string{"Compact", "Indented"} {
-			for _, typeName := range []string{"Token", "Value", "TokenDelims"} {
-				t.Run(path.Join(td.name.Name, typeName, formatName), func(t *testing.T) {
-					testEncoder(t, td.name.Where, formatName, typeName, td)
-				})
-			}
-		}
-	}
-}
-func testEncoder(t *testing.T, where jsontest.CasePos, formatName, typeName string, td coderTestdataEntry) {
-	var want string
-	var opts []Options
-	dst := new(bytes.Buffer)
-	opts = append(opts, jsonflags.OmitTopLevelNewline|1)
-	want = td.outCompacted
-	switch formatName {
-	case "Indented":
-		opts = append(opts, Multiline(true))
-		opts = append(opts, WithIndentPrefix("\t"))
-		opts = append(opts, WithIndent("    "))
-		if td.outIndented != "" {
-			want = td.outIndented
-		}
-	}
-	enc := NewEncoder(dst, opts...)
-
-	switch typeName {
-	case "Token":
-		var pointers []Pointer
-		for _, tok := range td.tokens {
-			if err := enc.WriteToken(tok); err != nil {
-				t.Fatalf("%s: Encoder.WriteToken error: %v", where, err)
-			}
-			if td.pointers != nil {
-				pointers = append(pointers, enc.StackPointer())
-			}
-		}
-		if !slices.Equal(pointers, td.pointers) {
-			t.Fatalf("%s: pointers mismatch:\ngot  %q\nwant %q", where, pointers, td.pointers)
-		}
-	case "Value":
-		if err := enc.WriteValue(Value(td.in)); err != nil {
-			t.Fatalf("%s: Encoder.WriteValue error: %v", where, err)
-		}
-	case "TokenDelims":
-		// Use WriteToken for object/array delimiters, WriteValue otherwise.
-		for _, tok := range td.tokens {
-			switch tok.Kind() {
-			case '{', '}', '[', ']':
-				if err := enc.WriteToken(tok); err != nil {
-					t.Fatalf("%s: Encoder.WriteToken error: %v", where, err)
-				}
-			default:
-				val := Value(tok.String())
-				if tok.Kind() == '"' {
-					val, _ = jsonwire.AppendQuote(nil, tok.String(), &jsonflags.Flags{})
-				}
-				if err := enc.WriteValue(val); err != nil {
-					t.Fatalf("%s: Encoder.WriteValue error: %v", where, err)
-				}
-			}
-		}
-	}
-
-	got := dst.String()
-	if got != want {
-		t.Errorf("%s: output mismatch:\ngot  %q\nwant %q", where, got, want)
-	}
-}
-
-// TestFaultyEncoder tests that temporary I/O errors are not fatal.
-func TestFaultyEncoder(t *testing.T) {
-	for _, td := range coderTestdata {
-		for _, typeName := range []string{"Token", "Value"} {
-			t.Run(path.Join(td.name.Name, typeName), func(t *testing.T) {
-				testFaultyEncoder(t, td.name.Where, typeName, td)
-			})
-		}
-	}
-}
-func testFaultyEncoder(t *testing.T, where jsontest.CasePos, typeName string, td coderTestdataEntry) {
-	b := &FaultyBuffer{
-		MaxBytes: 1,
-		MayError: io.ErrShortWrite,
-	}
-
-	// Write all the tokens.
-	// Even if the underlying io.Writer may be faulty,
-	// writing a valid token or value is guaranteed to at least
-	// be appended to the internal buffer.
-	// In other words, syntactic errors occur before I/O errors.
-	enc := NewEncoder(b)
-	switch typeName {
-	case "Token":
-		for i, tok := range td.tokens {
-			err := enc.WriteToken(tok)
-			if err != nil && !errors.Is(err, io.ErrShortWrite) {
-				t.Fatalf("%s: %d: Encoder.WriteToken error: %v", where, i, err)
-			}
-		}
-	case "Value":
-		err := enc.WriteValue(Value(td.in))
-		if err != nil && !errors.Is(err, io.ErrShortWrite) {
-			t.Fatalf("%s: Encoder.WriteValue error: %v", where, err)
-		}
-	}
-	gotOutput := string(append(b.B, enc.s.unflushedBuffer()...))
-	wantOutput := td.outCompacted + "\n"
-	if gotOutput != wantOutput {
-		t.Fatalf("%s: output mismatch:\ngot  %s\nwant %s", where, gotOutput, wantOutput)
-	}
-}
-
-type encoderMethodCall struct {
-	in          tokOrVal
-	wantErr     error
-	wantPointer Pointer
-}
-
-var encoderErrorTestdata = []struct {
-	name    jsontest.CaseName
-	opts    []Options
-	calls   []encoderMethodCall
-	wantOut string
-}{{
-	name: jsontest.Name("InvalidToken"),
-	calls: []encoderMethodCall{
-		{zeroToken, E(errInvalidToken), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidValue"),
-	calls: []encoderMethodCall{
-		{Value(`#`), newInvalidCharacterError("#", "at start of value"), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidValue/DoubleZero"),
-	calls: []encoderMethodCall{
-		{Value(`00`), newInvalidCharacterError("0", "after top-level value").withPos(`0`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedValue"),
-	calls: []encoderMethodCall{
-		{zeroValue, E(io.ErrUnexpectedEOF).withPos("", ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedNull"),
-	calls: []encoderMethodCall{
-		{Value(`nul`), E(io.ErrUnexpectedEOF).withPos("nul", ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidNull"),
-	calls: []encoderMethodCall{
-		{Value(`nulL`), newInvalidCharacterError("L", "in literal null (expecting 'l')").withPos(`nul`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedFalse"),
-	calls: []encoderMethodCall{
-		{Value(`fals`), E(io.ErrUnexpectedEOF).withPos("fals", ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidFalse"),
-	calls: []encoderMethodCall{
-		{Value(`falsE`), newInvalidCharacterError("E", "in literal false (expecting 'e')").withPos(`fals`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedTrue"),
-	calls: []encoderMethodCall{
-		{Value(`tru`), E(io.ErrUnexpectedEOF).withPos(`tru`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidTrue"),
-	calls: []encoderMethodCall{
-		{Value(`truE`), newInvalidCharacterError("E", "in literal true (expecting 'e')").withPos(`tru`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedString"),
-	calls: []encoderMethodCall{
-		{Value(`"star`), E(io.ErrUnexpectedEOF).withPos(`"star`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidString"),
-	calls: []encoderMethodCall{
-		{Value(`"ok` + "\x00"), newInvalidCharacterError("\x00", `in string (expecting non-control character)`).withPos(`"ok`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("ValidString/AllowInvalidUTF8/Token"),
-	opts: []Options{AllowInvalidUTF8(true)},
-	calls: []encoderMethodCall{
-		{String("living\xde\xad\xbe\xef"), nil, ""},
-	},
-	wantOut: "\"living\xde\xad\ufffd\ufffd\"\n",
-}, {
-	name: jsontest.Name("ValidString/AllowInvalidUTF8/Value"),
-	opts: []Options{AllowInvalidUTF8(true)},
-	calls: []encoderMethodCall{
-		{Value("\"living\xde\xad\xbe\xef\""), nil, ""},
-	},
-	wantOut: "\"living\xde\xad\ufffd\ufffd\"\n",
-}, {
-	name: jsontest.Name("InvalidString/RejectInvalidUTF8"),
-	opts: []Options{AllowInvalidUTF8(false)},
-	calls: []encoderMethodCall{
-		{String("living\xde\xad\xbe\xef"), E(jsonwire.ErrInvalidUTF8), ""},
-		{Value("\"living\xde\xad\xbe\xef\""), E(jsonwire.ErrInvalidUTF8).withPos("\"living\xde\xad", ""), ""},
-		{BeginObject, nil, ""},
-		{String("name"), nil, ""},
-		{BeginArray, nil, ""},
-		{String("living\xde\xad\xbe\xef"), E(jsonwire.ErrInvalidUTF8).withPos(`{"name":[`, "/name/0"), ""},
-		{Value("\"living\xde\xad\xbe\xef\""), E(jsonwire.ErrInvalidUTF8).withPos("{\"name\":[\"living\xde\xad", "/name/0"), ""},
-	},
-	wantOut: `{"name":[`,
-}, {
-	name: jsontest.Name("TruncatedNumber"),
-	calls: []encoderMethodCall{
-		{Value(`0.`), E(io.ErrUnexpectedEOF).withPos("0", ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidNumber"),
-	calls: []encoderMethodCall{
-		{Value(`0.e`), newInvalidCharacterError("e", "in number (expecting digit)").withPos(`0.`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterStart"),
-	calls: []encoderMethodCall{
-		{Value(`{`), E(io.ErrUnexpectedEOF).withPos("{", ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterName"),
-	calls: []encoderMethodCall{
-		{Value(`{"X"`), E(io.ErrUnexpectedEOF).withPos(`{"X"`, "/X"), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterColon"),
-	calls: []encoderMethodCall{
-		{Value(`{"X":`), E(io.ErrUnexpectedEOF).withPos(`{"X":`, "/X"), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterValue"),
-	calls: []encoderMethodCall{
-		{Value(`{"0":0`), E(io.ErrUnexpectedEOF).withPos(`{"0":0`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedObject/AfterComma"),
-	calls: []encoderMethodCall{
-		{Value(`{"0":0,`), E(io.ErrUnexpectedEOF).withPos(`{"0":0,`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidObject/MissingColon"),
-	calls: []encoderMethodCall{
-		{Value(` { "fizz" "buzz" } `), newInvalidCharacterError("\"", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-		{Value(` { "fizz" , "buzz" } `), newInvalidCharacterError(",", "after object name (expecting ':')").withPos(` { "fizz" `, "/fizz"), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidObject/MissingComma"),
-	calls: []encoderMethodCall{
-		{Value(` { "fizz" : "buzz" "gazz" } `), newInvalidCharacterError("\"", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-		{Value(` { "fizz" : "buzz" : "gazz" } `), newInvalidCharacterError(":", "after object value (expecting ',' or '}')").withPos(` { "fizz" : "buzz" `, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidObject/ExtraComma"),
-	calls: []encoderMethodCall{
-		{Value(` { , } `), newInvalidCharacterError(",", `at start of string (expecting '"')`).withPos(` { `, ""), ""},
-		{Value(` { "fizz" : "buzz" , } `), newInvalidCharacterError("}", `at start of string (expecting '"')`).withPos(` { "fizz" : "buzz" , `, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidObject/InvalidName"),
-	calls: []encoderMethodCall{
-		{Value(`{ null }`), newInvalidCharacterError("n", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{Value(`{ false }`), newInvalidCharacterError("f", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{Value(`{ true }`), newInvalidCharacterError("t", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{Value(`{ 0 }`), newInvalidCharacterError("0", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{Value(`{ {} }`), newInvalidCharacterError("{", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{Value(`{ [] }`), newInvalidCharacterError("[", `at start of string (expecting '"')`).withPos(`{ `, ""), ""},
-		{BeginObject, nil, ""},
-		{Null, E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`null`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{False, E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`false`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{True, E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`true`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Uint(0), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`0`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{BeginObject, E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`{}`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{BeginArray, E(ErrNonStringName).withPos(`{`, ""), ""},
-		{Value(`[]`), E(ErrNonStringName).withPos(`{`, ""), ""},
-		{EndObject, nil, ""},
-	},
-	wantOut: "{}\n",
-}, {
-	name: jsontest.Name("InvalidObject/InvalidValue"),
-	calls: []encoderMethodCall{
-		{Value(`{ "0": x }`), newInvalidCharacterError("x", `at start of value`).withPos(`{ "0": `, "/0"), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidObject/MismatchingDelim"),
-	calls: []encoderMethodCall{
-		{Value(` { ] `), newInvalidCharacterError("]", `at start of string (expecting '"')`).withPos(` { `, ""), ""},
-		{Value(` { "0":0 ] `), newInvalidCharacterError("]", `after object value (expecting ',' or '}')`).withPos(` { "0":0 `, ""), ""},
-		{BeginObject, nil, ""},
-		{EndArray, E(errMismatchDelim).withPos(`{`, ""), ""},
-		{Value(`]`), newInvalidCharacterError("]", "at start of value").withPos(`{`, ""), ""},
-		{EndObject, nil, ""},
-	},
-	wantOut: "{}\n",
-}, {
-	name: jsontest.Name("ValidObject/UniqueNames"),
-	calls: []encoderMethodCall{
-		{BeginObject, nil, ""},
-		{String("0"), nil, ""},
-		{Uint(0), nil, ""},
-		{String("1"), nil, ""},
-		{Uint(1), nil, ""},
-		{EndObject, nil, ""},
-		{Value(` { "0" : 0 , "1" : 1 } `), nil, ""},
-	},
-	wantOut: `{"0":0,"1":1}` + "\n" + `{"0":0,"1":1}` + "\n",
-}, {
-	name: jsontest.Name("ValidObject/DuplicateNames"),
-	opts: []Options{AllowDuplicateNames(true)},
-	calls: []encoderMethodCall{
-		{BeginObject, nil, ""},
-		{String("0"), nil, ""},
-		{Uint(0), nil, ""},
-		{String("0"), nil, ""},
-		{Uint(0), nil, ""},
-		{EndObject, nil, ""},
-		{Value(` { "0" : 0 , "0" : 0 } `), nil, ""},
-	},
-	wantOut: `{"0":0,"0":0}` + "\n" + `{"0":0,"0":0}` + "\n",
-}, {
-	name: jsontest.Name("InvalidObject/DuplicateNames"),
-	calls: []encoderMethodCall{
-		{BeginObject, nil, ""},
-		{String("X"), nil, ""},
-		{BeginObject, nil, ""},
-		{EndObject, nil, ""},
-		{String("X"), E(ErrDuplicateName).withPos(`{"X":{},`, "/X"), "/X"},
-		{Value(`"X"`), E(ErrDuplicateName).withPos(`{"X":{},`, "/X"), "/X"},
-		{String("Y"), nil, ""},
-		{BeginObject, nil, ""},
-		{EndObject, nil, ""},
-		{String("X"), E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/X"), "/Y"},
-		{Value(`"X"`), E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/X"), "/Y"},
-		{String("Y"), E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/Y"), "/Y"},
-		{Value(`"Y"`), E(ErrDuplicateName).withPos(`{"X":{},"Y":{},`, "/Y"), "/Y"},
-		{EndObject, nil, ""},
-		{Value(` { "X" : 0 , "Y" : 1 , "X" : 0 } `), E(ErrDuplicateName).withPos(`{"X":{},"Y":{}}`+"\n"+` { "X" : 0 , "Y" : 1 , `, "/X"), ""},
-	},
-	wantOut: `{"X":{},"Y":{}}` + "\n",
-}, {
-	name: jsontest.Name("TruncatedArray/AfterStart"),
-	calls: []encoderMethodCall{
-		{Value(`[`), E(io.ErrUnexpectedEOF).withPos(`[`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedArray/AfterValue"),
-	calls: []encoderMethodCall{
-		{Value(`[0`), E(io.ErrUnexpectedEOF).withPos(`[0`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedArray/AfterComma"),
-	calls: []encoderMethodCall{
-		{Value(`[0,`), E(io.ErrUnexpectedEOF).withPos(`[0,`, ""), ""},
-	},
-}, {
-	name: jsontest.Name("TruncatedArray/MissingComma"),
-	calls: []encoderMethodCall{
-		{Value(` [ "fizz" "buzz" ] `), newInvalidCharacterError("\"", "after array value (expecting ',' or ']')").withPos(` [ "fizz" `, ""), ""},
-	},
-}, {
-	name: jsontest.Name("InvalidArray/MismatchingDelim"),
-	calls: []encoderMethodCall{
-		{Value(` [ } `), newInvalidCharacterError("}", `at start of value`).withPos(` [ `, "/0"), ""},
-		{BeginArray, nil, ""},
-		{EndObject, E(errMismatchDelim).withPos(`[`, "/0"), ""},
-		{Value(`}`), newInvalidCharacterError("}", "at start of value").withPos(`[`, "/0"), ""},
-		{EndArray, nil, ""},
-	},
-	wantOut: "[]\n",
-}, {
-	name:    jsontest.Name("Format/Object/SpaceAfterColon"),
-	opts:    []Options{SpaceAfterColon(true)},
-	calls:   []encoderMethodCall{{Value(`{"fizz":"buzz","wizz":"wuzz"}`), nil, ""}},
-	wantOut: "{\"fizz\": \"buzz\",\"wizz\": \"wuzz\"}\n",
-}, {
-	name:    jsontest.Name("Format/Object/SpaceAfterComma"),
-	opts:    []Options{SpaceAfterComma(true)},
-	calls:   []encoderMethodCall{{Value(`{"fizz":"buzz","wizz":"wuzz"}`), nil, ""}},
-	wantOut: "{\"fizz\":\"buzz\", \"wizz\":\"wuzz\"}\n",
-}, {
-	name:    jsontest.Name("Format/Object/SpaceAfterColonAndComma"),
-	opts:    []Options{SpaceAfterColon(true), SpaceAfterComma(true)},
-	calls:   []encoderMethodCall{{Value(`{"fizz":"buzz","wizz":"wuzz"}`), nil, ""}},
-	wantOut: "{\"fizz\": \"buzz\", \"wizz\": \"wuzz\"}\n",
-}, {
-	name:    jsontest.Name("Format/Object/NoSpaceAfterColon+SpaceAfterComma+Multiline"),
-	opts:    []Options{SpaceAfterColon(false), SpaceAfterComma(true), Multiline(true)},
-	calls:   []encoderMethodCall{{Value(`{"fizz":"buzz","wizz":"wuzz"}`), nil, ""}},
-	wantOut: "{\n\t\"fizz\":\"buzz\", \n\t\"wizz\":\"wuzz\"\n}\n",
-}, {
-	name:    jsontest.Name("Format/Array/SpaceAfterComma"),
-	opts:    []Options{SpaceAfterComma(true)},
-	calls:   []encoderMethodCall{{Value(`["fizz","buzz"]`), nil, ""}},
-	wantOut: "[\"fizz\", \"buzz\"]\n",
-}, {
-	name:    jsontest.Name("Format/Array/NoSpaceAfterComma+Multiline"),
-	opts:    []Options{SpaceAfterComma(false), Multiline(true)},
-	calls:   []encoderMethodCall{{Value(`["fizz","buzz"]`), nil, ""}},
-	wantOut: "[\n\t\"fizz\",\n\t\"buzz\"\n]\n",
-}, {
-	name: jsontest.Name("Format/ReorderWithWhitespace"),
-	opts: []Options{
-		AllowDuplicateNames(true),
-		AllowInvalidUTF8(true),
-		ReorderRawObjects(true),
-		SpaceAfterComma(true),
-		SpaceAfterColon(false),
-		Multiline(true),
-		WithIndentPrefix("    "),
-		WithIndent("\t"),
-		PreserveRawStrings(true),
-	},
-	calls: []encoderMethodCall{
-		{BeginArray, nil, ""},
-		{BeginArray, nil, ""},
-		{Value(` { "fizz" : "buzz" ,
-			"zip" : {
-				"x` + "\xfd" + `x" : 123 , "x` + "\xff" + `x" : 123, "x` + "\xfe" + `x" : 123
-			},
-			"zap" : {
-				"xxx" : 333, "xxx": 1, "xxx": 22
-			},
-			"alpha" : "bravo" } `), nil, ""},
-		{EndArray, nil, ""},
-		{EndArray, nil, ""},
-	},
-	wantOut: "[\n    \t[\n    \t\t{\n    \t\t\t\"alpha\":\"bravo\", \n    \t\t\t\"fizz\":\"buzz\", \n    \t\t\t\"zap\":{\n    \t\t\t\t\"xxx\":1, \n    \t\t\t\t\"xxx\":22, \n    \t\t\t\t\"xxx\":333\n    \t\t\t}, \n    \t\t\t\"zip\":{\n    \t\t\t\t\"x\xfdx\":123, \n    \t\t\t\t\"x\xfex\":123, \n    \t\t\t\t\"x\xffx\":123\n    \t\t\t}\n    \t\t}\n    \t]\n    ]\n",
-}, {
-	name: jsontest.Name("Format/CanonicalizeRawInts"),
-	opts: []Options{CanonicalizeRawInts(true), SpaceAfterComma(true)},
-	calls: []encoderMethodCall{
-		{Value(`[0.100,5.0,1E6,-9223372036854775808,-10,-1,-0,0,1,10,9223372036854775807]`), nil, ""},
-	},
-	wantOut: "[0.100, 5.0, 1E6, -9223372036854776000, -10, -1, 0, 0, 1, 10, 9223372036854776000]\n",
-}, {
-	name: jsontest.Name("Format/CanonicalizeRawFloats"),
-	opts: []Options{CanonicalizeRawFloats(true), SpaceAfterComma(true)},
-	calls: []encoderMethodCall{
-		{Value(`[0.100,5.0,1E6,-9223372036854775808,-10,-1,-0,0,1,10,9223372036854775807]`), nil, ""},
-	},
-	wantOut: "[0.1, 5, 1000000, -9223372036854775808, -10, -1, 0, 0, 1, 10, 9223372036854775807]\n",
-}, {
-	name: jsontest.Name("ErrorPosition"),
-	calls: []encoderMethodCall{
-		{Value(` "a` + "\xff" + `0" `), E(jsonwire.ErrInvalidUTF8).withPos(` "a`, ""), ""},
-		{String(`a` + "\xff" + `0`), E(jsonwire.ErrInvalidUTF8).withPos(``, ""), ""},
-	},
-}, {
-	name: jsontest.Name("ErrorPosition/0"),
-	calls: []encoderMethodCall{
-		{Value(` [ "a` + "\xff" + `1" ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ "a`, "/0"), ""},
-		{BeginArray, nil, ""},
-		{Value(` "a` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`[ "a`, "/0"), ""},
-		{String(`a` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`[`, "/0"), ""},
-	},
-	wantOut: `[`,
-}, {
-	name: jsontest.Name("ErrorPosition/1"),
-	calls: []encoderMethodCall{
-		{Value(` [ "a1" , "b` + "\xff" + `1" ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , "b`, "/1"), ""},
-		{BeginArray, nil, ""},
-		{String("a1"), nil, ""},
-		{Value(` "b` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1", "b`, "/1"), ""},
-		{String(`b` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",`, "/1"), ""},
-	},
-	wantOut: `["a1"`,
-}, {
-	name: jsontest.Name("ErrorPosition/0/0"),
-	calls: []encoderMethodCall{
-		{Value(` [ [ "a` + "\xff" + `2" ] ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a`, "/0/0"), ""},
-		{BeginArray, nil, ""},
-		{Value(` [ "a` + "\xff" + `2" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`[ [ "a`, "/0/0"), ""},
-		{BeginArray, nil, "/0"},
-		{Value(` "a` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`[[ "a`, "/0/0"), "/0"},
-		{String(`a` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`[[`, "/0/0"), "/0"},
-	},
-	wantOut: `[[`,
-}, {
-	name: jsontest.Name("ErrorPosition/1/0"),
-	calls: []encoderMethodCall{
-		{Value(` [ "a1" , [ "a` + "\xff" + `2" ] ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a`, "/1/0"), ""},
-		{BeginArray, nil, ""},
-		{String("a1"), nil, "/0"},
-		{Value(` [ "a` + "\xff" + `2" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1", [ "a`, "/1/0"), ""},
-		{BeginArray, nil, "/1"},
-		{Value(` "a` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",[ "a`, "/1/0"), "/1"},
-		{String(`a` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",[`, "/1/0"), "/1"},
-	},
-	wantOut: `["a1",[`,
-}, {
-	name: jsontest.Name("ErrorPosition/0/1"),
-	calls: []encoderMethodCall{
-		{Value(` [ [ "a2" , "b` + "\xff" + `2" ] ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ [ "a2" , "b`, "/0/1"), ""},
-		{BeginArray, nil, ""},
-		{Value(` [ "a2" , "b` + "\xff" + `2" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`[ [ "a2" , "b`, "/0/1"), ""},
-		{BeginArray, nil, "/0"},
-		{String("a2"), nil, "/0/0"},
-		{Value(` "b` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`[["a2", "b`, "/0/1"), "/0/0"},
-		{String(`b` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`[["a2",`, "/0/1"), "/0/0"},
-	},
-	wantOut: `[["a2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/1/1"),
-	calls: []encoderMethodCall{
-		{Value(` [ "a1" , [ "a2" , "b` + "\xff" + `2" ] ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , [ "a2" , "b`, "/1/1"), ""},
-		{BeginArray, nil, ""},
-		{String("a1"), nil, "/0"},
-		{Value(` [ "a2" , "b` + "\xff" + `2" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1", [ "a2" , "b`, "/1/1"), ""},
-		{BeginArray, nil, "/1"},
-		{String("a2"), nil, "/1/0"},
-		{Value(` "b` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",["a2", "b`, "/1/1"), "/1/0"},
-		{String(`b` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",["a2",`, "/1/1"), "/1/0"},
-	},
-	wantOut: `["a1",["a2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1-"),
-	calls: []encoderMethodCall{
-		{Value(` { "a` + "\xff" + `1" : "b1" } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a`, ""), ""},
-		{BeginObject, nil, ""},
-		{Value(` "a` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`{ "a`, ""), ""},
-		{String(`a` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`{`, ""), ""},
-	},
-	wantOut: `{`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : "b` + "\xff" + `1" } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b`, "/a1"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{Value(` "b` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1": "b`, "/a1"), ""},
-		{String(`b` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":`, "/a1"), ""},
-	},
-	wantOut: `{"a1"`,
-}, {
-	name: jsontest.Name("ErrorPosition/c1-"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : "b1" , "c` + "\xff" + `1" : "d1" } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c`, ""), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{String("b1"), nil, "/a1"},
-		{Value(` "c` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1": "c`, ""), "/a1"},
-		{String(`c` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1":`, ""), "/a1"},
-	},
-	wantOut: `{"a1":"b1"`,
-}, {
-	name: jsontest.Name("ErrorPosition/c1"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : "b1" , "c1" : "d` + "\xff" + `1" } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : "d`, "/c1"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{String("b1"), nil, "/a1"},
-		{String("c1"), nil, "/c1"},
-		{Value(` "d` + "\xff" + `1" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1":"c1": "d`, "/c1"), "/c1"},
-		{String(`d` + "\xff" + `1`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1":"c1":`, "/c1"), "/c1"},
-	},
-	wantOut: `{"a1":"b1","c1"`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1/a2-"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : { "a` + "\xff" + `2" : "b2" } } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a`, "/a1"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{Value(` { "a` + "\xff" + `2" : "b2" } `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1": { "a`, "/a1"), ""},
-		{BeginObject, nil, "/a1"},
-		{Value(` "a` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{ "a`, "/a1"), "/a1"},
-		{String(`a` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{`, "/a1"), "/a1"},
-	},
-	wantOut: `{"a1":{`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1/a2"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : { "a2" : "b` + "\xff" + `2" } } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b`, "/a1/a2"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{Value(` { "a2" : "b` + "\xff" + `2" } `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1": { "a2" : "b`, "/a1/a2"), ""},
-		{BeginObject, nil, "/a1"},
-		{String("a2"), nil, "/a1/a2"},
-		{Value(` "b` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2": "b`, "/a1/a2"), "/a1/a2"},
-		{String(`b` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2":`, "/a1/a2"), "/a1/a2"},
-	},
-	wantOut: `{"a1":{"a2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1/c2-"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : { "a2" : "b2" , "c` + "\xff" + `2" : "d2" } } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c`, "/a1"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{BeginObject, nil, "/a1"},
-		{String("a2"), nil, "/a1/a2"},
-		{String("b2"), nil, "/a1/a2"},
-		{Value(` "c` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2":"b2", "c`, "/a1"), "/a1/a2"},
-		{String(`c` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2":"b2",`, "/a1"), "/a1/a2"},
-	},
-	wantOut: `{"a1":{"a2":"b2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/a1/c2"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : { "a2" : "b2" , "c2" : "d` + "\xff" + `2" } } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : { "a2" : "b2" , "c2" : "d`, "/a1/c2"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{Value(` { "a2" : "b2" , "c2" : "d` + "\xff" + `2" } `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1": { "a2" : "b2" , "c2" : "d`, "/a1/c2"), ""},
-		{BeginObject, nil, ""},
-		{String("a2"), nil, "/a1/a2"},
-		{String("b2"), nil, "/a1/a2"},
-		{String("c2"), nil, "/a1/c2"},
-		{Value(` "d` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2":"b2","c2": "d`, "/a1/c2"), "/a1/c2"},
-		{String(`d` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":{"a2":"b2","c2":`, "/a1/c2"), "/a1/c2"},
-	},
-	wantOut: `{"a1":{"a2":"b2","c2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/1/a2"),
-	calls: []encoderMethodCall{
-		{Value(` [ "a1" , { "a2" : "b` + "\xff" + `2" } ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ "a1" , { "a2" : "b`, "/1/a2"), ""},
-		{BeginArray, nil, ""},
-		{String("a1"), nil, "/0"},
-		{Value(` { "a2" : "b` + "\xff" + `2" } `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1", { "a2" : "b`, "/1/a2"), ""},
-		{BeginObject, nil, "/1"},
-		{String("a2"), nil, "/1/a2"},
-		{Value(` "b` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",{"a2": "b`, "/1/a2"), "/1/a2"},
-		{String(`b` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`["a1",{"a2":`, "/1/a2"), "/1/a2"},
-	},
-	wantOut: `["a1",{"a2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/c1/1"),
-	calls: []encoderMethodCall{
-		{Value(` { "a1" : "b1" , "c1" : [ "a2" , "b` + "\xff" + `2" ] } `), E(jsonwire.ErrInvalidUTF8).withPos(` { "a1" : "b1" , "c1" : [ "a2" , "b`, "/c1/1"), ""},
-		{BeginObject, nil, ""},
-		{String("a1"), nil, "/a1"},
-		{String("b1"), nil, "/a1"},
-		{String("c1"), nil, "/c1"},
-		{Value(` [ "a2" , "b` + "\xff" + `2" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1","c1": [ "a2" , "b`, "/c1/1"), ""},
-		{BeginArray, nil, "/c1"},
-		{String("a2"), nil, "/c1/0"},
-		{Value(` "b` + "\xff" + `2" `), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1","c1":["a2", "b`, "/c1/1"), "/c1/0"},
-		{String(`b` + "\xff" + `2`), E(jsonwire.ErrInvalidUTF8).withPos(`{"a1":"b1","c1":["a2",`, "/c1/1"), "/c1/0"},
-	},
-	wantOut: `{"a1":"b1","c1":["a2"`,
-}, {
-	name: jsontest.Name("ErrorPosition/0/a1/1/c3/1"),
-	calls: []encoderMethodCall{
-		{Value(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b` + "\xff" + `4" ] } ] } ] `), E(jsonwire.ErrInvalidUTF8).withPos(` [ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{BeginArray, nil, ""},
-		{Value(` { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b` + "\xff" + `4" ] } ] } `), E(jsonwire.ErrInvalidUTF8).withPos(`[ { "a1" : [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{BeginObject, nil, "/0"},
-		{String("a1"), nil, "/0/a1"},
-		{Value(` [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b` + "\xff" + `4" ] } ] `), E(jsonwire.ErrInvalidUTF8).withPos(`[{"a1": [ "a2" , { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{BeginArray, nil, ""},
-		{String("a2"), nil, "/0/a1/0"},
-		{Value(` { "a3" : "b3" , "c3" : [ "a4" , "b` + "\xff" + `4" ] } `), E(jsonwire.ErrInvalidUTF8).withPos(`[{"a1":["a2", { "a3" : "b3" , "c3" : [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{BeginObject, nil, "/0/a1/1"},
-		{String("a3"), nil, "/0/a1/1/a3"},
-		{String("b3"), nil, "/0/a1/1/a3"},
-		{String("c3"), nil, "/0/a1/1/c3"},
-		{Value(` [ "a4" , "b` + "\xff" + `4" ] `), E(jsonwire.ErrInvalidUTF8).withPos(`[{"a1":["a2",{"a3":"b3","c3": [ "a4" , "b`, "/0/a1/1/c3/1"), ""},
-		{BeginArray, nil, "/0/a1/1/c3"},
-		{String("a4"), nil, "/0/a1/1/c3/0"},
-		{Value(` "b` + "\xff" + `4" `), E(jsonwire.ErrInvalidUTF8).withPos(`[{"a1":["a2",{"a3":"b3","c3":["a4", "b`, "/0/a1/1/c3/1"), "/0/a1/1/c3/0"},
-		{String(`b` + "\xff" + `4`), E(jsonwire.ErrInvalidUTF8).withPos(`[{"a1":["a2",{"a3":"b3","c3":["a4",`, "/0/a1/1/c3/1"), "/0/a1/1/c3/0"},
-	},
-	wantOut: `[{"a1":["a2",{"a3":"b3","c3":["a4"`,
-}}
-
-// TestEncoderErrors test that Encoder errors occur when we expect and
-// leaves the Encoder in a consistent state.
-func TestEncoderErrors(t *testing.T) {
-	for _, td := range encoderErrorTestdata {
-		t.Run(path.Join(td.name.Name), func(t *testing.T) {
-			testEncoderErrors(t, td.name.Where, td.opts, td.calls, td.wantOut)
-		})
-	}
-}
-func testEncoderErrors(t *testing.T, where jsontest.CasePos, opts []Options, calls []encoderMethodCall, wantOut string) {
-	dst := new(bytes.Buffer)
-	enc := NewEncoder(dst, opts...)
-	for i, call := range calls {
-		var gotErr error
-		switch tokVal := call.in.(type) {
-		case Token:
-			gotErr = enc.WriteToken(tokVal)
-		case Value:
-			gotErr = enc.WriteValue(tokVal)
-		}
-		if !equalError(gotErr, call.wantErr) {
-			t.Fatalf("%s: %d: error mismatch:\ngot  %v\nwant %v", where, i, gotErr, call.wantErr)
-		}
-		if call.wantPointer != "" {
-			gotPointer := enc.StackPointer()
-			if gotPointer != call.wantPointer {
-				t.Fatalf("%s: %d: Encoder.StackPointer = %s, want %s", where, i, gotPointer, call.wantPointer)
-			}
-		}
-	}
-	gotOut := dst.String() + string(enc.s.unflushedBuffer())
-	if gotOut != wantOut {
-		t.Fatalf("%s: output mismatch:\ngot  %q\nwant %q", where, gotOut, wantOut)
-	}
-	gotOffset := int(enc.OutputOffset())
-	wantOffset := len(wantOut)
-	if gotOffset != wantOffset {
-		t.Fatalf("%s: Encoder.OutputOffset = %v, want %v", where, gotOffset, wantOffset)
-	}
-}
diff --git a/src/encoding/json/jsontext/errors.go b/src/encoding/json/jsontext/errors.go
deleted file mode 100644
index 4b95d03f409e2e..00000000000000
--- a/src/encoding/json/jsontext/errors.go
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"io"
-	"strconv"
-
-	"encoding/json/internal/jsonwire"
-)
-
-const errorPrefix = "jsontext: "
-
-type ioError struct {
-	action string // either "read" or "write"
-	err    error
-}
-
-func (e *ioError) Error() string {
-	return errorPrefix + e.action + " error: " + e.err.Error()
-}
-func (e *ioError) Unwrap() error {
-	return e.err
-}
-
-// SyntacticError is a description of a syntactic error that occurred when
-// encoding or decoding JSON according to the grammar.
-//
-// The contents of this error as produced by this package may change over time.
-type SyntacticError struct {
-	requireKeyedLiterals
-	nonComparable
-
-	// ByteOffset indicates that an error occurred after this byte offset.
-	ByteOffset int64
-	// JSONPointer indicates that an error occurred within this JSON value
-	// as indicated using the JSON Pointer notation (see RFC 6901).
-	JSONPointer Pointer
-
-	// Err is the underlying error.
-	Err error
-}
-
-// wrapSyntacticError wraps an error and annotates it with a precise location
-// using the provided [encoderState] or [decoderState].
-// If err is an [ioError] or [io.EOF], then it is not wrapped.
-//
-// It takes a relative offset pos that can be resolved into
-// an absolute offset using state.offsetAt.
-//
-// It takes a where that specify how the JSON pointer is derived.
-// If the underlying error is a [pointerSuffixError],
-// then the suffix is appended to the derived pointer.
-func wrapSyntacticError(state interface {
-	offsetAt(pos int) int64
-	AppendStackPointer(b []byte, where int) []byte
-}, err error, pos, where int) error {
-	if _, ok := err.(*ioError); err == io.EOF || ok {
-		return err
-	}
-	offset := state.offsetAt(pos)
-	ptr := state.AppendStackPointer(nil, where)
-	if serr, ok := err.(*pointerSuffixError); ok {
-		ptr = serr.appendPointer(ptr)
-		err = serr.error
-	}
-	if d, ok := state.(*decoderState); ok && err == errMismatchDelim {
-		where := "at start of value"
-		if len(d.Tokens.Stack) > 0 && d.Tokens.Last.Length() > 0 {
-			switch {
-			case d.Tokens.Last.isArray():
-				where = "after array element (expecting ',' or ']')"
-				ptr = []byte(Pointer(ptr).Parent()) // problem is with parent array
-			case d.Tokens.Last.isObject():
-				where = "after object value (expecting ',' or '}')"
-				ptr = []byte(Pointer(ptr).Parent()) // problem is with parent object
-			}
-		}
-		err = jsonwire.NewInvalidCharacterError(d.buf[pos:], where)
-	}
-	return &SyntacticError{ByteOffset: offset, JSONPointer: Pointer(ptr), Err: err}
-}
-
-func (e *SyntacticError) Error() string {
-	pointer := e.JSONPointer
-	offset := e.ByteOffset
-	b := []byte(errorPrefix)
-	if e.Err != nil {
-		b = append(b, e.Err.Error()...)
-		if e.Err == ErrDuplicateName {
-			b = strconv.AppendQuote(append(b, ' '), pointer.LastToken())
-			pointer = pointer.Parent()
-			offset = 0 // not useful to print offset for duplicate names
-		}
-	} else {
-		b = append(b, "syntactic error"...)
-	}
-	if pointer != "" {
-		b = strconv.AppendQuote(append(b, " within "...), jsonwire.TruncatePointer(string(pointer), 100))
-	}
-	if offset > 0 {
-		b = strconv.AppendInt(append(b, " after offset "...), offset, 10)
-	}
-	return string(b)
-}
-
-func (e *SyntacticError) Unwrap() error {
-	return e.Err
-}
-
-// pointerSuffixError represents a JSON pointer suffix to be appended
-// to [SyntacticError.JSONPointer]. It is an internal error type
-// used within this package and does not appear in the public API.
-//
-// This type is primarily used to annotate errors in Encoder.WriteValue
-// and Decoder.ReadValue with precise positions.
-// At the time WriteValue or ReadValue is called, a JSON pointer to the
-// upcoming value can be constructed using the Encoder/Decoder state.
-// However, tracking pointers within values during normal operation
-// would incur a performance penalty in the error-free case.
-//
-// To provide precise error locations without this overhead,
-// the error is wrapped with object names or array indices
-// as the call stack is popped when an error occurs.
-// Since this happens in reverse order, pointerSuffixError holds
-// the pointer in reverse and is only later reversed when appending to
-// the pointer prefix.
-//
-// For example, if the encoder is at "/alpha/bravo/charlie"
-// and an error occurs in WriteValue at "/xray/yankee/zulu", then
-// the final pointer should be "/alpha/bravo/charlie/xray/yankee/zulu".
-//
-// As pointerSuffixError is populated during the error return path,
-// it first contains "/zulu", then "/zulu/yankee",
-// and finally "/zulu/yankee/xray".
-// These tokens are reversed and concatenated to "/alpha/bravo/charlie"
-// to form the full pointer.
-type pointerSuffixError struct {
-	error
-
-	// reversePointer is a JSON pointer, but with each token in reverse order.
-	reversePointer []byte
-}
-
-// wrapWithObjectName wraps err with a JSON object name access,
-// which must be a valid quoted JSON string.
-func wrapWithObjectName(err error, quotedName []byte) error {
-	serr, _ := err.(*pointerSuffixError)
-	if serr == nil {
-		serr = &pointerSuffixError{error: err}
-	}
-	name := jsonwire.UnquoteMayCopy(quotedName, false)
-	serr.reversePointer = appendEscapePointerName(append(serr.reversePointer, '/'), name)
-	return serr
-}
-
-// wrapWithArrayIndex wraps err with a JSON array index access.
-func wrapWithArrayIndex(err error, index int64) error {
-	serr, _ := err.(*pointerSuffixError)
-	if serr == nil {
-		serr = &pointerSuffixError{error: err}
-	}
-	serr.reversePointer = strconv.AppendUint(append(serr.reversePointer, '/'), uint64(index), 10)
-	return serr
-}
-
-// appendPointer appends the path encoded in e to the end of pointer.
-func (e *pointerSuffixError) appendPointer(pointer []byte) []byte {
-	// Copy each token in reversePointer to the end of pointer in reverse order.
-	// Double reversal means that the appended suffix is now in forward order.
-	bi, bo := e.reversePointer, pointer
-	for len(bi) > 0 {
-		i := bytes.LastIndexByte(bi, '/')
-		bi, bo = bi[:i], append(bo, bi[i:]...)
-	}
-	return bo
-}
diff --git a/src/encoding/json/jsontext/example_test.go b/src/encoding/json/jsontext/example_test.go
deleted file mode 100644
index 4bf6a7ae5aef0b..00000000000000
--- a/src/encoding/json/jsontext/example_test.go
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext_test
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"log"
-	"strings"
-
-	"encoding/json/jsontext"
-	"encoding/json/v2"
-)
-
-// This example demonstrates the use of the [Encoder] and [Decoder] to
-// parse and modify JSON without unmarshaling it into a concrete Go type.
-func Example_stringReplace() {
-	// Example input with non-idiomatic use of "Golang" instead of "Go".
-	const input = `{
-		"title": "Golang version 1 is released",
-		"author": "Andrew Gerrand",
-		"date": "2012-03-28",
-		"text": "Today marks a major milestone in the development of the Golang programming language.",
-		"otherArticles": [
-			"Twelve Years of Golang",
-			"The Laws of Reflection",
-			"Learn Golang from your browser"
-		]
-	}`
-
-	// Using a Decoder and Encoder, we can parse through every token,
-	// check and modify the token if necessary, and
-	// write the token to the output.
-	var replacements []jsontext.Pointer
-	in := strings.NewReader(input)
-	dec := jsontext.NewDecoder(in)
-	out := new(bytes.Buffer)
-	enc := jsontext.NewEncoder(out, jsontext.Multiline(true)) // expand for readability
-	for {
-		// Read a token from the input.
-		tok, err := dec.ReadToken()
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			log.Fatal(err)
-		}
-
-		// Check whether the token contains the string "Golang" and
-		// replace each occurrence with "Go" instead.
-		if tok.Kind() == '"' && strings.Contains(tok.String(), "Golang") {
-			replacements = append(replacements, dec.StackPointer())
-			tok = jsontext.String(strings.ReplaceAll(tok.String(), "Golang", "Go"))
-		}
-
-		// Write the (possibly modified) token to the output.
-		if err := enc.WriteToken(tok); err != nil {
-			log.Fatal(err)
-		}
-	}
-
-	// Print the list of replacements and the adjusted JSON output.
-	if len(replacements) > 0 {
-		fmt.Println(`Replaced "Golang" with "Go" in:`)
-		for _, where := range replacements {
-			fmt.Println("\t" + where)
-		}
-		fmt.Println()
-	}
-	fmt.Println("Result:", out.String())
-
-	// Output:
-	// Replaced "Golang" with "Go" in:
-	// 	/title
-	// 	/text
-	// 	/otherArticles/0
-	// 	/otherArticles/2
-	//
-	// Result: {
-	// 	"title": "Go version 1 is released",
-	// 	"author": "Andrew Gerrand",
-	// 	"date": "2012-03-28",
-	// 	"text": "Today marks a major milestone in the development of the Go programming language.",
-	// 	"otherArticles": [
-	// 		"Twelve Years of Go",
-	// 		"The Laws of Reflection",
-	// 		"Learn Go from your browser"
-	// 	]
-	// }
-}
-
-// Directly embedding JSON within HTML requires special handling for safety.
-// Escape certain runes to prevent JSON directly treated as HTML
-// from being able to perform `,
-	}
-
-	b, err := json.Marshal(&page,
-		// Escape certain runes within a JSON string so that
-		// JSON will be safe to directly embed inside HTML.
-		jsontext.EscapeForHTML(true),
-		jsontext.EscapeForJS(true),
-		jsontext.Multiline(true)) // expand for readability
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"Title": "Example Embedded Javascript",
-	// 	"Body": "\u003cscript\u003e console.log(\"Hello, world!\"); \u003c/script\u003e"
-	// }
-}
diff --git a/src/encoding/json/jsontext/export.go b/src/encoding/json/jsontext/export.go
deleted file mode 100644
index 0ecccad5b3c671..00000000000000
--- a/src/encoding/json/jsontext/export.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"io"
-
-	"encoding/json/internal"
-)
-
-// Internal is for internal use only.
-// This is exempt from the Go compatibility agreement.
-var Internal exporter
-
-type exporter struct{}
-
-// Export exposes internal functionality from "jsontext" to "json".
-// This cannot be dynamically called by other packages since
-// they cannot obtain a reference to the internal.AllowInternalUse value.
-func (exporter) Export(p *internal.NotForPublicUse) export {
-	if p != &internal.AllowInternalUse {
-		panic("unauthorized call to Export")
-	}
-	return export{}
-}
-
-// The export type exposes functionality to packages with visibility to
-// the internal.AllowInternalUse variable. The "json" package uses this
-// to modify low-level state in the Encoder and Decoder types.
-// It mutates the state directly instead of calling ReadToken or WriteToken
-// since this is more performant. The public APIs need to track state to ensure
-// that users are constructing a valid JSON value, but the "json" implementation
-// guarantees that it emits valid JSON by the structure of the code itself.
-type export struct{}
-
-// Encoder returns a pointer to the underlying encoderState.
-func (export) Encoder(e *Encoder) *encoderState { return &e.s }
-
-// Decoder returns a pointer to the underlying decoderState.
-func (export) Decoder(d *Decoder) *decoderState { return &d.s }
-
-func (export) GetBufferedEncoder(o ...Options) *Encoder {
-	return getBufferedEncoder(o...)
-}
-func (export) PutBufferedEncoder(e *Encoder) {
-	putBufferedEncoder(e)
-}
-
-func (export) GetStreamingEncoder(w io.Writer, o ...Options) *Encoder {
-	return getStreamingEncoder(w, o...)
-}
-func (export) PutStreamingEncoder(e *Encoder) {
-	putStreamingEncoder(e)
-}
-
-func (export) GetBufferedDecoder(b []byte, o ...Options) *Decoder {
-	return getBufferedDecoder(b, o...)
-}
-func (export) PutBufferedDecoder(d *Decoder) {
-	putBufferedDecoder(d)
-}
-
-func (export) GetStreamingDecoder(r io.Reader, o ...Options) *Decoder {
-	return getStreamingDecoder(r, o...)
-}
-func (export) PutStreamingDecoder(d *Decoder) {
-	putStreamingDecoder(d)
-}
-
-func (export) IsIOError(err error) bool {
-	_, ok := err.(*ioError)
-	return ok
-}
diff --git a/src/encoding/json/jsontext/fuzz_test.go b/src/encoding/json/jsontext/fuzz_test.go
deleted file mode 100644
index 60d16b9e27805c..00000000000000
--- a/src/encoding/json/jsontext/fuzz_test.go
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"io"
-	"math/rand"
-	"slices"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-)
-
-func FuzzCoder(f *testing.F) {
-	// Add a number of inputs to the corpus including valid and invalid data.
-	for _, td := range coderTestdata {
-		f.Add(int64(0), []byte(td.in))
-	}
-	for _, td := range decoderErrorTestdata {
-		f.Add(int64(0), []byte(td.in))
-	}
-	for _, td := range encoderErrorTestdata {
-		f.Add(int64(0), []byte(td.wantOut))
-	}
-	for _, td := range jsontest.Data {
-		f.Add(int64(0), td.Data())
-	}
-
-	f.Fuzz(func(t *testing.T, seed int64, b []byte) {
-		var tokVals []tokOrVal
-		rn := rand.NewSource(seed)
-
-		// Read a sequence of tokens or values. Skip the test for any errors
-		// since we expect this with randomly generated fuzz inputs.
-		src := bytes.NewReader(b)
-		dec := NewDecoder(src)
-		for {
-			if rn.Int63()%8 > 0 {
-				tok, err := dec.ReadToken()
-				if err != nil {
-					if err == io.EOF {
-						break
-					}
-					t.Skipf("Decoder.ReadToken error: %v", err)
-				}
-				tokVals = append(tokVals, tok.Clone())
-			} else {
-				val, err := dec.ReadValue()
-				if err != nil {
-					expectError := dec.PeekKind() == '}' || dec.PeekKind() == ']'
-					if expectError && errors.As(err, new(*SyntacticError)) {
-						continue
-					}
-					if err == io.EOF {
-						break
-					}
-					t.Skipf("Decoder.ReadValue error: %v", err)
-				}
-				tokVals = append(tokVals, append(zeroValue, val...))
-			}
-		}
-
-		// Write a sequence of tokens or values. Fail the test for any errors
-		// since the previous stage guarantees that the input is valid.
-		dst := new(bytes.Buffer)
-		enc := NewEncoder(dst)
-		for _, tokVal := range tokVals {
-			switch tokVal := tokVal.(type) {
-			case Token:
-				if err := enc.WriteToken(tokVal); err != nil {
-					t.Fatalf("Encoder.WriteToken error: %v", err)
-				}
-			case Value:
-				if err := enc.WriteValue(tokVal); err != nil {
-					t.Fatalf("Encoder.WriteValue error: %v", err)
-				}
-			}
-		}
-
-		// Encoded output and original input must decode to the same thing.
-		var got, want []Token
-		for dec := NewDecoder(bytes.NewReader(b)); dec.PeekKind() > 0; {
-			tok, err := dec.ReadToken()
-			if err != nil {
-				t.Fatalf("Decoder.ReadToken error: %v", err)
-			}
-			got = append(got, tok.Clone())
-		}
-		for dec := NewDecoder(dst); dec.PeekKind() > 0; {
-			tok, err := dec.ReadToken()
-			if err != nil {
-				t.Fatalf("Decoder.ReadToken error: %v", err)
-			}
-			want = append(want, tok.Clone())
-		}
-		if !equalTokens(got, want) {
-			t.Fatalf("mismatching output:\ngot  %v\nwant %v", got, want)
-		}
-	})
-}
-
-func FuzzResumableDecoder(f *testing.F) {
-	for _, td := range resumableDecoderTestdata {
-		f.Add(int64(0), []byte(td))
-	}
-
-	f.Fuzz(func(t *testing.T, seed int64, b []byte) {
-		rn := rand.NewSource(seed)
-
-		// Regardless of how many bytes the underlying io.Reader produces,
-		// the provided tokens, values, and errors should always be identical.
-		t.Run("ReadToken", func(t *testing.T) {
-			decGot := NewDecoder(&FaultyBuffer{B: b, MaxBytes: 8, Rand: rn})
-			decWant := NewDecoder(bytes.NewReader(b))
-			gotTok, gotErr := decGot.ReadToken()
-			wantTok, wantErr := decWant.ReadToken()
-			if gotTok.String() != wantTok.String() || !equalError(gotErr, wantErr) {
-				t.Errorf("Decoder.ReadToken = (%v, %v), want (%v, %v)", gotTok, gotErr, wantTok, wantErr)
-			}
-		})
-		t.Run("ReadValue", func(t *testing.T) {
-			decGot := NewDecoder(&FaultyBuffer{B: b, MaxBytes: 8, Rand: rn})
-			decWant := NewDecoder(bytes.NewReader(b))
-			gotVal, gotErr := decGot.ReadValue()
-			wantVal, wantErr := decWant.ReadValue()
-			if !slices.Equal(gotVal, wantVal) || !equalError(gotErr, wantErr) {
-				t.Errorf("Decoder.ReadValue = (%s, %v), want (%s, %v)", gotVal, gotErr, wantVal, wantErr)
-			}
-		})
-	})
-}
-
-func FuzzValueFormat(f *testing.F) {
-	for _, td := range valueTestdata {
-		f.Add(int64(0), []byte(td.in))
-	}
-
-	// isValid reports whether b is valid according to the specified options.
-	isValid := func(b []byte, opts ...Options) bool {
-		d := NewDecoder(bytes.NewReader(b), opts...)
-		_, errVal := d.ReadValue()
-		_, errEOF := d.ReadToken()
-		return errVal == nil && errEOF == io.EOF
-	}
-
-	// stripWhitespace removes all JSON whitespace characters from the input.
-	stripWhitespace := func(in []byte) (out []byte) {
-		out = make([]byte, 0, len(in))
-		for _, c := range in {
-			switch c {
-			case ' ', '\n', '\r', '\t':
-			default:
-				out = append(out, c)
-			}
-		}
-		return out
-	}
-
-	allOptions := []Options{
-		AllowDuplicateNames(true),
-		AllowInvalidUTF8(true),
-		EscapeForHTML(true),
-		EscapeForJS(true),
-		PreserveRawStrings(true),
-		CanonicalizeRawInts(true),
-		CanonicalizeRawFloats(true),
-		ReorderRawObjects(true),
-		SpaceAfterColon(true),
-		SpaceAfterComma(true),
-		Multiline(true),
-		WithIndent("\t"),
-		WithIndentPrefix("    "),
-	}
-
-	f.Fuzz(func(t *testing.T, seed int64, b []byte) {
-		validRFC7159 := isValid(b, AllowInvalidUTF8(true), AllowDuplicateNames(true))
-		validRFC8259 := isValid(b, AllowInvalidUTF8(false), AllowDuplicateNames(true))
-		validRFC7493 := isValid(b, AllowInvalidUTF8(false), AllowDuplicateNames(false))
-		switch {
-		case !validRFC7159 && validRFC8259:
-			t.Errorf("invalid input per RFC 7159 implies invalid per RFC 8259")
-		case !validRFC8259 && validRFC7493:
-			t.Errorf("invalid input per RFC 8259 implies invalid per RFC 7493")
-		}
-
-		gotValid := Value(b).IsValid()
-		wantValid := validRFC7493
-		if gotValid != wantValid {
-			t.Errorf("Value.IsValid = %v, want %v", gotValid, wantValid)
-		}
-
-		gotCompacted := Value(string(b))
-		gotCompactOk := gotCompacted.Compact() == nil
-		wantCompactOk := validRFC7159
-		if !bytes.Equal(stripWhitespace(gotCompacted), stripWhitespace(b)) {
-			t.Errorf("stripWhitespace(Value.Compact) = %s, want %s", stripWhitespace(gotCompacted), stripWhitespace(b))
-		}
-		if gotCompactOk != wantCompactOk {
-			t.Errorf("Value.Compact success mismatch: got %v, want %v", gotCompactOk, wantCompactOk)
-		}
-
-		gotIndented := Value(string(b))
-		gotIndentOk := gotIndented.Indent() == nil
-		wantIndentOk := validRFC7159
-		if !bytes.Equal(stripWhitespace(gotIndented), stripWhitespace(b)) {
-			t.Errorf("stripWhitespace(Value.Indent) = %s, want %s", stripWhitespace(gotIndented), stripWhitespace(b))
-		}
-		if gotIndentOk != wantIndentOk {
-			t.Errorf("Value.Indent success mismatch: got %v, want %v", gotIndentOk, wantIndentOk)
-		}
-
-		gotCanonicalized := Value(string(b))
-		gotCanonicalizeOk := gotCanonicalized.Canonicalize() == nil
-		wantCanonicalizeOk := validRFC7493
-		if gotCanonicalizeOk != wantCanonicalizeOk {
-			t.Errorf("Value.Canonicalize success mismatch: got %v, want %v", gotCanonicalizeOk, wantCanonicalizeOk)
-		}
-
-		// Random options should not result in a panic.
-		var opts []Options
-		rn := rand.New(rand.NewSource(seed))
-		for _, opt := range allOptions {
-			if rn.Intn(len(allOptions)/4) == 0 {
-				opts = append(opts, opt)
-			}
-		}
-		v := Value(b)
-		v.Format(opts...) // should not panic
-	})
-}
diff --git a/src/encoding/json/jsontext/options.go b/src/encoding/json/jsontext/options.go
deleted file mode 100644
index e07de21fcfdd60..00000000000000
--- a/src/encoding/json/jsontext/options.go
+++ /dev/null
@@ -1,303 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"strings"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-)
-
-// Options configures [NewEncoder], [Encoder.Reset], [NewDecoder],
-// and [Decoder.Reset] with specific features.
-// Each function takes in a variadic list of options, where properties
-// set in latter options override the value of previously set properties.
-//
-// There is a single Options type, which is used with both encoding and decoding.
-// Some options affect both operations, while others only affect one operation:
-//
-//   - [AllowDuplicateNames] affects encoding and decoding
-//   - [AllowInvalidUTF8] affects encoding and decoding
-//   - [EscapeForHTML] affects encoding only
-//   - [EscapeForJS] affects encoding only
-//   - [PreserveRawStrings] affects encoding only
-//   - [CanonicalizeRawInts] affects encoding only
-//   - [CanonicalizeRawFloats] affects encoding only
-//   - [ReorderRawObjects] affects encoding only
-//   - [SpaceAfterColon] affects encoding only
-//   - [SpaceAfterComma] affects encoding only
-//   - [Multiline] affects encoding only
-//   - [WithIndent] affects encoding only
-//   - [WithIndentPrefix] affects encoding only
-//
-// Options that do not affect a particular operation are ignored.
-//
-// The Options type is identical to [encoding/json.Options] and
-// [encoding/json/v2.Options]. Options from the other packages may
-// be passed to functionality in this package, but are ignored.
-// Options from this package may be used with the other packages.
-type Options = jsonopts.Options
-
-// AllowDuplicateNames specifies that JSON objects may contain
-// duplicate member names. Disabling the duplicate name check may provide
-// performance benefits, but breaks compliance with RFC 7493, section 2.3.
-// The input or output will still be compliant with RFC 8259,
-// which leaves the handling of duplicate names as unspecified behavior.
-//
-// This affects either encoding or decoding.
-func AllowDuplicateNames(v bool) Options {
-	if v {
-		return jsonflags.AllowDuplicateNames | 1
-	} else {
-		return jsonflags.AllowDuplicateNames | 0
-	}
-}
-
-// AllowInvalidUTF8 specifies that JSON strings may contain invalid UTF-8,
-// which will be mangled as the Unicode replacement character, U+FFFD.
-// This causes the encoder or decoder to break compliance with
-// RFC 7493, section 2.1, and RFC 8259, section 8.1.
-//
-// This affects either encoding or decoding.
-func AllowInvalidUTF8(v bool) Options {
-	if v {
-		return jsonflags.AllowInvalidUTF8 | 1
-	} else {
-		return jsonflags.AllowInvalidUTF8 | 0
-	}
-}
-
-// EscapeForHTML specifies that '<', '>', and '&' characters within JSON strings
-// should be escaped as a hexadecimal Unicode codepoint (e.g., \u003c) so that
-// the output is safe to embed within HTML.
-//
-// This only affects encoding and is ignored when decoding.
-func EscapeForHTML(v bool) Options {
-	if v {
-		return jsonflags.EscapeForHTML | 1
-	} else {
-		return jsonflags.EscapeForHTML | 0
-	}
-}
-
-// EscapeForJS specifies that U+2028 and U+2029 characters within JSON strings
-// should be escaped as a hexadecimal Unicode codepoint (e.g., \u2028) so that
-// the output is valid to embed within JavaScript. See RFC 8259, section 12.
-//
-// This only affects encoding and is ignored when decoding.
-func EscapeForJS(v bool) Options {
-	if v {
-		return jsonflags.EscapeForJS | 1
-	} else {
-		return jsonflags.EscapeForJS | 0
-	}
-}
-
-// PreserveRawStrings specifies that when encoding a raw JSON string in a
-// [Token] or [Value], pre-escaped sequences
-// in a JSON string are preserved to the output.
-// However, raw strings still respect [EscapeForHTML] and [EscapeForJS]
-// such that the relevant characters are escaped.
-// If [AllowInvalidUTF8] is enabled, bytes of invalid UTF-8
-// are preserved to the output.
-//
-// This only affects encoding and is ignored when decoding.
-func PreserveRawStrings(v bool) Options {
-	if v {
-		return jsonflags.PreserveRawStrings | 1
-	} else {
-		return jsonflags.PreserveRawStrings | 0
-	}
-}
-
-// CanonicalizeRawInts specifies that when encoding a raw JSON
-// integer number (i.e., a number without a fraction and exponent) in a
-// [Token] or [Value], the number is canonicalized
-// according to RFC 8785, section 3.2.2.3. As a special case,
-// the number -0 is canonicalized as 0.
-//
-// JSON numbers are treated as IEEE 754 double precision numbers.
-// Any numbers with precision beyond what is representable by that form
-// will lose their precision when canonicalized. For example,
-// integer values beyond ±2⁵³ will lose their precision.
-// For example, 1234567890123456789 is formatted as 1234567890123456800.
-//
-// This only affects encoding and is ignored when decoding.
-func CanonicalizeRawInts(v bool) Options {
-	if v {
-		return jsonflags.CanonicalizeRawInts | 1
-	} else {
-		return jsonflags.CanonicalizeRawInts | 0
-	}
-}
-
-// CanonicalizeRawFloats specifies that when encoding a raw JSON
-// floating-point number (i.e., a number with a fraction or exponent) in a
-// [Token] or [Value], the number is canonicalized
-// according to RFC 8785, section 3.2.2.3. As a special case,
-// the number -0 is canonicalized as 0.
-//
-// JSON numbers are treated as IEEE 754 double precision numbers.
-// It is safe to canonicalize a serialized single precision number and
-// parse it back as a single precision number and expect the same value.
-// If a number exceeds ±1.7976931348623157e+308, which is the maximum
-// finite number, then it saturated at that value and formatted as such.
-//
-// This only affects encoding and is ignored when decoding.
-func CanonicalizeRawFloats(v bool) Options {
-	if v {
-		return jsonflags.CanonicalizeRawFloats | 1
-	} else {
-		return jsonflags.CanonicalizeRawFloats | 0
-	}
-}
-
-// ReorderRawObjects specifies that when encoding a raw JSON object in a
-// [Value], the object members are reordered according to
-// RFC 8785, section 3.2.3.
-//
-// This only affects encoding and is ignored when decoding.
-func ReorderRawObjects(v bool) Options {
-	if v {
-		return jsonflags.ReorderRawObjects | 1
-	} else {
-		return jsonflags.ReorderRawObjects | 0
-	}
-}
-
-// SpaceAfterColon specifies that the JSON output should emit a space character
-// after each colon separator following a JSON object name.
-// If false, then no space character appears after the colon separator.
-//
-// This only affects encoding and is ignored when decoding.
-func SpaceAfterColon(v bool) Options {
-	if v {
-		return jsonflags.SpaceAfterColon | 1
-	} else {
-		return jsonflags.SpaceAfterColon | 0
-	}
-}
-
-// SpaceAfterComma specifies that the JSON output should emit a space character
-// after each comma separator following a JSON object value or array element.
-// If false, then no space character appears after the comma separator.
-//
-// This only affects encoding and is ignored when decoding.
-func SpaceAfterComma(v bool) Options {
-	if v {
-		return jsonflags.SpaceAfterComma | 1
-	} else {
-		return jsonflags.SpaceAfterComma | 0
-	}
-}
-
-// Multiline specifies that the JSON output should expand to multiple lines,
-// where every JSON object member or JSON array element appears on
-// a new, indented line according to the nesting depth.
-//
-// If [SpaceAfterColon] is not specified, then the default is true.
-// If [SpaceAfterComma] is not specified, then the default is false.
-// If [WithIndent] is not specified, then the default is "\t".
-//
-// If set to false, then the output is a single-line,
-// where the only whitespace emitted is determined by the current
-// values of [SpaceAfterColon] and [SpaceAfterComma].
-//
-// This only affects encoding and is ignored when decoding.
-func Multiline(v bool) Options {
-	if v {
-		return jsonflags.Multiline | 1
-	} else {
-		return jsonflags.Multiline | 0
-	}
-}
-
-// WithIndent specifies that the encoder should emit multiline output
-// where each element in a JSON object or array begins on a new, indented line
-// beginning with the indent prefix (see [WithIndentPrefix])
-// followed by one or more copies of indent according to the nesting depth.
-// The indent must only be composed of space or tab characters.
-//
-// If the intent to emit indented output without a preference for
-// the particular indent string, then use [Multiline] instead.
-//
-// This only affects encoding and is ignored when decoding.
-// Use of this option implies [Multiline] being set to true.
-func WithIndent(indent string) Options {
-	// Fast-path: Return a constant for common indents, which avoids allocating.
-	// These are derived from analyzing the Go module proxy on 2023-07-01.
-	switch indent {
-	case "\t":
-		return jsonopts.Indent("\t") // ~14k usages
-	case "    ":
-		return jsonopts.Indent("    ") // ~18k usages
-	case "   ":
-		return jsonopts.Indent("   ") // ~1.7k usages
-	case "  ":
-		return jsonopts.Indent("  ") // ~52k usages
-	case " ":
-		return jsonopts.Indent(" ") // ~12k usages
-	case "":
-		return jsonopts.Indent("") // ~1.5k usages
-	}
-
-	// Otherwise, allocate for this unique value.
-	if s := strings.Trim(indent, " \t"); len(s) > 0 {
-		panic("json: invalid character " + jsonwire.QuoteRune(s) + " in indent")
-	}
-	return jsonopts.Indent(indent)
-}
-
-// WithIndentPrefix specifies that the encoder should emit multiline output
-// where each element in a JSON object or array begins on a new, indented line
-// beginning with the indent prefix followed by one or more copies of indent
-// (see [WithIndent]) according to the nesting depth.
-// The prefix must only be composed of space or tab characters.
-//
-// This only affects encoding and is ignored when decoding.
-// Use of this option implies [Multiline] being set to true.
-func WithIndentPrefix(prefix string) Options {
-	if s := strings.Trim(prefix, " \t"); len(s) > 0 {
-		panic("json: invalid character " + jsonwire.QuoteRune(s) + " in indent prefix")
-	}
-	return jsonopts.IndentPrefix(prefix)
-}
-
-/*
-// TODO(https://go.dev/issue/56733): Implement WithByteLimit and WithDepthLimit.
-
-// WithByteLimit sets a limit on the number of bytes of input or output bytes
-// that may be consumed or produced for each top-level JSON value.
-// If a [Decoder] or [Encoder] method call would need to consume/produce
-// more than a total of n bytes to make progress on the top-level JSON value,
-// then the call will report an error.
-// Whitespace before and within the top-level value are counted against the limit.
-// Whitespace after a top-level value are counted against the limit
-// for the next top-level value.
-//
-// A non-positive limit is equivalent to no limit at all.
-// If unspecified, the default limit is no limit at all.
-// This affects either encoding or decoding.
-func WithByteLimit(n int64) Options {
-	return jsonopts.ByteLimit(max(n, 0))
-}
-
-// WithDepthLimit sets a limit on the maximum depth of JSON nesting
-// that may be consumed or produced for each top-level JSON value.
-// If a [Decoder] or [Encoder] method call would need to consume or produce
-// a depth greater than n to make progress on the top-level JSON value,
-// then the call will report an error.
-//
-// A non-positive limit is equivalent to no limit at all.
-// If unspecified, the default limit is 10000.
-// This affects either encoding or decoding.
-func WithDepthLimit(n int) Options {
-	return jsonopts.DepthLimit(max(n, 0))
-}
-*/
diff --git a/src/encoding/json/jsontext/pools.go b/src/encoding/json/jsontext/pools.go
deleted file mode 100644
index 4f9e0ea410ccd2..00000000000000
--- a/src/encoding/json/jsontext/pools.go
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"io"
-	"math/bits"
-	"sync"
-)
-
-// TODO(https://go.dev/issue/47657): Use sync.PoolOf.
-
-var (
-	// This owns the internal buffer since there is no io.Writer to output to.
-	// Since the buffer can get arbitrarily large in normal usage,
-	// there is statistical tracking logic to determine whether to recycle
-	// the internal buffer or not based on a history of utilization.
-	bufferedEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }}
-
-	// This owns the internal buffer, but it is only used to temporarily store
-	// buffered JSON before flushing it to the underlying io.Writer.
-	// In a sufficiently efficient streaming mode, we do not expect the buffer
-	// to grow arbitrarily large. Thus, we avoid recycling large buffers.
-	streamingEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }}
-
-	// This does not own the internal buffer since
-	// it is taken directly from the provided bytes.Buffer.
-	bytesBufferEncoderPool = &sync.Pool{New: func() any { return new(Encoder) }}
-)
-
-// bufferStatistics is statistics to track buffer utilization.
-// It is used to determine whether to recycle a buffer or not
-// to avoid https://go.dev/issue/23199.
-type bufferStatistics struct {
-	strikes int // number of times the buffer was under-utilized
-	prevLen int // length of previous buffer
-}
-
-func getBufferedEncoder(opts ...Options) *Encoder {
-	e := bufferedEncoderPool.Get().(*Encoder)
-	if e.s.Buf == nil {
-		// Round up to nearest 2ⁿ to make best use of malloc size classes.
-		// See runtime/sizeclasses.go on Go1.15.
-		// Logical OR with 63 to ensure 64 as the minimum buffer size.
-		n := 1 << bits.Len(uint(e.s.bufStats.prevLen|63))
-		e.s.Buf = make([]byte, 0, n)
-	}
-	e.s.reset(e.s.Buf[:0], nil, opts...)
-	return e
-}
-func putBufferedEncoder(e *Encoder) {
-	// Recycle large buffers only if sufficiently utilized.
-	// If a buffer is under-utilized enough times sequentially,
-	// then it is discarded, ensuring that a single large buffer
-	// won't be kept alive by a continuous stream of small usages.
-	//
-	// The worst case utilization is computed as:
-	//	MIN_UTILIZATION_THRESHOLD / (1 + MAX_NUM_STRIKES)
-	//
-	// For the constants chosen below, this is (25%)/(1+4) ⇒ 5%.
-	// This may seem low, but it ensures a lower bound on
-	// the absolute worst-case utilization. Without this check,
-	// this would be theoretically 0%, which is infinitely worse.
-	//
-	// See https://go.dev/issue/27735.
-	switch {
-	case cap(e.s.Buf) <= 4<<10: // always recycle buffers smaller than 4KiB
-		e.s.bufStats.strikes = 0
-	case cap(e.s.Buf)/4 <= len(e.s.Buf): // at least 25% utilization
-		e.s.bufStats.strikes = 0
-	case e.s.bufStats.strikes < 4: // at most 4 strikes
-		e.s.bufStats.strikes++
-	default: // discard the buffer; too large and too often under-utilized
-		e.s.bufStats.strikes = 0
-		e.s.bufStats.prevLen = len(e.s.Buf) // heuristic for size to allocate next time
-		e.s.Buf = nil
-	}
-	bufferedEncoderPool.Put(e)
-}
-
-func getStreamingEncoder(w io.Writer, opts ...Options) *Encoder {
-	if _, ok := w.(*bytes.Buffer); ok {
-		e := bytesBufferEncoderPool.Get().(*Encoder)
-		e.s.reset(nil, w, opts...) // buffer taken from bytes.Buffer
-		return e
-	} else {
-		e := streamingEncoderPool.Get().(*Encoder)
-		e.s.reset(e.s.Buf[:0], w, opts...) // preserve existing buffer
-		return e
-	}
-}
-func putStreamingEncoder(e *Encoder) {
-	if _, ok := e.s.wr.(*bytes.Buffer); ok {
-		bytesBufferEncoderPool.Put(e)
-	} else {
-		if cap(e.s.Buf) > 64<<10 {
-			e.s.Buf = nil // avoid pinning arbitrarily large amounts of memory
-		}
-		streamingEncoderPool.Put(e)
-	}
-}
-
-var (
-	// This does not own the internal buffer since it is externally provided.
-	bufferedDecoderPool = &sync.Pool{New: func() any { return new(Decoder) }}
-
-	// This owns the internal buffer, but it is only used to temporarily store
-	// buffered JSON fetched from the underlying io.Reader.
-	// In a sufficiently efficient streaming mode, we do not expect the buffer
-	// to grow arbitrarily large. Thus, we avoid recycling large buffers.
-	streamingDecoderPool = &sync.Pool{New: func() any { return new(Decoder) }}
-
-	// This does not own the internal buffer since
-	// it is taken directly from the provided bytes.Buffer.
-	bytesBufferDecoderPool = bufferedDecoderPool
-)
-
-func getBufferedDecoder(b []byte, opts ...Options) *Decoder {
-	d := bufferedDecoderPool.Get().(*Decoder)
-	d.s.reset(b, nil, opts...)
-	return d
-}
-func putBufferedDecoder(d *Decoder) {
-	bufferedDecoderPool.Put(d)
-}
-
-func getStreamingDecoder(r io.Reader, opts ...Options) *Decoder {
-	if _, ok := r.(*bytes.Buffer); ok {
-		d := bytesBufferDecoderPool.Get().(*Decoder)
-		d.s.reset(nil, r, opts...) // buffer taken from bytes.Buffer
-		return d
-	} else {
-		d := streamingDecoderPool.Get().(*Decoder)
-		d.s.reset(d.s.buf[:0], r, opts...) // preserve existing buffer
-		return d
-	}
-}
-func putStreamingDecoder(d *Decoder) {
-	if _, ok := d.s.rd.(*bytes.Buffer); ok {
-		bytesBufferDecoderPool.Put(d)
-	} else {
-		if cap(d.s.buf) > 64<<10 {
-			d.s.buf = nil // avoid pinning arbitrarily large amounts of memory
-		}
-		streamingDecoderPool.Put(d)
-	}
-}
diff --git a/src/encoding/json/jsontext/quote.go b/src/encoding/json/jsontext/quote.go
deleted file mode 100644
index 5ecfdbc21156e3..00000000000000
--- a/src/encoding/json/jsontext/quote.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonwire"
-)
-
-// AppendQuote appends a double-quoted JSON string literal representing src
-// to dst and returns the extended buffer.
-// It uses the minimal string representation per RFC 8785, section 3.2.2.2.
-// Invalid UTF-8 bytes are replaced with the Unicode replacement character
-// and an error is returned at the end indicating the presence of invalid UTF-8.
-// The dst must not overlap with the src.
-func AppendQuote[Bytes ~[]byte | ~string](dst []byte, src Bytes) ([]byte, error) {
-	dst, err := jsonwire.AppendQuote(dst, src, &jsonflags.Flags{})
-	if err != nil {
-		err = &SyntacticError{Err: err}
-	}
-	return dst, err
-}
-
-// AppendUnquote appends the decoded interpretation of src as a
-// double-quoted JSON string literal to dst and returns the extended buffer.
-// The input src must be a JSON string without any surrounding whitespace.
-// Invalid UTF-8 bytes are replaced with the Unicode replacement character
-// and an error is returned at the end indicating the presence of invalid UTF-8.
-// Any trailing bytes after the JSON string literal results in an error.
-// The dst must not overlap with the src.
-func AppendUnquote[Bytes ~[]byte | ~string](dst []byte, src Bytes) ([]byte, error) {
-	dst, err := jsonwire.AppendUnquote(dst, src)
-	if err != nil {
-		err = &SyntacticError{Err: err}
-	}
-	return dst, err
-}
diff --git a/src/encoding/json/jsontext/state.go b/src/encoding/json/jsontext/state.go
deleted file mode 100644
index 1e8b4f22dbf288..00000000000000
--- a/src/encoding/json/jsontext/state.go
+++ /dev/null
@@ -1,828 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"errors"
-	"iter"
-	"math"
-	"strconv"
-	"strings"
-	"unicode/utf8"
-
-	"encoding/json/internal/jsonwire"
-)
-
-// ErrDuplicateName indicates that a JSON token could not be
-// encoded or decoded because it results in a duplicate JSON object name.
-// This error is directly wrapped within a [SyntacticError] when produced.
-//
-// The name of a duplicate JSON object member can be extracted as:
-//
-//	err := ...
-//	var serr jsontext.SyntacticError
-//	if errors.As(err, &serr) && serr.Err == jsontext.ErrDuplicateName {
-//		ptr := serr.JSONPointer // JSON pointer to duplicate name
-//		name := ptr.LastToken() // duplicate name itself
-//		...
-//	}
-//
-// This error is only returned if [AllowDuplicateNames] is false.
-var ErrDuplicateName = errors.New("duplicate object member name")
-
-// ErrNonStringName indicates that a JSON token could not be
-// encoded or decoded because it is not a string,
-// as required for JSON object names according to RFC 8259, section 4.
-// This error is directly wrapped within a [SyntacticError] when produced.
-var ErrNonStringName = errors.New("object member name must be a string")
-
-var (
-	errMissingValue  = errors.New("missing value after object name")
-	errMismatchDelim = errors.New("mismatching structural token for object or array")
-	errMaxDepth      = errors.New("exceeded max depth")
-
-	errInvalidNamespace = errors.New("object namespace is in an invalid state")
-)
-
-// Per RFC 8259, section 9, implementations may enforce a maximum depth.
-// Such a limit is necessary to prevent stack overflows.
-const maxNestingDepth = 10000
-
-type state struct {
-	// Tokens validates whether the next token kind is valid.
-	Tokens stateMachine
-
-	// Names is a stack of object names.
-	Names objectNameStack
-
-	// Namespaces is a stack of object namespaces.
-	// For performance reasons, Encoder or Decoder may not update this
-	// if Marshal or Unmarshal is able to track names in a more efficient way.
-	// See makeMapArshaler and makeStructArshaler.
-	// Not used if AllowDuplicateNames is true.
-	Namespaces objectNamespaceStack
-}
-
-// needObjectValue reports whether the next token should be an object value.
-// This method is used by [wrapSyntacticError].
-func (s *state) needObjectValue() bool {
-	return s.Tokens.Last.needObjectValue()
-}
-
-func (s *state) reset() {
-	s.Tokens.reset()
-	s.Names.reset()
-	s.Namespaces.reset()
-}
-
-// Pointer is a JSON Pointer (RFC 6901) that references a particular JSON value
-// relative to the root of the top-level JSON value.
-//
-// A Pointer is a slash-separated list of tokens, where each token is
-// either a JSON object name or an index to a JSON array element
-// encoded as a base-10 integer value.
-// It is impossible to distinguish between an array index and an object name
-// (that happens to be an base-10 encoded integer) without also knowing
-// the structure of the top-level JSON value that the pointer refers to.
-//
-// There is exactly one representation of a pointer to a particular value,
-// so comparability of Pointer values is equivalent to checking whether
-// they both point to the exact same value.
-type Pointer string
-
-// IsValid reports whether p is a valid JSON Pointer according to RFC 6901.
-// Note that the concatenation of two valid pointers produces a valid pointer.
-func (p Pointer) IsValid() bool {
-	for i, r := range p {
-		switch {
-		case r == '~' && (i+1 == len(p) || (p[i+1] != '0' && p[i+1] != '1')):
-			return false // invalid escape
-		case r == '\ufffd' && !strings.HasPrefix(string(p[i:]), "\ufffd"):
-			return false // invalid UTF-8
-		}
-	}
-	return len(p) == 0 || p[0] == '/'
-}
-
-// Contains reports whether the JSON value that p points to
-// is equal to or contains the JSON value that pc points to.
-func (p Pointer) Contains(pc Pointer) bool {
-	// Invariant: len(p) <= len(pc) if p.Contains(pc)
-	suffix, ok := strings.CutPrefix(string(pc), string(p))
-	return ok && (suffix == "" || suffix[0] == '/')
-}
-
-// Parent strips off the last token and returns the remaining pointer.
-// The parent of an empty p is an empty string.
-func (p Pointer) Parent() Pointer {
-	return p[:max(strings.LastIndexByte(string(p), '/'), 0)]
-}
-
-// LastToken returns the last token in the pointer.
-// The last token of an empty p is an empty string.
-func (p Pointer) LastToken() string {
-	last := p[max(strings.LastIndexByte(string(p), '/'), 0):]
-	return unescapePointerToken(strings.TrimPrefix(string(last), "/"))
-}
-
-// AppendToken appends a token to the end of p and returns the full pointer.
-func (p Pointer) AppendToken(tok string) Pointer {
-	return Pointer(appendEscapePointerName([]byte(p+"/"), tok))
-}
-
-// TODO: Add Pointer.AppendTokens,
-// but should this take in a ...string or an iter.Seq[string]?
-
-// Tokens returns an iterator over the reference tokens in the JSON pointer,
-// starting from the first token until the last token (unless stopped early).
-func (p Pointer) Tokens() iter.Seq[string] {
-	return func(yield func(string) bool) {
-		for len(p) > 0 {
-			p = Pointer(strings.TrimPrefix(string(p), "/"))
-			i := min(uint(strings.IndexByte(string(p), '/')), uint(len(p)))
-			if !yield(unescapePointerToken(string(p)[:i])) {
-				return
-			}
-			p = p[i:]
-		}
-	}
-}
-
-func unescapePointerToken(token string) string {
-	if strings.Contains(token, "~") {
-		// Per RFC 6901, section 3, unescape '~' and '/' characters.
-		token = strings.ReplaceAll(token, "~1", "/")
-		token = strings.ReplaceAll(token, "~0", "~")
-	}
-	return token
-}
-
-// appendStackPointer appends a JSON Pointer (RFC 6901) to the current value.
-//
-//   - If where is -1, then it points to the previously processed token.
-//
-//   - If where is 0, then it points to the parent JSON object or array,
-//     or an object member if in-between an object member key and value.
-//     This is useful when the position is ambiguous whether
-//     we are interested in the previous or next token, or
-//     when we are uncertain whether the next token
-//     continues or terminates the current object or array.
-//
-//   - If where is +1, then it points to the next expected value,
-//     assuming that it continues the current JSON object or array.
-//     As a special case, if the next token is a JSON object name,
-//     then it points to the parent JSON object.
-//
-// Invariant: Must call s.names.copyQuotedBuffer beforehand.
-func (s state) appendStackPointer(b []byte, where int) []byte {
-	var objectDepth int
-	for i := 1; i < s.Tokens.Depth(); i++ {
-		e := s.Tokens.index(i)
-		arrayDelta := -1 // by default point to previous array element
-		if isLast := i == s.Tokens.Depth()-1; isLast {
-			switch {
-			case where < 0 && e.Length() == 0 || where == 0 && !e.needObjectValue() || where > 0 && e.NeedObjectName():
-				return b
-			case where > 0 && e.isArray():
-				arrayDelta = 0 // point to next array element
-			}
-		}
-		switch {
-		case e.isObject():
-			b = appendEscapePointerName(append(b, '/'), s.Names.getUnquoted(objectDepth))
-			objectDepth++
-		case e.isArray():
-			b = strconv.AppendUint(append(b, '/'), uint64(e.Length()+int64(arrayDelta)), 10)
-		}
-	}
-	return b
-}
-
-func appendEscapePointerName[Bytes ~[]byte | ~string](b []byte, name Bytes) []byte {
-	for _, r := range string(name) {
-		// Per RFC 6901, section 3, escape '~' and '/' characters.
-		switch r {
-		case '~':
-			b = append(b, "~0"...)
-		case '/':
-			b = append(b, "~1"...)
-		default:
-			b = utf8.AppendRune(b, r)
-		}
-	}
-	return b
-}
-
-// stateMachine is a push-down automaton that validates whether
-// a sequence of tokens is valid or not according to the JSON grammar.
-// It is useful for both encoding and decoding.
-//
-// It is a stack where each entry represents a nested JSON object or array.
-// The stack has a minimum depth of 1 where the first level is a
-// virtual JSON array to handle a stream of top-level JSON values.
-// The top-level virtual JSON array is special in that it doesn't require commas
-// between each JSON value.
-//
-// For performance, most methods are carefully written to be inlinable.
-// The zero value is a valid state machine ready for use.
-type stateMachine struct {
-	Stack []stateEntry
-	Last  stateEntry
-}
-
-// reset resets the state machine.
-// The machine always starts with a minimum depth of 1.
-func (m *stateMachine) reset() {
-	m.Stack = m.Stack[:0]
-	if cap(m.Stack) > 1<<10 {
-		m.Stack = nil
-	}
-	m.Last = stateTypeArray
-}
-
-// Depth is the current nested depth of JSON objects and arrays.
-// It is one-indexed (i.e., top-level values have a depth of 1).
-func (m stateMachine) Depth() int {
-	return len(m.Stack) + 1
-}
-
-// index returns a reference to the ith entry.
-// It is only valid until the next push method call.
-func (m *stateMachine) index(i int) *stateEntry {
-	if i == len(m.Stack) {
-		return &m.Last
-	}
-	return &m.Stack[i]
-}
-
-// DepthLength reports the current nested depth and
-// the length of the last JSON object or array.
-func (m stateMachine) DepthLength() (int, int64) {
-	return m.Depth(), m.Last.Length()
-}
-
-// appendLiteral appends a JSON literal as the next token in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) appendLiteral() error {
-	switch {
-	case m.Last.NeedObjectName():
-		return ErrNonStringName
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	default:
-		m.Last.Increment()
-		return nil
-	}
-}
-
-// appendString appends a JSON string as the next token in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) appendString() error {
-	switch {
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	default:
-		m.Last.Increment()
-		return nil
-	}
-}
-
-// appendNumber appends a JSON number as the next token in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) appendNumber() error {
-	return m.appendLiteral()
-}
-
-// pushObject appends a JSON start object token as next in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) pushObject() error {
-	switch {
-	case m.Last.NeedObjectName():
-		return ErrNonStringName
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	case len(m.Stack) == maxNestingDepth:
-		return errMaxDepth
-	default:
-		m.Last.Increment()
-		m.Stack = append(m.Stack, m.Last)
-		m.Last = stateTypeObject
-		return nil
-	}
-}
-
-// popObject appends a JSON end object token as next in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) popObject() error {
-	switch {
-	case !m.Last.isObject():
-		return errMismatchDelim
-	case m.Last.needObjectValue():
-		return errMissingValue
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	default:
-		m.Last = m.Stack[len(m.Stack)-1]
-		m.Stack = m.Stack[:len(m.Stack)-1]
-		return nil
-	}
-}
-
-// pushArray appends a JSON start array token as next in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) pushArray() error {
-	switch {
-	case m.Last.NeedObjectName():
-		return ErrNonStringName
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	case len(m.Stack) == maxNestingDepth:
-		return errMaxDepth
-	default:
-		m.Last.Increment()
-		m.Stack = append(m.Stack, m.Last)
-		m.Last = stateTypeArray
-		return nil
-	}
-}
-
-// popArray appends a JSON end array token as next in the sequence.
-// If an error is returned, the state is not mutated.
-func (m *stateMachine) popArray() error {
-	switch {
-	case !m.Last.isArray() || len(m.Stack) == 0: // forbid popping top-level virtual JSON array
-		return errMismatchDelim
-	case !m.Last.isValidNamespace():
-		return errInvalidNamespace
-	default:
-		m.Last = m.Stack[len(m.Stack)-1]
-		m.Stack = m.Stack[:len(m.Stack)-1]
-		return nil
-	}
-}
-
-// NeedIndent reports whether indent whitespace should be injected.
-// A zero value means that no whitespace should be injected.
-// A positive value means '\n', indentPrefix, and (n-1) copies of indentBody
-// should be appended to the output immediately before the next token.
-func (m stateMachine) NeedIndent(next Kind) (n int) {
-	willEnd := next == '}' || next == ']'
-	switch {
-	case m.Depth() == 1:
-		return 0 // top-level values are never indented
-	case m.Last.Length() == 0 && willEnd:
-		return 0 // an empty object or array is never indented
-	case m.Last.Length() == 0 || m.Last.needImplicitComma(next):
-		return m.Depth()
-	case willEnd:
-		return m.Depth() - 1
-	default:
-		return 0
-	}
-}
-
-// MayAppendDelim appends a colon or comma that may precede the next token.
-func (m stateMachine) MayAppendDelim(b []byte, next Kind) []byte {
-	switch {
-	case m.Last.needImplicitColon():
-		return append(b, ':')
-	case m.Last.needImplicitComma(next) && len(m.Stack) != 0: // comma not needed for top-level values
-		return append(b, ',')
-	default:
-		return b
-	}
-}
-
-// needDelim reports whether a colon or comma token should be implicitly emitted
-// before the next token of the specified kind.
-// A zero value means no delimiter should be emitted.
-func (m stateMachine) needDelim(next Kind) (delim byte) {
-	switch {
-	case m.Last.needImplicitColon():
-		return ':'
-	case m.Last.needImplicitComma(next) && len(m.Stack) != 0: // comma not needed for top-level values
-		return ','
-	default:
-		return 0
-	}
-}
-
-// InvalidateDisabledNamespaces marks all disabled namespaces as invalid.
-//
-// For efficiency, Marshal and Unmarshal may disable namespaces since there are
-// more efficient ways to track duplicate names. However, if an error occurs,
-// the namespaces in Encoder or Decoder will be left in an inconsistent state.
-// Mark the namespaces as invalid so that future method calls on
-// Encoder or Decoder will return an error.
-func (m *stateMachine) InvalidateDisabledNamespaces() {
-	for i := range m.Depth() {
-		e := m.index(i)
-		if !e.isActiveNamespace() {
-			e.invalidateNamespace()
-		}
-	}
-}
-
-// stateEntry encodes several artifacts within a single unsigned integer:
-//   - whether this represents a JSON object or array,
-//   - whether this object should check for duplicate names, and
-//   - how many elements are in this JSON object or array.
-type stateEntry uint64
-
-const (
-	// The type mask (1 bit) records whether this is a JSON object or array.
-	stateTypeMask   stateEntry = 0x8000_0000_0000_0000
-	stateTypeObject stateEntry = 0x8000_0000_0000_0000
-	stateTypeArray  stateEntry = 0x0000_0000_0000_0000
-
-	// The name check mask (2 bit) records whether to update
-	// the namespaces for the current JSON object and
-	// whether the namespace is valid.
-	stateNamespaceMask    stateEntry = 0x6000_0000_0000_0000
-	stateDisableNamespace stateEntry = 0x4000_0000_0000_0000
-	stateInvalidNamespace stateEntry = 0x2000_0000_0000_0000
-
-	// The count mask (61 bits) records the number of elements.
-	stateCountMask    stateEntry = 0x1fff_ffff_ffff_ffff
-	stateCountLSBMask stateEntry = 0x0000_0000_0000_0001
-	stateCountOdd     stateEntry = 0x0000_0000_0000_0001
-	stateCountEven    stateEntry = 0x0000_0000_0000_0000
-)
-
-// Length reports the number of elements in the JSON object or array.
-// Each name and value in an object entry is treated as a separate element.
-func (e stateEntry) Length() int64 {
-	return int64(e & stateCountMask)
-}
-
-// isObject reports whether this is a JSON object.
-func (e stateEntry) isObject() bool {
-	return e&stateTypeMask == stateTypeObject
-}
-
-// isArray reports whether this is a JSON array.
-func (e stateEntry) isArray() bool {
-	return e&stateTypeMask == stateTypeArray
-}
-
-// NeedObjectName reports whether the next token must be a JSON string,
-// which is necessary for JSON object names.
-func (e stateEntry) NeedObjectName() bool {
-	return e&(stateTypeMask|stateCountLSBMask) == stateTypeObject|stateCountEven
-}
-
-// needImplicitColon reports whether an colon should occur next,
-// which always occurs after JSON object names.
-func (e stateEntry) needImplicitColon() bool {
-	return e.needObjectValue()
-}
-
-// needObjectValue reports whether the next token must be a JSON value,
-// which is necessary after every JSON object name.
-func (e stateEntry) needObjectValue() bool {
-	return e&(stateTypeMask|stateCountLSBMask) == stateTypeObject|stateCountOdd
-}
-
-// needImplicitComma reports whether an comma should occur next,
-// which always occurs after a value in a JSON object or array
-// before the next value (or name).
-func (e stateEntry) needImplicitComma(next Kind) bool {
-	return !e.needObjectValue() && e.Length() > 0 && next != '}' && next != ']'
-}
-
-// Increment increments the number of elements for the current object or array.
-// This assumes that overflow won't practically be an issue since
-// 1< 0.
-func (e *stateEntry) decrement() {
-	(*e)--
-}
-
-// DisableNamespace disables the JSON object namespace such that the
-// Encoder or Decoder no longer updates the namespace.
-func (e *stateEntry) DisableNamespace() {
-	*e |= stateDisableNamespace
-}
-
-// isActiveNamespace reports whether the JSON object namespace is actively
-// being updated and used for duplicate name checks.
-func (e stateEntry) isActiveNamespace() bool {
-	return e&(stateDisableNamespace) == 0
-}
-
-// invalidateNamespace marks the JSON object namespace as being invalid.
-func (e *stateEntry) invalidateNamespace() {
-	*e |= stateInvalidNamespace
-}
-
-// isValidNamespace reports whether the JSON object namespace is valid.
-func (e stateEntry) isValidNamespace() bool {
-	return e&(stateInvalidNamespace) == 0
-}
-
-// objectNameStack is a stack of names when descending into a JSON object.
-// In contrast to objectNamespaceStack, this only has to remember a single name
-// per JSON object.
-//
-// This data structure may contain offsets to encodeBuffer or decodeBuffer.
-// It violates clean abstraction of layers, but is significantly more efficient.
-// This ensures that popping and pushing in the common case is a trivial
-// push/pop of an offset integer.
-//
-// The zero value is an empty names stack ready for use.
-type objectNameStack struct {
-	// offsets is a stack of offsets for each name.
-	// A non-negative offset is the ending offset into the local names buffer.
-	// A negative offset is the bit-wise inverse of a starting offset into
-	// a remote buffer (e.g., encodeBuffer or decodeBuffer).
-	// A math.MinInt offset at the end implies that the last object is empty.
-	// Invariant: Positive offsets always occur before negative offsets.
-	offsets []int
-	// unquotedNames is a back-to-back concatenation of names.
-	unquotedNames []byte
-}
-
-func (ns *objectNameStack) reset() {
-	ns.offsets = ns.offsets[:0]
-	ns.unquotedNames = ns.unquotedNames[:0]
-	if cap(ns.offsets) > 1<<6 {
-		ns.offsets = nil // avoid pinning arbitrarily large amounts of memory
-	}
-	if cap(ns.unquotedNames) > 1<<10 {
-		ns.unquotedNames = nil // avoid pinning arbitrarily large amounts of memory
-	}
-}
-
-func (ns *objectNameStack) length() int {
-	return len(ns.offsets)
-}
-
-// getUnquoted retrieves the ith unquoted name in the stack.
-// It returns an empty string if the last object is empty.
-//
-// Invariant: Must call copyQuotedBuffer beforehand.
-func (ns *objectNameStack) getUnquoted(i int) []byte {
-	ns.ensureCopiedBuffer()
-	if i == 0 {
-		return ns.unquotedNames[:ns.offsets[0]]
-	} else {
-		return ns.unquotedNames[ns.offsets[i-1]:ns.offsets[i-0]]
-	}
-}
-
-// invalidOffset indicates that the last JSON object currently has no name.
-const invalidOffset = math.MinInt
-
-// push descends into a nested JSON object.
-func (ns *objectNameStack) push() {
-	ns.offsets = append(ns.offsets, invalidOffset)
-}
-
-// ReplaceLastQuotedOffset replaces the last name with the starting offset
-// to the quoted name in some remote buffer. All offsets provided must be
-// relative to the same buffer until copyQuotedBuffer is called.
-func (ns *objectNameStack) ReplaceLastQuotedOffset(i int) {
-	// Use bit-wise inversion instead of naive multiplication by -1 to avoid
-	// ambiguity regarding zero (which is a valid offset into the names field).
-	// Bit-wise inversion is mathematically equivalent to -i-1,
-	// such that 0 becomes -1, 1 becomes -2, and so forth.
-	// This ensures that remote offsets are always negative.
-	ns.offsets[len(ns.offsets)-1] = ^i
-}
-
-// replaceLastUnquotedName replaces the last name with the provided name.
-//
-// Invariant: Must call copyQuotedBuffer beforehand.
-func (ns *objectNameStack) replaceLastUnquotedName(s string) {
-	ns.ensureCopiedBuffer()
-	var startOffset int
-	if len(ns.offsets) > 1 {
-		startOffset = ns.offsets[len(ns.offsets)-2]
-	}
-	ns.unquotedNames = append(ns.unquotedNames[:startOffset], s...)
-	ns.offsets[len(ns.offsets)-1] = len(ns.unquotedNames)
-}
-
-// clearLast removes any name in the last JSON object.
-// It is semantically equivalent to ns.push followed by ns.pop.
-func (ns *objectNameStack) clearLast() {
-	ns.offsets[len(ns.offsets)-1] = invalidOffset
-}
-
-// pop ascends out of a nested JSON object.
-func (ns *objectNameStack) pop() {
-	ns.offsets = ns.offsets[:len(ns.offsets)-1]
-}
-
-// copyQuotedBuffer copies names from the remote buffer into the local names
-// buffer so that there are no more offset references into the remote buffer.
-// This allows the remote buffer to change contents without affecting
-// the names that this data structure is trying to remember.
-func (ns *objectNameStack) copyQuotedBuffer(b []byte) {
-	// Find the first negative offset.
-	var i int
-	for i = len(ns.offsets) - 1; i >= 0 && ns.offsets[i] < 0; i-- {
-		continue
-	}
-
-	// Copy each name from the remote buffer into the local buffer.
-	for i = i + 1; i < len(ns.offsets); i++ {
-		if i == len(ns.offsets)-1 && ns.offsets[i] == invalidOffset {
-			if i == 0 {
-				ns.offsets[i] = 0
-			} else {
-				ns.offsets[i] = ns.offsets[i-1]
-			}
-			break // last JSON object had a push without any names
-		}
-
-		// As a form of Hyrum proofing, we write an invalid character into the
-		// buffer to make misuse of Decoder.ReadToken more obvious.
-		// We need to undo that mutation here.
-		quotedName := b[^ns.offsets[i]:]
-		if quotedName[0] == invalidateBufferByte {
-			quotedName[0] = '"'
-		}
-
-		// Append the unquoted name to the local buffer.
-		var startOffset int
-		if i > 0 {
-			startOffset = ns.offsets[i-1]
-		}
-		if n := jsonwire.ConsumeSimpleString(quotedName); n > 0 {
-			ns.unquotedNames = append(ns.unquotedNames[:startOffset], quotedName[len(`"`):n-len(`"`)]...)
-		} else {
-			ns.unquotedNames, _ = jsonwire.AppendUnquote(ns.unquotedNames[:startOffset], quotedName)
-		}
-		ns.offsets[i] = len(ns.unquotedNames)
-	}
-}
-
-func (ns *objectNameStack) ensureCopiedBuffer() {
-	if len(ns.offsets) > 0 && ns.offsets[len(ns.offsets)-1] < 0 {
-		panic("BUG: copyQuotedBuffer not called beforehand")
-	}
-}
-
-// objectNamespaceStack is a stack of object namespaces.
-// This data structure assists in detecting duplicate names.
-type objectNamespaceStack []objectNamespace
-
-// reset resets the object namespace stack.
-func (nss *objectNamespaceStack) reset() {
-	if cap(*nss) > 1<<10 {
-		*nss = nil
-	}
-	*nss = (*nss)[:0]
-}
-
-// push starts a new namespace for a nested JSON object.
-func (nss *objectNamespaceStack) push() {
-	if cap(*nss) > len(*nss) {
-		*nss = (*nss)[:len(*nss)+1]
-		nss.Last().reset()
-	} else {
-		*nss = append(*nss, objectNamespace{})
-	}
-}
-
-// Last returns a pointer to the last JSON object namespace.
-func (nss objectNamespaceStack) Last() *objectNamespace {
-	return &nss[len(nss)-1]
-}
-
-// pop terminates the namespace for a nested JSON object.
-func (nss *objectNamespaceStack) pop() {
-	*nss = (*nss)[:len(*nss)-1]
-}
-
-// objectNamespace is the namespace for a JSON object.
-// In contrast to objectNameStack, this needs to remember a all names
-// per JSON object.
-//
-// The zero value is an empty namespace ready for use.
-type objectNamespace struct {
-	// It relies on a linear search over all the names before switching
-	// to use a Go map for direct lookup.
-
-	// endOffsets is a list of offsets to the end of each name in buffers.
-	// The length of offsets is the number of names in the namespace.
-	endOffsets []uint
-	// allUnquotedNames is a back-to-back concatenation of every name in the namespace.
-	allUnquotedNames []byte
-	// mapNames is a Go map containing every name in the namespace.
-	// Only valid if non-nil.
-	mapNames map[string]struct{}
-}
-
-// reset resets the namespace to be empty.
-func (ns *objectNamespace) reset() {
-	ns.endOffsets = ns.endOffsets[:0]
-	ns.allUnquotedNames = ns.allUnquotedNames[:0]
-	ns.mapNames = nil
-	if cap(ns.endOffsets) > 1<<6 {
-		ns.endOffsets = nil // avoid pinning arbitrarily large amounts of memory
-	}
-	if cap(ns.allUnquotedNames) > 1<<10 {
-		ns.allUnquotedNames = nil // avoid pinning arbitrarily large amounts of memory
-	}
-}
-
-// length reports the number of names in the namespace.
-func (ns *objectNamespace) length() int {
-	return len(ns.endOffsets)
-}
-
-// getUnquoted retrieves the ith unquoted name in the namespace.
-func (ns *objectNamespace) getUnquoted(i int) []byte {
-	if i == 0 {
-		return ns.allUnquotedNames[:ns.endOffsets[0]]
-	} else {
-		return ns.allUnquotedNames[ns.endOffsets[i-1]:ns.endOffsets[i-0]]
-	}
-}
-
-// lastUnquoted retrieves the last name in the namespace.
-func (ns *objectNamespace) lastUnquoted() []byte {
-	return ns.getUnquoted(ns.length() - 1)
-}
-
-// insertQuoted inserts a name and reports whether it was inserted,
-// which only occurs if name is not already in the namespace.
-// The provided name must be a valid JSON string.
-func (ns *objectNamespace) insertQuoted(name []byte, isVerbatim bool) bool {
-	if isVerbatim {
-		name = name[len(`"`) : len(name)-len(`"`)]
-	}
-	return ns.insert(name, !isVerbatim)
-}
-func (ns *objectNamespace) InsertUnquoted(name []byte) bool {
-	return ns.insert(name, false)
-}
-func (ns *objectNamespace) insert(name []byte, quoted bool) bool {
-	var allNames []byte
-	if quoted {
-		allNames, _ = jsonwire.AppendUnquote(ns.allUnquotedNames, name)
-	} else {
-		allNames = append(ns.allUnquotedNames, name...)
-	}
-	name = allNames[len(ns.allUnquotedNames):]
-
-	// Switch to a map if the buffer is too large for linear search.
-	// This does not add the current name to the map.
-	if ns.mapNames == nil && (ns.length() > 64 || len(ns.allUnquotedNames) > 1024) {
-		ns.mapNames = make(map[string]struct{})
-		var startOffset uint
-		for _, endOffset := range ns.endOffsets {
-			name := ns.allUnquotedNames[startOffset:endOffset]
-			ns.mapNames[string(name)] = struct{}{} // allocates a new string
-			startOffset = endOffset
-		}
-	}
-
-	if ns.mapNames == nil {
-		// Perform linear search over the buffer to find matching names.
-		// It provides O(n) lookup, but does not require any allocations.
-		var startOffset uint
-		for _, endOffset := range ns.endOffsets {
-			if string(ns.allUnquotedNames[startOffset:endOffset]) == string(name) {
-				return false
-			}
-			startOffset = endOffset
-		}
-	} else {
-		// Use the map if it is populated.
-		// It provides O(1) lookup, but requires a string allocation per name.
-		if _, ok := ns.mapNames[string(name)]; ok {
-			return false
-		}
-		ns.mapNames[string(name)] = struct{}{} // allocates a new string
-	}
-
-	ns.allUnquotedNames = allNames
-	ns.endOffsets = append(ns.endOffsets, uint(len(ns.allUnquotedNames)))
-	return true
-}
-
-// removeLast removes the last name in the namespace.
-func (ns *objectNamespace) removeLast() {
-	if ns.mapNames != nil {
-		delete(ns.mapNames, string(ns.lastUnquoted()))
-	}
-	if ns.length()-1 == 0 {
-		ns.endOffsets = ns.endOffsets[:0]
-		ns.allUnquotedNames = ns.allUnquotedNames[:0]
-	} else {
-		ns.endOffsets = ns.endOffsets[:ns.length()-1]
-		ns.allUnquotedNames = ns.allUnquotedNames[:ns.endOffsets[ns.length()-1]]
-	}
-}
diff --git a/src/encoding/json/jsontext/state_test.go b/src/encoding/json/jsontext/state_test.go
deleted file mode 100644
index c227600945e122..00000000000000
--- a/src/encoding/json/jsontext/state_test.go
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"fmt"
-	"slices"
-	"strings"
-	"testing"
-	"unicode/utf8"
-)
-
-func TestPointer(t *testing.T) {
-	tests := []struct {
-		in         Pointer
-		wantParent Pointer
-		wantLast   string
-		wantTokens []string
-		wantValid  bool
-	}{
-		{"", "", "", nil, true},
-		{"a", "", "a", []string{"a"}, false},
-		{"~", "", "~", []string{"~"}, false},
-		{"/a", "", "a", []string{"a"}, true},
-		{"/foo/bar", "/foo", "bar", []string{"foo", "bar"}, true},
-		{"///", "//", "", []string{"", "", ""}, true},
-		{"/~0~1", "", "~/", []string{"~/"}, true},
-		{"/\xde\xad\xbe\xef", "", "\xde\xad\xbe\xef", []string{"\xde\xad\xbe\xef"}, false},
-	}
-	for _, tt := range tests {
-		if got := tt.in.Parent(); got != tt.wantParent {
-			t.Errorf("Pointer(%q).Parent = %q, want %q", tt.in, got, tt.wantParent)
-		}
-		if got := tt.in.LastToken(); got != tt.wantLast {
-			t.Errorf("Pointer(%q).Last = %q, want %q", tt.in, got, tt.wantLast)
-		}
-		if strings.HasPrefix(string(tt.in), "/") {
-			wantRoundtrip := tt.in
-			if !utf8.ValidString(string(wantRoundtrip)) {
-				// Replace bytes of invalid UTF-8 with Unicode replacement character.
-				wantRoundtrip = Pointer([]rune(wantRoundtrip))
-			}
-			if got := tt.in.Parent().AppendToken(tt.in.LastToken()); got != wantRoundtrip {
-				t.Errorf("Pointer(%q).Parent().AppendToken(LastToken()) = %q, want %q", tt.in, got, tt.in)
-			}
-			in := tt.in
-			for {
-				if (in + "x").Contains(tt.in) {
-					t.Errorf("Pointer(%q).Contains(%q) = true, want false", in+"x", tt.in)
-				}
-				if !in.Contains(tt.in) {
-					t.Errorf("Pointer(%q).Contains(%q) = false, want true", in, tt.in)
-				}
-				if in == in.Parent() {
-					break
-				}
-				in = in.Parent()
-			}
-		}
-		if got := slices.Collect(tt.in.Tokens()); !slices.Equal(got, tt.wantTokens) {
-			t.Errorf("Pointer(%q).Tokens = %q, want %q", tt.in, got, tt.wantTokens)
-		}
-		if got := tt.in.IsValid(); got != tt.wantValid {
-			t.Errorf("Pointer(%q).IsValid = %v, want %v", tt.in, got, tt.wantValid)
-		}
-	}
-}
-
-func TestStateMachine(t *testing.T) {
-	// To test a state machine, we pass an ordered sequence of operations and
-	// check whether the current state is as expected.
-	// The operation type is a union type of various possible operations,
-	// which either call mutating methods on the state machine or
-	// call accessor methods on state machine and verify the results.
-	type operation any
-	type (
-		// stackLengths checks the results of stateEntry.length accessors.
-		stackLengths []int64
-
-		// appendTokens is sequence of token kinds to append where
-		// none of them are expected to fail.
-		//
-		// For example: `[nft]` is equivalent to the following sequence:
-		//
-		//	pushArray()
-		//	appendLiteral()
-		//	appendString()
-		//	appendNumber()
-		//	popArray()
-		//
-		appendTokens string
-
-		// appendToken is a single token kind to append with the expected error.
-		appendToken struct {
-			kind Kind
-			want error
-		}
-
-		// needDelim checks the result of the needDelim accessor.
-		needDelim struct {
-			next Kind
-			want byte
-		}
-	)
-
-	// Each entry is a sequence of tokens to pass to the state machine.
-	tests := []struct {
-		label string
-		ops   []operation
-	}{{
-		"TopLevelValues",
-		[]operation{
-			stackLengths{0},
-			needDelim{'n', 0},
-			appendTokens(`nft`),
-			stackLengths{3},
-			needDelim{'"', 0},
-			appendTokens(`"0[]{}`),
-			stackLengths{7},
-		},
-	}, {
-		"ArrayValues",
-		[]operation{
-			stackLengths{0},
-			needDelim{'[', 0},
-			appendTokens(`[`),
-			stackLengths{1, 0},
-			needDelim{'n', 0},
-			appendTokens(`nft`),
-			stackLengths{1, 3},
-			needDelim{'"', ','},
-			appendTokens(`"0[]{}`),
-			stackLengths{1, 7},
-			needDelim{']', 0},
-			appendTokens(`]`),
-			stackLengths{1},
-		},
-	}, {
-		"ObjectValues",
-		[]operation{
-			stackLengths{0},
-			needDelim{'{', 0},
-			appendTokens(`{`),
-			stackLengths{1, 0},
-			needDelim{'"', 0},
-			appendTokens(`"`),
-			stackLengths{1, 1},
-			needDelim{'n', ':'},
-			appendTokens(`n`),
-			stackLengths{1, 2},
-			needDelim{'"', ','},
-			appendTokens(`"f"t`),
-			stackLengths{1, 6},
-			appendTokens(`"""0"[]"{}`),
-			stackLengths{1, 14},
-			needDelim{'}', 0},
-			appendTokens(`}`),
-			stackLengths{1},
-		},
-	}, {
-		"ObjectCardinality",
-		[]operation{
-			appendTokens(`{`),
-
-			// Appending any kind other than string for object name is an error.
-			appendToken{'n', ErrNonStringName},
-			appendToken{'f', ErrNonStringName},
-			appendToken{'t', ErrNonStringName},
-			appendToken{'0', ErrNonStringName},
-			appendToken{'{', ErrNonStringName},
-			appendToken{'[', ErrNonStringName},
-			appendTokens(`"`),
-
-			// Appending '}' without first appending any value is an error.
-			appendToken{'}', errMissingValue},
-			appendTokens(`"`),
-
-			appendTokens(`}`),
-		},
-	}, {
-		"MismatchingDelims",
-		[]operation{
-			appendToken{'}', errMismatchDelim}, // appending '}' without preceding '{'
-			appendTokens(`[[{`),
-			appendToken{']', errMismatchDelim}, // appending ']' that mismatches preceding '{'
-			appendTokens(`}]`),
-			appendToken{'}', errMismatchDelim}, // appending '}' that mismatches preceding '['
-			appendTokens(`]`),
-			appendToken{']', errMismatchDelim}, // appending ']' without preceding '['
-		},
-	}}
-
-	for _, tt := range tests {
-		t.Run(tt.label, func(t *testing.T) {
-			// Flatten appendTokens to sequence of appendToken entries.
-			var ops []operation
-			for _, op := range tt.ops {
-				if toks, ok := op.(appendTokens); ok {
-					for _, k := range []byte(toks) {
-						ops = append(ops, appendToken{Kind(k), nil})
-					}
-					continue
-				}
-				ops = append(ops, op)
-			}
-
-			// Append each token to the state machine and check the output.
-			var state stateMachine
-			state.reset()
-			var sequence []Kind
-			for _, op := range ops {
-				switch op := op.(type) {
-				case stackLengths:
-					var got []int64
-					for i := range state.Depth() {
-						e := state.index(i)
-						got = append(got, e.Length())
-					}
-					want := []int64(op)
-					if !slices.Equal(got, want) {
-						t.Fatalf("%s: stack lengths mismatch:\ngot  %v\nwant %v", sequence, got, want)
-					}
-				case appendToken:
-					got := state.append(op.kind)
-					if !equalError(got, op.want) {
-						t.Fatalf("%s: append('%c') = %v, want %v", sequence, op.kind, got, op.want)
-					}
-					if got == nil {
-						sequence = append(sequence, op.kind)
-					}
-				case needDelim:
-					if got := state.needDelim(op.next); got != op.want {
-						t.Fatalf("%s: needDelim('%c') = '%c', want '%c'", sequence, op.next, got, op.want)
-					}
-				default:
-					panic(fmt.Sprintf("unknown operation: %T", op))
-				}
-			}
-		})
-	}
-}
-
-// append is a thin wrapper over the other append, pop, or push methods
-// based on the token kind.
-func (s *stateMachine) append(k Kind) error {
-	switch k {
-	case 'n', 'f', 't':
-		return s.appendLiteral()
-	case '"':
-		return s.appendString()
-	case '0':
-		return s.appendNumber()
-	case '{':
-		return s.pushObject()
-	case '}':
-		return s.popObject()
-	case '[':
-		return s.pushArray()
-	case ']':
-		return s.popArray()
-	default:
-		panic(fmt.Sprintf("invalid token kind: '%c'", k))
-	}
-}
-
-func TestObjectNamespace(t *testing.T) {
-	type operation any
-	type (
-		insert struct {
-			name         string
-			wantInserted bool
-		}
-		removeLast struct{}
-	)
-
-	// Sequence of insert operations to perform (order matters).
-	ops := []operation{
-		insert{`""`, true},
-		removeLast{},
-		insert{`""`, true},
-		insert{`""`, false},
-
-		// Test insertion of the same name with different formatting.
-		insert{`"alpha"`, true},
-		insert{`"ALPHA"`, true}, // case-sensitive matching
-		insert{`"alpha"`, false},
-		insert{`"\u0061\u006c\u0070\u0068\u0061"`, false}, // unescapes to "alpha"
-		removeLast{},                                      // removes "ALPHA"
-		insert{`"alpha"`, false},
-		removeLast{}, // removes "alpha"
-		insert{`"alpha"`, true},
-		removeLast{},
-
-		// Bulk insert simple names.
-		insert{`"alpha"`, true},
-		insert{`"bravo"`, true},
-		insert{`"charlie"`, true},
-		insert{`"delta"`, true},
-		insert{`"echo"`, true},
-		insert{`"foxtrot"`, true},
-		insert{`"golf"`, true},
-		insert{`"hotel"`, true},
-		insert{`"india"`, true},
-		insert{`"juliet"`, true},
-		insert{`"kilo"`, true},
-		insert{`"lima"`, true},
-		insert{`"mike"`, true},
-		insert{`"november"`, true},
-		insert{`"oscar"`, true},
-		insert{`"papa"`, true},
-		insert{`"quebec"`, true},
-		insert{`"romeo"`, true},
-		insert{`"sierra"`, true},
-		insert{`"tango"`, true},
-		insert{`"uniform"`, true},
-		insert{`"victor"`, true},
-		insert{`"whiskey"`, true},
-		insert{`"xray"`, true},
-		insert{`"yankee"`, true},
-		insert{`"zulu"`, true},
-
-		// Test insertion of invalid UTF-8.
-		insert{`"` + "\ufffd" + `"`, true},
-		insert{`"` + "\ufffd" + `"`, false},
-		insert{`"\ufffd"`, false},         // unescapes to Unicode replacement character
-		insert{`"\uFFFD"`, false},         // unescapes to Unicode replacement character
-		insert{`"` + "\xff" + `"`, false}, // mangles as Unicode replacement character
-		removeLast{},
-		insert{`"` + "\ufffd" + `"`, true},
-
-		// Test insertion of unicode characters.
-		insert{`"☺☻☹"`, true},
-		insert{`"☺☻☹"`, false},
-		removeLast{},
-		insert{`"☺☻☹"`, true},
-	}
-
-	// Execute the sequence of operations twice:
-	// 1) on a fresh namespace and 2) on a namespace that has been reset.
-	var ns objectNamespace
-	wantNames := []string{}
-	for _, reset := range []bool{false, true} {
-		if reset {
-			ns.reset()
-			wantNames = nil
-		}
-
-		// Execute the operations and ensure the state is consistent.
-		for i, op := range ops {
-			switch op := op.(type) {
-			case insert:
-				gotInserted := ns.insertQuoted([]byte(op.name), false)
-				if gotInserted != op.wantInserted {
-					t.Fatalf("%d: objectNamespace{%v}.insert(%v) = %v, want %v", i, strings.Join(wantNames, " "), op.name, gotInserted, op.wantInserted)
-				}
-				if gotInserted {
-					b, _ := AppendUnquote(nil, []byte(op.name))
-					wantNames = append(wantNames, string(b))
-				}
-			case removeLast:
-				ns.removeLast()
-				wantNames = wantNames[:len(wantNames)-1]
-			default:
-				panic(fmt.Sprintf("unknown operation: %T", op))
-			}
-
-			// Check that the namespace is consistent.
-			gotNames := []string{}
-			for i := range ns.length() {
-				gotNames = append(gotNames, string(ns.getUnquoted(i)))
-			}
-			if !slices.Equal(gotNames, wantNames) {
-				t.Fatalf("%d: objectNamespace = {%v}, want {%v}", i, strings.Join(gotNames, " "), strings.Join(wantNames, " "))
-			}
-		}
-
-		// Verify that we have not switched to using a Go map.
-		if ns.mapNames != nil {
-			t.Errorf("objectNamespace.mapNames = non-nil, want nil")
-		}
-
-		// Insert a large number of names.
-		for i := range 64 {
-			ns.InsertUnquoted([]byte(fmt.Sprintf(`name%d`, i)))
-		}
-
-		// Verify that we did switch to using a Go map.
-		if ns.mapNames == nil {
-			t.Errorf("objectNamespace.mapNames = nil, want non-nil")
-		}
-	}
-}
diff --git a/src/encoding/json/jsontext/token.go b/src/encoding/json/jsontext/token.go
deleted file mode 100644
index 22717b154ac48f..00000000000000
--- a/src/encoding/json/jsontext/token.go
+++ /dev/null
@@ -1,527 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"math"
-	"strconv"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonwire"
-)
-
-// NOTE: Token is analogous to v1 json.Token.
-
-const (
-	maxInt64  = math.MaxInt64
-	minInt64  = math.MinInt64
-	maxUint64 = math.MaxUint64
-	minUint64 = 0 // for consistency and readability purposes
-
-	invalidTokenPanic = "invalid jsontext.Token; it has been voided by a subsequent json.Decoder call"
-)
-
-var errInvalidToken = errors.New("invalid jsontext.Token")
-
-// Token represents a lexical JSON token, which may be one of the following:
-//   - a JSON literal (i.e., null, true, or false)
-//   - a JSON string (e.g., "hello, world!")
-//   - a JSON number (e.g., 123.456)
-//   - a start or end delimiter for a JSON object (i.e., { or } )
-//   - a start or end delimiter for a JSON array (i.e., [ or ] )
-//
-// A Token cannot represent entire array or object values, while a [Value] can.
-// There is no Token to represent commas and colons since
-// these structural tokens can be inferred from the surrounding context.
-type Token struct {
-	nonComparable
-
-	// Tokens can exist in either a "raw" or an "exact" form.
-	// Tokens produced by the Decoder are in the "raw" form.
-	// Tokens returned by constructors are usually in the "exact" form.
-	// The Encoder accepts Tokens in either the "raw" or "exact" form.
-	//
-	// The following chart shows the possible values for each Token type:
-	//	╔═════════════════╦════════════╤════════════╤════════════╗
-	//	║ Token type      ║ raw field  │ str field  │ num field  ║
-	//	╠═════════════════╬════════════╪════════════╪════════════╣
-	//	║ null   (raw)    ║ "null"     │ ""         │ 0          ║
-	//	║ false  (raw)    ║ "false"    │ ""         │ 0          ║
-	//	║ true   (raw)    ║ "true"     │ ""         │ 0          ║
-	//	║ string (raw)    ║ non-empty  │ ""         │ offset     ║
-	//	║ string (string) ║ nil        │ non-empty  │ 0          ║
-	//	║ number (raw)    ║ non-empty  │ ""         │ offset     ║
-	//	║ number (float)  ║ nil        │ "f"        │ non-zero   ║
-	//	║ number (int64)  ║ nil        │ "i"        │ non-zero   ║
-	//	║ number (uint64) ║ nil        │ "u"        │ non-zero   ║
-	//	║ object (delim)  ║ "{" or "}" │ ""         │ 0          ║
-	//	║ array  (delim)  ║ "[" or "]" │ ""         │ 0          ║
-	//	╚═════════════════╩════════════╧════════════╧════════════╝
-	//
-	// Notes:
-	//   - For tokens stored in "raw" form, the num field contains the
-	//     absolute offset determined by raw.previousOffsetStart().
-	//     The buffer itself is stored in raw.previousBuffer().
-	//   - JSON literals and structural characters are always in the "raw" form.
-	//   - JSON strings and numbers can be in either "raw" or "exact" forms.
-	//   - The exact zero value of JSON strings and numbers in the "exact" forms
-	//     have ambiguous representation. Thus, they are always represented
-	//     in the "raw" form.
-
-	// raw contains a reference to the raw decode buffer.
-	// If non-nil, then its value takes precedence over str and num.
-	// It is only valid if num == raw.previousOffsetStart().
-	raw *decodeBuffer
-
-	// str is the unescaped JSON string if num is zero.
-	// Otherwise, it is "f", "i", or "u" if num should be interpreted
-	// as a float64, int64, or uint64, respectively.
-	str string
-
-	// num is a float64, int64, or uint64 stored as a uint64 value.
-	// It is non-zero for any JSON number in the "exact" form.
-	num uint64
-}
-
-// TODO: Does representing 1-byte delimiters as *decodeBuffer cause performance issues?
-
-var (
-	Null  Token = rawToken("null")
-	False Token = rawToken("false")
-	True  Token = rawToken("true")
-
-	BeginObject Token = rawToken("{")
-	EndObject   Token = rawToken("}")
-	BeginArray  Token = rawToken("[")
-	EndArray    Token = rawToken("]")
-
-	zeroString Token = rawToken(`""`)
-	zeroNumber Token = rawToken(`0`)
-
-	nanString  Token = String("NaN")
-	pinfString Token = String("Infinity")
-	ninfString Token = String("-Infinity")
-)
-
-func rawToken(s string) Token {
-	return Token{raw: &decodeBuffer{buf: []byte(s), prevStart: 0, prevEnd: len(s)}}
-}
-
-// Bool constructs a Token representing a JSON boolean.
-func Bool(b bool) Token {
-	if b {
-		return True
-	}
-	return False
-}
-
-// String constructs a Token representing a JSON string.
-// The provided string should contain valid UTF-8, otherwise invalid characters
-// may be mangled as the Unicode replacement character.
-func String(s string) Token {
-	if len(s) == 0 {
-		return zeroString
-	}
-	return Token{str: s}
-}
-
-// Float constructs a Token representing a JSON number.
-// The values NaN, +Inf, and -Inf will be represented
-// as a JSON string with the values "NaN", "Infinity", and "-Infinity".
-func Float(n float64) Token {
-	switch {
-	case math.Float64bits(n) == 0:
-		return zeroNumber
-	case math.IsNaN(n):
-		return nanString
-	case math.IsInf(n, +1):
-		return pinfString
-	case math.IsInf(n, -1):
-		return ninfString
-	}
-	return Token{str: "f", num: math.Float64bits(n)}
-}
-
-// Int constructs a Token representing a JSON number from an int64.
-func Int(n int64) Token {
-	if n == 0 {
-		return zeroNumber
-	}
-	return Token{str: "i", num: uint64(n)}
-}
-
-// Uint constructs a Token representing a JSON number from a uint64.
-func Uint(n uint64) Token {
-	if n == 0 {
-		return zeroNumber
-	}
-	return Token{str: "u", num: uint64(n)}
-}
-
-// Clone makes a copy of the Token such that its value remains valid
-// even after a subsequent [Decoder.Read] call.
-func (t Token) Clone() Token {
-	// TODO: Allow caller to avoid any allocations?
-	if raw := t.raw; raw != nil {
-		// Avoid copying globals.
-		if t.raw.prevStart == 0 {
-			switch t.raw {
-			case Null.raw:
-				return Null
-			case False.raw:
-				return False
-			case True.raw:
-				return True
-			case BeginObject.raw:
-				return BeginObject
-			case EndObject.raw:
-				return EndObject
-			case BeginArray.raw:
-				return BeginArray
-			case EndArray.raw:
-				return EndArray
-			}
-		}
-
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		buf := bytes.Clone(raw.previousBuffer())
-		return Token{raw: &decodeBuffer{buf: buf, prevStart: 0, prevEnd: len(buf)}}
-	}
-	return t
-}
-
-// Bool returns the value for a JSON boolean.
-// It panics if the token kind is not a JSON boolean.
-func (t Token) Bool() bool {
-	switch t.raw {
-	case True.raw:
-		return true
-	case False.raw:
-		return false
-	default:
-		panic("invalid JSON token kind: " + t.Kind().String())
-	}
-}
-
-// appendString appends a JSON string to dst and returns it.
-// It panics if t is not a JSON string.
-func (t Token) appendString(dst []byte, flags *jsonflags.Flags) ([]byte, error) {
-	if raw := t.raw; raw != nil {
-		// Handle raw string value.
-		buf := raw.previousBuffer()
-		if Kind(buf[0]) == '"' {
-			if jsonwire.ConsumeSimpleString(buf) == len(buf) {
-				return append(dst, buf...), nil
-			}
-			dst, _, err := jsonwire.ReformatString(dst, buf, flags)
-			return dst, err
-		}
-	} else if len(t.str) != 0 && t.num == 0 {
-		// Handle exact string value.
-		return jsonwire.AppendQuote(dst, t.str, flags)
-	}
-
-	panic("invalid JSON token kind: " + t.Kind().String())
-}
-
-// String returns the unescaped string value for a JSON string.
-// For other JSON kinds, this returns the raw JSON representation.
-func (t Token) String() string {
-	// This is inlinable to take advantage of "function outlining".
-	// This avoids an allocation for the string(b) conversion
-	// if the caller does not use the string in an escaping manner.
-	// See https://blog.filippo.io/efficient-go-apis-with-the-inliner/
-	s, b := t.string()
-	if len(b) > 0 {
-		return string(b)
-	}
-	return s
-}
-func (t Token) string() (string, []byte) {
-	if raw := t.raw; raw != nil {
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		buf := raw.previousBuffer()
-		if buf[0] == '"' {
-			// TODO: Preserve ValueFlags in Token?
-			isVerbatim := jsonwire.ConsumeSimpleString(buf) == len(buf)
-			return "", jsonwire.UnquoteMayCopy(buf, isVerbatim)
-		}
-		// Handle tokens that are not JSON strings for fmt.Stringer.
-		return "", buf
-	}
-	if len(t.str) != 0 && t.num == 0 {
-		return t.str, nil
-	}
-	// Handle tokens that are not JSON strings for fmt.Stringer.
-	if t.num > 0 {
-		switch t.str[0] {
-		case 'f':
-			return string(jsonwire.AppendFloat(nil, math.Float64frombits(t.num), 64)), nil
-		case 'i':
-			return strconv.FormatInt(int64(t.num), 10), nil
-		case 'u':
-			return strconv.FormatUint(uint64(t.num), 10), nil
-		}
-	}
-	return "", nil
-}
-
-// appendNumber appends a JSON number to dst and returns it.
-// It panics if t is not a JSON number.
-func (t Token) appendNumber(dst []byte, flags *jsonflags.Flags) ([]byte, error) {
-	if raw := t.raw; raw != nil {
-		// Handle raw number value.
-		buf := raw.previousBuffer()
-		if Kind(buf[0]).normalize() == '0' {
-			dst, _, err := jsonwire.ReformatNumber(dst, buf, flags)
-			return dst, err
-		}
-	} else if t.num != 0 {
-		// Handle exact number value.
-		switch t.str[0] {
-		case 'f':
-			return jsonwire.AppendFloat(dst, math.Float64frombits(t.num), 64), nil
-		case 'i':
-			return strconv.AppendInt(dst, int64(t.num), 10), nil
-		case 'u':
-			return strconv.AppendUint(dst, uint64(t.num), 10), nil
-		}
-	}
-
-	panic("invalid JSON token kind: " + t.Kind().String())
-}
-
-// Float returns the floating-point value for a JSON number.
-// It returns a NaN, +Inf, or -Inf value for any JSON string
-// with the values "NaN", "Infinity", or "-Infinity".
-// It panics for all other cases.
-func (t Token) Float() float64 {
-	if raw := t.raw; raw != nil {
-		// Handle raw number value.
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		buf := raw.previousBuffer()
-		if Kind(buf[0]).normalize() == '0' {
-			fv, _ := jsonwire.ParseFloat(buf, 64)
-			return fv
-		}
-	} else if t.num != 0 {
-		// Handle exact number value.
-		switch t.str[0] {
-		case 'f':
-			return math.Float64frombits(t.num)
-		case 'i':
-			return float64(int64(t.num))
-		case 'u':
-			return float64(uint64(t.num))
-		}
-	}
-
-	// Handle string values with "NaN", "Infinity", or "-Infinity".
-	if t.Kind() == '"' {
-		switch t.String() {
-		case "NaN":
-			return math.NaN()
-		case "Infinity":
-			return math.Inf(+1)
-		case "-Infinity":
-			return math.Inf(-1)
-		}
-	}
-
-	panic("invalid JSON token kind: " + t.Kind().String())
-}
-
-// Int returns the signed integer value for a JSON number.
-// The fractional component of any number is ignored (truncation toward zero).
-// Any number beyond the representation of an int64 will be saturated
-// to the closest representable value.
-// It panics if the token kind is not a JSON number.
-func (t Token) Int() int64 {
-	if raw := t.raw; raw != nil {
-		// Handle raw integer value.
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		neg := false
-		buf := raw.previousBuffer()
-		if len(buf) > 0 && buf[0] == '-' {
-			neg, buf = true, buf[1:]
-		}
-		if numAbs, ok := jsonwire.ParseUint(buf); ok {
-			if neg {
-				if numAbs > -minInt64 {
-					return minInt64
-				}
-				return -1 * int64(numAbs)
-			} else {
-				if numAbs > +maxInt64 {
-					return maxInt64
-				}
-				return +1 * int64(numAbs)
-			}
-		}
-	} else if t.num != 0 {
-		// Handle exact integer value.
-		switch t.str[0] {
-		case 'i':
-			return int64(t.num)
-		case 'u':
-			if t.num > maxInt64 {
-				return maxInt64
-			}
-			return int64(t.num)
-		}
-	}
-
-	// Handle JSON number that is a floating-point value.
-	if t.Kind() == '0' {
-		switch fv := t.Float(); {
-		case fv >= maxInt64:
-			return maxInt64
-		case fv <= minInt64:
-			return minInt64
-		default:
-			return int64(fv) // truncation toward zero
-		}
-	}
-
-	panic("invalid JSON token kind: " + t.Kind().String())
-}
-
-// Uint returns the unsigned integer value for a JSON number.
-// The fractional component of any number is ignored (truncation toward zero).
-// Any number beyond the representation of an uint64 will be saturated
-// to the closest representable value.
-// It panics if the token kind is not a JSON number.
-func (t Token) Uint() uint64 {
-	// NOTE: This accessor returns 0 for any negative JSON number,
-	// which might be surprising, but is at least consistent with the behavior
-	// of saturating out-of-bounds numbers to the closest representable number.
-
-	if raw := t.raw; raw != nil {
-		// Handle raw integer value.
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		neg := false
-		buf := raw.previousBuffer()
-		if len(buf) > 0 && buf[0] == '-' {
-			neg, buf = true, buf[1:]
-		}
-		if num, ok := jsonwire.ParseUint(buf); ok {
-			if neg {
-				return minUint64
-			}
-			return num
-		}
-	} else if t.num != 0 {
-		// Handle exact integer value.
-		switch t.str[0] {
-		case 'u':
-			return t.num
-		case 'i':
-			if int64(t.num) < minUint64 {
-				return minUint64
-			}
-			return uint64(int64(t.num))
-		}
-	}
-
-	// Handle JSON number that is a floating-point value.
-	if t.Kind() == '0' {
-		switch fv := t.Float(); {
-		case fv >= maxUint64:
-			return maxUint64
-		case fv <= minUint64:
-			return minUint64
-		default:
-			return uint64(fv) // truncation toward zero
-		}
-	}
-
-	panic("invalid JSON token kind: " + t.Kind().String())
-}
-
-// Kind returns the token kind.
-func (t Token) Kind() Kind {
-	switch {
-	case t.raw != nil:
-		raw := t.raw
-		if uint64(raw.previousOffsetStart()) != t.num {
-			panic(invalidTokenPanic)
-		}
-		return Kind(t.raw.buf[raw.prevStart]).normalize()
-	case t.num != 0:
-		return '0'
-	case len(t.str) != 0:
-		return '"'
-	default:
-		return invalidKind
-	}
-}
-
-// Kind represents each possible JSON token kind with a single byte,
-// which is conveniently the first byte of that kind's grammar
-// with the restriction that numbers always be represented with '0':
-//
-//   - 'n': null
-//   - 'f': false
-//   - 't': true
-//   - '"': string
-//   - '0': number
-//   - '{': object start
-//   - '}': object end
-//   - '[': array start
-//   - ']': array end
-//
-// An invalid kind is usually represented using 0,
-// but may be non-zero due to invalid JSON data.
-type Kind byte
-
-const invalidKind Kind = 0
-
-// String prints the kind in a humanly readable fashion.
-func (k Kind) String() string {
-	switch k {
-	case 'n':
-		return "null"
-	case 'f':
-		return "false"
-	case 't':
-		return "true"
-	case '"':
-		return "string"
-	case '0':
-		return "number"
-	case '{':
-		return "{"
-	case '}':
-		return "}"
-	case '[':
-		return "["
-	case ']':
-		return "]"
-	default:
-		return ""
-	}
-}
-
-// normalize coalesces all possible starting characters of a number as just '0'.
-func (k Kind) normalize() Kind {
-	if k == '-' || ('0' <= k && k <= '9') {
-		return '0'
-	}
-	return k
-}
diff --git a/src/encoding/json/jsontext/token_test.go b/src/encoding/json/jsontext/token_test.go
deleted file mode 100644
index ebe324e0dbcce6..00000000000000
--- a/src/encoding/json/jsontext/token_test.go
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"math"
-	"reflect"
-	"testing"
-)
-
-func TestTokenStringAllocations(t *testing.T) {
-	if testing.CoverMode() != "" {
-		t.Skip("coverage mode breaks the compiler optimization this depends on")
-	}
-
-	tok := rawToken(`"hello"`)
-	var m map[string]bool
-	got := int(testing.AllocsPerRun(10, func() {
-		// This function uses tok.String() is a non-escaping manner
-		// (i.e., looking it up in a Go map). It should not allocate.
-		if m[tok.String()] {
-			panic("never executed")
-		}
-	}))
-	if got > 0 {
-		t.Errorf("Token.String allocated %d times, want 0", got)
-	}
-}
-
-func TestTokenAccessors(t *testing.T) {
-	type token struct {
-		Bool   bool
-		String string
-		Float  float64
-		Int    int64
-		Uint   uint64
-		Kind   Kind
-	}
-
-	tests := []struct {
-		in   Token
-		want token
-	}{
-		{Token{}, token{String: ""}},
-		{Null, token{String: "null", Kind: 'n'}},
-		{False, token{Bool: false, String: "false", Kind: 'f'}},
-		{True, token{Bool: true, String: "true", Kind: 't'}},
-		{Bool(false), token{Bool: false, String: "false", Kind: 'f'}},
-		{Bool(true), token{Bool: true, String: "true", Kind: 't'}},
-		{BeginObject, token{String: "{", Kind: '{'}},
-		{EndObject, token{String: "}", Kind: '}'}},
-		{BeginArray, token{String: "[", Kind: '['}},
-		{EndArray, token{String: "]", Kind: ']'}},
-		{String(""), token{String: "", Kind: '"'}},
-		{String("hello, world!"), token{String: "hello, world!", Kind: '"'}},
-		{rawToken(`"hello, world!"`), token{String: "hello, world!", Kind: '"'}},
-		{Float(0), token{String: "0", Float: 0, Int: 0, Uint: 0, Kind: '0'}},
-		{Float(math.Copysign(0, -1)), token{String: "-0", Float: math.Copysign(0, -1), Int: 0, Uint: 0, Kind: '0'}},
-		{Float(math.NaN()), token{String: "NaN", Float: math.NaN(), Int: 0, Uint: 0, Kind: '"'}},
-		{Float(math.Inf(+1)), token{String: "Infinity", Float: math.Inf(+1), Kind: '"'}},
-		{Float(math.Inf(-1)), token{String: "-Infinity", Float: math.Inf(-1), Kind: '"'}},
-		{Int(minInt64), token{String: "-9223372036854775808", Float: minInt64, Int: minInt64, Uint: minUint64, Kind: '0'}},
-		{Int(minInt64 + 1), token{String: "-9223372036854775807", Float: minInt64 + 1, Int: minInt64 + 1, Uint: minUint64, Kind: '0'}},
-		{Int(-1), token{String: "-1", Float: -1, Int: -1, Uint: minUint64, Kind: '0'}},
-		{Int(0), token{String: "0", Float: 0, Int: 0, Uint: 0, Kind: '0'}},
-		{Int(+1), token{String: "1", Float: +1, Int: +1, Uint: +1, Kind: '0'}},
-		{Int(maxInt64 - 1), token{String: "9223372036854775806", Float: maxInt64 - 1, Int: maxInt64 - 1, Uint: maxInt64 - 1, Kind: '0'}},
-		{Int(maxInt64), token{String: "9223372036854775807", Float: maxInt64, Int: maxInt64, Uint: maxInt64, Kind: '0'}},
-		{Uint(minUint64), token{String: "0", Kind: '0'}},
-		{Uint(minUint64 + 1), token{String: "1", Float: minUint64 + 1, Int: minUint64 + 1, Uint: minUint64 + 1, Kind: '0'}},
-		{Uint(maxUint64 - 1), token{String: "18446744073709551614", Float: maxUint64 - 1, Int: maxInt64, Uint: maxUint64 - 1, Kind: '0'}},
-		{Uint(maxUint64), token{String: "18446744073709551615", Float: maxUint64, Int: maxInt64, Uint: maxUint64, Kind: '0'}},
-		{rawToken(`-0`), token{String: "-0", Float: math.Copysign(0, -1), Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`1e1000`), token{String: "1e1000", Float: math.MaxFloat64, Int: maxInt64, Uint: maxUint64, Kind: '0'}},
-		{rawToken(`-1e1000`), token{String: "-1e1000", Float: -math.MaxFloat64, Int: minInt64, Uint: minUint64, Kind: '0'}},
-		{rawToken(`0.1`), token{String: "0.1", Float: 0.1, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`0.5`), token{String: "0.5", Float: 0.5, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`0.9`), token{String: "0.9", Float: 0.9, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`1.1`), token{String: "1.1", Float: 1.1, Int: 1, Uint: 1, Kind: '0'}},
-		{rawToken(`-0.1`), token{String: "-0.1", Float: -0.1, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`-0.5`), token{String: "-0.5", Float: -0.5, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`-0.9`), token{String: "-0.9", Float: -0.9, Int: 0, Uint: 0, Kind: '0'}},
-		{rawToken(`-1.1`), token{String: "-1.1", Float: -1.1, Int: -1, Uint: 0, Kind: '0'}},
-		{rawToken(`99999999999999999999`), token{String: "99999999999999999999", Float: 1e20 - 1, Int: maxInt64, Uint: maxUint64, Kind: '0'}},
-		{rawToken(`-99999999999999999999`), token{String: "-99999999999999999999", Float: -1e20 - 1, Int: minInt64, Uint: minUint64, Kind: '0'}},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			got := token{
-				Bool: func() bool {
-					defer func() { recover() }()
-					return tt.in.Bool()
-				}(),
-				String: tt.in.String(),
-				Float: func() float64 {
-					defer func() { recover() }()
-					return tt.in.Float()
-				}(),
-				Int: func() int64 {
-					defer func() { recover() }()
-					return tt.in.Int()
-				}(),
-				Uint: func() uint64 {
-					defer func() { recover() }()
-					return tt.in.Uint()
-				}(),
-				Kind: tt.in.Kind(),
-			}
-
-			if got.Bool != tt.want.Bool {
-				t.Errorf("Token(%s).Bool() = %v, want %v", tt.in, got.Bool, tt.want.Bool)
-			}
-			if got.String != tt.want.String {
-				t.Errorf("Token(%s).String() = %v, want %v", tt.in, got.String, tt.want.String)
-			}
-			if math.Float64bits(got.Float) != math.Float64bits(tt.want.Float) {
-				t.Errorf("Token(%s).Float() = %v, want %v", tt.in, got.Float, tt.want.Float)
-			}
-			if got.Int != tt.want.Int {
-				t.Errorf("Token(%s).Int() = %v, want %v", tt.in, got.Int, tt.want.Int)
-			}
-			if got.Uint != tt.want.Uint {
-				t.Errorf("Token(%s).Uint() = %v, want %v", tt.in, got.Uint, tt.want.Uint)
-			}
-			if got.Kind != tt.want.Kind {
-				t.Errorf("Token(%s).Kind() = %v, want %v", tt.in, got.Kind, tt.want.Kind)
-			}
-		})
-	}
-}
-
-func TestTokenClone(t *testing.T) {
-	tests := []struct {
-		in           Token
-		wantExactRaw bool
-	}{
-		{Token{}, true},
-		{Null, true},
-		{False, true},
-		{True, true},
-		{BeginObject, true},
-		{EndObject, true},
-		{BeginArray, true},
-		{EndArray, true},
-		{String("hello, world!"), true},
-		{rawToken(`"hello, world!"`), false},
-		{Float(3.14159), true},
-		{rawToken(`3.14159`), false},
-	}
-
-	for _, tt := range tests {
-		t.Run("", func(t *testing.T) {
-			got := tt.in.Clone()
-			if !reflect.DeepEqual(got, tt.in) {
-				t.Errorf("Token(%s) == Token(%s).Clone() = false, want true", tt.in, tt.in)
-			}
-			gotExactRaw := got.raw == tt.in.raw
-			if gotExactRaw != tt.wantExactRaw {
-				t.Errorf("Token(%s).raw == Token(%s).Clone().raw = %v, want %v", tt.in, tt.in, gotExactRaw, tt.wantExactRaw)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/jsontext/value.go b/src/encoding/json/jsontext/value.go
deleted file mode 100644
index a4b06b2a947de7..00000000000000
--- a/src/encoding/json/jsontext/value.go
+++ /dev/null
@@ -1,395 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"bytes"
-	"errors"
-	"io"
-	"slices"
-	"sync"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonwire"
-)
-
-// NOTE: Value is analogous to v1 json.RawMessage.
-
-// AppendFormat formats the JSON value in src and appends it to dst
-// according to the specified options.
-// See [Value.Format] for more details about the formatting behavior.
-//
-// The dst and src may overlap.
-// If an error is reported, then the entirety of src is appended to dst.
-func AppendFormat(dst, src []byte, opts ...Options) ([]byte, error) {
-	e := getBufferedEncoder(opts...)
-	defer putBufferedEncoder(e)
-	e.s.Flags.Set(jsonflags.OmitTopLevelNewline | 1)
-	if err := e.s.WriteValue(src); err != nil {
-		return append(dst, src...), err
-	}
-	return append(dst, e.s.Buf...), nil
-}
-
-// Value represents a single raw JSON value, which may be one of the following:
-//   - a JSON literal (i.e., null, true, or false)
-//   - a JSON string (e.g., "hello, world!")
-//   - a JSON number (e.g., 123.456)
-//   - an entire JSON object (e.g., {"fizz":"buzz"} )
-//   - an entire JSON array (e.g., [1,2,3] )
-//
-// Value can represent entire array or object values, while [Token] cannot.
-// Value may contain leading and/or trailing whitespace.
-type Value []byte
-
-// Clone returns a copy of v.
-func (v Value) Clone() Value {
-	return bytes.Clone(v)
-}
-
-// String returns the string formatting of v.
-func (v Value) String() string {
-	if v == nil {
-		return "null"
-	}
-	return string(v)
-}
-
-// IsValid reports whether the raw JSON value is syntactically valid
-// according to the specified options.
-//
-// By default (if no options are specified), it validates according to RFC 7493.
-// It verifies whether the input is properly encoded as UTF-8,
-// that escape sequences within strings decode to valid Unicode codepoints, and
-// that all names in each object are unique.
-// It does not verify whether numbers are representable within the limits
-// of any common numeric type (e.g., float64, int64, or uint64).
-//
-// Relevant options include:
-//   - [AllowDuplicateNames]
-//   - [AllowInvalidUTF8]
-//
-// All other options are ignored.
-func (v Value) IsValid(opts ...Options) bool {
-	// TODO: Document support for [WithByteLimit] and [WithDepthLimit].
-	d := getBufferedDecoder(v, opts...)
-	defer putBufferedDecoder(d)
-	_, errVal := d.ReadValue()
-	_, errEOF := d.ReadToken()
-	return errVal == nil && errEOF == io.EOF
-}
-
-// Format formats the raw JSON value in place.
-//
-// By default (if no options are specified), it validates according to RFC 7493
-// and produces the minimal JSON representation, where
-// all whitespace is elided and JSON strings use the shortest encoding.
-//
-// Relevant options include:
-//   - [AllowDuplicateNames]
-//   - [AllowInvalidUTF8]
-//   - [EscapeForHTML]
-//   - [EscapeForJS]
-//   - [PreserveRawStrings]
-//   - [CanonicalizeRawInts]
-//   - [CanonicalizeRawFloats]
-//   - [ReorderRawObjects]
-//   - [SpaceAfterColon]
-//   - [SpaceAfterComma]
-//   - [Multiline]
-//   - [WithIndent]
-//   - [WithIndentPrefix]
-//
-// All other options are ignored.
-//
-// It is guaranteed to succeed if the value is valid according to the same options.
-// If the value is already formatted, then the buffer is not mutated.
-func (v *Value) Format(opts ...Options) error {
-	// TODO: Document support for [WithByteLimit] and [WithDepthLimit].
-	return v.format(opts, nil)
-}
-
-// format accepts two []Options to avoid the allocation appending them together.
-// It is equivalent to v.Format(append(opts1, opts2...)...).
-func (v *Value) format(opts1, opts2 []Options) error {
-	e := getBufferedEncoder(opts1...)
-	defer putBufferedEncoder(e)
-	e.s.Join(opts2...)
-	e.s.Flags.Set(jsonflags.OmitTopLevelNewline | 1)
-	if err := e.s.WriteValue(*v); err != nil {
-		return err
-	}
-	if !bytes.Equal(*v, e.s.Buf) {
-		*v = append((*v)[:0], e.s.Buf...)
-	}
-	return nil
-}
-
-// Compact removes all whitespace from the raw JSON value.
-//
-// It does not reformat JSON strings or numbers to use any other representation.
-// To maximize the set of JSON values that can be formatted,
-// this permits values with duplicate names and invalid UTF-8.
-//
-// Compact is equivalent to calling [Value.Format] with the following options:
-//   - [AllowDuplicateNames](true)
-//   - [AllowInvalidUTF8](true)
-//   - [PreserveRawStrings](true)
-//
-// Any options specified by the caller are applied after the initial set
-// and may deliberately override prior options.
-func (v *Value) Compact(opts ...Options) error {
-	return v.format([]Options{
-		AllowDuplicateNames(true),
-		AllowInvalidUTF8(true),
-		PreserveRawStrings(true),
-	}, opts)
-}
-
-// Indent reformats the whitespace in the raw JSON value so that each element
-// in a JSON object or array begins on a indented line according to the nesting.
-//
-// It does not reformat JSON strings or numbers to use any other representation.
-// To maximize the set of JSON values that can be formatted,
-// this permits values with duplicate names and invalid UTF-8.
-//
-// Indent is equivalent to calling [Value.Format] with the following options:
-//   - [AllowDuplicateNames](true)
-//   - [AllowInvalidUTF8](true)
-//   - [PreserveRawStrings](true)
-//   - [Multiline](true)
-//
-// Any options specified by the caller are applied after the initial set
-// and may deliberately override prior options.
-func (v *Value) Indent(opts ...Options) error {
-	return v.format([]Options{
-		AllowDuplicateNames(true),
-		AllowInvalidUTF8(true),
-		PreserveRawStrings(true),
-		Multiline(true),
-	}, opts)
-}
-
-// Canonicalize canonicalizes the raw JSON value according to the
-// JSON Canonicalization Scheme (JCS) as defined by RFC 8785
-// where it produces a stable representation of a JSON value.
-//
-// JSON strings are formatted to use their minimal representation,
-// JSON numbers are formatted as double precision numbers according
-// to some stable serialization algorithm.
-// JSON object members are sorted in ascending order by name.
-// All whitespace is removed.
-//
-// The output stability is dependent on the stability of the application data
-// (see RFC 8785, Appendix E). It cannot produce stable output from
-// fundamentally unstable input. For example, if the JSON value
-// contains ephemeral data (e.g., a frequently changing timestamp),
-// then the value is still unstable regardless of whether this is called.
-//
-// Canonicalize is equivalent to calling [Value.Format] with the following options:
-//   - [CanonicalizeRawInts](true)
-//   - [CanonicalizeRawFloats](true)
-//   - [ReorderRawObjects](true)
-//
-// Any options specified by the caller are applied after the initial set
-// and may deliberately override prior options.
-//
-// Note that JCS treats all JSON numbers as IEEE 754 double precision numbers.
-// Any numbers with precision beyond what is representable by that form
-// will lose their precision when canonicalized. For example, integer values
-// beyond ±2⁵³ will lose their precision. To preserve the original representation
-// of JSON integers, additionally set [CanonicalizeRawInts] to false:
-//
-//	v.Canonicalize(jsontext.CanonicalizeRawInts(false))
-func (v *Value) Canonicalize(opts ...Options) error {
-	return v.format([]Options{
-		CanonicalizeRawInts(true),
-		CanonicalizeRawFloats(true),
-		ReorderRawObjects(true),
-	}, opts)
-}
-
-// MarshalJSON returns v as the JSON encoding of v.
-// It returns the stored value as the raw JSON output without any validation.
-// If v is nil, then this returns a JSON null.
-func (v Value) MarshalJSON() ([]byte, error) {
-	// NOTE: This matches the behavior of v1 json.RawMessage.MarshalJSON.
-	if v == nil {
-		return []byte("null"), nil
-	}
-	return v, nil
-}
-
-// UnmarshalJSON sets v as the JSON encoding of b.
-// It stores a copy of the provided raw JSON input without any validation.
-func (v *Value) UnmarshalJSON(b []byte) error {
-	// NOTE: This matches the behavior of v1 json.RawMessage.UnmarshalJSON.
-	if v == nil {
-		return errors.New("jsontext.Value: UnmarshalJSON on nil pointer")
-	}
-	*v = append((*v)[:0], b...)
-	return nil
-}
-
-// Kind returns the starting token kind.
-// For a valid value, this will never include '}' or ']'.
-func (v Value) Kind() Kind {
-	if v := v[jsonwire.ConsumeWhitespace(v):]; len(v) > 0 {
-		return Kind(v[0]).normalize()
-	}
-	return invalidKind
-}
-
-const commaAndWhitespace = ", \n\r\t"
-
-type objectMember struct {
-	// name is the unquoted name.
-	name []byte // e.g., "name"
-	// buffer is the entirety of the raw JSON object member
-	// starting from right after the previous member (or opening '{')
-	// until right after the member value.
-	buffer []byte // e.g., `, \n\r\t"name": "value"`
-}
-
-func (x objectMember) Compare(y objectMember) int {
-	if c := jsonwire.CompareUTF16(x.name, y.name); c != 0 {
-		return c
-	}
-	// With [AllowDuplicateNames] or [AllowInvalidUTF8],
-	// names could be identical, so also sort using the member value.
-	return jsonwire.CompareUTF16(
-		bytes.TrimLeft(x.buffer, commaAndWhitespace),
-		bytes.TrimLeft(y.buffer, commaAndWhitespace))
-}
-
-var objectMemberPool = sync.Pool{New: func() any { return new([]objectMember) }}
-
-func getObjectMembers() *[]objectMember {
-	ns := objectMemberPool.Get().(*[]objectMember)
-	*ns = (*ns)[:0]
-	return ns
-}
-func putObjectMembers(ns *[]objectMember) {
-	if cap(*ns) < 1<<10 {
-		clear(*ns) // avoid pinning name and buffer
-		objectMemberPool.Put(ns)
-	}
-}
-
-// mustReorderObjects reorders in-place all object members in a JSON value,
-// which must be valid otherwise it panics.
-func mustReorderObjects(b []byte) {
-	// Obtain a buffered encoder just to use its internal buffer as
-	// a scratch buffer for reordering object members.
-	e2 := getBufferedEncoder()
-	defer putBufferedEncoder(e2)
-
-	// Disable unnecessary checks to syntactically parse the JSON value.
-	d := getBufferedDecoder(b)
-	defer putBufferedDecoder(d)
-	d.s.Flags.Set(jsonflags.AllowDuplicateNames | jsonflags.AllowInvalidUTF8 | 1)
-	mustReorderObjectsFromDecoder(d, &e2.s.Buf) // per RFC 8785, section 3.2.3
-}
-
-// mustReorderObjectsFromDecoder recursively reorders all object members in place
-// according to the ordering specified in RFC 8785, section 3.2.3.
-//
-// Pre-conditions:
-//   - The value is valid (i.e., no decoder errors should ever occur).
-//   - Initial call is provided a Decoder reading from the start of v.
-//
-// Post-conditions:
-//   - Exactly one JSON value is read from the Decoder.
-//   - All fully-parsed JSON objects are reordered by directly moving
-//     the members in the value buffer.
-//
-// The runtime is approximately O(n·log(n)) + O(m·log(m)),
-// where n is len(v) and m is the total number of object members.
-func mustReorderObjectsFromDecoder(d *Decoder, scratch *[]byte) {
-	switch tok, err := d.ReadToken(); tok.Kind() {
-	case '{':
-		// Iterate and collect the name and offsets for every object member.
-		members := getObjectMembers()
-		defer putObjectMembers(members)
-		var prevMember objectMember
-		isSorted := true
-
-		beforeBody := d.InputOffset() // offset after '{'
-		for d.PeekKind() != '}' {
-			beforeName := d.InputOffset()
-			var flags jsonwire.ValueFlags
-			name, _ := d.s.ReadValue(&flags)
-			name = jsonwire.UnquoteMayCopy(name, flags.IsVerbatim())
-			mustReorderObjectsFromDecoder(d, scratch)
-			afterValue := d.InputOffset()
-
-			currMember := objectMember{name, d.s.buf[beforeName:afterValue]}
-			if isSorted && len(*members) > 0 {
-				isSorted = objectMember.Compare(prevMember, currMember) < 0
-			}
-			*members = append(*members, currMember)
-			prevMember = currMember
-		}
-		afterBody := d.InputOffset() // offset before '}'
-		d.ReadToken()
-
-		// Sort the members; return early if it's already sorted.
-		if isSorted {
-			return
-		}
-		firstBufferBeforeSorting := (*members)[0].buffer
-		slices.SortFunc(*members, objectMember.Compare)
-		firstBufferAfterSorting := (*members)[0].buffer
-
-		// Append the reordered members to a new buffer,
-		// then copy the reordered members back over the original members.
-		// Avoid swapping in place since each member may be a different size
-		// where moving a member over a smaller member may corrupt the data
-		// for subsequent members before they have been moved.
-		//
-		// The following invariant must hold:
-		//	sum([m.after-m.before for m in members]) == afterBody-beforeBody
-		commaAndWhitespacePrefix := func(b []byte) []byte {
-			return b[:len(b)-len(bytes.TrimLeft(b, commaAndWhitespace))]
-		}
-		sorted := (*scratch)[:0]
-		for i, member := range *members {
-			switch {
-			case i == 0 && &member.buffer[0] != &firstBufferBeforeSorting[0]:
-				// First member after sorting is not the first member before sorting,
-				// so use the prefix of the first member before sorting.
-				sorted = append(sorted, commaAndWhitespacePrefix(firstBufferBeforeSorting)...)
-				sorted = append(sorted, bytes.TrimLeft(member.buffer, commaAndWhitespace)...)
-			case i != 0 && &member.buffer[0] == &firstBufferBeforeSorting[0]:
-				// Later member after sorting is the first member before sorting,
-				// so use the prefix of the first member after sorting.
-				sorted = append(sorted, commaAndWhitespacePrefix(firstBufferAfterSorting)...)
-				sorted = append(sorted, bytes.TrimLeft(member.buffer, commaAndWhitespace)...)
-			default:
-				sorted = append(sorted, member.buffer...)
-			}
-		}
-		if int(afterBody-beforeBody) != len(sorted) {
-			panic("BUG: length invariant violated")
-		}
-		copy(d.s.buf[beforeBody:afterBody], sorted)
-
-		// Update scratch buffer to the largest amount ever used.
-		if len(sorted) > len(*scratch) {
-			*scratch = sorted
-		}
-	case '[':
-		for d.PeekKind() != ']' {
-			mustReorderObjectsFromDecoder(d, scratch)
-		}
-		d.ReadToken()
-	default:
-		if err != nil {
-			panic("BUG: " + err.Error())
-		}
-	}
-}
diff --git a/src/encoding/json/jsontext/value_test.go b/src/encoding/json/jsontext/value_test.go
deleted file mode 100644
index 184a27d88ea7f7..00000000000000
--- a/src/encoding/json/jsontext/value_test.go
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package jsontext
-
-import (
-	"io"
-	"strings"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-	"encoding/json/internal/jsonwire"
-)
-
-type valueTestdataEntry struct {
-	name                jsontest.CaseName
-	in                  string
-	wantValid           bool
-	wantCompacted       string
-	wantCompactErr      error  // implies wantCompacted is in
-	wantIndented        string // wantCompacted if empty; uses "\t" for indent prefix and "    " for indent
-	wantIndentErr       error  // implies wantCompacted is in
-	wantCanonicalized   string // wantCompacted if empty
-	wantCanonicalizeErr error  // implies wantCompacted is in
-}
-
-var valueTestdata = append(func() (out []valueTestdataEntry) {
-	// Initialize valueTestdata from coderTestdata.
-	for _, td := range coderTestdata {
-		// NOTE: The Compact method preserves the raw formatting of strings,
-		// while the Encoder (by default) does not.
-		if td.name.Name == "ComplicatedString" {
-			td.outCompacted = strings.TrimSpace(td.in)
-		}
-		out = append(out, valueTestdataEntry{
-			name:              td.name,
-			in:                td.in,
-			wantValid:         true,
-			wantCompacted:     td.outCompacted,
-			wantIndented:      td.outIndented,
-			wantCanonicalized: td.outCanonicalized,
-		})
-	}
-	return out
-}(), []valueTestdataEntry{{
-	name: jsontest.Name("RFC8785/Primitives"),
-	in: `{
-		"numbers": [333333333.33333329, 1E30, 4.50,
-					2e-3, 0.000000000000000000000000001, -0],
-		"string": "\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/",
-		"literals": [null, true, false]
-	}`,
-	wantValid:     true,
-	wantCompacted: `{"numbers":[333333333.33333329,1E30,4.50,2e-3,0.000000000000000000000000001,-0],"string":"\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/","literals":[null,true,false]}`,
-	wantIndented: `{
-	    "numbers": [
-	        333333333.33333329,
-	        1E30,
-	        4.50,
-	        2e-3,
-	        0.000000000000000000000000001,
-	        -0
-	    ],
-	    "string": "\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/",
-	    "literals": [
-	        null,
-	        true,
-	        false
-	    ]
-	}`,
-	wantCanonicalized: `{"literals":[null,true,false],"numbers":[333333333.3333333,1e+30,4.5,0.002,1e-27,0],"string":"€$\u000f\nA'B\"\\\\\"/"}`,
-}, {
-	name: jsontest.Name("RFC8785/ObjectOrdering"),
-	in: `{
-		"\u20ac": "Euro Sign",
-		"\r": "Carriage Return",
-		"\ufb33": "Hebrew Letter Dalet With Dagesh",
-		"1": "One",
-		"\ud83d\ude00": "Emoji: Grinning Face",
-		"\u0080": "Control",
-		"\u00f6": "Latin Small Letter O With Diaeresis"
-	}`,
-	wantValid:     true,
-	wantCompacted: `{"\u20ac":"Euro Sign","\r":"Carriage Return","\ufb33":"Hebrew Letter Dalet With Dagesh","1":"One","\ud83d\ude00":"Emoji: Grinning Face","\u0080":"Control","\u00f6":"Latin Small Letter O With Diaeresis"}`,
-	wantIndented: `{
-	    "\u20ac": "Euro Sign",
-	    "\r": "Carriage Return",
-	    "\ufb33": "Hebrew Letter Dalet With Dagesh",
-	    "1": "One",
-	    "\ud83d\ude00": "Emoji: Grinning Face",
-	    "\u0080": "Control",
-	    "\u00f6": "Latin Small Letter O With Diaeresis"
-	}`,
-	wantCanonicalized: `{"\r":"Carriage Return","1":"One","€":"Control","ö":"Latin Small Letter O With Diaeresis","€":"Euro Sign","😀":"Emoji: Grinning Face","דּ":"Hebrew Letter Dalet With Dagesh"}`,
-}, {
-	name:          jsontest.Name("LargeIntegers"),
-	in:            ` [ -9223372036854775808 , 9223372036854775807 ] `,
-	wantValid:     true,
-	wantCompacted: `[-9223372036854775808,9223372036854775807]`,
-	wantIndented: `[
-	    -9223372036854775808,
-	    9223372036854775807
-	]`,
-	wantCanonicalized: `[-9223372036854776000,9223372036854776000]`, // NOTE: Loss of precision due to numbers being treated as floats.
-}, {
-	name:                jsontest.Name("InvalidUTF8"),
-	in:                  `  "living` + "\xde\xad\xbe\xef" + `\ufffd�"  `,
-	wantValid:           false, // uses RFC 7493 as the definition; which validates UTF-8
-	wantCompacted:       `"living` + "\xde\xad\xbe\xef" + `\ufffd�"`,
-	wantCanonicalizeErr: E(jsonwire.ErrInvalidUTF8).withPos(`  "living`+"\xde\xad", ""),
-}, {
-	name:                jsontest.Name("InvalidUTF8/SurrogateHalf"),
-	in:                  `"\ud800"`,
-	wantValid:           false, // uses RFC 7493 as the definition; which validates UTF-8
-	wantCompacted:       `"\ud800"`,
-	wantCanonicalizeErr: newInvalidEscapeSequenceError(`\ud800"`).withPos(`"`, ""),
-}, {
-	name:              jsontest.Name("UppercaseEscaped"),
-	in:                `"\u000B"`,
-	wantValid:         true,
-	wantCompacted:     `"\u000B"`,
-	wantCanonicalized: `"\u000b"`,
-}, {
-	name:          jsontest.Name("DuplicateNames"),
-	in:            ` { "0" : 0 , "1" : 1 , "0" : 0 }`,
-	wantValid:     false, // uses RFC 7493 as the definition; which does check for object uniqueness
-	wantCompacted: `{"0":0,"1":1,"0":0}`,
-	wantIndented: `{
-	    "0": 0,
-	    "1": 1,
-	    "0": 0
-	}`,
-	wantCanonicalizeErr: E(ErrDuplicateName).withPos(` { "0" : 0 , "1" : 1 , `, "/0"),
-}, {
-	name:                jsontest.Name("Whitespace"),
-	in:                  " \n\r\t",
-	wantValid:           false,
-	wantCompacted:       " \n\r\t",
-	wantCompactErr:      E(io.ErrUnexpectedEOF).withPos(" \n\r\t", ""),
-	wantIndentErr:       E(io.ErrUnexpectedEOF).withPos(" \n\r\t", ""),
-	wantCanonicalizeErr: E(io.ErrUnexpectedEOF).withPos(" \n\r\t", ""),
-}}...)
-
-func TestValueMethods(t *testing.T) {
-	for _, td := range valueTestdata {
-		t.Run(td.name.Name, func(t *testing.T) {
-			if td.wantIndented == "" {
-				td.wantIndented = td.wantCompacted
-			}
-			if td.wantCanonicalized == "" {
-				td.wantCanonicalized = td.wantCompacted
-			}
-			if td.wantCompactErr != nil {
-				td.wantCompacted = td.in
-			}
-			if td.wantIndentErr != nil {
-				td.wantIndented = td.in
-			}
-			if td.wantCanonicalizeErr != nil {
-				td.wantCanonicalized = td.in
-			}
-
-			v := Value(td.in)
-			gotValid := v.IsValid()
-			if gotValid != td.wantValid {
-				t.Errorf("%s: Value.IsValid = %v, want %v", td.name.Where, gotValid, td.wantValid)
-			}
-
-			gotCompacted := Value(td.in)
-			gotCompactErr := gotCompacted.Compact()
-			if string(gotCompacted) != td.wantCompacted {
-				t.Errorf("%s: Value.Compact = %s, want %s", td.name.Where, gotCompacted, td.wantCompacted)
-			}
-			if !equalError(gotCompactErr, td.wantCompactErr) {
-				t.Errorf("%s: Value.Compact error mismatch:\ngot  %v\nwant %v", td.name.Where, gotCompactErr, td.wantCompactErr)
-			}
-
-			gotIndented := Value(td.in)
-			gotIndentErr := gotIndented.Indent(WithIndentPrefix("\t"), WithIndent("    "))
-			if string(gotIndented) != td.wantIndented {
-				t.Errorf("%s: Value.Indent = %s, want %s", td.name.Where, gotIndented, td.wantIndented)
-			}
-			if !equalError(gotIndentErr, td.wantIndentErr) {
-				t.Errorf("%s: Value.Indent error mismatch:\ngot  %v\nwant %v", td.name.Where, gotIndentErr, td.wantIndentErr)
-			}
-
-			gotCanonicalized := Value(td.in)
-			gotCanonicalizeErr := gotCanonicalized.Canonicalize()
-			if string(gotCanonicalized) != td.wantCanonicalized {
-				t.Errorf("%s: Value.Canonicalize = %s, want %s", td.name.Where, gotCanonicalized, td.wantCanonicalized)
-			}
-			if !equalError(gotCanonicalizeErr, td.wantCanonicalizeErr) {
-				t.Errorf("%s: Value.Canonicalize error mismatch:\ngot  %v\nwant %v", td.name.Where, gotCanonicalizeErr, td.wantCanonicalizeErr)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/number_test.go b/src/encoding/json/number_test.go
index 69eccaaffd5706..c82e6deb832626 100644
--- a/src/encoding/json/number_test.go
+++ b/src/encoding/json/number_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/scanner.go b/src/encoding/json/scanner.go
index f4086186e29b0b..3445dbf2bb11fb 100644
--- a/src/encoding/json/scanner.go
+++ b/src/encoding/json/scanner.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 // JSON value parser state machine.
diff --git a/src/encoding/json/scanner_test.go b/src/encoding/json/scanner_test.go
index fb64463599625e..068439dcaca858 100644
--- a/src/encoding/json/scanner_test.go
+++ b/src/encoding/json/scanner_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/stream.go b/src/encoding/json/stream.go
index fc480c994651d2..e2d9470bcc7fca 100644
--- a/src/encoding/json/stream.go
+++ b/src/encoding/json/stream.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/stream_test.go b/src/encoding/json/stream_test.go
index 478ee1829195d6..46f9407c881c36 100644
--- a/src/encoding/json/stream_test.go
+++ b/src/encoding/json/stream_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/tables.go b/src/encoding/json/tables.go
index e8841cfc681f66..10acdc18c6b0b4 100644
--- a/src/encoding/json/tables.go
+++ b/src/encoding/json/tables.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import "unicode/utf8"
diff --git a/src/encoding/json/tagkey_test.go b/src/encoding/json/tagkey_test.go
index 8e4d360e94dcfd..d432cd7d8bdfc8 100644
--- a/src/encoding/json/tagkey_test.go
+++ b/src/encoding/json/tagkey_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/tags.go b/src/encoding/json/tags.go
index 5ebd700fa69fed..b490328f4c46e7 100644
--- a/src/encoding/json/tags.go
+++ b/src/encoding/json/tags.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import (
diff --git a/src/encoding/json/tags_test.go b/src/encoding/json/tags_test.go
index 6bb621c1284209..eb43ff553095c0 100644
--- a/src/encoding/json/tags_test.go
+++ b/src/encoding/json/tags_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !goexperiment.jsonv2
-
 package json
 
 import "testing"
diff --git a/src/encoding/json/v2/arshal.go b/src/encoding/json/v2/arshal.go
deleted file mode 100644
index 99fcc5bd467d17..00000000000000
--- a/src/encoding/json/v2/arshal.go
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"encoding"
-	"io"
-	"reflect"
-	"slices"
-	"strings"
-	"sync"
-	"time"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/jsontext"
-)
-
-// Reference encoding and time packages to assist pkgsite
-// in being able to hotlink references to those packages.
-var (
-	_ encoding.TextMarshaler
-	_ encoding.TextAppender
-	_ encoding.TextUnmarshaler
-	_ time.Time
-	_ time.Duration
-)
-
-// export exposes internal functionality of the "jsontext" package.
-var export = jsontext.Internal.Export(&internal.AllowInternalUse)
-
-// Marshal serializes a Go value as a []byte according to the provided
-// marshal and encode options (while ignoring unmarshal or decode options).
-// It does not terminate the output with a newline.
-//
-// Type-specific marshal functions and methods take precedence
-// over the default representation of a value.
-// Functions or methods that operate on *T are only called when encoding
-// a value of type T (by taking its address) or a non-nil value of *T.
-// Marshal ensures that a value is always addressable
-// (by boxing it on the heap if necessary) so that
-// these functions and methods can be consistently called. For performance,
-// it is recommended that Marshal be passed a non-nil pointer to the value.
-//
-// The input value is encoded as JSON according the following rules:
-//
-//   - If any type-specific functions in a [WithMarshalers] option match
-//     the value type, then those functions are called to encode the value.
-//     If all applicable functions return [SkipFunc],
-//     then the value is encoded according to subsequent rules.
-//
-//   - If the value type implements [MarshalerTo],
-//     then the MarshalJSONTo method is called to encode the value.
-//
-//   - If the value type implements [Marshaler],
-//     then the MarshalJSON method is called to encode the value.
-//
-//   - If the value type implements [encoding.TextAppender],
-//     then the AppendText method is called to encode the value and
-//     subsequently encode its result as a JSON string.
-//
-//   - If the value type implements [encoding.TextMarshaler],
-//     then the MarshalText method is called to encode the value and
-//     subsequently encode its result as a JSON string.
-//
-//   - Otherwise, the value is encoded according to the value's type
-//     as described in detail below.
-//
-// Most Go types have a default JSON representation.
-// Certain types support specialized formatting according to
-// a format flag optionally specified in the Go struct tag
-// for the struct field that contains the current value
-// (see the “JSON Representation of Go structs” section for more details).
-//
-// The representation of each type is as follows:
-//
-//   - A Go boolean is encoded as a JSON boolean (e.g., true or false).
-//     It does not support any custom format flags.
-//
-//   - A Go string is encoded as a JSON string.
-//     It does not support any custom format flags.
-//
-//   - A Go []byte or [N]byte is encoded as a JSON string containing
-//     the binary value encoded using RFC 4648.
-//     If the format is "base64" or unspecified, then this uses RFC 4648, section 4.
-//     If the format is "base64url", then this uses RFC 4648, section 5.
-//     If the format is "base32", then this uses RFC 4648, section 6.
-//     If the format is "base32hex", then this uses RFC 4648, section 7.
-//     If the format is "base16" or "hex", then this uses RFC 4648, section 8.
-//     If the format is "array", then the bytes value is encoded as a JSON array
-//     where each byte is recursively JSON-encoded as each JSON array element.
-//
-//   - A Go integer is encoded as a JSON number without fractions or exponents.
-//     If [StringifyNumbers] is specified or encoding a JSON object name,
-//     then the JSON number is encoded within a JSON string.
-//     It does not support any custom format flags.
-//
-//   - A Go float is encoded as a JSON number.
-//     If [StringifyNumbers] is specified or encoding a JSON object name,
-//     then the JSON number is encoded within a JSON string.
-//     If the format is "nonfinite", then NaN, +Inf, and -Inf are encoded as
-//     the JSON strings "NaN", "Infinity", and "-Infinity", respectively.
-//     Otherwise, the presence of non-finite numbers results in a [SemanticError].
-//
-//   - A Go map is encoded as a JSON object, where each Go map key and value
-//     is recursively encoded as a name and value pair in the JSON object.
-//     The Go map key must encode as a JSON string, otherwise this results
-//     in a [SemanticError]. The Go map is traversed in a non-deterministic order.
-//     For deterministic encoding, consider using the [Deterministic] option.
-//     If the format is "emitnull", then a nil map is encoded as a JSON null.
-//     If the format is "emitempty", then a nil map is encoded as an empty JSON object,
-//     regardless of whether [FormatNilMapAsNull] is specified.
-//     Otherwise by default, a nil map is encoded as an empty JSON object.
-//
-//   - A Go struct is encoded as a JSON object.
-//     See the “JSON Representation of Go structs” section
-//     in the package-level documentation for more details.
-//
-//   - A Go slice is encoded as a JSON array, where each Go slice element
-//     is recursively JSON-encoded as the elements of the JSON array.
-//     If the format is "emitnull", then a nil slice is encoded as a JSON null.
-//     If the format is "emitempty", then a nil slice is encoded as an empty JSON array,
-//     regardless of whether [FormatNilSliceAsNull] is specified.
-//     Otherwise by default, a nil slice is encoded as an empty JSON array.
-//
-//   - A Go array is encoded as a JSON array, where each Go array element
-//     is recursively JSON-encoded as the elements of the JSON array.
-//     The JSON array length is always identical to the Go array length.
-//     It does not support any custom format flags.
-//
-//   - A Go pointer is encoded as a JSON null if nil, otherwise it is
-//     the recursively JSON-encoded representation of the underlying value.
-//     Format flags are forwarded to the encoding of the underlying value.
-//
-//   - A Go interface is encoded as a JSON null if nil, otherwise it is
-//     the recursively JSON-encoded representation of the underlying value.
-//     It does not support any custom format flags.
-//
-//   - A Go [time.Time] is encoded as a JSON string containing the timestamp
-//     formatted in RFC 3339 with nanosecond precision.
-//     If the format matches one of the format constants declared
-//     in the time package (e.g., RFC1123), then that format is used.
-//     If the format is "unix", "unixmilli", "unixmicro", or "unixnano",
-//     then the timestamp is encoded as a JSON number of the number of seconds
-//     (or milliseconds, microseconds, or nanoseconds) since the Unix epoch,
-//     which is January 1st, 1970 at 00:00:00 UTC.
-//     Otherwise, the format is used as-is with [time.Time.Format] if non-empty.
-//
-//   - A Go [time.Duration] is encoded as a JSON string containing the duration
-//     formatted according to [time.Duration.String].
-//     If the format is "sec", "milli", "micro", or "nano",
-//     then the duration is encoded as a JSON number of the number of seconds
-//     (or milliseconds, microseconds, or nanoseconds) in the duration.
-//     If the format is "units", it uses [time.Duration.String].
-//
-//   - All other Go types (e.g., complex numbers, channels, and functions)
-//     have no default representation and result in a [SemanticError].
-//
-// JSON cannot represent cyclic data structures and Marshal does not handle them.
-// Passing cyclic structures will result in an error.
-func Marshal(in any, opts ...Options) (out []byte, err error) {
-	enc := export.GetBufferedEncoder(opts...)
-	defer export.PutBufferedEncoder(enc)
-	xe := export.Encoder(enc)
-	xe.Flags.Set(jsonflags.OmitTopLevelNewline | 1)
-	err = marshalEncode(enc, in, &xe.Struct)
-	if err != nil && xe.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return nil, internal.TransformMarshalError(in, err)
-	}
-	return bytes.Clone(xe.Buf), err
-}
-
-// MarshalWrite serializes a Go value into an [io.Writer] according to the provided
-// marshal and encode options (while ignoring unmarshal or decode options).
-// It does not terminate the output with a newline.
-// See [Marshal] for details about the conversion of a Go value into JSON.
-func MarshalWrite(out io.Writer, in any, opts ...Options) (err error) {
-	enc := export.GetStreamingEncoder(out, opts...)
-	defer export.PutStreamingEncoder(enc)
-	xe := export.Encoder(enc)
-	xe.Flags.Set(jsonflags.OmitTopLevelNewline | 1)
-	err = marshalEncode(enc, in, &xe.Struct)
-	if err != nil && xe.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return internal.TransformMarshalError(in, err)
-	}
-	return err
-}
-
-// MarshalEncode serializes a Go value into an [jsontext.Encoder] according to
-// the provided marshal options (while ignoring unmarshal, encode, or decode options).
-// Any marshal-relevant options already specified on the [jsontext.Encoder]
-// take lower precedence than the set of options provided by the caller.
-// Unlike [Marshal] and [MarshalWrite], encode options are ignored because
-// they must have already been specified on the provided [jsontext.Encoder].
-//
-// See [Marshal] for details about the conversion of a Go value into JSON.
-func MarshalEncode(out *jsontext.Encoder, in any, opts ...Options) (err error) {
-	xe := export.Encoder(out)
-	if len(opts) > 0 {
-		optsOriginal := xe.Struct
-		defer func() { xe.Struct = optsOriginal }()
-		xe.Struct.JoinWithoutCoderOptions(opts...)
-	}
-	err = marshalEncode(out, in, &xe.Struct)
-	if err != nil && xe.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return internal.TransformMarshalError(in, err)
-	}
-	return err
-}
-
-func marshalEncode(out *jsontext.Encoder, in any, mo *jsonopts.Struct) (err error) {
-	v := reflect.ValueOf(in)
-	if !v.IsValid() || (v.Kind() == reflect.Pointer && v.IsNil()) {
-		return out.WriteToken(jsontext.Null)
-	}
-	// Shallow copy non-pointer values to obtain an addressable value.
-	// It is beneficial to performance to always pass pointers to avoid this.
-	forceAddr := v.Kind() != reflect.Pointer
-	if forceAddr {
-		v2 := reflect.New(v.Type())
-		v2.Elem().Set(v)
-		v = v2
-	}
-	va := addressableValue{v.Elem(), forceAddr} // dereferenced pointer is always addressable
-	t := va.Type()
-
-	// Lookup and call the marshal function for this type.
-	marshal := lookupArshaler(t).marshal
-	if mo.Marshalers != nil {
-		marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, t)
-	}
-	if err := marshal(out, va, mo); err != nil {
-		if !mo.Flags.Get(jsonflags.AllowDuplicateNames) {
-			export.Encoder(out).Tokens.InvalidateDisabledNamespaces()
-		}
-		return err
-	}
-	return nil
-}
-
-// Unmarshal decodes a []byte input into a Go value according to the provided
-// unmarshal and decode options (while ignoring marshal or encode options).
-// The input must be a single JSON value with optional whitespace interspersed.
-// The output must be a non-nil pointer.
-//
-// Type-specific unmarshal functions and methods take precedence
-// over the default representation of a value.
-// Functions or methods that operate on *T are only called when decoding
-// a value of type T (by taking its address) or a non-nil value of *T.
-// Unmarshal ensures that a value is always addressable
-// (by boxing it on the heap if necessary) so that
-// these functions and methods can be consistently called.
-//
-// The input is decoded into the output according the following rules:
-//
-//   - If any type-specific functions in a [WithUnmarshalers] option match
-//     the value type, then those functions are called to decode the JSON
-//     value. If all applicable functions return [SkipFunc],
-//     then the input is decoded according to subsequent rules.
-//
-//   - If the value type implements [UnmarshalerFrom],
-//     then the UnmarshalJSONFrom method is called to decode the JSON value.
-//
-//   - If the value type implements [Unmarshaler],
-//     then the UnmarshalJSON method is called to decode the JSON value.
-//
-//   - If the value type implements [encoding.TextUnmarshaler],
-//     then the input is decoded as a JSON string and
-//     the UnmarshalText method is called with the decoded string value.
-//     This fails with a [SemanticError] if the input is not a JSON string.
-//
-//   - Otherwise, the JSON value is decoded according to the value's type
-//     as described in detail below.
-//
-// Most Go types have a default JSON representation.
-// Certain types support specialized formatting according to
-// a format flag optionally specified in the Go struct tag
-// for the struct field that contains the current value
-// (see the “JSON Representation of Go structs” section for more details).
-// A JSON null may be decoded into every supported Go value where
-// it is equivalent to storing the zero value of the Go value.
-// If the input JSON kind is not handled by the current Go value type,
-// then this fails with a [SemanticError]. Unless otherwise specified,
-// the decoded value replaces any pre-existing value.
-//
-// The representation of each type is as follows:
-//
-//   - A Go boolean is decoded from a JSON boolean (e.g., true or false).
-//     It does not support any custom format flags.
-//
-//   - A Go string is decoded from a JSON string.
-//     It does not support any custom format flags.
-//
-//   - A Go []byte or [N]byte is decoded from a JSON string
-//     containing the binary value encoded using RFC 4648.
-//     If the format is "base64" or unspecified, then this uses RFC 4648, section 4.
-//     If the format is "base64url", then this uses RFC 4648, section 5.
-//     If the format is "base32", then this uses RFC 4648, section 6.
-//     If the format is "base32hex", then this uses RFC 4648, section 7.
-//     If the format is "base16" or "hex", then this uses RFC 4648, section 8.
-//     If the format is "array", then the Go slice or array is decoded from a
-//     JSON array where each JSON element is recursively decoded for each byte.
-//     When decoding into a non-nil []byte, the slice length is reset to zero
-//     and the decoded input is appended to it.
-//     When decoding into a [N]byte, the input must decode to exactly N bytes,
-//     otherwise it fails with a [SemanticError].
-//
-//   - A Go integer is decoded from a JSON number.
-//     It must be decoded from a JSON string containing a JSON number
-//     if [StringifyNumbers] is specified or decoding a JSON object name.
-//     It fails with a [SemanticError] if the JSON number
-//     has a fractional or exponent component.
-//     It also fails if it overflows the representation of the Go integer type.
-//     It does not support any custom format flags.
-//
-//   - A Go float is decoded from a JSON number.
-//     It must be decoded from a JSON string containing a JSON number
-//     if [StringifyNumbers] is specified or decoding a JSON object name.
-//     It fails if it overflows the representation of the Go float type.
-//     If the format is "nonfinite", then the JSON strings
-//     "NaN", "Infinity", and "-Infinity" are decoded as NaN, +Inf, and -Inf.
-//     Otherwise, the presence of such strings results in a [SemanticError].
-//
-//   - A Go map is decoded from a JSON object,
-//     where each JSON object name and value pair is recursively decoded
-//     as the Go map key and value. Maps are not cleared.
-//     If the Go map is nil, then a new map is allocated to decode into.
-//     If the decoded key matches an existing Go map entry, the entry value
-//     is reused by decoding the JSON object value into it.
-//     The formats "emitnull" and "emitempty" have no effect when decoding.
-//
-//   - A Go struct is decoded from a JSON object.
-//     See the “JSON Representation of Go structs” section
-//     in the package-level documentation for more details.
-//
-//   - A Go slice is decoded from a JSON array, where each JSON element
-//     is recursively decoded and appended to the Go slice.
-//     Before appending into a Go slice, a new slice is allocated if it is nil,
-//     otherwise the slice length is reset to zero.
-//     The formats "emitnull" and "emitempty" have no effect when decoding.
-//
-//   - A Go array is decoded from a JSON array, where each JSON array element
-//     is recursively decoded as each corresponding Go array element.
-//     Each Go array element is zeroed before decoding into it.
-//     It fails with a [SemanticError] if the JSON array does not contain
-//     the exact same number of elements as the Go array.
-//     It does not support any custom format flags.
-//
-//   - A Go pointer is decoded based on the JSON kind and underlying Go type.
-//     If the input is a JSON null, then this stores a nil pointer.
-//     Otherwise, it allocates a new underlying value if the pointer is nil,
-//     and recursively JSON decodes into the underlying value.
-//     Format flags are forwarded to the decoding of the underlying type.
-//
-//   - A Go interface is decoded based on the JSON kind and underlying Go type.
-//     If the input is a JSON null, then this stores a nil interface value.
-//     Otherwise, a nil interface value of an empty interface type is initialized
-//     with a zero Go bool, string, float64, map[string]any, or []any if the
-//     input is a JSON boolean, string, number, object, or array, respectively.
-//     If the interface value is still nil, then this fails with a [SemanticError]
-//     since decoding could not determine an appropriate Go type to decode into.
-//     For example, unmarshaling into a nil io.Reader fails since
-//     there is no concrete type to populate the interface value with.
-//     Otherwise an underlying value exists and it recursively decodes
-//     the JSON input into it. It does not support any custom format flags.
-//
-//   - A Go [time.Time] is decoded from a JSON string containing the time
-//     formatted in RFC 3339 with nanosecond precision.
-//     If the format matches one of the format constants declared in
-//     the time package (e.g., RFC1123), then that format is used for parsing.
-//     If the format is "unix", "unixmilli", "unixmicro", or "unixnano",
-//     then the timestamp is decoded from a JSON number of the number of seconds
-//     (or milliseconds, microseconds, or nanoseconds) since the Unix epoch,
-//     which is January 1st, 1970 at 00:00:00 UTC.
-//     Otherwise, the format is used as-is with [time.Time.Parse] if non-empty.
-//
-//   - A Go [time.Duration] is decoded from a JSON string by
-//     passing the decoded string to [time.ParseDuration].
-//     If the format is "sec", "milli", "micro", or "nano",
-//     then the duration is decoded from a JSON number of the number of seconds
-//     (or milliseconds, microseconds, or nanoseconds) in the duration.
-//     If the format is "units", it uses [time.ParseDuration].
-//
-//   - All other Go types (e.g., complex numbers, channels, and functions)
-//     have no default representation and result in a [SemanticError].
-//
-// In general, unmarshaling follows merge semantics (similar to RFC 7396)
-// where the decoded Go value replaces the destination value
-// for any JSON kind other than an object.
-// For JSON objects, the input object is merged into the destination value
-// where matching object members recursively apply merge semantics.
-func Unmarshal(in []byte, out any, opts ...Options) (err error) {
-	dec := export.GetBufferedDecoder(in, opts...)
-	defer export.PutBufferedDecoder(dec)
-	xd := export.Decoder(dec)
-	err = unmarshalFull(dec, out, &xd.Struct)
-	if err != nil && xd.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return internal.TransformUnmarshalError(out, err)
-	}
-	return err
-}
-
-// UnmarshalRead deserializes a Go value from an [io.Reader] according to the
-// provided unmarshal and decode options (while ignoring marshal or encode options).
-// The input must be a single JSON value with optional whitespace interspersed.
-// It consumes the entirety of [io.Reader] until [io.EOF] is encountered,
-// without reporting an error for EOF. The output must be a non-nil pointer.
-// See [Unmarshal] for details about the conversion of JSON into a Go value.
-func UnmarshalRead(in io.Reader, out any, opts ...Options) (err error) {
-	dec := export.GetStreamingDecoder(in, opts...)
-	defer export.PutStreamingDecoder(dec)
-	xd := export.Decoder(dec)
-	err = unmarshalFull(dec, out, &xd.Struct)
-	if err != nil && xd.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return internal.TransformUnmarshalError(out, err)
-	}
-	return err
-}
-
-func unmarshalFull(in *jsontext.Decoder, out any, uo *jsonopts.Struct) error {
-	switch err := unmarshalDecode(in, out, uo); err {
-	case nil:
-		return export.Decoder(in).CheckEOF()
-	case io.EOF:
-		return io.ErrUnexpectedEOF
-	default:
-		return err
-	}
-}
-
-// UnmarshalDecode deserializes a Go value from a [jsontext.Decoder] according to
-// the provided unmarshal options (while ignoring marshal, encode, or decode options).
-// Any unmarshal options already specified on the [jsontext.Decoder]
-// take lower precedence than the set of options provided by the caller.
-// Unlike [Unmarshal] and [UnmarshalRead], decode options are ignored because
-// they must have already been specified on the provided [jsontext.Decoder].
-//
-// The input may be a stream of one or more JSON values,
-// where this only unmarshals the next JSON value in the stream.
-// The output must be a non-nil pointer.
-// See [Unmarshal] for details about the conversion of JSON into a Go value.
-func UnmarshalDecode(in *jsontext.Decoder, out any, opts ...Options) (err error) {
-	xd := export.Decoder(in)
-	if len(opts) > 0 {
-		optsOriginal := xd.Struct
-		defer func() { xd.Struct = optsOriginal }()
-		xd.Struct.JoinWithoutCoderOptions(opts...)
-	}
-	err = unmarshalDecode(in, out, &xd.Struct)
-	if err != nil && xd.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		return internal.TransformUnmarshalError(out, err)
-	}
-	return err
-}
-
-func unmarshalDecode(in *jsontext.Decoder, out any, uo *jsonopts.Struct) (err error) {
-	v := reflect.ValueOf(out)
-	if v.Kind() != reflect.Pointer || v.IsNil() {
-		return &SemanticError{action: "unmarshal", GoType: reflect.TypeOf(out), Err: internal.ErrNonNilReference}
-	}
-	va := addressableValue{v.Elem(), false} // dereferenced pointer is always addressable
-	t := va.Type()
-
-	// In legacy semantics, the entirety of the next JSON value
-	// was validated before attempting to unmarshal it.
-	if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		if err := export.Decoder(in).CheckNextValue(); err != nil {
-			return err
-		}
-	}
-
-	// Lookup and call the unmarshal function for this type.
-	unmarshal := lookupArshaler(t).unmarshal
-	if uo.Unmarshalers != nil {
-		unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, t)
-	}
-	if err := unmarshal(in, va, uo); err != nil {
-		if !uo.Flags.Get(jsonflags.AllowDuplicateNames) {
-			export.Decoder(in).Tokens.InvalidateDisabledNamespaces()
-		}
-		return err
-	}
-	return nil
-}
-
-// addressableValue is a reflect.Value that is guaranteed to be addressable
-// such that calling the Addr and Set methods do not panic.
-//
-// There is no compile magic that enforces this property,
-// but rather the need to construct this type makes it easier to examine each
-// construction site to ensure that this property is upheld.
-type addressableValue struct {
-	reflect.Value
-
-	// forcedAddr reports whether this value is addressable
-	// only through the use of [newAddressableValue].
-	// This is only used for [jsonflags.CallMethodsWithLegacySemantics].
-	forcedAddr bool
-}
-
-// newAddressableValue constructs a new addressable value of type t.
-func newAddressableValue(t reflect.Type) addressableValue {
-	return addressableValue{reflect.New(t).Elem(), true}
-}
-
-// TODO: Remove *jsonopts.Struct argument from [marshaler] and [unmarshaler].
-// This can be directly accessed on the encoder or decoder.
-
-// All marshal and unmarshal behavior is implemented using these signatures.
-// The *jsonopts.Struct argument is guaranteed to identical to or at least
-// a strict super-set of the options in Encoder.Struct or Decoder.Struct.
-// It is identical for Marshal, Unmarshal, MarshalWrite, and UnmarshalRead.
-// It is a super-set for MarshalEncode and UnmarshalDecode.
-type (
-	marshaler   = func(*jsontext.Encoder, addressableValue, *jsonopts.Struct) error
-	unmarshaler = func(*jsontext.Decoder, addressableValue, *jsonopts.Struct) error
-)
-
-type arshaler struct {
-	marshal    marshaler
-	unmarshal  unmarshaler
-	nonDefault bool
-}
-
-var lookupArshalerCache sync.Map // map[reflect.Type]*arshaler
-
-func lookupArshaler(t reflect.Type) *arshaler {
-	if v, ok := lookupArshalerCache.Load(t); ok {
-		return v.(*arshaler)
-	}
-
-	fncs := makeDefaultArshaler(t)
-	fncs = makeMethodArshaler(fncs, t)
-	fncs = makeTimeArshaler(fncs, t)
-
-	// Use the last stored so that duplicate arshalers can be garbage collected.
-	v, _ := lookupArshalerCache.LoadOrStore(t, fncs)
-	return v.(*arshaler)
-}
-
-var stringsPools = &sync.Pool{New: func() any { return new(stringSlice) }}
-
-type stringSlice []string
-
-// getStrings returns a non-nil pointer to a slice with length n.
-func getStrings(n int) *stringSlice {
-	s := stringsPools.Get().(*stringSlice)
-	if cap(*s) < n {
-		*s = make([]string, n)
-	}
-	*s = (*s)[:n]
-	return s
-}
-
-func putStrings(s *stringSlice) {
-	if cap(*s) > 1<<10 {
-		*s = nil // avoid pinning arbitrarily large amounts of memory
-	}
-	stringsPools.Put(s)
-}
-
-func (ss *stringSlice) Sort() {
-	slices.SortFunc(*ss, func(x, y string) int { return strings.Compare(x, y) })
-}
diff --git a/src/encoding/json/v2/arshal_any.go b/src/encoding/json/v2/arshal_any.go
deleted file mode 100644
index 3fb679d553e5dd..00000000000000
--- a/src/encoding/json/v2/arshal_any.go
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright 2022 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"cmp"
-	"reflect"
-	"strconv"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-// This file contains an optimized marshal and unmarshal implementation
-// for the any type. This type is often used when the Go program has
-// no knowledge of the JSON schema. This is a common enough occurrence
-// to justify the complexity of adding logic for this.
-
-// marshalValueAny marshals a Go any as a JSON value.
-// This assumes that there are no special formatting directives
-// for any possible nested value.
-func marshalValueAny(enc *jsontext.Encoder, val any, mo *jsonopts.Struct) error {
-	switch val := val.(type) {
-	case nil:
-		return enc.WriteToken(jsontext.Null)
-	case bool:
-		return enc.WriteToken(jsontext.Bool(val))
-	case string:
-		return enc.WriteToken(jsontext.String(val))
-	case float64:
-		return enc.WriteToken(jsontext.Float(val))
-	case map[string]any:
-		return marshalObjectAny(enc, val, mo)
-	case []any:
-		return marshalArrayAny(enc, val, mo)
-	default:
-		v := newAddressableValue(reflect.TypeOf(val))
-		v.Set(reflect.ValueOf(val))
-		marshal := lookupArshaler(v.Type()).marshal
-		if mo.Marshalers != nil {
-			marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, v.Type())
-		}
-		return marshal(enc, v, mo)
-	}
-}
-
-// unmarshalValueAny unmarshals a JSON value as a Go any.
-// This assumes that there are no special formatting directives
-// for any possible nested value.
-// Duplicate names must be rejected since this does not implement merging.
-func unmarshalValueAny(dec *jsontext.Decoder, uo *jsonopts.Struct) (any, error) {
-	switch k := dec.PeekKind(); k {
-	case '{':
-		return unmarshalObjectAny(dec, uo)
-	case '[':
-		return unmarshalArrayAny(dec, uo)
-	default:
-		xd := export.Decoder(dec)
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return nil, err
-		}
-		switch val.Kind() {
-		case 'n':
-			return nil, nil
-		case 'f':
-			return false, nil
-		case 't':
-			return true, nil
-		case '"':
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			if xd.StringCache == nil {
-				xd.StringCache = new(stringCache)
-			}
-			return makeString(xd.StringCache, val), nil
-		case '0':
-			if uo.Flags.Get(jsonflags.UnmarshalAnyWithRawNumber) {
-				return internal.RawNumberOf(val), nil
-			}
-			fv, ok := jsonwire.ParseFloat(val, 64)
-			if !ok {
-				return fv, newUnmarshalErrorAfterWithValue(dec, float64Type, strconv.ErrRange)
-			}
-			return fv, nil
-		default:
-			panic("BUG: invalid kind: " + k.String())
-		}
-	}
-}
-
-// marshalObjectAny marshals a Go map[string]any as a JSON object
-// (or as a JSON null if nil and [jsonflags.FormatNilMapAsNull]).
-func marshalObjectAny(enc *jsontext.Encoder, obj map[string]any, mo *jsonopts.Struct) error {
-	// Check for cycles.
-	xe := export.Encoder(enc)
-	if xe.Tokens.Depth() > startDetectingCyclesAfter {
-		v := reflect.ValueOf(obj)
-		if err := visitPointer(&xe.SeenPointers, v); err != nil {
-			return newMarshalErrorBefore(enc, anyType, err)
-		}
-		defer leavePointer(&xe.SeenPointers, v)
-	}
-
-	// Handle empty maps.
-	if len(obj) == 0 {
-		if mo.Flags.Get(jsonflags.FormatNilMapAsNull) && obj == nil {
-			return enc.WriteToken(jsontext.Null)
-		}
-		// Optimize for marshaling an empty map without any preceding whitespace.
-		if !mo.Flags.Get(jsonflags.AnyWhitespace) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = append(xe.Tokens.MayAppendDelim(xe.Buf, '{'), "{}"...)
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-	}
-
-	if err := enc.WriteToken(jsontext.BeginObject); err != nil {
-		return err
-	}
-	// A Go map guarantees that each entry has a unique key
-	// The only possibility of duplicates is due to invalid UTF-8.
-	if !mo.Flags.Get(jsonflags.AllowInvalidUTF8) {
-		xe.Tokens.Last.DisableNamespace()
-	}
-	if !mo.Flags.Get(jsonflags.Deterministic) || len(obj) <= 1 {
-		for name, val := range obj {
-			if err := enc.WriteToken(jsontext.String(name)); err != nil {
-				return err
-			}
-			if err := marshalValueAny(enc, val, mo); err != nil {
-				return err
-			}
-		}
-	} else {
-		names := getStrings(len(obj))
-		var i int
-		for name := range obj {
-			(*names)[i] = name
-			i++
-		}
-		names.Sort()
-		for _, name := range *names {
-			if err := enc.WriteToken(jsontext.String(name)); err != nil {
-				return err
-			}
-			if err := marshalValueAny(enc, obj[name], mo); err != nil {
-				return err
-			}
-		}
-		putStrings(names)
-	}
-	if err := enc.WriteToken(jsontext.EndObject); err != nil {
-		return err
-	}
-	return nil
-}
-
-// unmarshalObjectAny unmarshals a JSON object as a Go map[string]any.
-// It panics if not decoding a JSON object.
-func unmarshalObjectAny(dec *jsontext.Decoder, uo *jsonopts.Struct) (map[string]any, error) {
-	switch tok, err := dec.ReadToken(); {
-	case err != nil:
-		return nil, err
-	case tok.Kind() != '{':
-		panic("BUG: invalid kind: " + tok.Kind().String())
-	}
-	obj := make(map[string]any)
-	// A Go map guarantees that each entry has a unique key
-	// The only possibility of duplicates is due to invalid UTF-8.
-	if !uo.Flags.Get(jsonflags.AllowInvalidUTF8) {
-		export.Decoder(dec).Tokens.Last.DisableNamespace()
-	}
-	var errUnmarshal error
-	for dec.PeekKind() != '}' {
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return obj, err
-		}
-		name := tok.String()
-
-		// Manually check for duplicate names.
-		if _, ok := obj[name]; ok {
-			// TODO: Unread the object name.
-			name := export.Decoder(dec).PreviousTokenOrValue()
-			err := newDuplicateNameError(dec.StackPointer(), nil, dec.InputOffset()-len64(name))
-			return obj, err
-		}
-
-		val, err := unmarshalValueAny(dec, uo)
-		obj[name] = val
-		if err != nil {
-			if isFatalError(err, uo.Flags) {
-				return obj, err
-			}
-			errUnmarshal = cmp.Or(err, errUnmarshal)
-		}
-	}
-	if _, err := dec.ReadToken(); err != nil {
-		return obj, err
-	}
-	return obj, errUnmarshal
-}
-
-// marshalArrayAny marshals a Go []any as a JSON array
-// (or as a JSON null if nil and [jsonflags.FormatNilSliceAsNull]).
-func marshalArrayAny(enc *jsontext.Encoder, arr []any, mo *jsonopts.Struct) error {
-	// Check for cycles.
-	xe := export.Encoder(enc)
-	if xe.Tokens.Depth() > startDetectingCyclesAfter {
-		v := reflect.ValueOf(arr)
-		if err := visitPointer(&xe.SeenPointers, v); err != nil {
-			return newMarshalErrorBefore(enc, sliceAnyType, err)
-		}
-		defer leavePointer(&xe.SeenPointers, v)
-	}
-
-	// Handle empty slices.
-	if len(arr) == 0 {
-		if mo.Flags.Get(jsonflags.FormatNilSliceAsNull) && arr == nil {
-			return enc.WriteToken(jsontext.Null)
-		}
-		// Optimize for marshaling an empty slice without any preceding whitespace.
-		if !mo.Flags.Get(jsonflags.AnyWhitespace) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = append(xe.Tokens.MayAppendDelim(xe.Buf, '['), "[]"...)
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-	}
-
-	if err := enc.WriteToken(jsontext.BeginArray); err != nil {
-		return err
-	}
-	for _, val := range arr {
-		if err := marshalValueAny(enc, val, mo); err != nil {
-			return err
-		}
-	}
-	if err := enc.WriteToken(jsontext.EndArray); err != nil {
-		return err
-	}
-	return nil
-}
-
-// unmarshalArrayAny unmarshals a JSON array as a Go []any.
-// It panics if not decoding a JSON array.
-func unmarshalArrayAny(dec *jsontext.Decoder, uo *jsonopts.Struct) ([]any, error) {
-	switch tok, err := dec.ReadToken(); {
-	case err != nil:
-		return nil, err
-	case tok.Kind() != '[':
-		panic("BUG: invalid kind: " + tok.Kind().String())
-	}
-	arr := []any{}
-	var errUnmarshal error
-	for dec.PeekKind() != ']' {
-		val, err := unmarshalValueAny(dec, uo)
-		arr = append(arr, val)
-		if err != nil {
-			if isFatalError(err, uo.Flags) {
-				return arr, err
-			}
-			errUnmarshal = cmp.Or(errUnmarshal, err)
-		}
-	}
-	if _, err := dec.ReadToken(); err != nil {
-		return arr, err
-	}
-	return arr, errUnmarshal
-}
diff --git a/src/encoding/json/v2/arshal_default.go b/src/encoding/json/v2/arshal_default.go
deleted file mode 100644
index 5ca51c66353cbc..00000000000000
--- a/src/encoding/json/v2/arshal_default.go
+++ /dev/null
@@ -1,1910 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"cmp"
-	"encoding"
-	"encoding/base32"
-	"encoding/base64"
-	"encoding/hex"
-	"errors"
-	"fmt"
-	"math"
-	"reflect"
-	"slices"
-	"strconv"
-	"strings"
-	"sync"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-// optimizeCommon specifies whether to use optimizations targeted for certain
-// common patterns, rather than using the slower, but more general logic.
-// All tests should pass regardless of whether this is true or not.
-const optimizeCommon = true
-
-var (
-	// Most natural Go type that correspond with each JSON type.
-	anyType          = reflect.TypeFor[any]()            // JSON value
-	boolType         = reflect.TypeFor[bool]()           // JSON bool
-	stringType       = reflect.TypeFor[string]()         // JSON string
-	float64Type      = reflect.TypeFor[float64]()        // JSON number
-	mapStringAnyType = reflect.TypeFor[map[string]any]() // JSON object
-	sliceAnyType     = reflect.TypeFor[[]any]()          // JSON array
-
-	bytesType       = reflect.TypeFor[[]byte]()
-	emptyStructType = reflect.TypeFor[struct{}]()
-)
-
-const startDetectingCyclesAfter = 1000
-
-type seenPointers = map[any]struct{}
-
-type typedPointer struct {
-	typ reflect.Type
-	ptr any // always stores unsafe.Pointer, but avoids depending on unsafe
-	len int // remember slice length to avoid false positives
-}
-
-// visitPointer visits pointer p of type t, reporting an error if seen before.
-// If successfully visited, then the caller must eventually call leave.
-func visitPointer(m *seenPointers, v reflect.Value) error {
-	p := typedPointer{v.Type(), v.UnsafePointer(), sliceLen(v)}
-	if _, ok := (*m)[p]; ok {
-		return internal.ErrCycle
-	}
-	if *m == nil {
-		*m = make(seenPointers)
-	}
-	(*m)[p] = struct{}{}
-	return nil
-}
-func leavePointer(m *seenPointers, v reflect.Value) {
-	p := typedPointer{v.Type(), v.UnsafePointer(), sliceLen(v)}
-	delete(*m, p)
-}
-
-func sliceLen(v reflect.Value) int {
-	if v.Kind() == reflect.Slice {
-		return v.Len()
-	}
-	return 0
-}
-
-func len64[Bytes ~[]byte | ~string](in Bytes) int64 {
-	return int64(len(in))
-}
-
-func makeDefaultArshaler(t reflect.Type) *arshaler {
-	switch t.Kind() {
-	case reflect.Bool:
-		return makeBoolArshaler(t)
-	case reflect.String:
-		return makeStringArshaler(t)
-	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
-		return makeIntArshaler(t)
-	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
-		return makeUintArshaler(t)
-	case reflect.Float32, reflect.Float64:
-		return makeFloatArshaler(t)
-	case reflect.Map:
-		return makeMapArshaler(t)
-	case reflect.Struct:
-		return makeStructArshaler(t)
-	case reflect.Slice:
-		fncs := makeSliceArshaler(t)
-		if t.Elem().Kind() == reflect.Uint8 {
-			return makeBytesArshaler(t, fncs)
-		}
-		return fncs
-	case reflect.Array:
-		fncs := makeArrayArshaler(t)
-		if t.Elem().Kind() == reflect.Uint8 {
-			return makeBytesArshaler(t, fncs)
-		}
-		return fncs
-	case reflect.Pointer:
-		return makePointerArshaler(t)
-	case reflect.Interface:
-		return makeInterfaceArshaler(t)
-	default:
-		return makeInvalidArshaler(t)
-	}
-}
-
-func makeBoolArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-
-		// Optimize for marshaling without preceding whitespace.
-		if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace|jsonflags.StringifyBoolsAndStrings) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = strconv.AppendBool(xe.Tokens.MayAppendDelim(xe.Buf, 't'), va.Bool())
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-
-		if mo.Flags.Get(jsonflags.StringifyBoolsAndStrings) {
-			if va.Bool() {
-				return enc.WriteToken(jsontext.String("true"))
-			} else {
-				return enc.WriteToken(jsontext.String("false"))
-			}
-		}
-		return enc.WriteToken(jsontext.Bool(va.Bool()))
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return err
-		}
-		k := tok.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetBool(false)
-			}
-			return nil
-		case 't', 'f':
-			if !uo.Flags.Get(jsonflags.StringifyBoolsAndStrings) {
-				va.SetBool(tok.Bool())
-				return nil
-			}
-		case '"':
-			if uo.Flags.Get(jsonflags.StringifyBoolsAndStrings) {
-				switch tok.String() {
-				case "true":
-					va.SetBool(true)
-				case "false":
-					va.SetBool(false)
-				default:
-					if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) && tok.String() == "null" {
-						if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-							va.SetBool(false)
-						}
-						return nil
-					}
-					return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrSyntax)
-				}
-				return nil
-			}
-		}
-		return newUnmarshalErrorAfterWithSkipping(dec, uo, t, nil)
-	}
-	return &fncs
-}
-
-func makeStringArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-
-		// Optimize for marshaling without preceding whitespace.
-		s := va.String()
-		if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace|jsonflags.StringifyBoolsAndStrings) && !xe.Tokens.Last.NeedObjectName() {
-			b := xe.Buf
-			b = xe.Tokens.MayAppendDelim(b, '"')
-			b, err := jsonwire.AppendQuote(b, s, &mo.Flags)
-			if err == nil {
-				xe.Buf = b
-				xe.Tokens.Last.Increment()
-				if xe.NeedFlush() {
-					return xe.Flush()
-				}
-				return nil
-			}
-			// Otherwise, the string contains invalid UTF-8,
-			// so let the logic below construct the proper error.
-		}
-
-		if mo.Flags.Get(jsonflags.StringifyBoolsAndStrings) {
-			b, err := jsonwire.AppendQuote(nil, s, &mo.Flags)
-			if err != nil {
-				return newMarshalErrorBefore(enc, t, &jsontext.SyntacticError{Err: err})
-			}
-			q, err := jsontext.AppendQuote(nil, b)
-			if err != nil {
-				panic("BUG: second AppendQuote should never fail: " + err.Error())
-			}
-			return enc.WriteValue(q)
-		}
-		return enc.WriteToken(jsontext.String(s))
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return err
-		}
-		k := val.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetString("")
-			}
-			return nil
-		case '"':
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			if uo.Flags.Get(jsonflags.StringifyBoolsAndStrings) {
-				val, err = jsontext.AppendUnquote(nil, val)
-				if err != nil {
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-				if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) && string(val) == "null" {
-					if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-						va.SetString("")
-					}
-					return nil
-				}
-			}
-			if xd.StringCache == nil {
-				xd.StringCache = new(stringCache)
-			}
-			str := makeString(xd.StringCache, val)
-			va.SetString(str)
-			return nil
-		}
-		return newUnmarshalErrorAfter(dec, t, nil)
-	}
-	return &fncs
-}
-
-var (
-	appendEncodeBase16    = hex.AppendEncode
-	appendEncodeBase32    = base32.StdEncoding.AppendEncode
-	appendEncodeBase32Hex = base32.HexEncoding.AppendEncode
-	appendEncodeBase64    = base64.StdEncoding.AppendEncode
-	appendEncodeBase64URL = base64.URLEncoding.AppendEncode
-	encodedLenBase16      = hex.EncodedLen
-	encodedLenBase32      = base32.StdEncoding.EncodedLen
-	encodedLenBase32Hex   = base32.HexEncoding.EncodedLen
-	encodedLenBase64      = base64.StdEncoding.EncodedLen
-	encodedLenBase64URL   = base64.URLEncoding.EncodedLen
-	appendDecodeBase16    = hex.AppendDecode
-	appendDecodeBase32    = base32.StdEncoding.AppendDecode
-	appendDecodeBase32Hex = base32.HexEncoding.AppendDecode
-	appendDecodeBase64    = base64.StdEncoding.AppendDecode
-	appendDecodeBase64URL = base64.URLEncoding.AppendDecode
-)
-
-func makeBytesArshaler(t reflect.Type, fncs *arshaler) *arshaler {
-	// NOTE: This handles both []~byte and [N]~byte.
-	// The v2 default is to treat a []namedByte as equivalent to []T
-	// since being able to convert []namedByte to []byte relies on
-	// dubious Go reflection behavior (see https://go.dev/issue/24746).
-	// For v1 emulation, we use jsonflags.FormatBytesWithLegacySemantics
-	// to forcibly treat []namedByte as a []byte.
-	marshalArray := fncs.marshal
-	isNamedByte := t.Elem().PkgPath() != ""
-	hasMarshaler := implementsAny(t.Elem(), allMarshalerTypes...)
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		if !mo.Flags.Get(jsonflags.FormatBytesWithLegacySemantics) && isNamedByte {
-			return marshalArray(enc, va, mo) // treat as []T or [N]T
-		}
-		xe := export.Encoder(enc)
-		appendEncode := appendEncodeBase64
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			switch mo.Format {
-			case "base64":
-				appendEncode = appendEncodeBase64
-			case "base64url":
-				appendEncode = appendEncodeBase64URL
-			case "base32":
-				appendEncode = appendEncodeBase32
-			case "base32hex":
-				appendEncode = appendEncodeBase32Hex
-			case "base16", "hex":
-				appendEncode = appendEncodeBase16
-			case "array":
-				mo.Format = ""
-				return marshalArray(enc, va, mo)
-			default:
-				return newInvalidFormatError(enc, t, mo)
-			}
-		} else if mo.Flags.Get(jsonflags.FormatBytesWithLegacySemantics) &&
-			(va.Kind() == reflect.Array || hasMarshaler) {
-			return marshalArray(enc, va, mo)
-		}
-		if mo.Flags.Get(jsonflags.FormatNilSliceAsNull) && va.Kind() == reflect.Slice && va.IsNil() {
-			// TODO: Provide a "emitempty" format override?
-			return enc.WriteToken(jsontext.Null)
-		}
-		return xe.AppendRaw('"', true, func(b []byte) ([]byte, error) {
-			return appendEncode(b, va.Bytes()), nil
-		})
-	}
-	unmarshalArray := fncs.unmarshal
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		if !uo.Flags.Get(jsonflags.FormatBytesWithLegacySemantics) && isNamedByte {
-			return unmarshalArray(dec, va, uo) // treat as []T or [N]T
-		}
-		xd := export.Decoder(dec)
-		appendDecode, encodedLen := appendDecodeBase64, encodedLenBase64
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			switch uo.Format {
-			case "base64":
-				appendDecode, encodedLen = appendDecodeBase64, encodedLenBase64
-			case "base64url":
-				appendDecode, encodedLen = appendDecodeBase64URL, encodedLenBase64URL
-			case "base32":
-				appendDecode, encodedLen = appendDecodeBase32, encodedLenBase32
-			case "base32hex":
-				appendDecode, encodedLen = appendDecodeBase32Hex, encodedLenBase32Hex
-			case "base16", "hex":
-				appendDecode, encodedLen = appendDecodeBase16, encodedLenBase16
-			case "array":
-				uo.Format = ""
-				return unmarshalArray(dec, va, uo)
-			default:
-				return newInvalidFormatError(dec, t, uo)
-			}
-		} else if uo.Flags.Get(jsonflags.FormatBytesWithLegacySemantics) &&
-			(va.Kind() == reflect.Array || dec.PeekKind() == '[') {
-			return unmarshalArray(dec, va, uo)
-		}
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return err
-		}
-		k := val.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) || va.Kind() != reflect.Array {
-				va.SetZero()
-			}
-			return nil
-		case '"':
-			// NOTE: The v2 default is to strictly comply with RFC 4648.
-			// Section 3.2 specifies that padding is required.
-			// Section 3.3 specifies that non-alphabet characters
-			// (e.g., '\r' or '\n') must be rejected.
-			// Section 3.5 specifies that unnecessary non-zero bits in
-			// the last quantum may be rejected. Since this is optional,
-			// we do not reject such inputs.
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			b, err := appendDecode(va.Bytes()[:0], val)
-			if err != nil {
-				return newUnmarshalErrorAfter(dec, t, err)
-			}
-			if len(val) != encodedLen(len(b)) && !uo.Flags.Get(jsonflags.FormatBytesWithLegacySemantics) {
-				// TODO(https://go.dev/issue/53845): RFC 4648, section 3.3,
-				// specifies that non-alphabet characters must be rejected.
-				// Unfortunately, the "base32" and "base64" packages allow
-				// '\r' and '\n' characters by default.
-				i := bytes.IndexAny(val, "\r\n")
-				err := fmt.Errorf("illegal character %s at offset %d", jsonwire.QuoteRune(val[i:]), i)
-				return newUnmarshalErrorAfter(dec, t, err)
-			}
-
-			if va.Kind() == reflect.Array {
-				dst := va.Bytes()
-				clear(dst[copy(dst, b):]) // noop if len(b) <= len(dst)
-				if len(b) != len(dst) && !uo.Flags.Get(jsonflags.UnmarshalArrayFromAnyLength) {
-					err := fmt.Errorf("decoded length of %d mismatches array length of %d", len(b), len(dst))
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-			} else {
-				if b == nil {
-					b = []byte{}
-				}
-				va.SetBytes(b)
-			}
-			return nil
-		}
-		return newUnmarshalErrorAfter(dec, t, nil)
-	}
-	return fncs
-}
-
-func makeIntArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	bits := t.Bits()
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-
-		// Optimize for marshaling without preceding whitespace or string escaping.
-		if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace|jsonflags.StringifyNumbers) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = strconv.AppendInt(xe.Tokens.MayAppendDelim(xe.Buf, '0'), va.Int(), 10)
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-
-		k := stringOrNumberKind(xe.Tokens.Last.NeedObjectName() || mo.Flags.Get(jsonflags.StringifyNumbers))
-		return xe.AppendRaw(k, true, func(b []byte) ([]byte, error) {
-			return strconv.AppendInt(b, va.Int(), 10), nil
-		})
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		stringify := xd.Tokens.Last.NeedObjectName() || uo.Flags.Get(jsonflags.StringifyNumbers)
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return err
-		}
-		k := val.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetInt(0)
-			}
-			return nil
-		case '"':
-			if !stringify {
-				break
-			}
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) && string(val) == "null" {
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					va.SetInt(0)
-				}
-				return nil
-			}
-			fallthrough
-		case '0':
-			if stringify && k == '0' {
-				break
-			}
-			var negOffset int
-			neg := len(val) > 0 && val[0] == '-'
-			if neg {
-				negOffset = 1
-			}
-			n, ok := jsonwire.ParseUint(val[negOffset:])
-			maxInt := uint64(1) << (bits - 1)
-			overflow := (neg && n > maxInt) || (!neg && n > maxInt-1)
-			if !ok {
-				if n != math.MaxUint64 {
-					return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrSyntax)
-				}
-				overflow = true
-			}
-			if overflow {
-				return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrRange)
-			}
-			if neg {
-				va.SetInt(int64(-n))
-			} else {
-				va.SetInt(int64(+n))
-			}
-			return nil
-		}
-		return newUnmarshalErrorAfter(dec, t, nil)
-	}
-	return &fncs
-}
-
-func makeUintArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	bits := t.Bits()
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-
-		// Optimize for marshaling without preceding whitespace or string escaping.
-		if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace|jsonflags.StringifyNumbers) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = strconv.AppendUint(xe.Tokens.MayAppendDelim(xe.Buf, '0'), va.Uint(), 10)
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-
-		k := stringOrNumberKind(xe.Tokens.Last.NeedObjectName() || mo.Flags.Get(jsonflags.StringifyNumbers))
-		return xe.AppendRaw(k, true, func(b []byte) ([]byte, error) {
-			return strconv.AppendUint(b, va.Uint(), 10), nil
-		})
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		stringify := xd.Tokens.Last.NeedObjectName() || uo.Flags.Get(jsonflags.StringifyNumbers)
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return err
-		}
-		k := val.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetUint(0)
-			}
-			return nil
-		case '"':
-			if !stringify {
-				break
-			}
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) && string(val) == "null" {
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					va.SetUint(0)
-				}
-				return nil
-			}
-			fallthrough
-		case '0':
-			if stringify && k == '0' {
-				break
-			}
-			n, ok := jsonwire.ParseUint(val)
-			maxUint := uint64(1) << bits
-			overflow := n > maxUint-1
-			if !ok {
-				if n != math.MaxUint64 {
-					return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrSyntax)
-				}
-				overflow = true
-			}
-			if overflow {
-				return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrRange)
-			}
-			va.SetUint(n)
-			return nil
-		}
-		return newUnmarshalErrorAfter(dec, t, nil)
-	}
-	return &fncs
-}
-
-func makeFloatArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	bits := t.Bits()
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		var allowNonFinite bool
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			if mo.Format == "nonfinite" {
-				allowNonFinite = true
-			} else {
-				return newInvalidFormatError(enc, t, mo)
-			}
-		}
-
-		fv := va.Float()
-		if math.IsNaN(fv) || math.IsInf(fv, 0) {
-			if !allowNonFinite {
-				err := fmt.Errorf("unsupported value: %v", fv)
-				return newMarshalErrorBefore(enc, t, err)
-			}
-			return enc.WriteToken(jsontext.Float(fv))
-		}
-
-		// Optimize for marshaling without preceding whitespace or string escaping.
-		if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace|jsonflags.StringifyNumbers) && !xe.Tokens.Last.NeedObjectName() {
-			xe.Buf = jsonwire.AppendFloat(xe.Tokens.MayAppendDelim(xe.Buf, '0'), fv, bits)
-			xe.Tokens.Last.Increment()
-			if xe.NeedFlush() {
-				return xe.Flush()
-			}
-			return nil
-		}
-
-		k := stringOrNumberKind(xe.Tokens.Last.NeedObjectName() || mo.Flags.Get(jsonflags.StringifyNumbers))
-		return xe.AppendRaw(k, true, func(b []byte) ([]byte, error) {
-			return jsonwire.AppendFloat(b, va.Float(), bits), nil
-		})
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		var allowNonFinite bool
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			if uo.Format == "nonfinite" {
-				allowNonFinite = true
-			} else {
-				return newInvalidFormatError(dec, t, uo)
-			}
-		}
-		stringify := xd.Tokens.Last.NeedObjectName() || uo.Flags.Get(jsonflags.StringifyNumbers)
-		var flags jsonwire.ValueFlags
-		val, err := xd.ReadValue(&flags)
-		if err != nil {
-			return err
-		}
-		k := val.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetFloat(0)
-			}
-			return nil
-		case '"':
-			val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			if allowNonFinite {
-				switch string(val) {
-				case "NaN":
-					va.SetFloat(math.NaN())
-					return nil
-				case "Infinity":
-					va.SetFloat(math.Inf(+1))
-					return nil
-				case "-Infinity":
-					va.SetFloat(math.Inf(-1))
-					return nil
-				}
-			}
-			if !stringify {
-				break
-			}
-			if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) && string(val) == "null" {
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					va.SetFloat(0)
-				}
-				return nil
-			}
-			if n, err := jsonwire.ConsumeNumber(val); n != len(val) || err != nil {
-				return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrSyntax)
-			}
-			fallthrough
-		case '0':
-			if stringify && k == '0' {
-				break
-			}
-			fv, ok := jsonwire.ParseFloat(val, bits)
-			va.SetFloat(fv)
-			if !ok {
-				return newUnmarshalErrorAfterWithValue(dec, t, strconv.ErrRange)
-			}
-			return nil
-		}
-		return newUnmarshalErrorAfter(dec, t, nil)
-	}
-	return &fncs
-}
-
-func makeMapArshaler(t reflect.Type) *arshaler {
-	// NOTE: The logic below disables namespaces for tracking duplicate names
-	// when handling map keys with a unique representation.
-
-	// NOTE: Values retrieved from a map are not addressable,
-	// so we shallow copy the values to make them addressable and
-	// store them back into the map afterwards.
-
-	var fncs arshaler
-	var (
-		once    sync.Once
-		keyFncs *arshaler
-		valFncs *arshaler
-	)
-	init := func() {
-		keyFncs = lookupArshaler(t.Key())
-		valFncs = lookupArshaler(t.Elem())
-	}
-	nillableLegacyKey := t.Key().Kind() == reflect.Pointer &&
-		implementsAny(t.Key(), textMarshalerType, textAppenderType)
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		// Check for cycles.
-		xe := export.Encoder(enc)
-		if xe.Tokens.Depth() > startDetectingCyclesAfter {
-			if err := visitPointer(&xe.SeenPointers, va.Value); err != nil {
-				return newMarshalErrorBefore(enc, t, err)
-			}
-			defer leavePointer(&xe.SeenPointers, va.Value)
-		}
-
-		emitNull := mo.Flags.Get(jsonflags.FormatNilMapAsNull)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			switch mo.Format {
-			case "emitnull":
-				emitNull = true
-				mo.Format = ""
-			case "emitempty":
-				emitNull = false
-				mo.Format = ""
-			default:
-				return newInvalidFormatError(enc, t, mo)
-			}
-		}
-
-		// Handle empty maps.
-		n := va.Len()
-		if n == 0 {
-			if emitNull && va.IsNil() {
-				return enc.WriteToken(jsontext.Null)
-			}
-			// Optimize for marshaling an empty map without any preceding whitespace.
-			if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace) && !xe.Tokens.Last.NeedObjectName() {
-				xe.Buf = append(xe.Tokens.MayAppendDelim(xe.Buf, '{'), "{}"...)
-				xe.Tokens.Last.Increment()
-				if xe.NeedFlush() {
-					return xe.Flush()
-				}
-				return nil
-			}
-		}
-
-		once.Do(init)
-		if err := enc.WriteToken(jsontext.BeginObject); err != nil {
-			return err
-		}
-		if n > 0 {
-			nonDefaultKey := keyFncs.nonDefault
-			marshalKey := keyFncs.marshal
-			marshalVal := valFncs.marshal
-			if mo.Marshalers != nil {
-				var ok bool
-				marshalKey, ok = mo.Marshalers.(*Marshalers).lookup(marshalKey, t.Key())
-				marshalVal, _ = mo.Marshalers.(*Marshalers).lookup(marshalVal, t.Elem())
-				nonDefaultKey = nonDefaultKey || ok
-			}
-			k := newAddressableValue(t.Key())
-			v := newAddressableValue(t.Elem())
-
-			// A Go map guarantees that each entry has a unique key.
-			// As such, disable the expensive duplicate name check if we know
-			// that every Go key will serialize as a unique JSON string.
-			if !nonDefaultKey && mapKeyWithUniqueRepresentation(k.Kind(), mo.Flags.Get(jsonflags.AllowInvalidUTF8)) {
-				xe.Tokens.Last.DisableNamespace()
-			}
-
-			switch {
-			case !mo.Flags.Get(jsonflags.Deterministic) || n <= 1:
-				for iter := va.Value.MapRange(); iter.Next(); {
-					k.SetIterKey(iter)
-					err := marshalKey(enc, k, mo)
-					if err != nil {
-						if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-							errors.Is(err, jsontext.ErrNonStringName) && nillableLegacyKey && k.IsNil() {
-							err = enc.WriteToken(jsontext.String(""))
-						}
-						if err != nil {
-							if serr, ok := err.(*jsontext.SyntacticError); ok && serr.Err == jsontext.ErrNonStringName {
-								err = newMarshalErrorBefore(enc, k.Type(), err)
-							}
-							return err
-						}
-					}
-					v.SetIterValue(iter)
-					if err := marshalVal(enc, v, mo); err != nil {
-						return err
-					}
-				}
-			case !nonDefaultKey && t.Key().Kind() == reflect.String:
-				names := getStrings(n)
-				for i, iter := 0, va.Value.MapRange(); i < n && iter.Next(); i++ {
-					k.SetIterKey(iter)
-					(*names)[i] = k.String()
-				}
-				names.Sort()
-				for _, name := range *names {
-					if err := enc.WriteToken(jsontext.String(name)); err != nil {
-						return err
-					}
-					// TODO(https://go.dev/issue/57061): Use v.SetMapIndexOf.
-					k.SetString(name)
-					v.Set(va.MapIndex(k.Value))
-					if err := marshalVal(enc, v, mo); err != nil {
-						return err
-					}
-				}
-				putStrings(names)
-			default:
-				type member struct {
-					name string // unquoted name
-					key  addressableValue
-					val  addressableValue
-				}
-				members := make([]member, n)
-				keys := reflect.MakeSlice(reflect.SliceOf(t.Key()), n, n)
-				vals := reflect.MakeSlice(reflect.SliceOf(t.Elem()), n, n)
-				for i, iter := 0, va.Value.MapRange(); i < n && iter.Next(); i++ {
-					// Marshal the member name.
-					k := addressableValue{keys.Index(i), true} // indexed slice element is always addressable
-					k.SetIterKey(iter)
-					v := addressableValue{vals.Index(i), true} // indexed slice element is always addressable
-					v.SetIterValue(iter)
-					err := marshalKey(enc, k, mo)
-					if err != nil {
-						if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-							errors.Is(err, jsontext.ErrNonStringName) && nillableLegacyKey && k.IsNil() {
-							err = enc.WriteToken(jsontext.String(""))
-						}
-						if err != nil {
-							if serr, ok := err.(*jsontext.SyntacticError); ok && serr.Err == jsontext.ErrNonStringName {
-								err = newMarshalErrorBefore(enc, k.Type(), err)
-							}
-							return err
-						}
-					}
-					name := xe.UnwriteOnlyObjectMemberName()
-					members[i] = member{name, k, v}
-				}
-				// TODO: If AllowDuplicateNames is enabled, then sort according
-				// to reflect.Value as well if the names are equal.
-				// See internal/fmtsort.
-				slices.SortFunc(members, func(x, y member) int {
-					return strings.Compare(x.name, y.name)
-				})
-				for _, member := range members {
-					if err := enc.WriteToken(jsontext.String(member.name)); err != nil {
-						return err
-					}
-					if err := marshalVal(enc, member.val, mo); err != nil {
-						return err
-					}
-				}
-			}
-		}
-		if err := enc.WriteToken(jsontext.EndObject); err != nil {
-			return err
-		}
-		return nil
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			switch uo.Format {
-			case "emitnull", "emitempty":
-				uo.Format = "" // only relevant for marshaling
-			default:
-				return newInvalidFormatError(dec, t, uo)
-			}
-		}
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return err
-		}
-		k := tok.Kind()
-		switch k {
-		case 'n':
-			va.SetZero()
-			return nil
-		case '{':
-			once.Do(init)
-			if va.IsNil() {
-				va.Set(reflect.MakeMap(t))
-			}
-
-			nonDefaultKey := keyFncs.nonDefault
-			unmarshalKey := keyFncs.unmarshal
-			unmarshalVal := valFncs.unmarshal
-			if uo.Unmarshalers != nil {
-				var ok bool
-				unmarshalKey, ok = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshalKey, t.Key())
-				unmarshalVal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshalVal, t.Elem())
-				nonDefaultKey = nonDefaultKey || ok
-			}
-			k := newAddressableValue(t.Key())
-			v := newAddressableValue(t.Elem())
-
-			// Manually check for duplicate entries by virtue of whether the
-			// unmarshaled key already exists in the destination Go map.
-			// Consequently, syntactically different names (e.g., "0" and "-0")
-			// will be rejected as duplicates since they semantically refer
-			// to the same Go value. This is an unusual interaction
-			// between syntax and semantics, but is more correct.
-			if !nonDefaultKey && mapKeyWithUniqueRepresentation(k.Kind(), uo.Flags.Get(jsonflags.AllowInvalidUTF8)) {
-				xd.Tokens.Last.DisableNamespace()
-			}
-
-			// In the rare case where the map is not already empty,
-			// then we need to manually track which keys we already saw
-			// since existing presence alone is insufficient to indicate
-			// whether the input had a duplicate name.
-			var seen reflect.Value
-			if !uo.Flags.Get(jsonflags.AllowDuplicateNames) && va.Len() > 0 {
-				seen = reflect.MakeMap(reflect.MapOf(k.Type(), emptyStructType))
-			}
-
-			var errUnmarshal error
-			for dec.PeekKind() != '}' {
-				// Unmarshal the map entry key.
-				k.SetZero()
-				err := unmarshalKey(dec, k, uo)
-				if err != nil {
-					if isFatalError(err, uo.Flags) {
-						return err
-					}
-					if err := dec.SkipValue(); err != nil {
-						return err
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-					continue
-				}
-				if k.Kind() == reflect.Interface && !k.IsNil() && !k.Elem().Type().Comparable() {
-					err := newUnmarshalErrorAfter(dec, t, fmt.Errorf("invalid incomparable key type %v", k.Elem().Type()))
-					if !uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-						return err
-					}
-					if err2 := dec.SkipValue(); err2 != nil {
-						return err2
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-					continue
-				}
-
-				// Check if a pre-existing map entry value exists for this key.
-				if v2 := va.MapIndex(k.Value); v2.IsValid() {
-					if !uo.Flags.Get(jsonflags.AllowDuplicateNames) && (!seen.IsValid() || seen.MapIndex(k.Value).IsValid()) {
-						// TODO: Unread the object name.
-						name := xd.PreviousTokenOrValue()
-						return newDuplicateNameError(dec.StackPointer(), nil, dec.InputOffset()-len64(name))
-					}
-					if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-						v.Set(v2)
-					} else {
-						v.SetZero()
-					}
-				} else {
-					v.SetZero()
-				}
-
-				// Unmarshal the map entry value.
-				err = unmarshalVal(dec, v, uo)
-				va.SetMapIndex(k.Value, v.Value)
-				if seen.IsValid() {
-					seen.SetMapIndex(k.Value, reflect.Zero(emptyStructType))
-				}
-				if err != nil {
-					if isFatalError(err, uo.Flags) {
-						return err
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-				}
-			}
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			return errUnmarshal
-		}
-		return newUnmarshalErrorAfterWithSkipping(dec, uo, t, nil)
-	}
-	return &fncs
-}
-
-// mapKeyWithUniqueRepresentation reports whether all possible values of k
-// marshal to a different JSON value, and whether all possible JSON values
-// that can unmarshal into k unmarshal to different Go values.
-// In other words, the representation must be a bijective.
-func mapKeyWithUniqueRepresentation(k reflect.Kind, allowInvalidUTF8 bool) bool {
-	switch k {
-	case reflect.Bool,
-		reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
-		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
-		return true
-	case reflect.String:
-		// For strings, we have to be careful since names with invalid UTF-8
-		// maybe unescape to the same Go string value.
-		return !allowInvalidUTF8
-	default:
-		// Floating-point kinds are not listed above since NaNs
-		// can appear multiple times and all serialize as "NaN".
-		return false
-	}
-}
-
-var errNilField = errors.New("cannot set embedded pointer to unexported struct type")
-
-func makeStructArshaler(t reflect.Type) *arshaler {
-	// NOTE: The logic below disables namespaces for tracking duplicate names
-	// and does the tracking locally with an efficient bit-set based on which
-	// Go struct fields were seen.
-
-	var fncs arshaler
-	var (
-		once    sync.Once
-		fields  structFields
-		errInit *SemanticError
-	)
-	init := func() {
-		fields, errInit = makeStructFields(t)
-	}
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-		once.Do(init)
-		if errInit != nil && !mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-			return newMarshalErrorBefore(enc, errInit.GoType, errInit.Err)
-		}
-		if err := enc.WriteToken(jsontext.BeginObject); err != nil {
-			return err
-		}
-		var seenIdxs uintSet
-		prevIdx := -1
-		xe.Tokens.Last.DisableNamespace() // we manually ensure unique names below
-		for i := range fields.flattened {
-			f := &fields.flattened[i]
-			v := addressableValue{va.Field(f.index0), va.forcedAddr} // addressable if struct value is addressable
-			if len(f.index) > 0 {
-				v = v.fieldByIndex(f.index, false)
-				if !v.IsValid() {
-					continue // implies a nil inlined field
-				}
-			}
-
-			// OmitZero skips the field if the Go value is zero,
-			// which we can determine up front without calling the marshaler.
-			if (f.omitzero || mo.Flags.Get(jsonflags.OmitZeroStructFields)) &&
-				((f.isZero == nil && v.IsZero()) || (f.isZero != nil && f.isZero(v))) {
-				continue
-			}
-
-			// Check for the legacy definition of omitempty.
-			if f.omitempty && mo.Flags.Get(jsonflags.OmitEmptyWithLegacyDefinition) && isLegacyEmpty(v) {
-				continue
-			}
-
-			marshal := f.fncs.marshal
-			nonDefault := f.fncs.nonDefault
-			if mo.Marshalers != nil {
-				var ok bool
-				marshal, ok = mo.Marshalers.(*Marshalers).lookup(marshal, f.typ)
-				nonDefault = nonDefault || ok
-			}
-
-			// OmitEmpty skips the field if the marshaled JSON value is empty,
-			// which we can know up front if there are no custom marshalers,
-			// otherwise we must marshal the value and unwrite it if empty.
-			if f.omitempty && !mo.Flags.Get(jsonflags.OmitEmptyWithLegacyDefinition) &&
-				!nonDefault && f.isEmpty != nil && f.isEmpty(v) {
-				continue // fast path for omitempty
-			}
-
-			// Write the object member name.
-			//
-			// The logic below is semantically equivalent to:
-			//	enc.WriteToken(String(f.name))
-			// but specialized and simplified because:
-			//	1. The Encoder must be expecting an object name.
-			//	2. The object namespace is guaranteed to be disabled.
-			//	3. The object name is guaranteed to be valid and pre-escaped.
-			//	4. There is no need to flush the buffer (for unwrite purposes).
-			//	5. There is no possibility of an error occurring.
-			if optimizeCommon {
-				// Append any delimiters or optional whitespace.
-				b := xe.Buf
-				if xe.Tokens.Last.Length() > 0 {
-					b = append(b, ',')
-					if mo.Flags.Get(jsonflags.SpaceAfterComma) {
-						b = append(b, ' ')
-					}
-				}
-				if mo.Flags.Get(jsonflags.Multiline) {
-					b = xe.AppendIndent(b, xe.Tokens.NeedIndent('"'))
-				}
-
-				// Append the token to the output and to the state machine.
-				n0 := len(b) // offset before calling AppendQuote
-				if !f.nameNeedEscape {
-					b = append(b, f.quotedName...)
-				} else {
-					b, _ = jsonwire.AppendQuote(b, f.name, &mo.Flags)
-				}
-				xe.Buf = b
-				xe.Names.ReplaceLastQuotedOffset(n0)
-				xe.Tokens.Last.Increment()
-			} else {
-				if err := enc.WriteToken(jsontext.String(f.name)); err != nil {
-					return err
-				}
-			}
-
-			// Write the object member value.
-			flagsOriginal := mo.Flags
-			if f.string {
-				if !mo.Flags.Get(jsonflags.StringifyWithLegacySemantics) {
-					mo.Flags.Set(jsonflags.StringifyNumbers | 1)
-				} else if canLegacyStringify(f.typ) {
-					mo.Flags.Set(jsonflags.StringifyNumbers | jsonflags.StringifyBoolsAndStrings | 1)
-				}
-			}
-			if f.format != "" {
-				mo.FormatDepth = xe.Tokens.Depth()
-				mo.Format = f.format
-			}
-			err := marshal(enc, v, mo)
-			mo.Flags = flagsOriginal
-			mo.Format = ""
-			if err != nil {
-				return err
-			}
-
-			// Try unwriting the member if empty (slow path for omitempty).
-			if f.omitempty && !mo.Flags.Get(jsonflags.OmitEmptyWithLegacyDefinition) {
-				var prevName *string
-				if prevIdx >= 0 {
-					prevName = &fields.flattened[prevIdx].name
-				}
-				if xe.UnwriteEmptyObjectMember(prevName) {
-					continue
-				}
-			}
-
-			// Remember the previous written object member.
-			// The set of seen fields only needs to be updated to detect
-			// duplicate names with those from the inlined fallback.
-			if !mo.Flags.Get(jsonflags.AllowDuplicateNames) && fields.inlinedFallback != nil {
-				seenIdxs.insert(uint(f.id))
-			}
-			prevIdx = f.id
-		}
-		if fields.inlinedFallback != nil && !(mo.Flags.Get(jsonflags.DiscardUnknownMembers) && fields.inlinedFallback.unknown) {
-			var insertUnquotedName func([]byte) bool
-			if !mo.Flags.Get(jsonflags.AllowDuplicateNames) {
-				insertUnquotedName = func(name []byte) bool {
-					// Check that the name from inlined fallback does not match
-					// one of the previously marshaled names from known fields.
-					if foldedFields := fields.lookupByFoldedName(name); len(foldedFields) > 0 {
-						if f := fields.byActualName[string(name)]; f != nil {
-							return seenIdxs.insert(uint(f.id))
-						}
-						for _, f := range foldedFields {
-							if f.matchFoldedName(name, &mo.Flags) {
-								return seenIdxs.insert(uint(f.id))
-							}
-						}
-					}
-
-					// Check that the name does not match any other name
-					// previously marshaled from the inlined fallback.
-					return xe.Namespaces.Last().InsertUnquoted(name)
-				}
-			}
-			if err := marshalInlinedFallbackAll(enc, va, mo, fields.inlinedFallback, insertUnquotedName); err != nil {
-				return err
-			}
-		}
-		if err := enc.WriteToken(jsontext.EndObject); err != nil {
-			return err
-		}
-		return nil
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return err
-		}
-		k := tok.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetZero()
-			}
-			return nil
-		case '{':
-			once.Do(init)
-			if errInit != nil && !uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-				return newUnmarshalErrorAfter(dec, errInit.GoType, errInit.Err)
-			}
-			var seenIdxs uintSet
-			xd.Tokens.Last.DisableNamespace()
-			var errUnmarshal error
-			for dec.PeekKind() != '}' {
-				// Process the object member name.
-				var flags jsonwire.ValueFlags
-				val, err := xd.ReadValue(&flags)
-				if err != nil {
-					return err
-				}
-				name := jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-				f := fields.byActualName[string(name)]
-				if f == nil {
-					for _, f2 := range fields.lookupByFoldedName(name) {
-						if f2.matchFoldedName(name, &uo.Flags) {
-							f = f2
-							break
-						}
-					}
-					if f == nil {
-						if uo.Flags.Get(jsonflags.RejectUnknownMembers) && (fields.inlinedFallback == nil || fields.inlinedFallback.unknown) {
-							err := newUnmarshalErrorAfter(dec, t, ErrUnknownName)
-							if !uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-								return err
-							}
-							errUnmarshal = cmp.Or(errUnmarshal, err)
-						}
-						if !uo.Flags.Get(jsonflags.AllowDuplicateNames) && !xd.Namespaces.Last().InsertUnquoted(name) {
-							// TODO: Unread the object name.
-							return newDuplicateNameError(dec.StackPointer(), nil, dec.InputOffset()-len64(val))
-						}
-
-						if fields.inlinedFallback == nil {
-							// Skip unknown value since we have no place to store it.
-							if err := dec.SkipValue(); err != nil {
-								return err
-							}
-						} else {
-							// Marshal into value capable of storing arbitrary object members.
-							if err := unmarshalInlinedFallbackNext(dec, va, uo, fields.inlinedFallback, val, name); err != nil {
-								if isFatalError(err, uo.Flags) {
-									return err
-								}
-								errUnmarshal = cmp.Or(errUnmarshal, err)
-							}
-						}
-						continue
-					}
-				}
-				if !uo.Flags.Get(jsonflags.AllowDuplicateNames) && !seenIdxs.insert(uint(f.id)) {
-					// TODO: Unread the object name.
-					return newDuplicateNameError(dec.StackPointer(), nil, dec.InputOffset()-len64(val))
-				}
-
-				// Process the object member value.
-				unmarshal := f.fncs.unmarshal
-				if uo.Unmarshalers != nil {
-					unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, f.typ)
-				}
-				flagsOriginal := uo.Flags
-				if f.string {
-					if !uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) {
-						uo.Flags.Set(jsonflags.StringifyNumbers | 1)
-					} else if canLegacyStringify(f.typ) {
-						uo.Flags.Set(jsonflags.StringifyNumbers | jsonflags.StringifyBoolsAndStrings | 1)
-					}
-				}
-				if f.format != "" {
-					uo.FormatDepth = xd.Tokens.Depth()
-					uo.Format = f.format
-				}
-				v := addressableValue{va.Field(f.index0), va.forcedAddr} // addressable if struct value is addressable
-				if len(f.index) > 0 {
-					v = v.fieldByIndex(f.index, true)
-					if !v.IsValid() {
-						err := newUnmarshalErrorBefore(dec, t, errNilField)
-						if !uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-							return err
-						}
-						errUnmarshal = cmp.Or(errUnmarshal, err)
-						unmarshal = func(dec *jsontext.Decoder, _ addressableValue, _ *jsonopts.Struct) error {
-							return dec.SkipValue()
-						}
-					}
-				}
-				err = unmarshal(dec, v, uo)
-				uo.Flags = flagsOriginal
-				uo.Format = ""
-				if err != nil {
-					if isFatalError(err, uo.Flags) {
-						return err
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-				}
-			}
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			return errUnmarshal
-		}
-		return newUnmarshalErrorAfterWithSkipping(dec, uo, t, nil)
-	}
-	return &fncs
-}
-
-func (va addressableValue) fieldByIndex(index []int, mayAlloc bool) addressableValue {
-	for _, i := range index {
-		va = va.indirect(mayAlloc)
-		if !va.IsValid() {
-			return va
-		}
-		va = addressableValue{va.Field(i), va.forcedAddr} // addressable if struct value is addressable
-	}
-	return va
-}
-
-func (va addressableValue) indirect(mayAlloc bool) addressableValue {
-	if va.Kind() == reflect.Pointer {
-		if va.IsNil() {
-			if !mayAlloc || !va.CanSet() {
-				return addressableValue{}
-			}
-			va.Set(reflect.New(va.Type().Elem()))
-		}
-		va = addressableValue{va.Elem(), false} // dereferenced pointer is always addressable
-	}
-	return va
-}
-
-// isLegacyEmpty reports whether a value is empty according to the v1 definition.
-func isLegacyEmpty(v addressableValue) bool {
-	// Equivalent to encoding/json.isEmptyValue@v1.21.0.
-	switch v.Kind() {
-	case reflect.Bool:
-		return v.Bool() == false
-	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
-		return v.Int() == 0
-	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
-		return v.Uint() == 0
-	case reflect.Float32, reflect.Float64:
-		return v.Float() == 0
-	case reflect.String, reflect.Map, reflect.Slice, reflect.Array:
-		return v.Len() == 0
-	case reflect.Pointer, reflect.Interface:
-		return v.IsNil()
-	}
-	return false
-}
-
-// canLegacyStringify reports whether t can be stringified according to v1,
-// where t is a bool, string, or number (or unnamed pointer to such).
-// In v1, the `string` option does not apply recursively to nested types within
-// a composite Go type (e.g., an array, slice, struct, map, or interface).
-func canLegacyStringify(t reflect.Type) bool {
-	// Based on encoding/json.typeFields#L1126-L1143@v1.23.0
-	if t.Name() == "" && t.Kind() == reflect.Ptr {
-		t = t.Elem()
-	}
-	switch t.Kind() {
-	case reflect.Bool, reflect.String,
-		reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
-		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
-		reflect.Float32, reflect.Float64:
-		return true
-	}
-	return false
-}
-
-func makeSliceArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	var (
-		once    sync.Once
-		valFncs *arshaler
-	)
-	init := func() {
-		valFncs = lookupArshaler(t.Elem())
-	}
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		// Check for cycles.
-		xe := export.Encoder(enc)
-		if xe.Tokens.Depth() > startDetectingCyclesAfter {
-			if err := visitPointer(&xe.SeenPointers, va.Value); err != nil {
-				return newMarshalErrorBefore(enc, t, err)
-			}
-			defer leavePointer(&xe.SeenPointers, va.Value)
-		}
-
-		emitNull := mo.Flags.Get(jsonflags.FormatNilSliceAsNull)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			switch mo.Format {
-			case "emitnull":
-				emitNull = true
-				mo.Format = ""
-			case "emitempty":
-				emitNull = false
-				mo.Format = ""
-			default:
-				return newInvalidFormatError(enc, t, mo)
-			}
-		}
-
-		// Handle empty slices.
-		n := va.Len()
-		if n == 0 {
-			if emitNull && va.IsNil() {
-				return enc.WriteToken(jsontext.Null)
-			}
-			// Optimize for marshaling an empty slice without any preceding whitespace.
-			if optimizeCommon && !mo.Flags.Get(jsonflags.AnyWhitespace) && !xe.Tokens.Last.NeedObjectName() {
-				xe.Buf = append(xe.Tokens.MayAppendDelim(xe.Buf, '['), "[]"...)
-				xe.Tokens.Last.Increment()
-				if xe.NeedFlush() {
-					return xe.Flush()
-				}
-				return nil
-			}
-		}
-
-		once.Do(init)
-		if err := enc.WriteToken(jsontext.BeginArray); err != nil {
-			return err
-		}
-		marshal := valFncs.marshal
-		if mo.Marshalers != nil {
-			marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, t.Elem())
-		}
-		for i := range n {
-			v := addressableValue{va.Index(i), false} // indexed slice element is always addressable
-			if err := marshal(enc, v, mo); err != nil {
-				return err
-			}
-		}
-		if err := enc.WriteToken(jsontext.EndArray); err != nil {
-			return err
-		}
-		return nil
-	}
-	emptySlice := reflect.MakeSlice(t, 0, 0)
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			switch uo.Format {
-			case "emitnull", "emitempty":
-				uo.Format = "" // only relevant for marshaling
-			default:
-				return newInvalidFormatError(dec, t, uo)
-			}
-		}
-
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return err
-		}
-		k := tok.Kind()
-		switch k {
-		case 'n':
-			va.SetZero()
-			return nil
-		case '[':
-			once.Do(init)
-			unmarshal := valFncs.unmarshal
-			if uo.Unmarshalers != nil {
-				unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, t.Elem())
-			}
-			mustZero := true // we do not know the cleanliness of unused capacity
-			cap := va.Cap()
-			if cap > 0 {
-				va.SetLen(cap)
-			}
-			var i int
-			var errUnmarshal error
-			for dec.PeekKind() != ']' {
-				if i == cap {
-					va.Value.Grow(1)
-					cap = va.Cap()
-					va.SetLen(cap)
-					mustZero = false // reflect.Value.Grow ensures new capacity is zero-initialized
-				}
-				v := addressableValue{va.Index(i), false} // indexed slice element is always addressable
-				i++
-				if mustZero && !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					v.SetZero()
-				}
-				if err := unmarshal(dec, v, uo); err != nil {
-					if isFatalError(err, uo.Flags) {
-						va.SetLen(i)
-						return err
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-				}
-			}
-			if i == 0 {
-				va.Set(emptySlice)
-			} else {
-				va.SetLen(i)
-			}
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			return errUnmarshal
-		}
-		return newUnmarshalErrorAfterWithSkipping(dec, uo, t, nil)
-	}
-	return &fncs
-}
-
-var errArrayUnderflow = errors.New("too few array elements")
-var errArrayOverflow = errors.New("too many array elements")
-
-func makeArrayArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	var (
-		once    sync.Once
-		valFncs *arshaler
-	)
-	init := func() {
-		valFncs = lookupArshaler(t.Elem())
-	}
-	n := t.Len()
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-		once.Do(init)
-		if err := enc.WriteToken(jsontext.BeginArray); err != nil {
-			return err
-		}
-		marshal := valFncs.marshal
-		if mo.Marshalers != nil {
-			marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, t.Elem())
-		}
-		for i := range n {
-			v := addressableValue{va.Index(i), va.forcedAddr} // indexed array element is addressable if array is addressable
-			if err := marshal(enc, v, mo); err != nil {
-				return err
-			}
-		}
-		if err := enc.WriteToken(jsontext.EndArray); err != nil {
-			return err
-		}
-		return nil
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		tok, err := dec.ReadToken()
-		if err != nil {
-			return err
-		}
-		k := tok.Kind()
-		switch k {
-		case 'n':
-			if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-				va.SetZero()
-			}
-			return nil
-		case '[':
-			once.Do(init)
-			unmarshal := valFncs.unmarshal
-			if uo.Unmarshalers != nil {
-				unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, t.Elem())
-			}
-			var i int
-			var errUnmarshal error
-			for dec.PeekKind() != ']' {
-				if i >= n {
-					if err := dec.SkipValue(); err != nil {
-						return err
-					}
-					err = errArrayOverflow
-					continue
-				}
-				v := addressableValue{va.Index(i), va.forcedAddr} // indexed array element is addressable if array is addressable
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					v.SetZero()
-				}
-				if err := unmarshal(dec, v, uo); err != nil {
-					if isFatalError(err, uo.Flags) {
-						return err
-					}
-					errUnmarshal = cmp.Or(errUnmarshal, err)
-				}
-				i++
-			}
-			for ; i < n; i++ {
-				va.Index(i).SetZero()
-				err = errArrayUnderflow
-			}
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			if err != nil && !uo.Flags.Get(jsonflags.UnmarshalArrayFromAnyLength) {
-				return newUnmarshalErrorAfter(dec, t, err)
-			}
-			return errUnmarshal
-		}
-		return newUnmarshalErrorAfterWithSkipping(dec, uo, t, nil)
-	}
-	return &fncs
-}
-
-func makePointerArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	var (
-		once    sync.Once
-		valFncs *arshaler
-	)
-	init := func() {
-		valFncs = lookupArshaler(t.Elem())
-	}
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		// Check for cycles.
-		xe := export.Encoder(enc)
-		if xe.Tokens.Depth() > startDetectingCyclesAfter {
-			if err := visitPointer(&xe.SeenPointers, va.Value); err != nil {
-				return newMarshalErrorBefore(enc, t, err)
-			}
-			defer leavePointer(&xe.SeenPointers, va.Value)
-		}
-
-		// NOTE: Struct.Format is forwarded to underlying marshal.
-		if va.IsNil() {
-			return enc.WriteToken(jsontext.Null)
-		}
-		once.Do(init)
-		marshal := valFncs.marshal
-		if mo.Marshalers != nil {
-			marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, t.Elem())
-		}
-		v := addressableValue{va.Elem(), false} // dereferenced pointer is always addressable
-		return marshal(enc, v, mo)
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		// NOTE: Struct.Format is forwarded to underlying unmarshal.
-		if dec.PeekKind() == 'n' {
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			va.SetZero()
-			return nil
-		}
-		once.Do(init)
-		unmarshal := valFncs.unmarshal
-		if uo.Unmarshalers != nil {
-			unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, t.Elem())
-		}
-		if va.IsNil() {
-			va.Set(reflect.New(t.Elem()))
-		}
-		v := addressableValue{va.Elem(), false} // dereferenced pointer is always addressable
-		if err := unmarshal(dec, v, uo); err != nil {
-			return err
-		}
-		if uo.Flags.Get(jsonflags.StringifyWithLegacySemantics) &&
-			uo.Flags.Get(jsonflags.StringifyNumbers|jsonflags.StringifyBoolsAndStrings) {
-			// A JSON null quoted within a JSON string should take effect
-			// within the pointer value, rather than the indirect value.
-			//
-			// TODO: This does not correctly handle escaped nulls
-			// (e.g., "\u006e\u0075\u006c\u006c"), but is good enough
-			// for such an esoteric use case of the `string` option.
-			if string(export.Decoder(dec).PreviousTokenOrValue()) == `"null"` {
-				va.SetZero()
-			}
-		}
-		return nil
-	}
-	return &fncs
-}
-
-var errNilInterface = errors.New("cannot derive concrete type for nil interface with finite type set")
-
-func makeInterfaceArshaler(t reflect.Type) *arshaler {
-	// NOTE: Values retrieved from an interface are not addressable,
-	// so we shallow copy the values to make them addressable and
-	// store them back into the interface afterwards.
-
-	var fncs arshaler
-	var whichMarshaler reflect.Type
-	for _, iface := range allMarshalerTypes {
-		if t.Implements(iface) {
-			whichMarshaler = t
-			break
-		}
-	}
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		xe := export.Encoder(enc)
-		if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-			return newInvalidFormatError(enc, t, mo)
-		}
-		if va.IsNil() {
-			return enc.WriteToken(jsontext.Null)
-		} else if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) && whichMarshaler != nil {
-			// The marshaler for a pointer never calls the method on a nil receiver.
-			// Wrap the nil pointer within a struct type so that marshal
-			// instead appears on a value receiver and may be called.
-			if va.Elem().Kind() == reflect.Pointer && va.Elem().IsNil() {
-				v2 := newAddressableValue(whichMarshaler)
-				switch whichMarshaler {
-				case jsonMarshalerToType:
-					v2.Set(reflect.ValueOf(struct{ MarshalerTo }{va.Elem().Interface().(MarshalerTo)}))
-				case jsonMarshalerType:
-					v2.Set(reflect.ValueOf(struct{ Marshaler }{va.Elem().Interface().(Marshaler)}))
-				case textAppenderType:
-					v2.Set(reflect.ValueOf(struct{ encoding.TextAppender }{va.Elem().Interface().(encoding.TextAppender)}))
-				case textMarshalerType:
-					v2.Set(reflect.ValueOf(struct{ encoding.TextMarshaler }{va.Elem().Interface().(encoding.TextMarshaler)}))
-				}
-				va = v2
-			}
-		}
-		v := newAddressableValue(va.Elem().Type())
-		v.Set(va.Elem())
-		marshal := lookupArshaler(v.Type()).marshal
-		if mo.Marshalers != nil {
-			marshal, _ = mo.Marshalers.(*Marshalers).lookup(marshal, v.Type())
-		}
-		// Optimize for the any type if there are no special options.
-		if optimizeCommon &&
-			t == anyType && !mo.Flags.Get(jsonflags.StringifyNumbers|jsonflags.StringifyBoolsAndStrings) && mo.Format == "" &&
-			(mo.Marshalers == nil || !mo.Marshalers.(*Marshalers).fromAny) {
-			return marshalValueAny(enc, va.Elem().Interface(), mo)
-		}
-		return marshal(enc, v, mo)
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		xd := export.Decoder(dec)
-		if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-			return newInvalidFormatError(dec, t, uo)
-		}
-		if uo.Flags.Get(jsonflags.MergeWithLegacySemantics) && !va.IsNil() {
-			// Legacy merge behavior is difficult to explain.
-			// In general, it only merges for non-nil pointer kinds.
-			// As a special case, unmarshaling a JSON null into a pointer
-			// sets a concrete nil pointer of the underlying type
-			// (rather than setting the interface value itself to nil).
-			e := va.Elem()
-			if e.Kind() == reflect.Pointer && !e.IsNil() {
-				if dec.PeekKind() == 'n' && e.Elem().Kind() == reflect.Pointer {
-					if _, err := dec.ReadToken(); err != nil {
-						return err
-					}
-					va.Elem().Elem().SetZero()
-					return nil
-				}
-			} else {
-				va.SetZero()
-			}
-		}
-		if dec.PeekKind() == 'n' {
-			if _, err := dec.ReadToken(); err != nil {
-				return err
-			}
-			va.SetZero()
-			return nil
-		}
-		var v addressableValue
-		if va.IsNil() {
-			// Optimize for the any type if there are no special options.
-			// We do not care about stringified numbers since JSON strings
-			// are always unmarshaled into an any value as Go strings.
-			// Duplicate name check must be enforced since unmarshalValueAny
-			// does not implement merge semantics.
-			if optimizeCommon &&
-				t == anyType && !uo.Flags.Get(jsonflags.AllowDuplicateNames) && uo.Format == "" &&
-				(uo.Unmarshalers == nil || !uo.Unmarshalers.(*Unmarshalers).fromAny) {
-				v, err := unmarshalValueAny(dec, uo)
-				// We must check for nil interface values up front.
-				// See https://go.dev/issue/52310.
-				if v != nil {
-					va.Set(reflect.ValueOf(v))
-				}
-				return err
-			}
-
-			k := dec.PeekKind()
-			if !isAnyType(t) {
-				return newUnmarshalErrorBeforeWithSkipping(dec, uo, t, errNilInterface)
-			}
-			switch k {
-			case 'f', 't':
-				v = newAddressableValue(boolType)
-			case '"':
-				v = newAddressableValue(stringType)
-			case '0':
-				if uo.Flags.Get(jsonflags.UnmarshalAnyWithRawNumber) {
-					v = addressableValue{reflect.ValueOf(internal.NewRawNumber()).Elem(), true}
-				} else {
-					v = newAddressableValue(float64Type)
-				}
-			case '{':
-				v = newAddressableValue(mapStringAnyType)
-			case '[':
-				v = newAddressableValue(sliceAnyType)
-			default:
-				// If k is invalid (e.g., due to an I/O or syntax error), then
-				// that will be cached by PeekKind and returned by ReadValue.
-				// If k is '}' or ']', then ReadValue must error since
-				// those are invalid kinds at the start of a JSON value.
-				_, err := dec.ReadValue()
-				return err
-			}
-		} else {
-			// Shallow copy the existing value to keep it addressable.
-			// Any mutations at the top-level of the value will be observable
-			// since we always store this value back into the interface value.
-			v = newAddressableValue(va.Elem().Type())
-			v.Set(va.Elem())
-		}
-		unmarshal := lookupArshaler(v.Type()).unmarshal
-		if uo.Unmarshalers != nil {
-			unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, v.Type())
-		}
-		err := unmarshal(dec, v, uo)
-		va.Set(v.Value)
-		return err
-	}
-	return &fncs
-}
-
-// isAnyType reports wether t is equivalent to the any interface type.
-func isAnyType(t reflect.Type) bool {
-	// This is forward compatible if the Go language permits type sets within
-	// ordinary interfaces where an interface with zero methods does not
-	// necessarily mean it can hold every possible Go type.
-	// See https://go.dev/issue/45346.
-	return t == anyType || anyType.Implements(t)
-}
-
-func makeInvalidArshaler(t reflect.Type) *arshaler {
-	var fncs arshaler
-	fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-		return newMarshalErrorBefore(enc, t, nil)
-	}
-	fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-		return newUnmarshalErrorBefore(dec, t, nil)
-	}
-	return &fncs
-}
-
-func stringOrNumberKind(isString bool) jsontext.Kind {
-	if isString {
-		return '"'
-	} else {
-		return '0'
-	}
-}
-
-type uintSet64 uint64
-
-func (s uintSet64) has(i uint) bool { return s&(1< 0 }
-func (s *uintSet64) set(i uint)     { *s |= 1 << i }
-
-// uintSet is a set of unsigned integers.
-// It is optimized for most integers being close to zero.
-type uintSet struct {
-	lo uintSet64
-	hi []uintSet64
-}
-
-// has reports whether i is in the set.
-func (s *uintSet) has(i uint) bool {
-	if i < 64 {
-		return s.lo.has(i)
-	} else {
-		i -= 64
-		iHi, iLo := int(i/64), i%64
-		return iHi < len(s.hi) && s.hi[iHi].has(iLo)
-	}
-}
-
-// insert inserts i into the set and reports whether it was the first insertion.
-func (s *uintSet) insert(i uint) bool {
-	// TODO: Make this inlinable at least for the lower 64-bit case.
-	if i < 64 {
-		has := s.lo.has(i)
-		s.lo.set(i)
-		return !has
-	} else {
-		i -= 64
-		iHi, iLo := int(i/64), i%64
-		if iHi >= len(s.hi) {
-			s.hi = append(s.hi, make([]uintSet64, iHi+1-len(s.hi))...)
-			s.hi = s.hi[:cap(s.hi)]
-		}
-		has := s.hi[iHi].has(iLo)
-		s.hi[iHi].set(iLo)
-		return !has
-	}
-}
diff --git a/src/encoding/json/v2/arshal_funcs.go b/src/encoding/json/v2/arshal_funcs.go
deleted file mode 100644
index 5986c5473268d2..00000000000000
--- a/src/encoding/json/v2/arshal_funcs.go
+++ /dev/null
@@ -1,432 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"errors"
-	"fmt"
-	"reflect"
-	"sync"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/jsontext"
-)
-
-// SkipFunc may be returned by [MarshalToFunc] and [UnmarshalFromFunc] functions.
-//
-// Any function that returns SkipFunc must not cause observable side effects
-// on the provided [jsontext.Encoder] or [jsontext.Decoder].
-// For example, it is permissible to call [jsontext.Decoder.PeekKind],
-// but not permissible to call [jsontext.Decoder.ReadToken] or
-// [jsontext.Encoder.WriteToken] since such methods mutate the state.
-var SkipFunc = errors.New("json: skip function")
-
-var errSkipMutation = errors.New("must not read or write any tokens when skipping")
-var errNonSingularValue = errors.New("must read or write exactly one value")
-
-// Marshalers is a list of functions that may override the marshal behavior
-// of specific types. Populate [WithMarshalers] to use it with
-// [Marshal], [MarshalWrite], or [MarshalEncode].
-// A nil *Marshalers is equivalent to an empty list.
-// There are no exported fields or methods on Marshalers.
-type Marshalers = typedMarshalers
-
-// JoinMarshalers constructs a flattened list of marshal functions.
-// If multiple functions in the list are applicable for a value of a given type,
-// then those earlier in the list take precedence over those that come later.
-// If a function returns [SkipFunc], then the next applicable function is called,
-// otherwise the default marshaling behavior is used.
-//
-// For example:
-//
-//	m1 := JoinMarshalers(f1, f2)
-//	m2 := JoinMarshalers(f0, m1, f3)     // equivalent to m3
-//	m3 := JoinMarshalers(f0, f1, f2, f3) // equivalent to m2
-func JoinMarshalers(ms ...*Marshalers) *Marshalers {
-	return newMarshalers(ms...)
-}
-
-// Unmarshalers is a list of functions that may override the unmarshal behavior
-// of specific types. Populate [WithUnmarshalers] to use it with
-// [Unmarshal], [UnmarshalRead], or [UnmarshalDecode].
-// A nil *Unmarshalers is equivalent to an empty list.
-// There are no exported fields or methods on Unmarshalers.
-type Unmarshalers = typedUnmarshalers
-
-// JoinUnmarshalers constructs a flattened list of unmarshal functions.
-// If multiple functions in the list are applicable for a value of a given type,
-// then those earlier in the list take precedence over those that come later.
-// If a function returns [SkipFunc], then the next applicable function is called,
-// otherwise the default unmarshaling behavior is used.
-//
-// For example:
-//
-//	u1 := JoinUnmarshalers(f1, f2)
-//	u2 := JoinUnmarshalers(f0, u1, f3)     // equivalent to u3
-//	u3 := JoinUnmarshalers(f0, f1, f2, f3) // equivalent to u2
-func JoinUnmarshalers(us ...*Unmarshalers) *Unmarshalers {
-	return newUnmarshalers(us...)
-}
-
-type typedMarshalers = typedArshalers[jsontext.Encoder]
-type typedUnmarshalers = typedArshalers[jsontext.Decoder]
-type typedArshalers[Coder any] struct {
-	nonComparable
-
-	fncVals  []typedArshaler[Coder]
-	fncCache sync.Map // map[reflect.Type]arshaler
-
-	// fromAny reports whether any of Go types used to represent arbitrary JSON
-	// (i.e., any, bool, string, float64, map[string]any, or []any) matches
-	// any of the provided type-specific arshalers.
-	//
-	// This bit of information is needed in arshal_default.go to determine
-	// whether to use the specialized logic in arshal_any.go to handle
-	// the any interface type. The logic in arshal_any.go does not support
-	// type-specific arshal functions, so we must avoid using that logic
-	// if this is true.
-	fromAny bool
-}
-type typedMarshaler = typedArshaler[jsontext.Encoder]
-type typedUnmarshaler = typedArshaler[jsontext.Decoder]
-type typedArshaler[Coder any] struct {
-	typ     reflect.Type
-	fnc     func(*Coder, addressableValue, *jsonopts.Struct) error
-	maySkip bool
-}
-
-func newMarshalers(ms ...*Marshalers) *Marshalers       { return newTypedArshalers(ms...) }
-func newUnmarshalers(us ...*Unmarshalers) *Unmarshalers { return newTypedArshalers(us...) }
-func newTypedArshalers[Coder any](as ...*typedArshalers[Coder]) *typedArshalers[Coder] {
-	var a typedArshalers[Coder]
-	for _, a2 := range as {
-		if a2 != nil {
-			a.fncVals = append(a.fncVals, a2.fncVals...)
-			a.fromAny = a.fromAny || a2.fromAny
-		}
-	}
-	if len(a.fncVals) == 0 {
-		return nil
-	}
-	return &a
-}
-
-func (a *typedArshalers[Coder]) lookup(fnc func(*Coder, addressableValue, *jsonopts.Struct) error, t reflect.Type) (func(*Coder, addressableValue, *jsonopts.Struct) error, bool) {
-	if a == nil {
-		return fnc, false
-	}
-	if v, ok := a.fncCache.Load(t); ok {
-		if v == nil {
-			return fnc, false
-		}
-		return v.(func(*Coder, addressableValue, *jsonopts.Struct) error), true
-	}
-
-	// Collect a list of arshalers that can be called for this type.
-	// This list may be longer than 1 since some arshalers can be skipped.
-	var fncs []func(*Coder, addressableValue, *jsonopts.Struct) error
-	for _, fncVal := range a.fncVals {
-		if !castableTo(t, fncVal.typ) {
-			continue
-		}
-		fncs = append(fncs, fncVal.fnc)
-		if !fncVal.maySkip {
-			break // subsequent arshalers will never be called
-		}
-	}
-
-	if len(fncs) == 0 {
-		a.fncCache.Store(t, nil) // nil to indicate that no funcs found
-		return fnc, false
-	}
-
-	// Construct an arshaler that may call every applicable arshaler.
-	fncDefault := fnc
-	fnc = func(c *Coder, v addressableValue, o *jsonopts.Struct) error {
-		for _, fnc := range fncs {
-			if err := fnc(c, v, o); err != SkipFunc {
-				return err // may be nil or non-nil
-			}
-		}
-		return fncDefault(c, v, o)
-	}
-
-	// Use the first stored so duplicate work can be garbage collected.
-	v, _ := a.fncCache.LoadOrStore(t, fnc)
-	return v.(func(*Coder, addressableValue, *jsonopts.Struct) error), true
-}
-
-// MarshalFunc constructs a type-specific marshaler that
-// specifies how to marshal values of type T.
-// T can be any type except a named pointer.
-// The function is always provided with a non-nil pointer value
-// if T is an interface or pointer type.
-//
-// The function must marshal exactly one JSON value.
-// The value of T must not be retained outside the function call.
-// It may not return [SkipFunc].
-func MarshalFunc[T any](fn func(T) ([]byte, error)) *Marshalers {
-	t := reflect.TypeFor[T]()
-	assertCastableTo(t, true)
-	typFnc := typedMarshaler{
-		typ: t,
-		fnc: func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			val, err := fn(va.castTo(t).Interface().(T))
-			if err != nil {
-				err = wrapSkipFunc(err, "marshal function of type func(T) ([]byte, error)")
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalFunc") // unlike unmarshal, always wrapped
-				}
-				err = newMarshalErrorBefore(enc, t, err)
-				return collapseSemanticErrors(err)
-			}
-			if err := enc.WriteValue(val); err != nil {
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalFunc") // unlike unmarshal, always wrapped
-				}
-				if isSyntacticError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		},
-	}
-	return &Marshalers{fncVals: []typedMarshaler{typFnc}, fromAny: castableToFromAny(t)}
-}
-
-// MarshalToFunc constructs a type-specific marshaler that
-// specifies how to marshal values of type T.
-// T can be any type except a named pointer.
-// The function is always provided with a non-nil pointer value
-// if T is an interface or pointer type.
-//
-// The function must marshal exactly one JSON value by calling write methods
-// on the provided encoder. It may return [SkipFunc] such that marshaling can
-// move on to the next marshal function. However, no mutable method calls may
-// be called on the encoder if [SkipFunc] is returned.
-// The pointer to [jsontext.Encoder] and the value of T
-// must not be retained outside the function call.
-func MarshalToFunc[T any](fn func(*jsontext.Encoder, T) error) *Marshalers {
-	t := reflect.TypeFor[T]()
-	assertCastableTo(t, true)
-	typFnc := typedMarshaler{
-		typ: t,
-		fnc: func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			xe := export.Encoder(enc)
-			prevDepth, prevLength := xe.Tokens.DepthLength()
-			xe.Flags.Set(jsonflags.WithinArshalCall | 1)
-			err := fn(enc, va.castTo(t).Interface().(T))
-			xe.Flags.Set(jsonflags.WithinArshalCall | 0)
-			currDepth, currLength := xe.Tokens.DepthLength()
-			if err == nil && (prevDepth != currDepth || prevLength+1 != currLength) {
-				err = errNonSingularValue
-			}
-			if err != nil {
-				if err == SkipFunc {
-					if prevDepth == currDepth && prevLength == currLength {
-						return SkipFunc
-					}
-					err = errSkipMutation
-				}
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalToFunc") // unlike unmarshal, always wrapped
-				}
-				if !export.IsIOError(err) {
-					err = newSemanticErrorWithPosition(enc, t, prevDepth, prevLength, err)
-				}
-				return err
-			}
-			return nil
-		},
-		maySkip: true,
-	}
-	return &Marshalers{fncVals: []typedMarshaler{typFnc}, fromAny: castableToFromAny(t)}
-}
-
-// UnmarshalFunc constructs a type-specific unmarshaler that
-// specifies how to unmarshal values of type T.
-// T must be an unnamed pointer or an interface type.
-// The function is always provided with a non-nil pointer value.
-//
-// The function must unmarshal exactly one JSON value.
-// The input []byte must not be mutated.
-// The input []byte and value T must not be retained outside the function call.
-// It may not return [SkipFunc].
-func UnmarshalFunc[T any](fn func([]byte, T) error) *Unmarshalers {
-	t := reflect.TypeFor[T]()
-	assertCastableTo(t, false)
-	typFnc := typedUnmarshaler{
-		typ: t,
-		fnc: func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			val, err := dec.ReadValue()
-			if err != nil {
-				return err // must be a syntactic or I/O error
-			}
-			err = fn(val, va.castTo(t).Interface().(T))
-			if err != nil {
-				err = wrapSkipFunc(err, "unmarshal function of type func([]byte, T) error")
-				if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return err // unlike marshal, never wrapped
-				}
-				err = newUnmarshalErrorAfter(dec, t, err)
-				return collapseSemanticErrors(err)
-			}
-			return nil
-		},
-	}
-	return &Unmarshalers{fncVals: []typedUnmarshaler{typFnc}, fromAny: castableToFromAny(t)}
-}
-
-// UnmarshalFromFunc constructs a type-specific unmarshaler that
-// specifies how to unmarshal values of type T.
-// T must be an unnamed pointer or an interface type.
-// The function is always provided with a non-nil pointer value.
-//
-// The function must unmarshal exactly one JSON value by calling read methods
-// on the provided decoder. It may return [SkipFunc] such that unmarshaling can
-// move on to the next unmarshal function. However, no mutable method calls may
-// be called on the decoder if [SkipFunc] is returned.
-// The pointer to [jsontext.Decoder] and the value of T
-// must not be retained outside the function call.
-func UnmarshalFromFunc[T any](fn func(*jsontext.Decoder, T) error) *Unmarshalers {
-	t := reflect.TypeFor[T]()
-	assertCastableTo(t, false)
-	typFnc := typedUnmarshaler{
-		typ: t,
-		fnc: func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			xd := export.Decoder(dec)
-			prevDepth, prevLength := xd.Tokens.DepthLength()
-			xd.Flags.Set(jsonflags.WithinArshalCall | 1)
-			err := fn(dec, va.castTo(t).Interface().(T))
-			xd.Flags.Set(jsonflags.WithinArshalCall | 0)
-			currDepth, currLength := xd.Tokens.DepthLength()
-			if err == nil && (prevDepth != currDepth || prevLength+1 != currLength) {
-				err = errNonSingularValue
-			}
-			if err != nil {
-				if err == SkipFunc {
-					if prevDepth == currDepth && prevLength == currLength {
-						return SkipFunc
-					}
-					err = errSkipMutation
-				}
-				if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					if err2 := xd.SkipUntil(prevDepth, prevLength+1); err2 != nil {
-						return err2
-					}
-					return err // unlike marshal, never wrapped
-				}
-				if !isSyntacticError(err) && !export.IsIOError(err) {
-					err = newSemanticErrorWithPosition(dec, t, prevDepth, prevLength, err)
-				}
-				return err
-			}
-			return nil
-		},
-		maySkip: true,
-	}
-	return &Unmarshalers{fncVals: []typedUnmarshaler{typFnc}, fromAny: castableToFromAny(t)}
-}
-
-// assertCastableTo asserts that "to" is a valid type to be casted to.
-// These are the Go types that type-specific arshalers may operate upon.
-//
-// Let AllTypes be the universal set of all possible Go types.
-// This function generally asserts that:
-//
-//	len([from for from in AllTypes if castableTo(from, to)]) > 0
-//
-// otherwise it panics.
-//
-// As a special-case if marshal is false, then we forbid any non-pointer or
-// non-interface type since it is almost always a bug trying to unmarshal
-// into something where the end-user caller did not pass in an addressable value
-// since they will not observe the mutations.
-func assertCastableTo(to reflect.Type, marshal bool) {
-	switch to.Kind() {
-	case reflect.Interface:
-		return
-	case reflect.Pointer:
-		// Only allow unnamed pointers to be consistent with the fact that
-		// taking the address of a value produces an unnamed pointer type.
-		if to.Name() == "" {
-			return
-		}
-	default:
-		// Technically, non-pointer types are permissible for unmarshal.
-		// However, they are often a bug since the receiver would be immutable.
-		// Thus, only allow them for marshaling.
-		if marshal {
-			return
-		}
-	}
-	if marshal {
-		panic(fmt.Sprintf("input type %v must be an interface type, an unnamed pointer type, or a non-pointer type", to))
-	} else {
-		panic(fmt.Sprintf("input type %v must be an interface type or an unnamed pointer type", to))
-	}
-}
-
-// castableTo checks whether values of type "from" can be casted to type "to".
-// Nil pointer or interface "from" values are never considered castable.
-//
-// This function must be kept in sync with addressableValue.castTo.
-func castableTo(from, to reflect.Type) bool {
-	switch to.Kind() {
-	case reflect.Interface:
-		// TODO: This breaks when ordinary interfaces can have type sets
-		// since interfaces now exist where only the value form of a type (T)
-		// implements the interface, but not the pointer variant (*T).
-		// See https://go.dev/issue/45346.
-		return reflect.PointerTo(from).Implements(to)
-	case reflect.Pointer:
-		// Common case for unmarshaling.
-		// From must be a concrete or interface type.
-		return reflect.PointerTo(from) == to
-	default:
-		// Common case for marshaling.
-		// From must be a concrete type.
-		return from == to
-	}
-}
-
-// castTo casts va to the specified type.
-// If the type is an interface, then the underlying type will always
-// be a non-nil pointer to a concrete type.
-//
-// Requirement: castableTo(va.Type(), to) must hold.
-func (va addressableValue) castTo(to reflect.Type) reflect.Value {
-	switch to.Kind() {
-	case reflect.Interface:
-		return va.Addr().Convert(to)
-	case reflect.Pointer:
-		return va.Addr()
-	default:
-		return va.Value
-	}
-}
-
-// castableToFromAny reports whether "to" can be casted to from any
-// of the dynamic types used to represent arbitrary JSON.
-func castableToFromAny(to reflect.Type) bool {
-	for _, from := range []reflect.Type{anyType, boolType, stringType, float64Type, mapStringAnyType, sliceAnyType} {
-		if castableTo(from, to) {
-			return true
-		}
-	}
-	return false
-}
-
-func wrapSkipFunc(err error, what string) error {
-	if err == SkipFunc {
-		return errors.New(what + " cannot be skipped")
-	}
-	return err
-}
diff --git a/src/encoding/json/v2/arshal_inlined.go b/src/encoding/json/v2/arshal_inlined.go
deleted file mode 100644
index 0b5782fdccc836..00000000000000
--- a/src/encoding/json/v2/arshal_inlined.go
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"errors"
-	"io"
-	"reflect"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-// This package supports "inlining" a Go struct field, where the contents
-// of the serialized field (which must be a JSON object) are treated as if
-// they are part of the parent Go struct (which represents a JSON object).
-//
-// Generally, inlined fields are of a Go struct type, where the fields of the
-// nested struct are virtually hoisted up to the parent struct using rules
-// similar to how Go embedding works (but operating within the JSON namespace).
-//
-// However, inlined fields may also be of a Go map type with a string key or
-// a jsontext.Value. Such inlined fields are called "fallback" fields since they
-// represent any arbitrary JSON object member. Explicitly named fields take
-// precedence over the inlined fallback. Only one inlined fallback is allowed.
-
-var errRawInlinedNotObject = errors.New("inlined raw value must be a JSON object")
-
-var jsontextValueType = reflect.TypeFor[jsontext.Value]()
-
-// marshalInlinedFallbackAll marshals all the members in an inlined fallback.
-func marshalInlinedFallbackAll(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct, f *structField, insertUnquotedName func([]byte) bool) error {
-	v := addressableValue{va.Field(f.index0), va.forcedAddr} // addressable if struct value is addressable
-	if len(f.index) > 0 {
-		v = v.fieldByIndex(f.index, false)
-		if !v.IsValid() {
-			return nil // implies a nil inlined field
-		}
-	}
-	v = v.indirect(false)
-	if !v.IsValid() {
-		return nil
-	}
-
-	if v.Type() == jsontextValueType {
-		// TODO(https://go.dev/issue/62121): Use reflect.Value.AssertTo.
-		b := *v.Addr().Interface().(*jsontext.Value)
-		if len(b) == 0 { // TODO: Should this be nil? What if it were all whitespace?
-			return nil
-		}
-
-		dec := export.GetBufferedDecoder(b)
-		defer export.PutBufferedDecoder(dec)
-		xd := export.Decoder(dec)
-		xd.Flags.Set(jsonflags.AllowDuplicateNames | jsonflags.AllowInvalidUTF8 | 1)
-
-		tok, err := dec.ReadToken()
-		if err != nil {
-			if err == io.EOF {
-				err = io.ErrUnexpectedEOF
-			}
-			return newMarshalErrorBefore(enc, v.Type(), err)
-		}
-		if tok.Kind() != '{' {
-			return newMarshalErrorBefore(enc, v.Type(), errRawInlinedNotObject)
-		}
-		for dec.PeekKind() != '}' {
-			// Parse the JSON object name.
-			var flags jsonwire.ValueFlags
-			val, err := xd.ReadValue(&flags)
-			if err != nil {
-				return newMarshalErrorBefore(enc, v.Type(), err)
-			}
-			if insertUnquotedName != nil {
-				name := jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-				if !insertUnquotedName(name) {
-					return newDuplicateNameError(enc.StackPointer().Parent(), val, enc.OutputOffset())
-				}
-			}
-			if err := enc.WriteValue(val); err != nil {
-				return err
-			}
-
-			// Parse the JSON object value.
-			val, err = xd.ReadValue(&flags)
-			if err != nil {
-				return newMarshalErrorBefore(enc, v.Type(), err)
-			}
-			if err := enc.WriteValue(val); err != nil {
-				return err
-			}
-		}
-		if _, err := dec.ReadToken(); err != nil {
-			return newMarshalErrorBefore(enc, v.Type(), err)
-		}
-		if err := xd.CheckEOF(); err != nil {
-			return newMarshalErrorBefore(enc, v.Type(), err)
-		}
-		return nil
-	} else {
-		m := v // must be a map[~string]V
-		n := m.Len()
-		if n == 0 {
-			return nil
-		}
-		mk := newAddressableValue(m.Type().Key())
-		mv := newAddressableValue(m.Type().Elem())
-		marshalKey := func(mk addressableValue) error {
-			b, err := jsonwire.AppendQuote(enc.UnusedBuffer(), mk.String(), &mo.Flags)
-			if err != nil {
-				return newMarshalErrorBefore(enc, m.Type().Key(), err)
-			}
-			if insertUnquotedName != nil {
-				isVerbatim := bytes.IndexByte(b, '\\') < 0
-				name := jsonwire.UnquoteMayCopy(b, isVerbatim)
-				if !insertUnquotedName(name) {
-					return newDuplicateNameError(enc.StackPointer().Parent(), b, enc.OutputOffset())
-				}
-			}
-			return enc.WriteValue(b)
-		}
-		marshalVal := f.fncs.marshal
-		if mo.Marshalers != nil {
-			marshalVal, _ = mo.Marshalers.(*Marshalers).lookup(marshalVal, mv.Type())
-		}
-		if !mo.Flags.Get(jsonflags.Deterministic) || n <= 1 {
-			for iter := m.MapRange(); iter.Next(); {
-				mk.SetIterKey(iter)
-				if err := marshalKey(mk); err != nil {
-					return err
-				}
-				mv.Set(iter.Value())
-				if err := marshalVal(enc, mv, mo); err != nil {
-					return err
-				}
-			}
-		} else {
-			names := getStrings(n)
-			for i, iter := 0, m.Value.MapRange(); i < n && iter.Next(); i++ {
-				mk.SetIterKey(iter)
-				(*names)[i] = mk.String()
-			}
-			names.Sort()
-			for _, name := range *names {
-				mk.SetString(name)
-				if err := marshalKey(mk); err != nil {
-					return err
-				}
-				// TODO(https://go.dev/issue/57061): Use mv.SetMapIndexOf.
-				mv.Set(m.MapIndex(mk.Value))
-				if err := marshalVal(enc, mv, mo); err != nil {
-					return err
-				}
-			}
-			putStrings(names)
-		}
-		return nil
-	}
-}
-
-// unmarshalInlinedFallbackNext unmarshals only the next member in an inlined fallback.
-func unmarshalInlinedFallbackNext(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct, f *structField, quotedName, unquotedName []byte) error {
-	v := addressableValue{va.Field(f.index0), va.forcedAddr} // addressable if struct value is addressable
-	if len(f.index) > 0 {
-		v = v.fieldByIndex(f.index, true)
-	}
-	v = v.indirect(true)
-
-	if v.Type() == jsontextValueType {
-		b := v.Addr().Interface().(*jsontext.Value)
-		if len(*b) == 0 { // TODO: Should this be nil? What if it were all whitespace?
-			*b = append(*b, '{')
-		} else {
-			*b = jsonwire.TrimSuffixWhitespace(*b)
-			if jsonwire.HasSuffixByte(*b, '}') {
-				// TODO: When merging into an object for the first time,
-				// should we verify that it is valid?
-				*b = jsonwire.TrimSuffixByte(*b, '}')
-				*b = jsonwire.TrimSuffixWhitespace(*b)
-				if !jsonwire.HasSuffixByte(*b, ',') && !jsonwire.HasSuffixByte(*b, '{') {
-					*b = append(*b, ',')
-				}
-			} else {
-				return newUnmarshalErrorAfterWithSkipping(dec, uo, v.Type(), errRawInlinedNotObject)
-			}
-		}
-		*b = append(*b, quotedName...)
-		*b = append(*b, ':')
-		val, err := dec.ReadValue()
-		if err != nil {
-			return err
-		}
-		*b = append(*b, val...)
-		*b = append(*b, '}')
-		return nil
-	} else {
-		name := string(unquotedName) // TODO: Intern this?
-
-		m := v // must be a map[~string]V
-		if m.IsNil() {
-			m.Set(reflect.MakeMap(m.Type()))
-		}
-		mk := reflect.ValueOf(name)
-		if mkt := m.Type().Key(); mkt != stringType {
-			mk = mk.Convert(mkt)
-		}
-		mv := newAddressableValue(m.Type().Elem()) // TODO: Cache across calls?
-		if v2 := m.MapIndex(mk); v2.IsValid() {
-			mv.Set(v2)
-		}
-
-		unmarshal := f.fncs.unmarshal
-		if uo.Unmarshalers != nil {
-			unmarshal, _ = uo.Unmarshalers.(*Unmarshalers).lookup(unmarshal, mv.Type())
-		}
-		err := unmarshal(dec, mv, uo)
-		m.SetMapIndex(mk, mv.Value)
-		if err != nil {
-			return err
-		}
-		return nil
-	}
-}
diff --git a/src/encoding/json/v2/arshal_methods.go b/src/encoding/json/v2/arshal_methods.go
deleted file mode 100644
index 099be298c269d1..00000000000000
--- a/src/encoding/json/v2/arshal_methods.go
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"encoding"
-	"errors"
-	"reflect"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-var errNonStringValue = errors.New("JSON value must be string type")
-
-// Interfaces for custom serialization.
-var (
-	jsonMarshalerType       = reflect.TypeFor[Marshaler]()
-	jsonMarshalerToType     = reflect.TypeFor[MarshalerTo]()
-	jsonUnmarshalerType     = reflect.TypeFor[Unmarshaler]()
-	jsonUnmarshalerFromType = reflect.TypeFor[UnmarshalerFrom]()
-	textAppenderType        = reflect.TypeFor[encoding.TextAppender]()
-	textMarshalerType       = reflect.TypeFor[encoding.TextMarshaler]()
-	textUnmarshalerType     = reflect.TypeFor[encoding.TextUnmarshaler]()
-
-	allMarshalerTypes   = []reflect.Type{jsonMarshalerToType, jsonMarshalerType, textAppenderType, textMarshalerType}
-	allUnmarshalerTypes = []reflect.Type{jsonUnmarshalerFromType, jsonUnmarshalerType, textUnmarshalerType}
-	allMethodTypes      = append(allMarshalerTypes, allUnmarshalerTypes...)
-)
-
-// Marshaler is implemented by types that can marshal themselves.
-// It is recommended that types implement [MarshalerTo] unless the implementation
-// is trying to avoid a hard dependency on the "jsontext" package.
-//
-// It is recommended that implementations return a buffer that is safe
-// for the caller to retain and potentially mutate.
-type Marshaler interface {
-	MarshalJSON() ([]byte, error)
-}
-
-// MarshalerTo is implemented by types that can marshal themselves.
-// It is recommended that types implement MarshalerTo instead of [Marshaler]
-// since this is both more performant and flexible.
-// If a type implements both Marshaler and MarshalerTo,
-// then MarshalerTo takes precedence. In such a case, both implementations
-// should aim to have equivalent behavior for the default marshal options.
-//
-// The implementation must write only one JSON value to the Encoder and
-// must not retain the pointer to [jsontext.Encoder].
-type MarshalerTo interface {
-	MarshalJSONTo(*jsontext.Encoder) error
-
-	// TODO: Should users call the MarshalEncode function or
-	// should/can they call this method directly? Does it matter?
-}
-
-// Unmarshaler is implemented by types that can unmarshal themselves.
-// It is recommended that types implement [UnmarshalerFrom] unless the implementation
-// is trying to avoid a hard dependency on the "jsontext" package.
-//
-// The input can be assumed to be a valid encoding of a JSON value
-// if called from unmarshal functionality in this package.
-// UnmarshalJSON must copy the JSON data if it is retained after returning.
-// It is recommended that UnmarshalJSON implement merge semantics when
-// unmarshaling into a pre-populated value.
-//
-// Implementations must not retain or mutate the input []byte.
-type Unmarshaler interface {
-	UnmarshalJSON([]byte) error
-}
-
-// UnmarshalerFrom is implemented by types that can unmarshal themselves.
-// It is recommended that types implement UnmarshalerFrom instead of [Unmarshaler]
-// since this is both more performant and flexible.
-// If a type implements both Unmarshaler and UnmarshalerFrom,
-// then UnmarshalerFrom takes precedence. In such a case, both implementations
-// should aim to have equivalent behavior for the default unmarshal options.
-//
-// The implementation must read only one JSON value from the Decoder.
-// It is recommended that UnmarshalJSONFrom implement merge semantics when
-// unmarshaling into a pre-populated value.
-//
-// Implementations must not retain the pointer to [jsontext.Decoder].
-type UnmarshalerFrom interface {
-	UnmarshalJSONFrom(*jsontext.Decoder) error
-
-	// TODO: Should users call the UnmarshalDecode function or
-	// should/can they call this method directly? Does it matter?
-}
-
-func makeMethodArshaler(fncs *arshaler, t reflect.Type) *arshaler {
-	// Avoid injecting method arshaler on the pointer or interface version
-	// to avoid ever calling the method on a nil pointer or interface receiver.
-	// Let it be injected on the value receiver (which is always addressable).
-	if t.Kind() == reflect.Pointer || t.Kind() == reflect.Interface {
-		return fncs
-	}
-
-	if needAddr, ok := implements(t, textMarshalerType); ok {
-		fncs.nonDefault = true
-		prevMarshal := fncs.marshal
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				(needAddr && va.forcedAddr) {
-				return prevMarshal(enc, va, mo)
-			}
-			marshaler := va.Addr().Interface().(encoding.TextMarshaler)
-			if err := export.Encoder(enc).AppendRaw('"', false, func(b []byte) ([]byte, error) {
-				b2, err := marshaler.MarshalText()
-				return append(b, b2...), err
-			}); err != nil {
-				err = wrapSkipFunc(err, "marshal method")
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalText") // unlike unmarshal, always wrapped
-				}
-				if !isSemanticError(err) && !export.IsIOError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	if needAddr, ok := implements(t, textAppenderType); ok {
-		fncs.nonDefault = true
-		prevMarshal := fncs.marshal
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) (err error) {
-			if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				(needAddr && va.forcedAddr) {
-				return prevMarshal(enc, va, mo)
-			}
-			appender := va.Addr().Interface().(encoding.TextAppender)
-			if err := export.Encoder(enc).AppendRaw('"', false, appender.AppendText); err != nil {
-				err = wrapSkipFunc(err, "append method")
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "AppendText") // unlike unmarshal, always wrapped
-				}
-				if !isSemanticError(err) && !export.IsIOError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	if needAddr, ok := implements(t, jsonMarshalerType); ok {
-		fncs.nonDefault = true
-		prevMarshal := fncs.marshal
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				((needAddr && va.forcedAddr) || export.Encoder(enc).Tokens.Last.NeedObjectName()) {
-				return prevMarshal(enc, va, mo)
-			}
-			marshaler := va.Addr().Interface().(Marshaler)
-			val, err := marshaler.MarshalJSON()
-			if err != nil {
-				err = wrapSkipFunc(err, "marshal method")
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalJSON") // unlike unmarshal, always wrapped
-				}
-				err = newMarshalErrorBefore(enc, t, err)
-				return collapseSemanticErrors(err)
-			}
-			if err := enc.WriteValue(val); err != nil {
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalJSON") // unlike unmarshal, always wrapped
-				}
-				if isSyntacticError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	if needAddr, ok := implements(t, jsonMarshalerToType); ok {
-		fncs.nonDefault = true
-		prevMarshal := fncs.marshal
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			if mo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				((needAddr && va.forcedAddr) || export.Encoder(enc).Tokens.Last.NeedObjectName()) {
-				return prevMarshal(enc, va, mo)
-			}
-			xe := export.Encoder(enc)
-			prevDepth, prevLength := xe.Tokens.DepthLength()
-			xe.Flags.Set(jsonflags.WithinArshalCall | 1)
-			err := va.Addr().Interface().(MarshalerTo).MarshalJSONTo(enc)
-			xe.Flags.Set(jsonflags.WithinArshalCall | 0)
-			currDepth, currLength := xe.Tokens.DepthLength()
-			if (prevDepth != currDepth || prevLength+1 != currLength) && err == nil {
-				err = errNonSingularValue
-			}
-			if err != nil {
-				err = wrapSkipFunc(err, "marshal method")
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalJSONTo") // unlike unmarshal, always wrapped
-				}
-				if !export.IsIOError(err) {
-					err = newSemanticErrorWithPosition(enc, t, prevDepth, prevLength, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	if _, ok := implements(t, textUnmarshalerType); ok {
-		fncs.nonDefault = true
-		fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			xd := export.Decoder(dec)
-			var flags jsonwire.ValueFlags
-			val, err := xd.ReadValue(&flags)
-			if err != nil {
-				return err // must be a syntactic or I/O error
-			}
-			if val.Kind() == 'n' {
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					va.SetZero()
-				}
-				return nil
-			}
-			if val.Kind() != '"' {
-				return newUnmarshalErrorAfter(dec, t, errNonStringValue)
-			}
-			s := jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-			unmarshaler := va.Addr().Interface().(encoding.TextUnmarshaler)
-			if err := unmarshaler.UnmarshalText(s); err != nil {
-				err = wrapSkipFunc(err, "unmarshal method")
-				if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return err // unlike marshal, never wrapped
-				}
-				if !isSemanticError(err) && !isSyntacticError(err) && !export.IsIOError(err) {
-					err = newUnmarshalErrorAfter(dec, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	if _, ok := implements(t, jsonUnmarshalerType); ok {
-		fncs.nonDefault = true
-		prevUnmarshal := fncs.unmarshal
-		fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			if uo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				export.Decoder(dec).Tokens.Last.NeedObjectName() {
-				return prevUnmarshal(dec, va, uo)
-			}
-			val, err := dec.ReadValue()
-			if err != nil {
-				return err // must be a syntactic or I/O error
-			}
-			unmarshaler := va.Addr().Interface().(Unmarshaler)
-			if err := unmarshaler.UnmarshalJSON(val); err != nil {
-				err = wrapSkipFunc(err, "unmarshal method")
-				if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return err // unlike marshal, never wrapped
-				}
-				err = newUnmarshalErrorAfter(dec, t, err)
-				return collapseSemanticErrors(err)
-			}
-			return nil
-		}
-	}
-
-	if _, ok := implements(t, jsonUnmarshalerFromType); ok {
-		fncs.nonDefault = true
-		prevUnmarshal := fncs.unmarshal
-		fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			if uo.Flags.Get(jsonflags.CallMethodsWithLegacySemantics) &&
-				export.Decoder(dec).Tokens.Last.NeedObjectName() {
-				return prevUnmarshal(dec, va, uo)
-			}
-			xd := export.Decoder(dec)
-			prevDepth, prevLength := xd.Tokens.DepthLength()
-			xd.Flags.Set(jsonflags.WithinArshalCall | 1)
-			err := va.Addr().Interface().(UnmarshalerFrom).UnmarshalJSONFrom(dec)
-			xd.Flags.Set(jsonflags.WithinArshalCall | 0)
-			currDepth, currLength := xd.Tokens.DepthLength()
-			if (prevDepth != currDepth || prevLength+1 != currLength) && err == nil {
-				err = errNonSingularValue
-			}
-			if err != nil {
-				err = wrapSkipFunc(err, "unmarshal method")
-				if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					if err2 := xd.SkipUntil(prevDepth, prevLength+1); err2 != nil {
-						return err2
-					}
-					return err // unlike marshal, never wrapped
-				}
-				if !isSyntacticError(err) && !export.IsIOError(err) {
-					err = newSemanticErrorWithPosition(dec, t, prevDepth, prevLength, err)
-				}
-				return err
-			}
-			return nil
-		}
-	}
-
-	return fncs
-}
-
-// implementsAny is like t.Implements(ifaceType) for a list of interfaces,
-// but checks whether either t or reflect.PointerTo(t) implements the interface.
-func implementsAny(t reflect.Type, ifaceTypes ...reflect.Type) bool {
-	for _, ifaceType := range ifaceTypes {
-		if _, ok := implements(t, ifaceType); ok {
-			return true
-		}
-	}
-	return false
-}
-
-// implements is like t.Implements(ifaceType) but checks whether
-// either t or reflect.PointerTo(t) implements the interface.
-// It also reports whether the value needs to be addressed
-// in order to satisfy the interface.
-func implements(t, ifaceType reflect.Type) (needAddr, ok bool) {
-	switch {
-	case t.Implements(ifaceType):
-		return false, true
-	case reflect.PointerTo(t).Implements(ifaceType):
-		return true, true
-	default:
-		return false, false
-	}
-}
diff --git a/src/encoding/json/v2/arshal_test.go b/src/encoding/json/v2/arshal_test.go
deleted file mode 100644
index f1060cccb53a51..00000000000000
--- a/src/encoding/json/v2/arshal_test.go
+++ /dev/null
@@ -1,9488 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"encoding"
-	"encoding/base32"
-	"encoding/base64"
-	"encoding/hex"
-	"errors"
-	"fmt"
-	"io"
-	"math"
-	"net"
-	"net/netip"
-	"reflect"
-	"strconv"
-	"strings"
-	"testing"
-	"time"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsontest"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-func newNonStringNameError(offset int64, pointer jsontext.Pointer) error {
-	return &jsontext.SyntacticError{ByteOffset: offset, JSONPointer: pointer, Err: jsontext.ErrNonStringName}
-}
-
-func newInvalidCharacterError(prefix, where string, offset int64, pointer jsontext.Pointer) error {
-	return &jsontext.SyntacticError{ByteOffset: offset, JSONPointer: pointer, Err: jsonwire.NewInvalidCharacterError(prefix, where)}
-}
-
-func newInvalidUTF8Error(offset int64, pointer jsontext.Pointer) error {
-	return &jsontext.SyntacticError{ByteOffset: offset, JSONPointer: pointer, Err: jsonwire.ErrInvalidUTF8}
-}
-
-func newParseTimeError(layout, value, layoutElem, valueElem, message string) error {
-	return &time.ParseError{Layout: layout, Value: value, LayoutElem: layoutElem, ValueElem: valueElem, Message: message}
-}
-
-func EM(err error) *SemanticError {
-	return &SemanticError{action: "marshal", Err: err}
-}
-
-func EU(err error) *SemanticError {
-	return &SemanticError{action: "unmarshal", Err: err}
-}
-
-func (e *SemanticError) withVal(val string) *SemanticError {
-	e.JSONValue = jsontext.Value(val)
-	return e
-}
-
-func (e *SemanticError) withPos(prefix string, pointer jsontext.Pointer) *SemanticError {
-	e.ByteOffset = int64(len(prefix))
-	e.JSONPointer = pointer
-	return e
-}
-
-func (e *SemanticError) withType(k jsontext.Kind, t reflect.Type) *SemanticError {
-	e.JSONKind = k
-	e.GoType = t
-	return e
-}
-
-var (
-	errInvalidFormatFlag = errors.New(`invalid format flag "invalid"`)
-	errSomeError         = errors.New("some error")
-	errMustNotCall       = errors.New("must not call")
-)
-
-func T[T any]() reflect.Type { return reflect.TypeFor[T]() }
-
-type (
-	jsonObject = map[string]any
-	jsonArray  = []any
-
-	namedAny     any
-	namedBool    bool
-	namedString  string
-	NamedString  string
-	namedBytes   []byte
-	namedInt64   int64
-	namedUint64  uint64
-	namedFloat64 float64
-	namedByte    byte
-	netipAddr    = netip.Addr
-
-	recursiveMap     map[string]recursiveMap
-	recursiveSlice   []recursiveSlice
-	recursivePointer struct{ P *recursivePointer }
-
-	structEmpty       struct{}
-	structConflicting struct {
-		A string `json:"conflict"`
-		B string `json:"conflict"`
-	}
-	structNoneExported struct {
-		unexported string
-	}
-	structUnexportedIgnored struct {
-		ignored string `json:"-"`
-	}
-	structMalformedTag struct {
-		Malformed string `json:"\""`
-	}
-	structUnexportedTag struct {
-		unexported string `json:"name"`
-	}
-	structExportedEmbedded struct {
-		NamedString
-	}
-	structExportedEmbeddedTag struct {
-		NamedString `json:"name"`
-	}
-	structUnexportedEmbedded struct {
-		namedString
-	}
-	structUnexportedEmbeddedTag struct {
-		namedString `json:"name"`
-	}
-	structUnexportedEmbeddedMethodTag struct {
-		// netipAddr cannot be marshaled since the MarshalText method
-		// cannot be called on an unexported field.
-		netipAddr `json:"name"`
-
-		// Bogus MarshalText and AppendText methods are declared on
-		// structUnexportedEmbeddedMethodTag to prevent it from
-		// implementing those method interfaces.
-	}
-	structUnexportedEmbeddedStruct struct {
-		structOmitZeroAll
-		FizzBuzz int
-		structNestedAddr
-	}
-	structUnexportedEmbeddedStructPointer struct {
-		*structOmitZeroAll
-		FizzBuzz int
-		*structNestedAddr
-	}
-	structNestedAddr struct {
-		Addr netip.Addr
-	}
-	structIgnoredUnexportedEmbedded struct {
-		namedString `json:"-"`
-	}
-	structWeirdNames struct {
-		Empty string `json:"''"`
-		Comma string `json:"','"`
-		Quote string `json:"'\"'"`
-	}
-	structNoCase struct {
-		Aaa  string `json:",case:strict"`
-		AA_A string
-		AaA  string `json:",case:ignore"`
-		AAa  string `json:",case:ignore"`
-		AAA  string
-	}
-	structScalars struct {
-		unexported bool
-		Ignored    bool `json:"-"`
-
-		Bool   bool
-		String string
-		Bytes  []byte
-		Int    int64
-		Uint   uint64
-		Float  float64
-	}
-	structSlices struct {
-		unexported bool
-		Ignored    bool `json:"-"`
-
-		SliceBool   []bool
-		SliceString []string
-		SliceBytes  [][]byte
-		SliceInt    []int64
-		SliceUint   []uint64
-		SliceFloat  []float64
-	}
-	structMaps struct {
-		unexported bool
-		Ignored    bool `json:"-"`
-
-		MapBool   map[string]bool
-		MapString map[string]string
-		MapBytes  map[string][]byte
-		MapInt    map[string]int64
-		MapUint   map[string]uint64
-		MapFloat  map[string]float64
-	}
-	structAll struct {
-		Bool          bool
-		String        string
-		Bytes         []byte
-		Int           int64
-		Uint          uint64
-		Float         float64
-		Map           map[string]string
-		StructScalars structScalars
-		StructMaps    structMaps
-		StructSlices  structSlices
-		Slice         []string
-		Array         [1]string
-		Pointer       *structAll
-		Interface     any
-	}
-	structStringifiedAll struct {
-		Bool          bool                  `json:",string"`
-		String        string                `json:",string"`
-		Bytes         []byte                `json:",string"`
-		Int           int64                 `json:",string"`
-		Uint          uint64                `json:",string"`
-		Float         float64               `json:",string"`
-		Map           map[string]string     `json:",string"`
-		StructScalars structScalars         `json:",string"`
-		StructMaps    structMaps            `json:",string"`
-		StructSlices  structSlices          `json:",string"`
-		Slice         []string              `json:",string"`
-		Array         [1]string             `json:",string"`
-		Pointer       *structStringifiedAll `json:",string"`
-		Interface     any                   `json:",string"`
-	}
-	structOmitZeroAll struct {
-		Bool          bool               `json:",omitzero"`
-		String        string             `json:",omitzero"`
-		Bytes         []byte             `json:",omitzero"`
-		Int           int64              `json:",omitzero"`
-		Uint          uint64             `json:",omitzero"`
-		Float         float64            `json:",omitzero"`
-		Map           map[string]string  `json:",omitzero"`
-		StructScalars structScalars      `json:",omitzero"`
-		StructMaps    structMaps         `json:",omitzero"`
-		StructSlices  structSlices       `json:",omitzero"`
-		Slice         []string           `json:",omitzero"`
-		Array         [1]string          `json:",omitzero"`
-		Pointer       *structOmitZeroAll `json:",omitzero"`
-		Interface     any                `json:",omitzero"`
-	}
-	structOmitZeroMethodAll struct {
-		ValueAlwaysZero                 valueAlwaysZero     `json:",omitzero"`
-		ValueNeverZero                  valueNeverZero      `json:",omitzero"`
-		PointerAlwaysZero               pointerAlwaysZero   `json:",omitzero"`
-		PointerNeverZero                pointerNeverZero    `json:",omitzero"`
-		PointerValueAlwaysZero          *valueAlwaysZero    `json:",omitzero"`
-		PointerValueNeverZero           *valueNeverZero     `json:",omitzero"`
-		PointerPointerAlwaysZero        *pointerAlwaysZero  `json:",omitzero"`
-		PointerPointerNeverZero         *pointerNeverZero   `json:",omitzero"`
-		PointerPointerValueAlwaysZero   **valueAlwaysZero   `json:",omitzero"`
-		PointerPointerValueNeverZero    **valueNeverZero    `json:",omitzero"`
-		PointerPointerPointerAlwaysZero **pointerAlwaysZero `json:",omitzero"`
-		PointerPointerPointerNeverZero  **pointerNeverZero  `json:",omitzero"`
-	}
-	structOmitZeroMethodInterfaceAll struct {
-		ValueAlwaysZero          isZeroer `json:",omitzero"`
-		ValueNeverZero           isZeroer `json:",omitzero"`
-		PointerValueAlwaysZero   isZeroer `json:",omitzero"`
-		PointerValueNeverZero    isZeroer `json:",omitzero"`
-		PointerPointerAlwaysZero isZeroer `json:",omitzero"`
-		PointerPointerNeverZero  isZeroer `json:",omitzero"`
-	}
-	structOmitEmptyAll struct {
-		Bool                  bool                    `json:",omitempty"`
-		PointerBool           *bool                   `json:",omitempty"`
-		String                string                  `json:",omitempty"`
-		StringEmpty           stringMarshalEmpty      `json:",omitempty"`
-		StringNonEmpty        stringMarshalNonEmpty   `json:",omitempty"`
-		PointerString         *string                 `json:",omitempty"`
-		PointerStringEmpty    *stringMarshalEmpty     `json:",omitempty"`
-		PointerStringNonEmpty *stringMarshalNonEmpty  `json:",omitempty"`
-		Bytes                 []byte                  `json:",omitempty"`
-		BytesEmpty            bytesMarshalEmpty       `json:",omitempty"`
-		BytesNonEmpty         bytesMarshalNonEmpty    `json:",omitempty"`
-		PointerBytes          *[]byte                 `json:",omitempty"`
-		PointerBytesEmpty     *bytesMarshalEmpty      `json:",omitempty"`
-		PointerBytesNonEmpty  *bytesMarshalNonEmpty   `json:",omitempty"`
-		Float                 float64                 `json:",omitempty"`
-		PointerFloat          *float64                `json:",omitempty"`
-		Map                   map[string]string       `json:",omitempty"`
-		MapEmpty              mapMarshalEmpty         `json:",omitempty"`
-		MapNonEmpty           mapMarshalNonEmpty      `json:",omitempty"`
-		PointerMap            *map[string]string      `json:",omitempty"`
-		PointerMapEmpty       *mapMarshalEmpty        `json:",omitempty"`
-		PointerMapNonEmpty    *mapMarshalNonEmpty     `json:",omitempty"`
-		Slice                 []string                `json:",omitempty"`
-		SliceEmpty            sliceMarshalEmpty       `json:",omitempty"`
-		SliceNonEmpty         sliceMarshalNonEmpty    `json:",omitempty"`
-		PointerSlice          *[]string               `json:",omitempty"`
-		PointerSliceEmpty     *sliceMarshalEmpty      `json:",omitempty"`
-		PointerSliceNonEmpty  *sliceMarshalNonEmpty   `json:",omitempty"`
-		Pointer               *structOmitZeroEmptyAll `json:",omitempty"`
-		Interface             any                     `json:",omitempty"`
-	}
-	structOmitZeroEmptyAll struct {
-		Bool      bool                    `json:",omitzero,omitempty"`
-		String    string                  `json:",omitzero,omitempty"`
-		Bytes     []byte                  `json:",omitzero,omitempty"`
-		Int       int64                   `json:",omitzero,omitempty"`
-		Uint      uint64                  `json:",omitzero,omitempty"`
-		Float     float64                 `json:",omitzero,omitempty"`
-		Map       map[string]string       `json:",omitzero,omitempty"`
-		Slice     []string                `json:",omitzero,omitempty"`
-		Array     [1]string               `json:",omitzero,omitempty"`
-		Pointer   *structOmitZeroEmptyAll `json:",omitzero,omitempty"`
-		Interface any                     `json:",omitzero,omitempty"`
-	}
-	structFormatBytes struct {
-		Base16    []byte `json:",format:base16"`
-		Base32    []byte `json:",format:base32"`
-		Base32Hex []byte `json:",format:base32hex"`
-		Base64    []byte `json:",format:base64"`
-		Base64URL []byte `json:",format:base64url"`
-		Array     []byte `json:",format:array"`
-	}
-	structFormatArrayBytes struct {
-		Base16    [4]byte `json:",format:base16"`
-		Base32    [4]byte `json:",format:base32"`
-		Base32Hex [4]byte `json:",format:base32hex"`
-		Base64    [4]byte `json:",format:base64"`
-		Base64URL [4]byte `json:",format:base64url"`
-		Array     [4]byte `json:",format:array"`
-		Default   [4]byte
-	}
-	structFormatFloats struct {
-		NonFinite        float64  `json:",format:nonfinite"`
-		PointerNonFinite *float64 `json:",format:nonfinite"`
-	}
-	structFormatMaps struct {
-		EmitNull           map[string]string  `json:",format:emitnull"`
-		PointerEmitNull    *map[string]string `json:",format:emitnull"`
-		EmitEmpty          map[string]string  `json:",format:emitempty"`
-		PointerEmitEmpty   *map[string]string `json:",format:emitempty"`
-		EmitDefault        map[string]string
-		PointerEmitDefault *map[string]string
-	}
-	structFormatSlices struct {
-		EmitNull           []string  `json:",format:emitnull"`
-		PointerEmitNull    *[]string `json:",format:emitnull"`
-		EmitEmpty          []string  `json:",format:emitempty"`
-		PointerEmitEmpty   *[]string `json:",format:emitempty"`
-		EmitDefault        []string
-		PointerEmitDefault *[]string
-	}
-	structFormatInvalid struct {
-		Bool      bool              `json:",omitzero,format:invalid"`
-		String    string            `json:",omitzero,format:invalid"`
-		Bytes     []byte            `json:",omitzero,format:invalid"`
-		Int       int64             `json:",omitzero,format:invalid"`
-		Uint      uint64            `json:",omitzero,format:invalid"`
-		Float     float64           `json:",omitzero,format:invalid"`
-		Map       map[string]string `json:",omitzero,format:invalid"`
-		Struct    structAll         `json:",omitzero,format:invalid"`
-		Slice     []string          `json:",omitzero,format:invalid"`
-		Array     [1]string         `json:",omitzero,format:invalid"`
-		Interface any               `json:",omitzero,format:invalid"`
-	}
-	structDurationFormat struct {
-		D1  time.Duration
-		D2  time.Duration `json:",format:units"`
-		D3  time.Duration `json:",format:sec"`
-		D4  time.Duration `json:",string,format:sec"`
-		D5  time.Duration `json:",format:milli"`
-		D6  time.Duration `json:",string,format:milli"`
-		D7  time.Duration `json:",format:micro"`
-		D8  time.Duration `json:",string,format:micro"`
-		D9  time.Duration `json:",format:nano"`
-		D10 time.Duration `json:",string,format:nano"`
-	}
-	structTimeFormat struct {
-		T1  time.Time
-		T2  time.Time `json:",format:ANSIC"`
-		T3  time.Time `json:",format:UnixDate"`
-		T4  time.Time `json:",format:RubyDate"`
-		T5  time.Time `json:",format:RFC822"`
-		T6  time.Time `json:",format:RFC822Z"`
-		T7  time.Time `json:",format:RFC850"`
-		T8  time.Time `json:",format:RFC1123"`
-		T9  time.Time `json:",format:RFC1123Z"`
-		T10 time.Time `json:",format:RFC3339"`
-		T11 time.Time `json:",format:RFC3339Nano"`
-		T12 time.Time `json:",format:Kitchen"`
-		T13 time.Time `json:",format:Stamp"`
-		T14 time.Time `json:",format:StampMilli"`
-		T15 time.Time `json:",format:StampMicro"`
-		T16 time.Time `json:",format:StampNano"`
-		T17 time.Time `json:",format:DateTime"`
-		T18 time.Time `json:",format:DateOnly"`
-		T19 time.Time `json:",format:TimeOnly"`
-		T20 time.Time `json:",format:'2006-01-02'"`
-		T21 time.Time `json:",format:'\"weird\"2006'"`
-		T22 time.Time `json:",format:unix"`
-		T23 time.Time `json:",string,format:unix"`
-		T24 time.Time `json:",format:unixmilli"`
-		T25 time.Time `json:",string,format:unixmilli"`
-		T26 time.Time `json:",format:unixmicro"`
-		T27 time.Time `json:",string,format:unixmicro"`
-		T28 time.Time `json:",format:unixnano"`
-		T29 time.Time `json:",string,format:unixnano"`
-	}
-	structInlined struct {
-		X             structInlinedL1 `json:",inline"`
-		*StructEmbed2                 // implicit inline
-	}
-	structInlinedL1 struct {
-		X            *structInlinedL2 `json:",inline"`
-		StructEmbed1 `json:",inline"`
-	}
-	structInlinedL2        struct{ A, B, C string }
-	StructEmbed1           struct{ C, D, E string }
-	StructEmbed2           struct{ E, F, G string }
-	structUnknownTextValue struct {
-		A int            `json:",omitzero"`
-		X jsontext.Value `json:",unknown"`
-		B int            `json:",omitzero"`
-	}
-	structInlineTextValue struct {
-		A int            `json:",omitzero"`
-		X jsontext.Value `json:",inline"`
-		B int            `json:",omitzero"`
-	}
-	structInlinePointerTextValue struct {
-		A int             `json:",omitzero"`
-		X *jsontext.Value `json:",inline"`
-		B int             `json:",omitzero"`
-	}
-	structInlinePointerInlineTextValue struct {
-		X *struct {
-			A int
-			X jsontext.Value `json:",inline"`
-		} `json:",inline"`
-	}
-	structInlineInlinePointerTextValue struct {
-		X struct {
-			X *jsontext.Value `json:",inline"`
-		} `json:",inline"`
-	}
-	structInlineMapStringAny struct {
-		A int        `json:",omitzero"`
-		X jsonObject `json:",inline"`
-		B int        `json:",omitzero"`
-	}
-	structInlinePointerMapStringAny struct {
-		A int         `json:",omitzero"`
-		X *jsonObject `json:",inline"`
-		B int         `json:",omitzero"`
-	}
-	structInlinePointerInlineMapStringAny struct {
-		X *struct {
-			A int
-			X jsonObject `json:",inline"`
-		} `json:",inline"`
-	}
-	structInlineInlinePointerMapStringAny struct {
-		X struct {
-			X *jsonObject `json:",inline"`
-		} `json:",inline"`
-	}
-	structInlineMapStringInt struct {
-		X map[string]int `json:",inline"`
-	}
-	structInlineMapNamedStringInt struct {
-		X map[namedString]int `json:",inline"`
-	}
-	structInlineMapNamedStringAny struct {
-		A int                 `json:",omitzero"`
-		X map[namedString]any `json:",inline"`
-		B int                 `json:",omitzero"`
-	}
-	structNoCaseInlineTextValue struct {
-		AAA  string         `json:",omitempty,case:strict"`
-		AA_b string         `json:",omitempty"`
-		AaA  string         `json:",omitempty,case:ignore"`
-		AAa  string         `json:",omitempty,case:ignore"`
-		Aaa  string         `json:",omitempty"`
-		X    jsontext.Value `json:",inline"`
-	}
-	structNoCaseInlineMapStringAny struct {
-		AAA string     `json:",omitempty"`
-		AaA string     `json:",omitempty,case:ignore"`
-		AAa string     `json:",omitempty,case:ignore"`
-		Aaa string     `json:",omitempty"`
-		X   jsonObject `json:",inline"`
-	}
-
-	allMethods struct {
-		method string // the method that was called
-		value  []byte // the raw value to provide or store
-	}
-	allMethodsExceptJSONv2 struct {
-		allMethods
-		MarshalJSONTo     struct{} // cancel out MarshalJSONTo method with collision
-		UnmarshalJSONFrom struct{} // cancel out UnmarshalJSONFrom method with collision
-	}
-	allMethodsExceptJSONv1 struct {
-		allMethods
-		MarshalJSON   struct{} // cancel out MarshalJSON method with collision
-		UnmarshalJSON struct{} // cancel out UnmarshalJSON method with collision
-	}
-	allMethodsExceptText struct {
-		allMethods
-		MarshalText   struct{} // cancel out MarshalText method with collision
-		UnmarshalText struct{} // cancel out UnmarshalText method with collision
-	}
-	onlyMethodJSONv2 struct {
-		allMethods
-		MarshalJSON   struct{} // cancel out MarshalJSON method with collision
-		UnmarshalJSON struct{} // cancel out UnmarshalJSON method with collision
-		MarshalText   struct{} // cancel out MarshalText method with collision
-		UnmarshalText struct{} // cancel out UnmarshalText method with collision
-	}
-	onlyMethodJSONv1 struct {
-		allMethods
-		MarshalJSONTo     struct{} // cancel out MarshalJSONTo method with collision
-		UnmarshalJSONFrom struct{} // cancel out UnmarshalJSONFrom method with collision
-		MarshalText       struct{} // cancel out MarshalText method with collision
-		UnmarshalText     struct{} // cancel out UnmarshalText method with collision
-	}
-	onlyMethodText struct {
-		allMethods
-		MarshalJSONTo     struct{} // cancel out MarshalJSONTo method with collision
-		UnmarshalJSONFrom struct{} // cancel out UnmarshalJSONFrom method with collision
-		MarshalJSON       struct{} // cancel out MarshalJSON method with collision
-		UnmarshalJSON     struct{} // cancel out UnmarshalJSON method with collision
-	}
-
-	structMethodJSONv2 struct{ value string }
-	structMethodJSONv1 struct{ value string }
-	structMethodText   struct{ value string }
-
-	marshalJSONv2Func   func(*jsontext.Encoder) error
-	marshalJSONv1Func   func() ([]byte, error)
-	appendTextFunc      func([]byte) ([]byte, error)
-	marshalTextFunc     func() ([]byte, error)
-	unmarshalJSONv2Func func(*jsontext.Decoder) error
-	unmarshalJSONv1Func func([]byte) error
-	unmarshalTextFunc   func([]byte) error
-
-	nocaseString string
-
-	stringMarshalEmpty    string
-	stringMarshalNonEmpty string
-	bytesMarshalEmpty     []byte
-	bytesMarshalNonEmpty  []byte
-	mapMarshalEmpty       map[string]string
-	mapMarshalNonEmpty    map[string]string
-	sliceMarshalEmpty     []string
-	sliceMarshalNonEmpty  []string
-
-	valueAlwaysZero   string
-	valueNeverZero    string
-	pointerAlwaysZero string
-	pointerNeverZero  string
-
-	valueStringer   struct{}
-	pointerStringer struct{}
-
-	cyclicA struct {
-		B1 cyclicB `json:",inline"`
-		B2 cyclicB `json:",inline"`
-	}
-	cyclicB struct {
-		F int
-		A *cyclicA `json:",inline"`
-	}
-)
-
-func (structUnexportedEmbeddedMethodTag) MarshalText() {}
-func (structUnexportedEmbeddedMethodTag) AppendText()  {}
-
-func (p *allMethods) MarshalJSONTo(enc *jsontext.Encoder) error {
-	if got, want := "MarshalJSONTo", p.method; got != want {
-		return fmt.Errorf("called wrong method: got %v, want %v", got, want)
-	}
-	return enc.WriteValue(p.value)
-}
-func (p *allMethods) MarshalJSON() ([]byte, error) {
-	if got, want := "MarshalJSON", p.method; got != want {
-		return nil, fmt.Errorf("called wrong method: got %v, want %v", got, want)
-	}
-	return p.value, nil
-}
-func (p *allMethods) MarshalText() ([]byte, error) {
-	if got, want := "MarshalText", p.method; got != want {
-		return nil, fmt.Errorf("called wrong method: got %v, want %v", got, want)
-	}
-	return p.value, nil
-}
-
-func (p *allMethods) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	p.method = "UnmarshalJSONFrom"
-	val, err := dec.ReadValue()
-	p.value = val
-	return err
-}
-func (p *allMethods) UnmarshalJSON(val []byte) error {
-	p.method = "UnmarshalJSON"
-	p.value = val
-	return nil
-}
-func (p *allMethods) UnmarshalText(val []byte) error {
-	p.method = "UnmarshalText"
-	p.value = val
-	return nil
-}
-
-func (s structMethodJSONv2) MarshalJSONTo(enc *jsontext.Encoder) error {
-	return enc.WriteToken(jsontext.String(s.value))
-}
-func (s *structMethodJSONv2) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	tok, err := dec.ReadToken()
-	if err != nil {
-		return err
-	}
-	if k := tok.Kind(); k != '"' {
-		return EU(nil).withType(k, T[structMethodJSONv2]())
-	}
-	s.value = tok.String()
-	return nil
-}
-
-func (s structMethodJSONv1) MarshalJSON() ([]byte, error) {
-	return jsontext.AppendQuote(nil, s.value)
-}
-func (s *structMethodJSONv1) UnmarshalJSON(b []byte) error {
-	if k := jsontext.Value(b).Kind(); k != '"' {
-		return EU(nil).withType(k, T[structMethodJSONv1]())
-	}
-	b, _ = jsontext.AppendUnquote(nil, b)
-	s.value = string(b)
-	return nil
-}
-
-func (s structMethodText) MarshalText() ([]byte, error) {
-	return []byte(s.value), nil
-}
-func (s *structMethodText) UnmarshalText(b []byte) error {
-	s.value = string(b)
-	return nil
-}
-
-func (f marshalJSONv2Func) MarshalJSONTo(enc *jsontext.Encoder) error {
-	return f(enc)
-}
-func (f marshalJSONv1Func) MarshalJSON() ([]byte, error) {
-	return f()
-}
-func (f appendTextFunc) AppendText(b []byte) ([]byte, error) {
-	return f(b)
-}
-func (f marshalTextFunc) MarshalText() ([]byte, error) {
-	return f()
-}
-func (f unmarshalJSONv2Func) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	return f(dec)
-}
-func (f unmarshalJSONv1Func) UnmarshalJSON(b []byte) error {
-	return f(b)
-}
-func (f unmarshalTextFunc) UnmarshalText(b []byte) error {
-	return f(b)
-}
-
-func (k nocaseString) MarshalText() ([]byte, error) {
-	return []byte(strings.ToLower(string(k))), nil
-}
-func (k *nocaseString) UnmarshalText(b []byte) error {
-	*k = nocaseString(strings.ToLower(string(b)))
-	return nil
-}
-
-func (stringMarshalEmpty) MarshalJSON() ([]byte, error)    { return []byte(`""`), nil }
-func (stringMarshalNonEmpty) MarshalJSON() ([]byte, error) { return []byte(`"value"`), nil }
-func (bytesMarshalEmpty) MarshalJSON() ([]byte, error)     { return []byte(`[]`), nil }
-func (bytesMarshalNonEmpty) MarshalJSON() ([]byte, error)  { return []byte(`["value"]`), nil }
-func (mapMarshalEmpty) MarshalJSON() ([]byte, error)       { return []byte(`{}`), nil }
-func (mapMarshalNonEmpty) MarshalJSON() ([]byte, error)    { return []byte(`{"key":"value"}`), nil }
-func (sliceMarshalEmpty) MarshalJSON() ([]byte, error)     { return []byte(`[]`), nil }
-func (sliceMarshalNonEmpty) MarshalJSON() ([]byte, error)  { return []byte(`["value"]`), nil }
-
-func (valueAlwaysZero) IsZero() bool    { return true }
-func (valueNeverZero) IsZero() bool     { return false }
-func (*pointerAlwaysZero) IsZero() bool { return true }
-func (*pointerNeverZero) IsZero() bool  { return false }
-
-func (valueStringer) String() string    { return "" }
-func (*pointerStringer) String() string { return "" }
-
-func addr[T any](v T) *T {
-	return &v
-}
-
-func mustParseTime(layout, value string) time.Time {
-	t, err := time.Parse(layout, value)
-	if err != nil {
-		panic(err)
-	}
-	return t
-}
-
-var invalidFormatOption = &jsonopts.Struct{
-	ArshalValues: jsonopts.ArshalValues{FormatDepth: 1000, Format: "invalid"},
-}
-
-func TestMarshal(t *testing.T) {
-	tests := []struct {
-		name    jsontest.CaseName
-		opts    []Options
-		in      any
-		want    string
-		wantErr error
-
-		canonicalize bool // canonicalize the output before comparing?
-		useWriter    bool // call MarshalWrite instead of Marshal
-	}{{
-		name: jsontest.Name("Nil"),
-		in:   nil,
-		want: `null`,
-	}, {
-		name: jsontest.Name("Bools"),
-		in:   []bool{false, true},
-		want: `[false,true]`,
-	}, {
-		name: jsontest.Name("Bools/Named"),
-		in:   []namedBool{false, true},
-		want: `[false,true]`,
-	}, {
-		name: jsontest.Name("Bools/NotStringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in:   []bool{false, true},
-		want: `[false,true]`,
-	}, {
-		name: jsontest.Name("Bools/StringifiedBool"),
-		opts: []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		in:   []bool{false, true},
-		want: `["false","true"]`,
-	}, {
-		name: jsontest.Name("Bools/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Strings"),
-		in:   []string{"", "hello", "世界"},
-		want: `["","hello","世界"]`,
-	}, {
-		name: jsontest.Name("Strings/Named"),
-		in:   []namedString{"", "hello", "世界"},
-		want: `["","hello","世界"]`,
-	}, {
-		name: jsontest.Name("Strings/StringifiedBool"),
-		opts: []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		in:   []string{"", "hello", "世界"},
-		want: `["\"\"","\"hello\"","\"世界\""]`,
-	}, {
-		name: jsontest.Name("Strings/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   "string",
-		want: `"string"`,
-	}, {
-		name: jsontest.Name("Bytes"),
-		in:   [][]byte{nil, {}, {1}, {1, 2}, {1, 2, 3}},
-		want: `["","","AQ==","AQI=","AQID"]`,
-	}, {
-		name: jsontest.Name("Bytes/FormatNilSliceAsNull"),
-		opts: []Options{FormatNilSliceAsNull(true)},
-		in:   [][]byte{nil, {}},
-		want: `[null,""]`,
-	}, {
-		name: jsontest.Name("Bytes/Large"),
-		in:   []byte("the quick brown fox jumped over the lazy dog and ate the homework that I spent so much time on."),
-		want: `"dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cgYW5kIGF0ZSB0aGUgaG9tZXdvcmsgdGhhdCBJIHNwZW50IHNvIG11Y2ggdGltZSBvbi4="`,
-	}, {
-		name: jsontest.Name("Bytes/Named"),
-		in:   []namedBytes{nil, {}, {1}, {1, 2}, {1, 2, 3}},
-		want: `["","","AQ==","AQI=","AQID"]`,
-	}, {
-		name: jsontest.Name("Bytes/NotStringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in:   [][]byte{nil, {}, {1}, {1, 2}, {1, 2, 3}},
-		want: `["","","AQ==","AQI=","AQID"]`,
-	}, {
-		// NOTE: []namedByte is not assignable to []byte,
-		// so the following should be treated as a slice of uints.
-		name: jsontest.Name("Bytes/Invariant"),
-		in:   [][]namedByte{nil, {}, {1}, {1, 2}, {1, 2, 3}},
-		want: `[[],[],[1],[1,2],[1,2,3]]`,
-	}, {
-		// NOTE: This differs in behavior from v1,
-		// but keeps the representation of slices and arrays more consistent.
-		name: jsontest.Name("Bytes/ByteArray"),
-		in:   [5]byte{'h', 'e', 'l', 'l', 'o'},
-		want: `"aGVsbG8="`,
-	}, {
-		// NOTE: []namedByte is not assignable to []byte,
-		// so the following should be treated as an array of uints.
-		name: jsontest.Name("Bytes/NamedByteArray"),
-		in:   [5]namedByte{'h', 'e', 'l', 'l', 'o'},
-		want: `[104,101,108,108,111]`,
-	}, {
-		name: jsontest.Name("Bytes/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   []byte("hello"),
-		want: `"aGVsbG8="`,
-	}, {
-		name: jsontest.Name("Ints"),
-		in: []any{
-			int(0), int8(math.MinInt8), int16(math.MinInt16), int32(math.MinInt32), int64(math.MinInt64), namedInt64(-6464),
-		},
-		want: `[0,-128,-32768,-2147483648,-9223372036854775808,-6464]`,
-	}, {
-		name: jsontest.Name("Ints/Stringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in: []any{
-			int(0), int8(math.MinInt8), int16(math.MinInt16), int32(math.MinInt32), int64(math.MinInt64), namedInt64(-6464),
-		},
-		want: `["0","-128","-32768","-2147483648","-9223372036854775808","-6464"]`,
-	}, {
-		name: jsontest.Name("Ints/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   int(0),
-		want: `0`,
-	}, {
-		name: jsontest.Name("Uints"),
-		in: []any{
-			uint(0), uint8(math.MaxUint8), uint16(math.MaxUint16), uint32(math.MaxUint32), uint64(math.MaxUint64), namedUint64(6464), uintptr(1234),
-		},
-		want: `[0,255,65535,4294967295,18446744073709551615,6464,1234]`,
-	}, {
-		name: jsontest.Name("Uints/Stringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in: []any{
-			uint(0), uint8(math.MaxUint8), uint16(math.MaxUint16), uint32(math.MaxUint32), uint64(math.MaxUint64), namedUint64(6464),
-		},
-		want: `["0","255","65535","4294967295","18446744073709551615","6464"]`,
-	}, {
-		name: jsontest.Name("Uints/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   uint(0),
-		want: `0`,
-	}, {
-		name: jsontest.Name("Floats"),
-		in: []any{
-			float32(math.MaxFloat32), float64(math.MaxFloat64), namedFloat64(64.64),
-		},
-		want: `[3.4028235e+38,1.7976931348623157e+308,64.64]`,
-	}, {
-		name: jsontest.Name("Floats/Stringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in: []any{
-			float32(math.MaxFloat32), float64(math.MaxFloat64), namedFloat64(64.64),
-		},
-		want: `["3.4028235e+38","1.7976931348623157e+308","64.64"]`,
-	}, {
-		name:    jsontest.Name("Floats/Invalid/NaN"),
-		opts:    []Options{StringifyNumbers(true)},
-		in:      math.NaN(),
-		wantErr: EM(fmt.Errorf("unsupported value: %v", math.NaN())).withType(0, float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/PositiveInfinity"),
-		in:      math.Inf(+1),
-		wantErr: EM(fmt.Errorf("unsupported value: %v", math.Inf(+1))).withType(0, float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/NegativeInfinity"),
-		in:      math.Inf(-1),
-		wantErr: EM(fmt.Errorf("unsupported value: %v", math.Inf(-1))).withType(0, float64Type),
-	}, {
-		name: jsontest.Name("Floats/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   float64(0),
-		want: `0`,
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Bool"),
-		in:      map[bool]string{false: "value"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, boolType),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/NamedBool"),
-		in:      map[namedBool]string{false: "value"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[namedBool]()),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Array"),
-		in:      map[[1]string]string{{"key"}: "value"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Channel"),
-		in:      map[chan string]string{make(chan string): "value"},
-		want:    `{`,
-		wantErr: EM(nil).withPos(`{`, "").withType(0, T[chan string]()),
-	}, {
-		name:         jsontest.Name("Maps/ValidKey/Int"),
-		in:           map[int64]string{math.MinInt64: "MinInt64", 0: "Zero", math.MaxInt64: "MaxInt64"},
-		canonicalize: true,
-		want:         `{"-9223372036854775808":"MinInt64","0":"Zero","9223372036854775807":"MaxInt64"}`,
-	}, {
-		name:         jsontest.Name("Maps/ValidKey/PointerInt"),
-		in:           map[*int64]string{addr(int64(math.MinInt64)): "MinInt64", addr(int64(0)): "Zero", addr(int64(math.MaxInt64)): "MaxInt64"},
-		canonicalize: true,
-		want:         `{"-9223372036854775808":"MinInt64","0":"Zero","9223372036854775807":"MaxInt64"}`,
-	}, {
-		name:         jsontest.Name("Maps/DuplicateName/PointerInt"),
-		in:           map[*int64]string{addr(int64(0)): "0", addr(int64(0)): "0"},
-		canonicalize: true,
-		want:         `{"0":"0"`,
-		wantErr:      newDuplicateNameError("", []byte(`"0"`), len64(`{"0":"0",`)),
-	}, {
-		name:         jsontest.Name("Maps/ValidKey/NamedInt"),
-		in:           map[namedInt64]string{math.MinInt64: "MinInt64", 0: "Zero", math.MaxInt64: "MaxInt64"},
-		canonicalize: true,
-		want:         `{"-9223372036854775808":"MinInt64","0":"Zero","9223372036854775807":"MaxInt64"}`,
-	}, {
-		name:         jsontest.Name("Maps/ValidKey/Uint"),
-		in:           map[uint64]string{0: "Zero", math.MaxUint64: "MaxUint64"},
-		canonicalize: true,
-		want:         `{"0":"Zero","18446744073709551615":"MaxUint64"}`,
-	}, {
-		name:         jsontest.Name("Maps/ValidKey/NamedUint"),
-		in:           map[namedUint64]string{0: "Zero", math.MaxUint64: "MaxUint64"},
-		canonicalize: true,
-		want:         `{"0":"Zero","18446744073709551615":"MaxUint64"}`,
-	}, {
-		name: jsontest.Name("Maps/ValidKey/Float"),
-		in:   map[float64]string{3.14159: "value"},
-		want: `{"3.14159":"value"}`,
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Float/NaN"),
-		in:      map[float64]string{math.NaN(): "NaN", math.NaN(): "NaN"},
-		want:    `{`,
-		wantErr: EM(errors.New("unsupported value: NaN")).withPos(`{`, "").withType(0, float64Type),
-	}, {
-		name: jsontest.Name("Maps/ValidKey/Interface"),
-		in: map[any]any{
-			"key":               "key",
-			namedInt64(-64):     int32(-32),
-			namedUint64(+64):    uint32(+32),
-			namedFloat64(64.64): float32(32.32),
-		},
-		canonicalize: true,
-		want:         `{"-64":-32,"64":32,"64.64":32.32,"key":"key"}`,
-	}, {
-		name: jsontest.Name("Maps/DuplicateName/String/AllowInvalidUTF8+AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(true)},
-		in:   map[string]string{"\x80": "", "\x81": ""},
-		want: `{"�":"","�":""}`,
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/String/AllowInvalidUTF8"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(true)},
-		in:      map[string]string{"\x80": "", "\x81": ""},
-		want:    `{"�":""`,
-		wantErr: newDuplicateNameError("", []byte(`"�"`), len64(`{"�":"",`)),
-	}, {
-		name: jsontest.Name("Maps/DuplicateName/NoCaseString/AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowDuplicateNames(true)},
-		in:   map[nocaseString]string{"hello": "", "HELLO": ""},
-		want: `{"hello":"","hello":""}`,
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/NoCaseString"),
-		in:      map[nocaseString]string{"hello": "", "HELLO": ""},
-		want:    `{"hello":""`,
-		wantErr: EM(newDuplicateNameError("", []byte(`"hello"`), len64(`{"hello":"",`))).withPos(`{"hello":"",`, "").withType(0, T[nocaseString]()),
-	}, {
-		name: jsontest.Name("Maps/DuplicateName/NaNs/Deterministic+AllowDuplicateNames"),
-		opts: []Options{
-			WithMarshalers(
-				MarshalFunc(func(v float64) ([]byte, error) { return []byte(`"NaN"`), nil }),
-			),
-			Deterministic(true),
-			jsontext.AllowDuplicateNames(true),
-		},
-		in:   map[float64]string{math.NaN(): "NaN", math.NaN(): "NaN"},
-		want: `{"NaN":"NaN","NaN":"NaN"}`,
-	}, {
-		name: jsontest.Name("Maps/InvalidValue/Channel"),
-		in: map[string]chan string{
-			"key": nil,
-		},
-		want:    `{"key"`,
-		wantErr: EM(nil).withPos(`{"key":`, "/key").withType(0, T[chan string]()),
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic"),
-		opts: []Options{Deterministic(true)},
-		in:   map[string]int{"a": 0, "b": 1, "c": 2},
-		want: `{"a":0,"b":1,"c":2}`,
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic+AllowInvalidUTF8+RejectDuplicateNames"),
-		opts: []Options{
-			Deterministic(true),
-			jsontext.AllowInvalidUTF8(true),
-			jsontext.AllowDuplicateNames(false),
-		},
-		in:      map[string]int{"\xff": 0, "\xfe": 1},
-		want:    `{"�":1`,
-		wantErr: newDuplicateNameError("", []byte(`"�"`), len64(`{"�":1,`)),
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic+AllowInvalidUTF8+AllowDuplicateNames"),
-		opts: []Options{
-			Deterministic(true),
-			jsontext.AllowInvalidUTF8(true),
-			jsontext.AllowDuplicateNames(true),
-		},
-		in:   map[string]int{"\xff": 0, "\xfe": 1},
-		want: `{"�":1,"�":0}`,
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic+MarshalFuncs"),
-		opts: []Options{
-			Deterministic(true),
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v string) error {
-				if p := enc.StackPointer(); p != "/X" {
-					return fmt.Errorf("invalid stack pointer: got %s, want /X", p)
-				}
-				switch v {
-				case "a":
-					return enc.WriteToken(jsontext.String("b"))
-				case "b":
-					return enc.WriteToken(jsontext.String("a"))
-				default:
-					return fmt.Errorf("invalid value: %q", v)
-				}
-			})),
-		},
-		in:   map[namedString]map[string]int{"X": {"a": -1, "b": 1}},
-		want: `{"X":{"a":1,"b":-1}}`,
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic+MarshalFuncs+RejectDuplicateNames"),
-		opts: []Options{
-			Deterministic(true),
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v string) error {
-				if p := enc.StackPointer(); p != "/X" {
-					return fmt.Errorf("invalid stack pointer: got %s, want /X", p)
-				}
-				switch v {
-				case "a", "b":
-					return enc.WriteToken(jsontext.String("x"))
-				default:
-					return fmt.Errorf("invalid value: %q", v)
-				}
-			})),
-			jsontext.AllowDuplicateNames(false),
-		},
-		in:      map[namedString]map[string]int{"X": {"a": 1, "b": 1}},
-		want:    `{"X":{"x":1`,
-		wantErr: newDuplicateNameError("/X/x", nil, len64(`{"X":{"x":1,`)),
-	}, {
-		name: jsontest.Name("Maps/String/Deterministic+MarshalFuncs+AllowDuplicateNames"),
-		opts: []Options{
-			Deterministic(true),
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v string) error {
-				if p := enc.StackPointer(); p != "/X" {
-					return fmt.Errorf("invalid stack pointer: got %s, want /0", p)
-				}
-				switch v {
-				case "a", "b":
-					return enc.WriteToken(jsontext.String("x"))
-				default:
-					return fmt.Errorf("invalid value: %q", v)
-				}
-			})),
-			jsontext.AllowDuplicateNames(true),
-		},
-		in: map[namedString]map[string]int{"X": {"a": 1, "b": 1}},
-		// NOTE: Since the names are identical, the exact values may be
-		// non-deterministic since sort cannot distinguish between members.
-		want: `{"X":{"x":1,"x":1}}`,
-	}, {
-		name: jsontest.Name("Maps/RecursiveMap"),
-		in: recursiveMap{
-			"fizz": {
-				"foo": {},
-				"bar": nil,
-			},
-			"buzz": nil,
-		},
-		canonicalize: true,
-		want:         `{"buzz":{},"fizz":{"bar":{},"foo":{}}}`,
-	}, {
-		name: jsontest.Name("Maps/CyclicMap"),
-		in: func() recursiveMap {
-			m := recursiveMap{"k": nil}
-			m["k"] = m
-			return m
-		}(),
-		want:    strings.Repeat(`{"k":`, startDetectingCyclesAfter) + `{"k"`,
-		wantErr: EM(internal.ErrCycle).withPos(strings.Repeat(`{"k":`, startDetectingCyclesAfter+1), jsontext.Pointer(strings.Repeat("/k", startDetectingCyclesAfter+1))).withType(0, T[recursiveMap]()),
-	}, {
-		name: jsontest.Name("Maps/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   map[string]string{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/Empty"),
-		in:   structEmpty{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedIgnored"),
-		in:   structUnexportedIgnored{ignored: "ignored"},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/IgnoredUnexportedEmbedded"),
-		in:   structIgnoredUnexportedEmbedded{namedString: "ignored"},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/WeirdNames"),
-		in:   structWeirdNames{Empty: "empty", Comma: "comma", Quote: "quote"},
-		want: `{"":"empty",",":"comma","\"":"quote"}`,
-	}, {
-		name: jsontest.Name("Structs/EscapedNames"),
-		opts: []Options{jsontext.EscapeForHTML(true), jsontext.EscapeForJS(true)},
-		in: struct {
-			S string "json:\"'abc<>&\u2028\u2029xyz'\""
-			M any
-			I structInlineTextValue
-		}{
-			S: "abc<>&\u2028\u2029xyz",
-			M: map[string]string{"abc<>&\u2028\u2029xyz": "abc<>&\u2028\u2029xyz"},
-			I: structInlineTextValue{X: jsontext.Value(`{"abc<>&` + "\u2028\u2029" + `xyz":"abc<>&` + "\u2028\u2029" + `xyz"}`)},
-		},
-		want: `{"abc\u003c\u003e\u0026\u2028\u2029xyz":"abc\u003c\u003e\u0026\u2028\u2029xyz","M":{"abc\u003c\u003e\u0026\u2028\u2029xyz":"abc\u003c\u003e\u0026\u2028\u2029xyz"},"I":{"abc\u003c\u003e\u0026\u2028\u2029xyz":"abc\u003c\u003e\u0026\u2028\u2029xyz"}}`,
-	}, {
-		name: jsontest.Name("Structs/NoCase"),
-		in:   structNoCase{AaA: "AaA", AAa: "AAa", Aaa: "Aaa", AAA: "AAA", AA_A: "AA_A"},
-		want: `{"Aaa":"Aaa","AA_A":"AA_A","AaA":"AaA","AAa":"AAa","AAA":"AAA"}`,
-	}, {
-		name: jsontest.Name("Structs/NoCase/MatchCaseInsensitiveNames"),
-		opts: []Options{MatchCaseInsensitiveNames(true)},
-		in:   structNoCase{AaA: "AaA", AAa: "AAa", Aaa: "Aaa", AAA: "AAA", AA_A: "AA_A"},
-		want: `{"Aaa":"Aaa","AA_A":"AA_A","AaA":"AaA","AAa":"AAa","AAA":"AAA"}`,
-	}, {
-		name: jsontest.Name("Structs/NoCase/MatchCaseInsensitiveNames+MatchCaseSensitiveDelimiter"),
-		opts: []Options{MatchCaseInsensitiveNames(true), jsonflags.MatchCaseSensitiveDelimiter | 1},
-		in:   structNoCase{AaA: "AaA", AAa: "AAa", Aaa: "Aaa", AAA: "AAA", AA_A: "AA_A"},
-		want: `{"Aaa":"Aaa","AA_A":"AA_A","AaA":"AaA","AAa":"AAa","AAA":"AAA"}`,
-	}, {
-		name: jsontest.Name("Structs/Normal"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,
-			Uint:   +64,
-			Float:  3.14159,
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},
-				MapUint:   map[string]uint64{"": +64},
-				MapFloat:  map[string]float64{"": 3.14159},
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},
-				SliceUint:   []uint64{+64},
-				SliceFloat:  []float64{3.14159},
-			},
-			Slice:     []string{"fizz", "buzz"},
-			Array:     [1]string{"goodbye"},
-			Pointer:   new(structAll),
-			Interface: (*structAll)(nil),
-		},
-		want: `{
-	"Bool": true,
-	"String": "hello",
-	"Bytes": "AQID",
-	"Int": -64,
-	"Uint": 64,
-	"Float": 3.14159,
-	"Map": {
-		"key": "value"
-	},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": -64,
-		"Uint": 64,
-		"Float": 3.14159
-	},
-	"StructMaps": {
-		"MapBool": {
-			"": true
-		},
-		"MapString": {
-			"": "hello"
-		},
-		"MapBytes": {
-			"": "AQID"
-		},
-		"MapInt": {
-			"": -64
-		},
-		"MapUint": {
-			"": 64
-		},
-		"MapFloat": {
-			"": 3.14159
-		}
-	},
-	"StructSlices": {
-		"SliceBool": [
-			true
-		],
-		"SliceString": [
-			"hello"
-		],
-		"SliceBytes": [
-			"AQID"
-		],
-		"SliceInt": [
-			-64
-		],
-		"SliceUint": [
-			64
-		],
-		"SliceFloat": [
-			3.14159
-		]
-	},
-	"Slice": [
-		"fizz",
-		"buzz"
-	],
-	"Array": [
-		"goodbye"
-	],
-	"Pointer": {
-		"Bool": false,
-		"String": "",
-		"Bytes": "",
-		"Int": 0,
-		"Uint": 0,
-		"Float": 0,
-		"Map": {},
-		"StructScalars": {
-			"Bool": false,
-			"String": "",
-			"Bytes": "",
-			"Int": 0,
-			"Uint": 0,
-			"Float": 0
-		},
-		"StructMaps": {
-			"MapBool": {},
-			"MapString": {},
-			"MapBytes": {},
-			"MapInt": {},
-			"MapUint": {},
-			"MapFloat": {}
-		},
-		"StructSlices": {
-			"SliceBool": [],
-			"SliceString": [],
-			"SliceBytes": [],
-			"SliceInt": [],
-			"SliceUint": [],
-			"SliceFloat": []
-		},
-		"Slice": [],
-		"Array": [
-			""
-		],
-		"Pointer": null,
-		"Interface": null
-	},
-	"Interface": null
-}`,
-	}, {
-		name: jsontest.Name("Structs/SpaceAfterColonAndComma"),
-		opts: []Options{jsontext.SpaceAfterColon(true), jsontext.SpaceAfterComma(true)},
-		in:   structOmitZeroAll{Int: 1, Uint: 1},
-		want: `{"Int": 1, "Uint": 1}`,
-	}, {
-		name: jsontest.Name("Structs/SpaceAfterColon"),
-		opts: []Options{jsontext.SpaceAfterColon(true)},
-		in:   structOmitZeroAll{Int: 1, Uint: 1},
-		want: `{"Int": 1,"Uint": 1}`,
-	}, {
-		name: jsontest.Name("Structs/SpaceAfterComma"),
-		opts: []Options{jsontext.SpaceAfterComma(true)},
-		in:   structOmitZeroAll{Int: 1, Uint: 1, Slice: []string{"a", "b"}},
-		want: `{"Int":1, "Uint":1, "Slice":["a", "b"]}`,
-	}, {
-		name: jsontest.Name("Structs/Stringified"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structStringifiedAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,     // should be stringified
-			Uint:   +64,     // should be stringified
-			Float:  3.14159, // should be stringified
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,     // should be stringified
-				Uint:   +64,     // should be stringified
-				Float:  3.14159, // should be stringified
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},       // should be stringified
-				MapUint:   map[string]uint64{"": +64},      // should be stringified
-				MapFloat:  map[string]float64{"": 3.14159}, // should be stringified
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},       // should be stringified
-				SliceUint:   []uint64{+64},      // should be stringified
-				SliceFloat:  []float64{3.14159}, // should be stringified
-			},
-			Slice:     []string{"fizz", "buzz"},
-			Array:     [1]string{"goodbye"},
-			Pointer:   new(structStringifiedAll), // should be stringified
-			Interface: (*structStringifiedAll)(nil),
-		},
-		want: `{
-	"Bool": true,
-	"String": "hello",
-	"Bytes": "AQID",
-	"Int": "-64",
-	"Uint": "64",
-	"Float": "3.14159",
-	"Map": {
-		"key": "value"
-	},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": "-64",
-		"Uint": "64",
-		"Float": "3.14159"
-	},
-	"StructMaps": {
-		"MapBool": {
-			"": true
-		},
-		"MapString": {
-			"": "hello"
-		},
-		"MapBytes": {
-			"": "AQID"
-		},
-		"MapInt": {
-			"": "-64"
-		},
-		"MapUint": {
-			"": "64"
-		},
-		"MapFloat": {
-			"": "3.14159"
-		}
-	},
-	"StructSlices": {
-		"SliceBool": [
-			true
-		],
-		"SliceString": [
-			"hello"
-		],
-		"SliceBytes": [
-			"AQID"
-		],
-		"SliceInt": [
-			"-64"
-		],
-		"SliceUint": [
-			"64"
-		],
-		"SliceFloat": [
-			"3.14159"
-		]
-	},
-	"Slice": [
-		"fizz",
-		"buzz"
-	],
-	"Array": [
-		"goodbye"
-	],
-	"Pointer": {
-		"Bool": false,
-		"String": "",
-		"Bytes": "",
-		"Int": "0",
-		"Uint": "0",
-		"Float": "0",
-		"Map": {},
-		"StructScalars": {
-			"Bool": false,
-			"String": "",
-			"Bytes": "",
-			"Int": "0",
-			"Uint": "0",
-			"Float": "0"
-		},
-		"StructMaps": {
-			"MapBool": {},
-			"MapString": {},
-			"MapBytes": {},
-			"MapInt": {},
-			"MapUint": {},
-			"MapFloat": {}
-		},
-		"StructSlices": {
-			"SliceBool": [],
-			"SliceString": [],
-			"SliceBytes": [],
-			"SliceInt": [],
-			"SliceUint": [],
-			"SliceFloat": []
-		},
-		"Slice": [],
-		"Array": [
-			""
-		],
-		"Pointer": null,
-		"Interface": null
-	},
-	"Interface": null
-}`,
-	}, {
-		name: jsontest.Name("Structs/LegacyStringified"),
-		opts: []Options{jsontext.Multiline(true), jsonflags.StringifyWithLegacySemantics | 1},
-		in: structStringifiedAll{
-			Bool:   true,    // should be stringified
-			String: "hello", // should be stringified
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,     // should be stringified
-			Uint:   +64,     // should be stringified
-			Float:  3.14159, // should be stringified
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},
-				MapUint:   map[string]uint64{"": +64},
-				MapFloat:  map[string]float64{"": 3.14159},
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},
-				SliceUint:   []uint64{+64},
-				SliceFloat:  []float64{3.14159},
-			},
-			Slice:     []string{"fizz", "buzz"},
-			Array:     [1]string{"goodbye"},
-			Pointer:   new(structStringifiedAll), // should be stringified
-			Interface: (*structStringifiedAll)(nil),
-		},
-		want: `{
-	"Bool": "true",
-	"String": "\"hello\"",
-	"Bytes": "AQID",
-	"Int": "-64",
-	"Uint": "64",
-	"Float": "3.14159",
-	"Map": {
-		"key": "value"
-	},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": -64,
-		"Uint": 64,
-		"Float": 3.14159
-	},
-	"StructMaps": {
-		"MapBool": {
-			"": true
-		},
-		"MapString": {
-			"": "hello"
-		},
-		"MapBytes": {
-			"": "AQID"
-		},
-		"MapInt": {
-			"": -64
-		},
-		"MapUint": {
-			"": 64
-		},
-		"MapFloat": {
-			"": 3.14159
-		}
-	},
-	"StructSlices": {
-		"SliceBool": [
-			true
-		],
-		"SliceString": [
-			"hello"
-		],
-		"SliceBytes": [
-			"AQID"
-		],
-		"SliceInt": [
-			-64
-		],
-		"SliceUint": [
-			64
-		],
-		"SliceFloat": [
-			3.14159
-		]
-	},
-	"Slice": [
-		"fizz",
-		"buzz"
-	],
-	"Array": [
-		"goodbye"
-	],
-	"Pointer": {
-		"Bool": "false",
-		"String": "\"\"",
-		"Bytes": "",
-		"Int": "0",
-		"Uint": "0",
-		"Float": "0",
-		"Map": {},
-		"StructScalars": {
-			"Bool": false,
-			"String": "",
-			"Bytes": "",
-			"Int": 0,
-			"Uint": 0,
-			"Float": 0
-		},
-		"StructMaps": {
-			"MapBool": {},
-			"MapString": {},
-			"MapBytes": {},
-			"MapInt": {},
-			"MapUint": {},
-			"MapFloat": {}
-		},
-		"StructSlices": {
-			"SliceBool": [],
-			"SliceString": [],
-			"SliceBytes": [],
-			"SliceInt": [],
-			"SliceUint": [],
-			"SliceFloat": []
-		},
-		"Slice": [],
-		"Array": [
-			""
-		],
-		"Pointer": null,
-		"Interface": null
-	},
-	"Interface": null
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZero/Zero"),
-		in:   structOmitZeroAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroOption/Zero"),
-		opts: []Options{OmitZeroStructFields(true)},
-		in:   structAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZero/NonZero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitZeroAll{
-			Bool:          true,                                   // not omitted since true is non-zero
-			String:        " ",                                    // not omitted since non-empty string is non-zero
-			Bytes:         []byte{},                               // not omitted since allocated slice is non-zero
-			Int:           1,                                      // not omitted since 1 is non-zero
-			Uint:          1,                                      // not omitted since 1 is non-zero
-			Float:         math.SmallestNonzeroFloat64,            // not omitted since still slightly above zero
-			Map:           map[string]string{},                    // not omitted since allocated map is non-zero
-			StructScalars: structScalars{unexported: true},        // not omitted since unexported is non-zero
-			StructSlices:  structSlices{Ignored: true},            // not omitted since Ignored is non-zero
-			StructMaps:    structMaps{MapBool: map[string]bool{}}, // not omitted since MapBool is non-zero
-			Slice:         []string{},                             // not omitted since allocated slice is non-zero
-			Array:         [1]string{" "},                         // not omitted since single array element is non-zero
-			Pointer:       new(structOmitZeroAll),                 // not omitted since pointer is non-zero (even if all fields of the struct value are zero)
-			Interface:     (*structOmitZeroAll)(nil),              // not omitted since interface value is non-zero (even if interface value is a nil pointer)
-		},
-		want: `{
-	"Bool": true,
-	"String": " ",
-	"Bytes": "",
-	"Int": 1,
-	"Uint": 1,
-	"Float": 5e-324,
-	"Map": {},
-	"StructScalars": {
-		"Bool": false,
-		"String": "",
-		"Bytes": "",
-		"Int": 0,
-		"Uint": 0,
-		"Float": 0
-	},
-	"StructMaps": {
-		"MapBool": {},
-		"MapString": {},
-		"MapBytes": {},
-		"MapInt": {},
-		"MapUint": {},
-		"MapFloat": {}
-	},
-	"StructSlices": {
-		"SliceBool": [],
-		"SliceString": [],
-		"SliceBytes": [],
-		"SliceInt": [],
-		"SliceUint": [],
-		"SliceFloat": []
-	},
-	"Slice": [],
-	"Array": [
-		" "
-	],
-	"Pointer": {},
-	"Interface": null
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroOption/NonZero"),
-		opts: []Options{OmitZeroStructFields(true), jsontext.Multiline(true)},
-		in: structAll{
-			Bool:          true,
-			String:        " ",
-			Bytes:         []byte{},
-			Int:           1,
-			Uint:          1,
-			Float:         math.SmallestNonzeroFloat64,
-			Map:           map[string]string{},
-			StructScalars: structScalars{unexported: true},
-			StructSlices:  structSlices{Ignored: true},
-			StructMaps:    structMaps{MapBool: map[string]bool{}},
-			Slice:         []string{},
-			Array:         [1]string{" "},
-			Pointer:       new(structAll),
-			Interface:     (*structAll)(nil),
-		},
-		want: `{
-	"Bool": true,
-	"String": " ",
-	"Bytes": "",
-	"Int": 1,
-	"Uint": 1,
-	"Float": 5e-324,
-	"Map": {},
-	"StructScalars": {},
-	"StructMaps": {
-		"MapBool": {}
-	},
-	"StructSlices": {},
-	"Slice": [],
-	"Array": [
-		" "
-	],
-	"Pointer": {},
-	"Interface": null
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroMethod/Zero"),
-		in:   structOmitZeroMethodAll{},
-		want: `{"ValueNeverZero":"","PointerNeverZero":""}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroMethod/NonZero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitZeroMethodAll{
-			ValueAlwaysZero:                 valueAlwaysZero("nonzero"),
-			ValueNeverZero:                  valueNeverZero("nonzero"),
-			PointerAlwaysZero:               pointerAlwaysZero("nonzero"),
-			PointerNeverZero:                pointerNeverZero("nonzero"),
-			PointerValueAlwaysZero:          addr(valueAlwaysZero("nonzero")),
-			PointerValueNeverZero:           addr(valueNeverZero("nonzero")),
-			PointerPointerAlwaysZero:        addr(pointerAlwaysZero("nonzero")),
-			PointerPointerNeverZero:         addr(pointerNeverZero("nonzero")),
-			PointerPointerValueAlwaysZero:   addr(addr(valueAlwaysZero("nonzero"))), // marshaled since **valueAlwaysZero does not implement IsZero
-			PointerPointerValueNeverZero:    addr(addr(valueNeverZero("nonzero"))),
-			PointerPointerPointerAlwaysZero: addr(addr(pointerAlwaysZero("nonzero"))), // marshaled since **pointerAlwaysZero does not implement IsZero
-			PointerPointerPointerNeverZero:  addr(addr(pointerNeverZero("nonzero"))),
-		},
-		want: `{
-	"ValueNeverZero": "nonzero",
-	"PointerNeverZero": "nonzero",
-	"PointerValueNeverZero": "nonzero",
-	"PointerPointerNeverZero": "nonzero",
-	"PointerPointerValueAlwaysZero": "nonzero",
-	"PointerPointerValueNeverZero": "nonzero",
-	"PointerPointerPointerAlwaysZero": "nonzero",
-	"PointerPointerPointerNeverZero": "nonzero"
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroMethod/Interface/Zero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in:   structOmitZeroMethodInterfaceAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroMethod/Interface/PartialZero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitZeroMethodInterfaceAll{
-			ValueAlwaysZero:          valueAlwaysZero(""),
-			ValueNeverZero:           valueNeverZero(""),
-			PointerValueAlwaysZero:   (*valueAlwaysZero)(nil),
-			PointerValueNeverZero:    (*valueNeverZero)(nil), // nil pointer, so method not called
-			PointerPointerAlwaysZero: (*pointerAlwaysZero)(nil),
-			PointerPointerNeverZero:  (*pointerNeverZero)(nil), // nil pointer, so method not called
-		},
-		want: `{
-	"ValueNeverZero": ""
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroMethod/Interface/NonZero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitZeroMethodInterfaceAll{
-			ValueAlwaysZero:          valueAlwaysZero("nonzero"),
-			ValueNeverZero:           valueNeverZero("nonzero"),
-			PointerValueAlwaysZero:   addr(valueAlwaysZero("nonzero")),
-			PointerValueNeverZero:    addr(valueNeverZero("nonzero")),
-			PointerPointerAlwaysZero: addr(pointerAlwaysZero("nonzero")),
-			PointerPointerNeverZero:  addr(pointerNeverZero("nonzero")),
-		},
-		want: `{
-	"ValueNeverZero": "nonzero",
-	"PointerValueNeverZero": "nonzero",
-	"PointerPointerNeverZero": "nonzero"
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/Zero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in:   structOmitEmptyAll{},
-		want: `{
-	"Bool": false,
-	"StringNonEmpty": "value",
-	"BytesNonEmpty": [
-		"value"
-	],
-	"Float": 0,
-	"MapNonEmpty": {
-		"key": "value"
-	},
-	"SliceNonEmpty": [
-		"value"
-	]
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/EmptyNonZero"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitEmptyAll{
-			String:                string(""),
-			StringEmpty:           stringMarshalEmpty(""),
-			StringNonEmpty:        stringMarshalNonEmpty(""),
-			PointerString:         addr(string("")),
-			PointerStringEmpty:    addr(stringMarshalEmpty("")),
-			PointerStringNonEmpty: addr(stringMarshalNonEmpty("")),
-			Bytes:                 []byte(""),
-			BytesEmpty:            bytesMarshalEmpty([]byte("")),
-			BytesNonEmpty:         bytesMarshalNonEmpty([]byte("")),
-			PointerBytes:          addr([]byte("")),
-			PointerBytesEmpty:     addr(bytesMarshalEmpty([]byte(""))),
-			PointerBytesNonEmpty:  addr(bytesMarshalNonEmpty([]byte(""))),
-			Map:                   map[string]string{},
-			MapEmpty:              mapMarshalEmpty{},
-			MapNonEmpty:           mapMarshalNonEmpty{},
-			PointerMap:            addr(map[string]string{}),
-			PointerMapEmpty:       addr(mapMarshalEmpty{}),
-			PointerMapNonEmpty:    addr(mapMarshalNonEmpty{}),
-			Slice:                 []string{},
-			SliceEmpty:            sliceMarshalEmpty{},
-			SliceNonEmpty:         sliceMarshalNonEmpty{},
-			PointerSlice:          addr([]string{}),
-			PointerSliceEmpty:     addr(sliceMarshalEmpty{}),
-			PointerSliceNonEmpty:  addr(sliceMarshalNonEmpty{}),
-			Pointer:               &structOmitZeroEmptyAll{},
-			Interface:             []string{},
-		},
-		want: `{
-	"Bool": false,
-	"StringNonEmpty": "value",
-	"PointerStringNonEmpty": "value",
-	"BytesNonEmpty": [
-		"value"
-	],
-	"PointerBytesNonEmpty": [
-		"value"
-	],
-	"Float": 0,
-	"MapNonEmpty": {
-		"key": "value"
-	},
-	"PointerMapNonEmpty": {
-		"key": "value"
-	},
-	"SliceNonEmpty": [
-		"value"
-	],
-	"PointerSliceNonEmpty": [
-		"value"
-	]
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/NonEmpty"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structOmitEmptyAll{
-			Bool:                  true,
-			PointerBool:           addr(true),
-			String:                string("value"),
-			StringEmpty:           stringMarshalEmpty("value"),
-			StringNonEmpty:        stringMarshalNonEmpty("value"),
-			PointerString:         addr(string("value")),
-			PointerStringEmpty:    addr(stringMarshalEmpty("value")),
-			PointerStringNonEmpty: addr(stringMarshalNonEmpty("value")),
-			Bytes:                 []byte("value"),
-			BytesEmpty:            bytesMarshalEmpty([]byte("value")),
-			BytesNonEmpty:         bytesMarshalNonEmpty([]byte("value")),
-			PointerBytes:          addr([]byte("value")),
-			PointerBytesEmpty:     addr(bytesMarshalEmpty([]byte("value"))),
-			PointerBytesNonEmpty:  addr(bytesMarshalNonEmpty([]byte("value"))),
-			Float:                 math.Copysign(0, -1),
-			PointerFloat:          addr(math.Copysign(0, -1)),
-			Map:                   map[string]string{"": ""},
-			MapEmpty:              mapMarshalEmpty{"key": "value"},
-			MapNonEmpty:           mapMarshalNonEmpty{"key": "value"},
-			PointerMap:            addr(map[string]string{"": ""}),
-			PointerMapEmpty:       addr(mapMarshalEmpty{"key": "value"}),
-			PointerMapNonEmpty:    addr(mapMarshalNonEmpty{"key": "value"}),
-			Slice:                 []string{""},
-			SliceEmpty:            sliceMarshalEmpty{"value"},
-			SliceNonEmpty:         sliceMarshalNonEmpty{"value"},
-			PointerSlice:          addr([]string{""}),
-			PointerSliceEmpty:     addr(sliceMarshalEmpty{"value"}),
-			PointerSliceNonEmpty:  addr(sliceMarshalNonEmpty{"value"}),
-			Pointer:               &structOmitZeroEmptyAll{Float: math.SmallestNonzeroFloat64},
-			Interface:             []string{""},
-		},
-		want: `{
-	"Bool": true,
-	"PointerBool": true,
-	"String": "value",
-	"StringNonEmpty": "value",
-	"PointerString": "value",
-	"PointerStringNonEmpty": "value",
-	"Bytes": "dmFsdWU=",
-	"BytesNonEmpty": [
-		"value"
-	],
-	"PointerBytes": "dmFsdWU=",
-	"PointerBytesNonEmpty": [
-		"value"
-	],
-	"Float": -0,
-	"PointerFloat": -0,
-	"Map": {
-		"": ""
-	},
-	"MapNonEmpty": {
-		"key": "value"
-	},
-	"PointerMap": {
-		"": ""
-	},
-	"PointerMapNonEmpty": {
-		"key": "value"
-	},
-	"Slice": [
-		""
-	],
-	"SliceNonEmpty": [
-		"value"
-	],
-	"PointerSlice": [
-		""
-	],
-	"PointerSliceNonEmpty": [
-		"value"
-	],
-	"Pointer": {
-		"Float": 5e-324
-	},
-	"Interface": [
-		""
-	]
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/Legacy/Zero"),
-		opts: []Options{jsonflags.OmitEmptyWithLegacyDefinition | 1},
-		in:   structOmitEmptyAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/Legacy/NonEmpty"),
-		opts: []Options{jsontext.Multiline(true), jsonflags.OmitEmptyWithLegacyDefinition | 1},
-		in: structOmitEmptyAll{
-			Bool:                  true,
-			PointerBool:           addr(true),
-			String:                string("value"),
-			StringEmpty:           stringMarshalEmpty("value"),
-			StringNonEmpty:        stringMarshalNonEmpty("value"),
-			PointerString:         addr(string("value")),
-			PointerStringEmpty:    addr(stringMarshalEmpty("value")),
-			PointerStringNonEmpty: addr(stringMarshalNonEmpty("value")),
-			Bytes:                 []byte("value"),
-			BytesEmpty:            bytesMarshalEmpty([]byte("value")),
-			BytesNonEmpty:         bytesMarshalNonEmpty([]byte("value")),
-			PointerBytes:          addr([]byte("value")),
-			PointerBytesEmpty:     addr(bytesMarshalEmpty([]byte("value"))),
-			PointerBytesNonEmpty:  addr(bytesMarshalNonEmpty([]byte("value"))),
-			Float:                 math.Copysign(0, -1),
-			PointerFloat:          addr(math.Copysign(0, -1)),
-			Map:                   map[string]string{"": ""},
-			MapEmpty:              mapMarshalEmpty{"key": "value"},
-			MapNonEmpty:           mapMarshalNonEmpty{"key": "value"},
-			PointerMap:            addr(map[string]string{"": ""}),
-			PointerMapEmpty:       addr(mapMarshalEmpty{"key": "value"}),
-			PointerMapNonEmpty:    addr(mapMarshalNonEmpty{"key": "value"}),
-			Slice:                 []string{""},
-			SliceEmpty:            sliceMarshalEmpty{"value"},
-			SliceNonEmpty:         sliceMarshalNonEmpty{"value"},
-			PointerSlice:          addr([]string{""}),
-			PointerSliceEmpty:     addr(sliceMarshalEmpty{"value"}),
-			PointerSliceNonEmpty:  addr(sliceMarshalNonEmpty{"value"}),
-			Pointer:               &structOmitZeroEmptyAll{Float: math.Copysign(0, -1)},
-			Interface:             []string{""},
-		},
-		want: `{
-	"Bool": true,
-	"PointerBool": true,
-	"String": "value",
-	"StringEmpty": "",
-	"StringNonEmpty": "value",
-	"PointerString": "value",
-	"PointerStringEmpty": "",
-	"PointerStringNonEmpty": "value",
-	"Bytes": "dmFsdWU=",
-	"BytesEmpty": [],
-	"BytesNonEmpty": [
-		"value"
-	],
-	"PointerBytes": "dmFsdWU=",
-	"PointerBytesEmpty": [],
-	"PointerBytesNonEmpty": [
-		"value"
-	],
-	"PointerFloat": -0,
-	"Map": {
-		"": ""
-	},
-	"MapEmpty": {},
-	"MapNonEmpty": {
-		"key": "value"
-	},
-	"PointerMap": {
-		"": ""
-	},
-	"PointerMapEmpty": {},
-	"PointerMapNonEmpty": {
-		"key": "value"
-	},
-	"Slice": [
-		""
-	],
-	"SliceEmpty": [],
-	"SliceNonEmpty": [
-		"value"
-	],
-	"PointerSlice": [
-		""
-	],
-	"PointerSliceEmpty": [],
-	"PointerSliceNonEmpty": [
-		"value"
-	],
-	"Pointer": {},
-	"Interface": [
-		""
-	]
-}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/NonEmptyString"),
-		in: struct {
-			X string `json:",omitempty"`
-		}{`"`},
-		want: `{"X":"\""}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroEmpty/Zero"),
-		in:   structOmitZeroEmptyAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroEmpty/Empty"),
-		in: structOmitZeroEmptyAll{
-			Bytes:     []byte{},
-			Map:       map[string]string{},
-			Slice:     []string{},
-			Pointer:   &structOmitZeroEmptyAll{},
-			Interface: []string{},
-		},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/PathologicalDepth"),
-		in: func() any {
-			type X struct {
-				X *X `json:",omitempty"`
-			}
-			var make func(int) *X
-			make = func(n int) *X {
-				if n == 0 {
-					return nil
-				}
-				return &X{make(n - 1)}
-			}
-			return make(100)
-		}(),
-		want:      `{}`,
-		useWriter: true,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/PathologicalBreadth"),
-		in: func() any {
-			var fields []reflect.StructField
-			for i := range 100 {
-				fields = append(fields, reflect.StructField{
-					Name: fmt.Sprintf("X%d", i),
-					Type: T[stringMarshalEmpty](),
-					Tag:  `json:",omitempty"`,
-				})
-			}
-			return reflect.New(reflect.StructOf(fields)).Interface()
-		}(),
-		want:      `{}`,
-		useWriter: true,
-	}, {
-		name: jsontest.Name("Structs/OmitEmpty/PathologicalTree"),
-		in: func() any {
-			type X struct {
-				XL, XR *X `json:",omitempty"`
-			}
-			var make func(int) *X
-			make = func(n int) *X {
-				if n == 0 {
-					return nil
-				}
-				return &X{make(n - 1), make(n - 1)}
-			}
-			return make(8)
-		}(),
-		want:      `{}`,
-		useWriter: true,
-	}, {
-		name: jsontest.Name("Structs/OmitZeroEmpty/NonEmpty"),
-		in: structOmitZeroEmptyAll{
-			Bytes:     []byte("value"),
-			Map:       map[string]string{"": ""},
-			Slice:     []string{""},
-			Pointer:   &structOmitZeroEmptyAll{Bool: true},
-			Interface: []string{""},
-		},
-		want: `{"Bytes":"dmFsdWU=","Map":{"":""},"Slice":[""],"Pointer":{"Bool":true},"Interface":[""]}`,
-	}, {
-		name: jsontest.Name("Structs/Format/Bytes"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structFormatBytes{
-			Base16:    []byte("\x01\x23\x45\x67\x89\xab\xcd\xef"),
-			Base32:    []byte("\x00D2\x14\xc7BT\xb65τe:V\xd7\xc6u\xbew\xdf"),
-			Base32Hex: []byte("\x00D2\x14\xc7BT\xb65τe:V\xd7\xc6u\xbew\xdf"),
-			Base64:    []byte("\x00\x10\x83\x10Q\x87 \x92\x8b0ӏA\x14\x93QU\x97a\x96\x9bqן\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2ۯ\xc3\x1c\xb3\xd3]\xb7㞻\xf3߿"),
-			Base64URL: []byte("\x00\x10\x83\x10Q\x87 \x92\x8b0ӏA\x14\x93QU\x97a\x96\x9bqן\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2ۯ\xc3\x1c\xb3\xd3]\xb7㞻\xf3߿"),
-			Array:     []byte{1, 2, 3, 4},
-		},
-		want: `{
-	"Base16": "0123456789abcdef",
-	"Base32": "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
-	"Base32Hex": "0123456789ABCDEFGHIJKLMNOPQRSTUV",
-	"Base64": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
-	"Base64URL": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",
-	"Array": [
-		1,
-		2,
-		3,
-		4
-	]
-}`}, {
-		name: jsontest.Name("Structs/Format/ArrayBytes"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structFormatArrayBytes{
-			Base16:    [4]byte{1, 2, 3, 4},
-			Base32:    [4]byte{1, 2, 3, 4},
-			Base32Hex: [4]byte{1, 2, 3, 4},
-			Base64:    [4]byte{1, 2, 3, 4},
-			Base64URL: [4]byte{1, 2, 3, 4},
-			Array:     [4]byte{1, 2, 3, 4},
-			Default:   [4]byte{1, 2, 3, 4},
-		},
-		want: `{
-	"Base16": "01020304",
-	"Base32": "AEBAGBA=",
-	"Base32Hex": "0410610=",
-	"Base64": "AQIDBA==",
-	"Base64URL": "AQIDBA==",
-	"Array": [
-		1,
-		2,
-		3,
-		4
-	],
-	"Default": "AQIDBA=="
-}`}, {
-		name: jsontest.Name("Structs/Format/ArrayBytes/Legacy"),
-		opts: []Options{jsontext.Multiline(true), jsonflags.FormatBytesWithLegacySemantics | 1},
-		in: structFormatArrayBytes{
-			Base16:    [4]byte{1, 2, 3, 4},
-			Base32:    [4]byte{1, 2, 3, 4},
-			Base32Hex: [4]byte{1, 2, 3, 4},
-			Base64:    [4]byte{1, 2, 3, 4},
-			Base64URL: [4]byte{1, 2, 3, 4},
-			Array:     [4]byte{1, 2, 3, 4},
-			Default:   [4]byte{1, 2, 3, 4},
-		},
-		want: `{
-	"Base16": "01020304",
-	"Base32": "AEBAGBA=",
-	"Base32Hex": "0410610=",
-	"Base64": "AQIDBA==",
-	"Base64URL": "AQIDBA==",
-	"Array": [
-		1,
-		2,
-		3,
-		4
-	],
-	"Default": [
-		1,
-		2,
-		3,
-		4
-	]
-}`}, {
-		name: jsontest.Name("Structs/Format/Bytes/Array"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(in byte) ([]byte, error) {
-				if in > 3 {
-					return []byte("true"), nil
-				} else {
-					return []byte("false"), nil
-				}
-			})),
-		},
-		in: struct {
-			Array []byte `json:",format:array"`
-		}{
-			Array: []byte{1, 6, 2, 5, 3, 4},
-		},
-		want: `{"Array":[false,true,false,true,false,true]}`,
-	}, {
-		name: jsontest.Name("Structs/Format/Floats"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: []structFormatFloats{
-			{NonFinite: math.Pi, PointerNonFinite: addr(math.Pi)},
-			{NonFinite: math.NaN(), PointerNonFinite: addr(math.NaN())},
-			{NonFinite: math.Inf(-1), PointerNonFinite: addr(math.Inf(-1))},
-			{NonFinite: math.Inf(+1), PointerNonFinite: addr(math.Inf(+1))},
-		},
-		want: `[
-	{
-		"NonFinite": 3.141592653589793,
-		"PointerNonFinite": 3.141592653589793
-	},
-	{
-		"NonFinite": "NaN",
-		"PointerNonFinite": "NaN"
-	},
-	{
-		"NonFinite": "-Infinity",
-		"PointerNonFinite": "-Infinity"
-	},
-	{
-		"NonFinite": "Infinity",
-		"PointerNonFinite": "Infinity"
-	}
-]`,
-	}, {
-		name: jsontest.Name("Structs/Format/Maps"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: []structFormatMaps{{
-			EmitNull: map[string]string(nil), PointerEmitNull: addr(map[string]string(nil)),
-			EmitEmpty: map[string]string(nil), PointerEmitEmpty: addr(map[string]string(nil)),
-			EmitDefault: map[string]string(nil), PointerEmitDefault: addr(map[string]string(nil)),
-		}, {
-			EmitNull: map[string]string{}, PointerEmitNull: addr(map[string]string{}),
-			EmitEmpty: map[string]string{}, PointerEmitEmpty: addr(map[string]string{}),
-			EmitDefault: map[string]string{}, PointerEmitDefault: addr(map[string]string{}),
-		}, {
-			EmitNull: map[string]string{"k": "v"}, PointerEmitNull: addr(map[string]string{"k": "v"}),
-			EmitEmpty: map[string]string{"k": "v"}, PointerEmitEmpty: addr(map[string]string{"k": "v"}),
-			EmitDefault: map[string]string{"k": "v"}, PointerEmitDefault: addr(map[string]string{"k": "v"}),
-		}},
-		want: `[
-	{
-		"EmitNull": null,
-		"PointerEmitNull": null,
-		"EmitEmpty": {},
-		"PointerEmitEmpty": {},
-		"EmitDefault": {},
-		"PointerEmitDefault": {}
-	},
-	{
-		"EmitNull": {},
-		"PointerEmitNull": {},
-		"EmitEmpty": {},
-		"PointerEmitEmpty": {},
-		"EmitDefault": {},
-		"PointerEmitDefault": {}
-	},
-	{
-		"EmitNull": {
-			"k": "v"
-		},
-		"PointerEmitNull": {
-			"k": "v"
-		},
-		"EmitEmpty": {
-			"k": "v"
-		},
-		"PointerEmitEmpty": {
-			"k": "v"
-		},
-		"EmitDefault": {
-			"k": "v"
-		},
-		"PointerEmitDefault": {
-			"k": "v"
-		}
-	}
-]`,
-	}, {
-		name: jsontest.Name("Structs/Format/Maps/FormatNilMapAsNull"),
-		opts: []Options{
-			FormatNilMapAsNull(true),
-			jsontext.Multiline(true),
-		},
-		in: []structFormatMaps{{
-			EmitNull: map[string]string(nil), PointerEmitNull: addr(map[string]string(nil)),
-			EmitEmpty: map[string]string(nil), PointerEmitEmpty: addr(map[string]string(nil)),
-			EmitDefault: map[string]string(nil), PointerEmitDefault: addr(map[string]string(nil)),
-		}, {
-			EmitNull: map[string]string{}, PointerEmitNull: addr(map[string]string{}),
-			EmitEmpty: map[string]string{}, PointerEmitEmpty: addr(map[string]string{}),
-			EmitDefault: map[string]string{}, PointerEmitDefault: addr(map[string]string{}),
-		}, {
-			EmitNull: map[string]string{"k": "v"}, PointerEmitNull: addr(map[string]string{"k": "v"}),
-			EmitEmpty: map[string]string{"k": "v"}, PointerEmitEmpty: addr(map[string]string{"k": "v"}),
-			EmitDefault: map[string]string{"k": "v"}, PointerEmitDefault: addr(map[string]string{"k": "v"}),
-		}},
-		want: `[
-	{
-		"EmitNull": null,
-		"PointerEmitNull": null,
-		"EmitEmpty": {},
-		"PointerEmitEmpty": {},
-		"EmitDefault": null,
-		"PointerEmitDefault": null
-	},
-	{
-		"EmitNull": {},
-		"PointerEmitNull": {},
-		"EmitEmpty": {},
-		"PointerEmitEmpty": {},
-		"EmitDefault": {},
-		"PointerEmitDefault": {}
-	},
-	{
-		"EmitNull": {
-			"k": "v"
-		},
-		"PointerEmitNull": {
-			"k": "v"
-		},
-		"EmitEmpty": {
-			"k": "v"
-		},
-		"PointerEmitEmpty": {
-			"k": "v"
-		},
-		"EmitDefault": {
-			"k": "v"
-		},
-		"PointerEmitDefault": {
-			"k": "v"
-		}
-	}
-]`,
-	}, {
-		name: jsontest.Name("Structs/Format/Slices"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: []structFormatSlices{{
-			EmitNull: []string(nil), PointerEmitNull: addr([]string(nil)),
-			EmitEmpty: []string(nil), PointerEmitEmpty: addr([]string(nil)),
-			EmitDefault: []string(nil), PointerEmitDefault: addr([]string(nil)),
-		}, {
-			EmitNull: []string{}, PointerEmitNull: addr([]string{}),
-			EmitEmpty: []string{}, PointerEmitEmpty: addr([]string{}),
-			EmitDefault: []string{}, PointerEmitDefault: addr([]string{}),
-		}, {
-			EmitNull: []string{"v"}, PointerEmitNull: addr([]string{"v"}),
-			EmitEmpty: []string{"v"}, PointerEmitEmpty: addr([]string{"v"}),
-			EmitDefault: []string{"v"}, PointerEmitDefault: addr([]string{"v"}),
-		}},
-		want: `[
-	{
-		"EmitNull": null,
-		"PointerEmitNull": null,
-		"EmitEmpty": [],
-		"PointerEmitEmpty": [],
-		"EmitDefault": [],
-		"PointerEmitDefault": []
-	},
-	{
-		"EmitNull": [],
-		"PointerEmitNull": [],
-		"EmitEmpty": [],
-		"PointerEmitEmpty": [],
-		"EmitDefault": [],
-		"PointerEmitDefault": []
-	},
-	{
-		"EmitNull": [
-			"v"
-		],
-		"PointerEmitNull": [
-			"v"
-		],
-		"EmitEmpty": [
-			"v"
-		],
-		"PointerEmitEmpty": [
-			"v"
-		],
-		"EmitDefault": [
-			"v"
-		],
-		"PointerEmitDefault": [
-			"v"
-		]
-	}
-]`,
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Bool"),
-		in:      structFormatInvalid{Bool: true},
-		want:    `{"Bool"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Bool":`, "/Bool").withType(0, boolType),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/String"),
-		in:      structFormatInvalid{String: "string"},
-		want:    `{"String"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"String":`, "/String").withType(0, stringType),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Bytes"),
-		in:      structFormatInvalid{Bytes: []byte("bytes")},
-		want:    `{"Bytes"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Bytes":`, "/Bytes").withType(0, bytesType),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Int"),
-		in:      structFormatInvalid{Int: 1},
-		want:    `{"Int"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Int":`, "/Int").withType(0, T[int64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Uint"),
-		in:      structFormatInvalid{Uint: 1},
-		want:    `{"Uint"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Uint":`, "/Uint").withType(0, T[uint64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Float"),
-		in:      structFormatInvalid{Float: 1},
-		want:    `{"Float"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Float":`, "/Float").withType(0, T[float64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Map"),
-		in:      structFormatInvalid{Map: map[string]string{}},
-		want:    `{"Map"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Map":`, "/Map").withType(0, T[map[string]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Struct"),
-		in:      structFormatInvalid{Struct: structAll{Bool: true}},
-		want:    `{"Struct"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Struct":`, "/Struct").withType(0, T[structAll]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Slice"),
-		in:      structFormatInvalid{Slice: []string{}},
-		want:    `{"Slice"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Slice":`, "/Slice").withType(0, T[[]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Array"),
-		in:      structFormatInvalid{Array: [1]string{"string"}},
-		want:    `{"Array"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Array":`, "/Array").withType(0, T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Interface"),
-		in:      structFormatInvalid{Interface: "anything"},
-		want:    `{"Interface"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"Interface":`, "/Interface").withType(0, T[any]()),
-	}, {
-		name: jsontest.Name("Structs/Inline/Zero"),
-		in:   structInlined{},
-		want: `{"D":""}`,
-	}, {
-		name: jsontest.Name("Structs/Inline/Alloc"),
-		in: structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{},
-				StructEmbed1: StructEmbed1{},
-			},
-			StructEmbed2: &StructEmbed2{},
-		},
-		want: `{"A":"","B":"","D":"","E":"","F":"","G":""}`,
-	}, {
-		name: jsontest.Name("Structs/Inline/NonZero"),
-		in: structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{A: "A1", B: "B1", C: "C1"},
-				StructEmbed1: StructEmbed1{C: "C2", D: "D2", E: "E2"},
-			},
-			StructEmbed2: &StructEmbed2{E: "E3", F: "F3", G: "G3"},
-		},
-		want: `{"A":"A1","B":"B1","D":"D2","E":"E3","F":"F3","G":"G3"}`,
-	}, {
-		name: jsontest.Name("Structs/Inline/DualCycle"),
-		in: cyclicA{
-			B1: cyclicB{F: 1}, // B1.F ignored since it conflicts with B2.F
-			B2: cyclicB{F: 2}, // B2.F ignored since it conflicts with B1.F
-		},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/Nil"),
-		in:   structInlineTextValue{X: jsontext.Value(nil)},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/Empty"),
-		in:   structInlineTextValue{X: jsontext.Value("")},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/NonEmptyN1"),
-		in:   structInlineTextValue{X: jsontext.Value(` { "fizz" : "buzz" } `)},
-		want: `{"fizz":"buzz"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/NonEmptyN2"),
-		in:   structInlineTextValue{X: jsontext.Value(` { "fizz" : "buzz" , "foo" : "bar" } `)},
-		want: `{"fizz":"buzz","foo":"bar"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/NonEmptyWithOthers"),
-		in: structInlineTextValue{
-			A: 1,
-			X: jsontext.Value(` { "fizz" : "buzz" , "foo" : "bar" } `),
-			B: 2,
-		},
-		// NOTE: Inlined fallback fields are always serialized last.
-		want: `{"A":1,"B":2,"fizz":"buzz","foo":"bar"}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(false)},
-		in:      structInlineTextValue{X: jsontext.Value(` { "fizz" : "buzz" , "fizz" : "buzz" } `)},
-		want:    `{"fizz":"buzz"`,
-		wantErr: newDuplicateNameError("/fizz", nil, len64(`{"fizz":"buzz"`)),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowDuplicateNames(true)},
-		in:   structInlineTextValue{X: jsontext.Value(` { "fizz" : "buzz" , "fizz" : "buzz" } `)},
-		want: `{"fizz":"buzz","fizz":"buzz"}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/RejectInvalidUTF8"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(false)},
-		in:      structInlineTextValue{X: jsontext.Value(`{"` + "\xde\xad\xbe\xef" + `":"value"}`)},
-		want:    `{`,
-		wantErr: newInvalidUTF8Error(len64(`{"`+"\xde\xad"), ""),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/AllowInvalidUTF8"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true)},
-		in:   structInlineTextValue{X: jsontext.Value(`{"` + "\xde\xad\xbe\xef" + `":"value"}`)},
-		want: `{"ޭ��":"value"}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/InvalidWhitespace"),
-		in:      structInlineTextValue{X: jsontext.Value("\n\r\t ")},
-		want:    `{`,
-		wantErr: EM(io.ErrUnexpectedEOF).withPos(`{`, "").withType(0, T[jsontext.Value]()),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/InvalidObject"),
-		in:      structInlineTextValue{X: jsontext.Value(` true `)},
-		want:    `{`,
-		wantErr: EM(errRawInlinedNotObject).withPos(`{`, "").withType(0, T[jsontext.Value]()),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/InvalidObjectName"),
-		in:      structInlineTextValue{X: jsontext.Value(` { true : false } `)},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(" { "), "")).withPos(`{`, "").withType(0, T[jsontext.Value]()),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/InvalidEndObject"),
-		in:      structInlineTextValue{X: jsontext.Value(` { "name" : false , } `)},
-		want:    `{"name":false`,
-		wantErr: EM(newInvalidCharacterError(",", "at start of value", len64(` { "name" : false `), "")).withPos(`{"name":false,`, "").withType(0, T[jsontext.Value]()),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/InvalidDualObject"),
-		in:      structInlineTextValue{X: jsontext.Value(`{}{}`)},
-		want:    `{`,
-		wantErr: EM(newInvalidCharacterError("{", "after top-level value", len64(`{}`), "")).withPos(`{`, "").withType(0, T[jsontext.Value]()),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/TextValue/Nested/Nil"),
-		in:   structInlinePointerInlineTextValue{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerTextValue/Nil"),
-		in:   structInlinePointerTextValue{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerTextValue/NonEmpty"),
-		in:   structInlinePointerTextValue{X: addr(jsontext.Value(` { "fizz" : "buzz" } `))},
-		want: `{"fizz":"buzz"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerTextValue/Nested/Nil"),
-		in:   structInlineInlinePointerTextValue{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/Nil"),
-		in:   structInlineMapStringAny{X: nil},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/Empty"),
-		in:   structInlineMapStringAny{X: make(jsonObject)},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/NonEmptyN1"),
-		in:   structInlineMapStringAny{X: jsonObject{"fizz": nil}},
-		want: `{"fizz":null}`,
-	}, {
-		name:         jsontest.Name("Structs/InlinedFallback/MapStringAny/NonEmptyN2"),
-		in:           structInlineMapStringAny{X: jsonObject{"fizz": time.Time{}, "buzz": math.Pi}},
-		want:         `{"buzz":3.141592653589793,"fizz":"0001-01-01T00:00:00Z"}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/NonEmptyWithOthers"),
-		in: structInlineMapStringAny{
-			A: 1,
-			X: jsonObject{"fizz": nil},
-			B: 2,
-		},
-		// NOTE: Inlined fallback fields are always serialized last.
-		want: `{"A":1,"B":2,"fizz":null}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapStringAny/RejectInvalidUTF8"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(false)},
-		in:      structInlineMapStringAny{X: jsonObject{"\xde\xad\xbe\xef": nil}},
-		want:    `{`,
-		wantErr: EM(jsonwire.ErrInvalidUTF8).withPos(`{`, "").withType(0, stringType),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/AllowInvalidUTF8"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true)},
-		in:   structInlineMapStringAny{X: jsonObject{"\xde\xad\xbe\xef": nil}},
-		want: `{"ޭ��":null}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapStringAny/InvalidValue"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(true)},
-		in:      structInlineMapStringAny{X: jsonObject{"name": make(chan string)}},
-		want:    `{"name"`,
-		wantErr: EM(nil).withPos(`{"name":`, "/name").withType(0, T[chan string]()),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/Nested/Nil"),
-		in:   structInlinePointerInlineMapStringAny{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringAny/MarshalFunc"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v float64) ([]byte, error) {
-				return []byte(fmt.Sprintf(`"%v"`, v)), nil
-			})),
-		},
-		in:   structInlineMapStringAny{X: jsonObject{"fizz": 3.14159}},
-		want: `{"fizz":"3.14159"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Nil"),
-		in:   structInlinePointerMapStringAny{X: nil},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/NonEmpty"),
-		in:   structInlinePointerMapStringAny{X: addr(jsonObject{"name": "value"})},
-		want: `{"name":"value"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Nested/Nil"),
-		in:   structInlineInlinePointerMapStringAny{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt"),
-		in: structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want:         `{"one":1,"two":2,"zero":0}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/Deterministic"),
-		opts: []Options{Deterministic(true)},
-		in: structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want: `{"one":1,"two":2,"zero":0}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/Deterministic+AllowInvalidUTF8+RejectDuplicateNames"),
-		opts: []Options{Deterministic(true), jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(false)},
-		in: structInlineMapStringInt{
-			X: map[string]int{"\xff": 0, "\xfe": 1},
-		},
-		want:    `{"�":1`,
-		wantErr: newDuplicateNameError("", []byte(`"�"`), len64(`{"�":1`)),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/Deterministic+AllowInvalidUTF8+AllowDuplicateNames"),
-		opts: []Options{Deterministic(true), jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(true)},
-		in: structInlineMapStringInt{
-			X: map[string]int{"\xff": 0, "\xfe": 1},
-		},
-		want: `{"�":1,"�":0}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/StringifiedNumbers"),
-		opts: []Options{StringifyNumbers(true)},
-		in: structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want:         `{"one":"1","two":"2","zero":"0"}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/MarshalFunc"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				// Marshalers do not affect the string key of inlined maps.
-				MarshalFunc(func(v string) ([]byte, error) {
-					return []byte(fmt.Sprintf(`"%q"`, strings.ToUpper(v))), nil
-				}),
-				MarshalFunc(func(v int) ([]byte, error) {
-					return []byte(fmt.Sprintf(`"%v"`, v)), nil
-				}),
-			)),
-		},
-		in: structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want:         `{"one":"1","two":"2","zero":"0"}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringInt"),
-		in: structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want:         `{"one":1,"two":2,"zero":0}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringInt/Deterministic"),
-		opts: []Options{Deterministic(true)},
-		in: structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 1, "two": 2},
-		},
-		want: `{"one":1,"two":2,"zero":0}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/Nil"),
-		in:   structInlineMapNamedStringAny{X: nil},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/Empty"),
-		in:   structInlineMapNamedStringAny{X: make(map[namedString]any)},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/NonEmptyN1"),
-		in:   structInlineMapNamedStringAny{X: map[namedString]any{"fizz": nil}},
-		want: `{"fizz":null}`,
-	}, {
-		name:         jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/NonEmptyN2"),
-		in:           structInlineMapNamedStringAny{X: map[namedString]any{"fizz": time.Time{}, "buzz": math.Pi}},
-		want:         `{"buzz":3.141592653589793,"fizz":"0001-01-01T00:00:00Z"}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/NonEmptyWithOthers"),
-		in: structInlineMapNamedStringAny{
-			A: 1,
-			X: map[namedString]any{"fizz": nil},
-			B: 2,
-		},
-		// NOTE: Inlined fallback fields are always serialized last.
-		want: `{"A":1,"B":2,"fizz":null}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/RejectInvalidUTF8"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(false)},
-		in:      structInlineMapNamedStringAny{X: map[namedString]any{"\xde\xad\xbe\xef": nil}},
-		want:    `{`,
-		wantErr: EM(jsonwire.ErrInvalidUTF8).withPos(`{`, "").withType(0, T[namedString]()),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/AllowInvalidUTF8"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true)},
-		in:   structInlineMapNamedStringAny{X: map[namedString]any{"\xde\xad\xbe\xef": nil}},
-		want: `{"ޭ��":null}`,
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/InvalidValue"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(true)},
-		in:      structInlineMapNamedStringAny{X: map[namedString]any{"name": make(chan string)}},
-		want:    `{"name"`,
-		wantErr: EM(nil).withPos(`{"name":`, "/name").withType(0, T[chan string]()),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MarshalFunc"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v float64) ([]byte, error) {
-				return []byte(fmt.Sprintf(`"%v"`, v)), nil
-			})),
-		},
-		in:   structInlineMapNamedStringAny{X: map[namedString]any{"fizz": 3.14159}},
-		want: `{"fizz":"3.14159"}`,
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/DiscardUnknownMembers"),
-		opts: []Options{DiscardUnknownMembers(true)},
-		in: structInlineTextValue{
-			A: 1,
-			X: jsontext.Value(` { "fizz" : "buzz" } `),
-			B: 2,
-		},
-		// NOTE: DiscardUnknownMembers has no effect since this is "inline".
-		want: `{"A":1,"B":2,"fizz":"buzz"}`,
-	}, {
-		name: jsontest.Name("Structs/UnknownFallback/DiscardUnknownMembers"),
-		opts: []Options{DiscardUnknownMembers(true)},
-		in: structUnknownTextValue{
-			A: 1,
-			X: jsontext.Value(` { "fizz" : "buzz" } `),
-			B: 2,
-		},
-		want: `{"A":1,"B":2}`,
-	}, {
-		name: jsontest.Name("Structs/UnknownFallback"),
-		in: structUnknownTextValue{
-			A: 1,
-			X: jsontext.Value(` { "fizz" : "buzz" } `),
-			B: 2,
-		},
-		want: `{"A":1,"B":2,"fizz":"buzz"}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/Other"),
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"dupe":"","dupe":""}`),
-		},
-		want:    `{"dupe":""`,
-		wantErr: newDuplicateNameError("", []byte(`"dupe"`), len64(`{"dupe":""`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/Other/AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowDuplicateNames(true)},
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"dupe": "", "dupe": ""}`),
-		},
-		want: `{"dupe":"","dupe":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/ExactDifferent"),
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"Aaa": "", "AaA": "", "AAa": "", "AAA": ""}`),
-		},
-		want: `{"Aaa":"","AaA":"","AAa":"","AAA":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/ExactConflict"),
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"Aaa": "", "Aaa": ""}`),
-		},
-		want:    `{"Aaa":""`,
-		wantErr: newDuplicateNameError("", []byte(`"Aaa"`), len64(`{"Aaa":""`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/ExactConflict/AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowDuplicateNames(true)},
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"Aaa": "", "Aaa": ""}`),
-		},
-		want: `{"Aaa":"","Aaa":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/NoCaseConflict"),
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"Aaa": "", "AaA": "", "aaa": ""}`),
-		},
-		want:    `{"Aaa":"","AaA":""`,
-		wantErr: newDuplicateNameError("", []byte(`"aaa"`), len64(`{"Aaa":"","AaA":""`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/NoCaseConflict/AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowDuplicateNames(true)},
-		in: structNoCaseInlineTextValue{
-			X: jsontext.Value(`{"Aaa": "", "AaA": "", "aaa": ""}`),
-		},
-		want: `{"Aaa":"","AaA":"","aaa":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/ExactDifferentWithField"),
-		in: structNoCaseInlineTextValue{
-			AAA: "x",
-			AaA: "x",
-			X:   jsontext.Value(`{"Aaa": ""}`),
-		},
-		want: `{"AAA":"x","AaA":"x","Aaa":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/ExactConflictWithField"),
-		in: structNoCaseInlineTextValue{
-			AAA: "x",
-			AaA: "x",
-			X:   jsontext.Value(`{"AAA": ""}`),
-		},
-		want:    `{"AAA":"x","AaA":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"AAA"`), len64(`{"AAA":"x","AaA":"x"`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineTextValue/NoCaseConflictWithField"),
-		in: structNoCaseInlineTextValue{
-			AAA: "x",
-			AaA: "x",
-			X:   jsontext.Value(`{"aaa": ""}`),
-		},
-		want:    `{"AAA":"x","AaA":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"aaa"`), len64(`{"AAA":"x","AaA":"x"`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/MatchCaseInsensitiveDelimiter"),
-		in: structNoCaseInlineTextValue{
-			AaA: "x",
-			X:   jsontext.Value(`{"aa_a": ""}`),
-		},
-		want:    `{"AaA":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"aa_a"`), len64(`{"AaA":"x"`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/MatchCaseSensitiveDelimiter"),
-		opts: []Options{jsonflags.MatchCaseSensitiveDelimiter | 1},
-		in: structNoCaseInlineTextValue{
-			AaA: "x",
-			X:   jsontext.Value(`{"aa_a": ""}`),
-		},
-		want: `{"AaA":"x","aa_a":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/MatchCaseInsensitiveNames+MatchCaseSensitiveDelimiter"),
-		opts: []Options{MatchCaseInsensitiveNames(true), jsonflags.MatchCaseSensitiveDelimiter | 1},
-		in: structNoCaseInlineTextValue{
-			AaA: "x",
-			X:   jsontext.Value(`{"aa_a": ""}`),
-		},
-		want: `{"AaA":"x","aa_a":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/MatchCaseInsensitiveNames+MatchCaseSensitiveDelimiter"),
-		opts: []Options{MatchCaseInsensitiveNames(true), jsonflags.MatchCaseSensitiveDelimiter | 1},
-		in: structNoCaseInlineTextValue{
-			AA_b: "x",
-			X:    jsontext.Value(`{"aa_b": ""}`),
-		},
-		want:    `{"AA_b":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"aa_b"`), len64(`{"AA_b":"x"`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineMapStringAny/ExactDifferent"),
-		in: structNoCaseInlineMapStringAny{
-			X: jsonObject{"Aaa": "", "AaA": "", "AAa": "", "AAA": ""},
-		},
-		want:         `{"AAA":"","AAa":"","AaA":"","Aaa":""}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineMapStringAny/ExactDifferentWithField"),
-		in: structNoCaseInlineMapStringAny{
-			AAA: "x",
-			AaA: "x",
-			X:   jsonObject{"Aaa": ""},
-		},
-		want: `{"AAA":"x","AaA":"x","Aaa":""}`,
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineMapStringAny/ExactConflictWithField"),
-		in: structNoCaseInlineMapStringAny{
-			AAA: "x",
-			AaA: "x",
-			X:   jsonObject{"AAA": ""},
-		},
-		want:    `{"AAA":"x","AaA":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"AAA"`), len64(`{"AAA":"x","AaA":"x"`)),
-	}, {
-		name: jsontest.Name("Structs/DuplicateName/NoCaseInlineMapStringAny/NoCaseConflictWithField"),
-		in: structNoCaseInlineMapStringAny{
-			AAA: "x",
-			AaA: "x",
-			X:   jsonObject{"aaa": ""},
-		},
-		want:    `{"AAA":"x","AaA":"x"`,
-		wantErr: newDuplicateNameError("", []byte(`"aaa"`), len64(`{"AAA":"x","AaA":"x"`)),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/Conflicting"),
-		in:      structConflicting{},
-		want:    ``,
-		wantErr: EM(errors.New("Go struct fields A and B conflict over JSON object name \"conflict\"")).withType(0, T[structConflicting]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/NoneExported"),
-		in:      structNoneExported{},
-		want:    ``,
-		wantErr: EM(errNoExportedFields).withType(0, T[structNoneExported]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/MalformedTag"),
-		in:      structMalformedTag{},
-		want:    ``,
-		wantErr: EM(errors.New("Go struct field Malformed has malformed `json` tag: invalid character '\"' at start of option (expecting Unicode letter or single quote)")).withType(0, T[structMalformedTag]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/UnexportedTag"),
-		in:      structUnexportedTag{},
-		want:    ``,
-		wantErr: EM(errors.New("unexported Go struct field unexported cannot have non-ignored `json:\"name\"` tag")).withType(0, T[structUnexportedTag]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/ExportedEmbedded"),
-		in:      structExportedEmbedded{"hello"},
-		want:    ``,
-		wantErr: EM(errors.New("embedded Go struct field NamedString of non-struct type must be explicitly given a JSON name")).withType(0, T[structExportedEmbedded]()),
-	}, {
-		name: jsontest.Name("Structs/Valid/ExportedEmbedded"),
-		opts: []Options{jsonflags.ReportErrorsWithLegacySemantics | 1},
-		in:   structExportedEmbedded{"hello"},
-		want: `{"NamedString":"hello"}`,
-	}, {
-		name: jsontest.Name("Structs/Valid/ExportedEmbeddedTag"),
-		in:   structExportedEmbeddedTag{"hello"},
-		want: `{"name":"hello"}`,
-	}, {
-		name:    jsontest.Name("Structs/Invalid/UnexportedEmbedded"),
-		in:      structUnexportedEmbedded{},
-		want:    ``,
-		wantErr: EM(errors.New("embedded Go struct field namedString of non-struct type must be explicitly given a JSON name")).withType(0, T[structUnexportedEmbedded]()),
-	}, {
-		name: jsontest.Name("Structs/Valid/UnexportedEmbedded"),
-		opts: []Options{jsonflags.ReportErrorsWithLegacySemantics | 1},
-		in:   structUnexportedEmbedded{},
-		want: `{}`,
-	}, {
-		name:    jsontest.Name("Structs/Invalid/UnexportedEmbeddedTag"),
-		in:      structUnexportedEmbeddedTag{},
-		wantErr: EM(errors.New("Go struct field namedString is not exported")).withType(0, T[structUnexportedEmbeddedTag]()),
-	}, {
-		name: jsontest.Name("Structs/Valid/UnexportedEmbeddedTag"),
-		opts: []Options{jsonflags.ReportErrorsWithLegacySemantics | 1},
-		in:   structUnexportedEmbeddedTag{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/Invalid/UnexportedEmbeddedMethodTag"),
-		opts: []Options{jsonflags.ReportErrorsWithLegacySemantics | 1},
-		in:   structUnexportedEmbeddedMethodTag{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedEmbeddedStruct/Zero"),
-		in:   structUnexportedEmbeddedStruct{},
-		want: `{"FizzBuzz":0,"Addr":""}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedEmbeddedStruct/NonZero"),
-		in:   structUnexportedEmbeddedStruct{structOmitZeroAll{Bool: true}, 5, structNestedAddr{netip.AddrFrom4([4]byte{192, 168, 0, 1})}},
-		want: `{"Bool":true,"FizzBuzz":5,"Addr":"192.168.0.1"}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedEmbeddedStructPointer/Nil"),
-		in:   structUnexportedEmbeddedStructPointer{},
-		want: `{"FizzBuzz":0}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedEmbeddedStructPointer/Zero"),
-		in:   structUnexportedEmbeddedStructPointer{&structOmitZeroAll{}, 0, &structNestedAddr{}},
-		want: `{"FizzBuzz":0,"Addr":""}`,
-	}, {
-		name: jsontest.Name("Structs/UnexportedEmbeddedStructPointer/NonZero"),
-		in:   structUnexportedEmbeddedStructPointer{&structOmitZeroAll{Bool: true}, 5, &structNestedAddr{netip.AddrFrom4([4]byte{192, 168, 0, 1})}},
-		want: `{"Bool":true,"FizzBuzz":5,"Addr":"192.168.0.1"}`,
-	}, {
-		name: jsontest.Name("Structs/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   struct{}{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Slices/Interface"),
-		in: []any{
-			false, true,
-			"hello", []byte("world"),
-			int32(-32), namedInt64(-64),
-			uint32(+32), namedUint64(+64),
-			float32(32.32), namedFloat64(64.64),
-		},
-		want: `[false,true,"hello","d29ybGQ=",-32,-64,32,64,32.32,64.64]`,
-	}, {
-		name:    jsontest.Name("Slices/Invalid/Channel"),
-		in:      [](chan string){nil},
-		want:    `[`,
-		wantErr: EM(nil).withPos(`[`, "/0").withType(0, T[chan string]()),
-	}, {
-		name: jsontest.Name("Slices/RecursiveSlice"),
-		in: recursiveSlice{
-			nil,
-			{},
-			{nil},
-			{nil, {}},
-		},
-		want: `[[],[],[[]],[[],[]]]`,
-	}, {
-		name: jsontest.Name("Slices/CyclicSlice"),
-		in: func() recursiveSlice {
-			s := recursiveSlice{{}}
-			s[0] = s
-			return s
-		}(),
-		want:    strings.Repeat(`[`, startDetectingCyclesAfter) + `[`,
-		wantErr: EM(internal.ErrCycle).withPos(strings.Repeat("[", startDetectingCyclesAfter+1), jsontext.Pointer(strings.Repeat("/0", startDetectingCyclesAfter+1))).withType(0, T[recursiveSlice]()),
-	}, {
-		name: jsontest.Name("Slices/NonCyclicSlice"),
-		in: func() []any {
-			v := []any{nil, nil}
-			v[1] = v[:1]
-			for i := 1000; i > 0; i-- {
-				v = []any{v}
-			}
-			return v
-		}(),
-		want: strings.Repeat(`[`, startDetectingCyclesAfter) + `[null,[null]]` + strings.Repeat(`]`, startDetectingCyclesAfter),
-	}, {
-		name: jsontest.Name("Slices/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   []string{"hello", "goodbye"},
-		want: `["hello","goodbye"]`,
-	}, {
-		name: jsontest.Name("Arrays/Empty"),
-		in:   [0]struct{}{},
-		want: `[]`,
-	}, {
-		name: jsontest.Name("Arrays/Bool"),
-		in:   [2]bool{false, true},
-		want: `[false,true]`,
-	}, {
-		name: jsontest.Name("Arrays/String"),
-		in:   [2]string{"hello", "goodbye"},
-		want: `["hello","goodbye"]`,
-	}, {
-		name: jsontest.Name("Arrays/Bytes"),
-		in:   [2][]byte{[]byte("hello"), []byte("goodbye")},
-		want: `["aGVsbG8=","Z29vZGJ5ZQ=="]`,
-	}, {
-		name: jsontest.Name("Arrays/Int"),
-		in:   [2]int64{math.MinInt64, math.MaxInt64},
-		want: `[-9223372036854775808,9223372036854775807]`,
-	}, {
-		name: jsontest.Name("Arrays/Uint"),
-		in:   [2]uint64{0, math.MaxUint64},
-		want: `[0,18446744073709551615]`,
-	}, {
-		name: jsontest.Name("Arrays/Float"),
-		in:   [2]float64{-math.MaxFloat64, +math.MaxFloat64},
-		want: `[-1.7976931348623157e+308,1.7976931348623157e+308]`,
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Channel"),
-		in:      new([1]chan string),
-		want:    `[`,
-		wantErr: EM(nil).withPos(`[`, "/0").withType(0, T[chan string]()),
-	}, {
-		name: jsontest.Name("Arrays/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   [2]string{"hello", "goodbye"},
-		want: `["hello","goodbye"]`,
-	}, {
-		name: jsontest.Name("Pointers/NilL0"),
-		in:   (*int)(nil),
-		want: `null`,
-	}, {
-		name: jsontest.Name("Pointers/NilL1"),
-		in:   new(*int),
-		want: `null`,
-	}, {
-		name: jsontest.Name("Pointers/Bool"),
-		in:   addr(addr(bool(true))),
-		want: `true`,
-	}, {
-		name: jsontest.Name("Pointers/String"),
-		in:   addr(addr(string("string"))),
-		want: `"string"`,
-	}, {
-		name: jsontest.Name("Pointers/Bytes"),
-		in:   addr(addr([]byte("bytes"))),
-		want: `"Ynl0ZXM="`,
-	}, {
-		name: jsontest.Name("Pointers/Int"),
-		in:   addr(addr(int(-100))),
-		want: `-100`,
-	}, {
-		name: jsontest.Name("Pointers/Uint"),
-		in:   addr(addr(uint(100))),
-		want: `100`,
-	}, {
-		name: jsontest.Name("Pointers/Float"),
-		in:   addr(addr(float64(3.14159))),
-		want: `3.14159`,
-	}, {
-		name: jsontest.Name("Pointers/CyclicPointer"),
-		in: func() *recursivePointer {
-			p := new(recursivePointer)
-			p.P = p
-			return p
-		}(),
-		want:    strings.Repeat(`{"P":`, startDetectingCyclesAfter) + `{"P"`,
-		wantErr: EM(internal.ErrCycle).withPos(strings.Repeat(`{"P":`, startDetectingCyclesAfter+1), jsontext.Pointer(strings.Repeat("/P", startDetectingCyclesAfter+1))).withType(0, T[*recursivePointer]()),
-	}, {
-		name: jsontest.Name("Pointers/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   addr(addr(bool(true))),
-		want: `true`,
-	}, {
-		name: jsontest.Name("Interfaces/Nil/Empty"),
-		in:   [1]any{nil},
-		want: `[null]`,
-	}, {
-		name: jsontest.Name("Interfaces/Nil/NonEmpty"),
-		in:   [1]io.Reader{nil},
-		want: `[null]`,
-	}, {
-		name: jsontest.Name("Interfaces/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   [1]io.Reader{nil},
-		want: `[null]`,
-	}, {
-		name: jsontest.Name("Interfaces/Any"),
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}, [8]byte{}}},
-		want: `{"X":[null,false,"",0,{},[],"AAAAAAAAAAA="]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Named"),
-		in:   struct{ X namedAny }{[]namedAny{nil, false, "", 0.0, map[string]namedAny{}, []namedAny{}, [8]byte{}}},
-		want: `{"X":[null,false,"",0,{},[],"AAAAAAAAAAA="]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Stringified"),
-		opts: []Options{StringifyNumbers(true)},
-		in:   struct{ X any }{0.0},
-		want: `{"X":"0"}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/Any"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v any) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/Bool"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v bool) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `{"X":[null,"called","",0,{},[]]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/String"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v string) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `{"X":[null,false,"called",0,{},[]]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/Float64"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v float64) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `{"X":[null,false,"","called",{},[]]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/MapStringAny"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v map[string]any) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `{"X":[null,false,"",0,"called",[]]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/SliceAny"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v []any) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[]any{nil, false, "", 0.0, map[string]any{}, []any{}}},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/MarshalFunc/Bytes"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v [8]byte) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   struct{ X any }{[8]byte{}},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Nil"),
-		in:   struct{ X any }{map[string]any(nil)},
-		want: `{"X":{}}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Nil/FormatNilMapAsNull"),
-		opts: []Options{FormatNilMapAsNull(true)},
-		in:   struct{ X any }{map[string]any(nil)},
-		want: `{"X":null}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Empty"),
-		in:   struct{ X any }{map[string]any{}},
-		want: `{"X":{}}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Empty/Multiline"),
-		opts: []Options{jsontext.Multiline(true), jsontext.WithIndent("")},
-		in:   struct{ X any }{map[string]any{}},
-		want: "{\n\"X\": {}\n}",
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/NonEmpty"),
-		in:   struct{ X any }{map[string]any{"fizz": "buzz"}},
-		want: `{"X":{"fizz":"buzz"}}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Deterministic"),
-		opts: []Options{Deterministic(true)},
-		in:   struct{ X any }{map[string]any{"alpha": "", "bravo": ""}},
-		want: `{"X":{"alpha":"","bravo":""}}`,
-	}, {
-		name:    jsontest.Name("Interfaces/Any/Maps/Deterministic+AllowInvalidUTF8+RejectDuplicateNames"),
-		opts:    []Options{Deterministic(true), jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(false)},
-		in:      struct{ X any }{map[string]any{"\xff": "", "\xfe": ""}},
-		want:    `{"X":{"�":""`,
-		wantErr: newDuplicateNameError("/X", []byte(`"�"`), len64(`{"X":{"�":"",`)),
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Deterministic+AllowInvalidUTF8+AllowDuplicateNames"),
-		opts: []Options{Deterministic(true), jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(true)},
-		in:   struct{ X any }{map[string]any{"\xff": "alpha", "\xfe": "bravo"}},
-		want: `{"X":{"�":"bravo","�":"alpha"}}`,
-	}, {
-		name:    jsontest.Name("Interfaces/Any/Maps/RejectInvalidUTF8"),
-		in:      struct{ X any }{map[string]any{"\xff": "", "\xfe": ""}},
-		want:    `{"X":{`,
-		wantErr: newInvalidUTF8Error(len64(`{"X":{`), "/X"),
-	}, {
-		name:    jsontest.Name("Interfaces/Any/Maps/AllowInvalidUTF8+RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowInvalidUTF8(true)},
-		in:      struct{ X any }{map[string]any{"\xff": "", "\xfe": ""}},
-		want:    `{"X":{"�":""`,
-		wantErr: newDuplicateNameError("/X", []byte(`"�"`), len64(`{"X":{"�":"",`)),
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/AllowInvalidUTF8+AllowDuplicateNames"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true), jsontext.AllowDuplicateNames(true)},
-		in:   struct{ X any }{map[string]any{"\xff": "", "\xfe": ""}},
-		want: `{"X":{"�":"","�":""}}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Maps/Cyclic"),
-		in: func() any {
-			m := map[string]any{}
-			m[""] = m
-			return struct{ X any }{m}
-		}(),
-		want:    `{"X"` + strings.Repeat(`:{""`, startDetectingCyclesAfter),
-		wantErr: EM(internal.ErrCycle).withPos(`{"X":`+strings.Repeat(`{"":`, startDetectingCyclesAfter), "/X"+jsontext.Pointer(strings.Repeat("/", startDetectingCyclesAfter))).withType(0, T[any]()),
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/Nil"),
-		in:   struct{ X any }{[]any(nil)},
-		want: `{"X":[]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/Nil/FormatNilSliceAsNull"),
-		opts: []Options{FormatNilSliceAsNull(true)},
-		in:   struct{ X any }{[]any(nil)},
-		want: `{"X":null}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/Empty"),
-		in:   struct{ X any }{[]any{}},
-		want: `{"X":[]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/Empty/Multiline"),
-		opts: []Options{jsontext.Multiline(true), jsontext.WithIndent("")},
-		in:   struct{ X any }{[]any{}},
-		want: "{\n\"X\": []\n}",
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/NonEmpty"),
-		in:   struct{ X any }{[]any{"fizz", "buzz"}},
-		want: `{"X":["fizz","buzz"]}`,
-	}, {
-		name: jsontest.Name("Interfaces/Any/Slices/Cyclic"),
-		in: func() any {
-			s := make([]any, 1)
-			s[0] = s
-			return struct{ X any }{s}
-		}(),
-		want:    `{"X":` + strings.Repeat(`[`, startDetectingCyclesAfter),
-		wantErr: EM(internal.ErrCycle).withPos(`{"X":`+strings.Repeat(`[`, startDetectingCyclesAfter), "/X"+jsontext.Pointer(strings.Repeat("/0", startDetectingCyclesAfter))).withType(0, T[[]any]()),
-	}, {
-		name: jsontest.Name("Methods/NilPointer"),
-		in:   struct{ X *allMethods }{X: (*allMethods)(nil)}, // method should not be called
-		want: `{"X":null}`,
-	}, {
-		// NOTE: Fixes https://github.com/dominikh/go-tools/issues/975.
-		name: jsontest.Name("Methods/NilInterface"),
-		in:   struct{ X MarshalerTo }{X: (*allMethods)(nil)}, // method should not be called
-		want: `{"X":null}`,
-	}, {
-		name: jsontest.Name("Methods/AllMethods"),
-		in:   struct{ X *allMethods }{X: &allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/AllMethodsExceptJSONv2"),
-		in:   struct{ X *allMethodsExceptJSONv2 }{X: &allMethodsExceptJSONv2{allMethods: allMethods{method: "MarshalJSON", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/AllMethodsExceptJSONv1"),
-		in:   struct{ X *allMethodsExceptJSONv1 }{X: &allMethodsExceptJSONv1{allMethods: allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/AllMethodsExceptText"),
-		in:   struct{ X *allMethodsExceptText }{X: &allMethodsExceptText{allMethods: allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/OnlyMethodJSONv2"),
-		in:   struct{ X *onlyMethodJSONv2 }{X: &onlyMethodJSONv2{allMethods: allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/OnlyMethodJSONv1"),
-		in:   struct{ X *onlyMethodJSONv1 }{X: &onlyMethodJSONv1{allMethods: allMethods{method: "MarshalJSON", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/OnlyMethodText"),
-		in:   struct{ X *onlyMethodText }{X: &onlyMethodText{allMethods: allMethods{method: "MarshalText", value: []byte(`hello`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		name: jsontest.Name("Methods/IP"),
-		in:   net.IPv4(192, 168, 0, 100),
-		want: `"192.168.0.100"`,
-	}, {
-		name: jsontest.Name("Methods/NetIP"),
-		in: struct {
-			Addr     netip.Addr
-			AddrPort netip.AddrPort
-			Prefix   netip.Prefix
-		}{
-			Addr:     netip.AddrFrom4([4]byte{1, 2, 3, 4}),
-			AddrPort: netip.AddrPortFrom(netip.AddrFrom4([4]byte{1, 2, 3, 4}), 1234),
-			Prefix:   netip.PrefixFrom(netip.AddrFrom4([4]byte{1, 2, 3, 4}), 24),
-		},
-		want: `{"Addr":"1.2.3.4","AddrPort":"1.2.3.4:1234","Prefix":"1.2.3.4/24"}`,
-	}, {
-		// NOTE: Fixes https://go.dev/issue/46516.
-		name: jsontest.Name("Methods/Anonymous"),
-		in:   struct{ X struct{ allMethods } }{X: struct{ allMethods }{allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)}}},
-		want: `{"X":"hello"}`,
-	}, {
-		// NOTE: Fixes https://go.dev/issue/22967.
-		name: jsontest.Name("Methods/Addressable"),
-		in: struct {
-			V allMethods
-			M map[string]allMethods
-			I any
-		}{
-			V: allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)},
-			M: map[string]allMethods{"K": {method: "MarshalJSONTo", value: []byte(`"hello"`)}},
-			I: allMethods{method: "MarshalJSONTo", value: []byte(`"hello"`)},
-		},
-		want: `{"V":"hello","M":{"K":"hello"},"I":"hello"}`,
-	}, {
-		// NOTE: Fixes https://go.dev/issue/29732.
-		name:         jsontest.Name("Methods/MapKey/JSONv2"),
-		in:           map[structMethodJSONv2]string{{"k1"}: "v1", {"k2"}: "v2"},
-		want:         `{"k1":"v1","k2":"v2"}`,
-		canonicalize: true,
-	}, {
-		// NOTE: Fixes https://go.dev/issue/29732.
-		name:         jsontest.Name("Methods/MapKey/JSONv1"),
-		in:           map[structMethodJSONv1]string{{"k1"}: "v1", {"k2"}: "v2"},
-		want:         `{"k1":"v1","k2":"v2"}`,
-		canonicalize: true,
-	}, {
-		name:         jsontest.Name("Methods/MapKey/Text"),
-		in:           map[structMethodText]string{{"k1"}: "v1", {"k2"}: "v2"},
-		want:         `{"k1":"v1","k2":"v2"}`,
-		canonicalize: true,
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv2/Error"),
-		in: marshalJSONv2Func(func(*jsontext.Encoder) error {
-			return errSomeError
-		}),
-		wantErr: EM(errSomeError).withType(0, T[marshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv2/TooFew"),
-		in: marshalJSONv2Func(func(*jsontext.Encoder) error {
-			return nil // do nothing
-		}),
-		wantErr: EM(errNonSingularValue).withType(0, T[marshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv2/TooMany"),
-		in: marshalJSONv2Func(func(enc *jsontext.Encoder) error {
-			enc.WriteToken(jsontext.Null)
-			enc.WriteToken(jsontext.Null)
-			return nil
-		}),
-		want:    `nullnull`,
-		wantErr: EM(errNonSingularValue).withPos(`nullnull`, "").withType(0, T[marshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv2/SkipFunc"),
-		in: marshalJSONv2Func(func(enc *jsontext.Encoder) error {
-			return SkipFunc
-		}),
-		wantErr: EM(errors.New("marshal method cannot be skipped")).withType(0, T[marshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv1/Error"),
-		in: marshalJSONv1Func(func() ([]byte, error) {
-			return nil, errSomeError
-		}),
-		wantErr: EM(errSomeError).withType(0, T[marshalJSONv1Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv1/Syntax"),
-		in: marshalJSONv1Func(func() ([]byte, error) {
-			return []byte("invalid"), nil
-		}),
-		wantErr: EM(newInvalidCharacterError("i", "at start of value", 0, "")).withType(0, T[marshalJSONv1Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv1/SkipFunc"),
-		in: marshalJSONv1Func(func() ([]byte, error) {
-			return nil, SkipFunc
-		}),
-		wantErr: EM(errors.New("marshal method cannot be skipped")).withType(0, T[marshalJSONv1Func]()),
-	}, {
-		name: jsontest.Name("Methods/AppendText"),
-		in:   appendTextFunc(func(b []byte) ([]byte, error) { return append(b, "hello"...), nil }),
-		want: `"hello"`,
-	}, {
-		name:    jsontest.Name("Methods/AppendText/Error"),
-		in:      appendTextFunc(func(b []byte) ([]byte, error) { return append(b, "hello"...), errSomeError }),
-		wantErr: EM(errSomeError).withType(0, T[appendTextFunc]()),
-	}, {
-		name: jsontest.Name("Methods/AppendText/NeedEscape"),
-		in:   appendTextFunc(func(b []byte) ([]byte, error) { return append(b, `"`...), nil }),
-		want: `"\""`,
-	}, {
-		name:    jsontest.Name("Methods/AppendText/RejectInvalidUTF8"),
-		in:      appendTextFunc(func(b []byte) ([]byte, error) { return append(b, "\xde\xad\xbe\xef"...), nil }),
-		wantErr: EM(newInvalidUTF8Error(0, "")).withType(0, T[appendTextFunc]()),
-	}, {
-		name: jsontest.Name("Methods/AppendText/AllowInvalidUTF8"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true)},
-		in:   appendTextFunc(func(b []byte) ([]byte, error) { return append(b, "\xde\xad\xbe\xef"...), nil }),
-		want: "\"\xde\xad\ufffd\ufffd\"",
-	}, {
-		name: jsontest.Name("Methods/Invalid/Text/Error"),
-		in: marshalTextFunc(func() ([]byte, error) {
-			return nil, errSomeError
-		}),
-		wantErr: EM(errSomeError).withType(0, T[marshalTextFunc]()),
-	}, {
-		name: jsontest.Name("Methods/Text/RejectInvalidUTF8"),
-		in: marshalTextFunc(func() ([]byte, error) {
-			return []byte("\xde\xad\xbe\xef"), nil
-		}),
-		wantErr: EM(newInvalidUTF8Error(0, "")).withType(0, T[marshalTextFunc]()),
-	}, {
-		name: jsontest.Name("Methods/Text/AllowInvalidUTF8"),
-		opts: []Options{jsontext.AllowInvalidUTF8(true)},
-		in: marshalTextFunc(func() ([]byte, error) {
-			return []byte("\xde\xad\xbe\xef"), nil
-		}),
-		want: "\"\xde\xad\ufffd\ufffd\"",
-	}, {
-		name: jsontest.Name("Methods/Invalid/Text/SkipFunc"),
-		in: marshalTextFunc(func() ([]byte, error) {
-			return nil, SkipFunc
-		}),
-		wantErr: EM(wrapSkipFunc(SkipFunc, "marshal method")).withType(0, T[marshalTextFunc]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/MapKey/JSONv2/Syntax"),
-		in: map[any]string{
-			addr(marshalJSONv2Func(func(enc *jsontext.Encoder) error {
-				return enc.WriteToken(jsontext.Null)
-			})): "invalid",
-		},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[marshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/MapKey/JSONv1/Syntax"),
-		in: map[any]string{
-			addr(marshalJSONv1Func(func() ([]byte, error) {
-				return []byte(`null`), nil
-			})): "invalid",
-		},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[marshalJSONv1Func]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(bool) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Bool/Empty"),
-		opts: []Options{WithMarshalers(nil)},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/NamedBool/V1/NoMatch"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(namedBool) ([]byte, error) {
-				return nil, errMustNotCall
-			})),
-		},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/NamedBool/V1/Match"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(namedBool) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   namedBool(true),
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/PointerBool/V1/Match"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v *bool) ([]byte, error) {
-				_ = *v // must be a non-nil pointer
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Bool/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				return enc.WriteToken(jsontext.String("called"))
-			})),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/NamedBool/V2/NoMatch"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v namedBool) error {
-				return errMustNotCall
-			})),
-		},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/NamedBool/V2/Match"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v namedBool) error {
-				return enc.WriteToken(jsontext.String("called"))
-			})),
-		},
-		in:   namedBool(true),
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/PointerBool/V2/Match"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *bool) error {
-				_ = *v // must be a non-nil pointer
-				return enc.WriteToken(jsontext.String("called"))
-			})),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Bool/Empty1/NoMatch"),
-		opts: []Options{
-			WithMarshalers(new(Marshalers)),
-		},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/Bool/Empty2/NoMatch"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers()),
-		},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/Bool/V1/DirectError"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(bool) ([]byte, error) {
-				return nil, errSomeError
-			})),
-		},
-		in:      true,
-		wantErr: EM(errSomeError).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V1/SkipError"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(bool) ([]byte, error) {
-				return nil, SkipFunc
-			})),
-		},
-		in:      true,
-		wantErr: EM(wrapSkipFunc(SkipFunc, "marshal function of type func(T) ([]byte, error)")).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V1/InvalidValue"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(bool) ([]byte, error) {
-				return []byte("invalid"), nil
-			})),
-		},
-		in:      true,
-		wantErr: EM(newInvalidCharacterError("i", "at start of value", 0, "")).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/DirectError"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				return errSomeError
-			})),
-		},
-		in:      true,
-		wantErr: EM(errSomeError).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/TooFew"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				return nil
-			})),
-		},
-		in:      true,
-		wantErr: EM(errNonSingularValue).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/TooMany"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				enc.WriteValue([]byte(`"hello"`))
-				enc.WriteValue([]byte(`"world"`))
-				return nil
-			})),
-		},
-		in:      true,
-		want:    `"hello""world"`,
-		wantErr: EM(errNonSingularValue).withPos(`"hello""world"`, "").withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/Skipped"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				return SkipFunc
-			})),
-		},
-		in:   true,
-		want: `true`,
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/ProcessBeforeSkip"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				enc.WriteValue([]byte(`"hello"`))
-				return SkipFunc
-			})),
-		},
-		in:      true,
-		want:    `"hello"`,
-		wantErr: EM(errSkipMutation).withPos(`"hello"`, "").withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Bool/V2/WrappedSkipError"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-				return fmt.Errorf("wrap: %w", SkipFunc)
-			})),
-		},
-		in:      true,
-		wantErr: EM(fmt.Errorf("wrap: %w", SkipFunc)).withType(0, T[bool]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v nocaseString) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/PointerNoCaseString/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v *nocaseString) ([]byte, error) {
-				_ = *v // must be a non-nil pointer
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/TextMarshaler/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v encoding.TextMarshaler) ([]byte, error) {
-				_ = *v.(*nocaseString) // must be a non-nil *nocaseString
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V1/InvalidValue"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v nocaseString) ([]byte, error) {
-				return []byte(`null`), nil
-			})),
-		},
-		in:      map[nocaseString]string{"hello": "world"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[nocaseString]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V2/InvalidKind"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v nocaseString) ([]byte, error) {
-				return []byte(`null`), nil
-			})),
-		},
-		in:      map[nocaseString]string{"hello": "world"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[nocaseString]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/String/V1/DuplicateName"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v string) ([]byte, error) {
-				return []byte(`"name"`), nil
-			})),
-		},
-		in:   map[string]string{"name1": "value", "name2": "value"},
-		want: `{"name":"name"`,
-		wantErr: EM(newDuplicateNameError("", []byte(`"name"`), len64(`{"name":"name",`))).
-			withPos(`{"name":"name",`, "").withType(0, T[string]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v nocaseString) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/PointerNoCaseString/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *nocaseString) error {
-				_ = *v // must be a non-nil pointer
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/TextMarshaler/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v encoding.TextMarshaler) error {
-				_ = *v.(*nocaseString) // must be a non-nil *nocaseString
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[nocaseString]string{"hello": "world"},
-		want: `{"called":"world"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V2/InvalidToken"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v nocaseString) error {
-				return enc.WriteToken(jsontext.Null)
-			})),
-		},
-		in:      map[nocaseString]string{"hello": "world"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[nocaseString]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V2/InvalidValue"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v nocaseString) error {
-				return enc.WriteValue([]byte(`null`))
-			})),
-		},
-		in:      map[nocaseString]string{"hello": "world"},
-		want:    `{`,
-		wantErr: EM(newNonStringNameError(len64(`{`), "")).withPos(`{`, "").withType(0, T[nocaseString]()),
-	}, {
-		name: jsontest.Name("Functions/Map/Value/NoCaseString/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v nocaseString) ([]byte, error) {
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Value/PointerNoCaseString/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v *nocaseString) ([]byte, error) {
-				_ = *v // must be a non-nil pointer
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Value/TextMarshaler/V1"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v encoding.TextMarshaler) ([]byte, error) {
-				_ = *v.(*nocaseString) // must be a non-nil *nocaseString
-				return []byte(`"called"`), nil
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Value/NoCaseString/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v nocaseString) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Value/PointerNoCaseString/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *nocaseString) error {
-				_ = *v // must be a non-nil pointer
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Map/Value/TextMarshaler/V2"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v encoding.TextMarshaler) error {
-				_ = *v.(*nocaseString) // must be a non-nil *nocaseString
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   map[string]nocaseString{"hello": "world"},
-		want: `{"hello":"called"}`,
-	}, {
-		name: jsontest.Name("Funtions/Struct/Fields"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(v bool) ([]byte, error) {
-					return []byte(`"called1"`), nil
-				}),
-				MarshalFunc(func(v *string) ([]byte, error) {
-					return []byte(`"called2"`), nil
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v []byte) error {
-					return enc.WriteValue([]byte(`"called3"`))
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v *int64) error {
-					return enc.WriteValue([]byte(`"called4"`))
-				}),
-			)),
-		},
-		in:   structScalars{},
-		want: `{"Bool":"called1","String":"called2","Bytes":"called3","Int":"called4","Uint":0,"Float":0}`,
-	}, {
-		name: jsontest.Name("Functions/Struct/OmitEmpty"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(v bool) ([]byte, error) {
-					return []byte(`null`), nil
-				}),
-				MarshalFunc(func(v string) ([]byte, error) {
-					return []byte(`"called1"`), nil
-				}),
-				MarshalFunc(func(v *stringMarshalNonEmpty) ([]byte, error) {
-					return []byte(`""`), nil
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v bytesMarshalNonEmpty) error {
-					return enc.WriteValue([]byte(`{}`))
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v *float64) error {
-					return enc.WriteValue([]byte(`[]`))
-				}),
-				MarshalFunc(func(v mapMarshalNonEmpty) ([]byte, error) {
-					return []byte(`"called2"`), nil
-				}),
-				MarshalFunc(func(v []string) ([]byte, error) {
-					return []byte(`"called3"`), nil
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v *sliceMarshalNonEmpty) error {
-					return enc.WriteValue([]byte(`"called4"`))
-				}),
-			)),
-		},
-		in:   structOmitEmptyAll{},
-		want: `{"String":"called1","MapNonEmpty":"called2","Slice":"called3","SliceNonEmpty":"called4"}`,
-	}, {
-		name: jsontest.Name("Functions/Struct/OmitZero"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(v bool) ([]byte, error) {
-					panic("should not be called")
-				}),
-				MarshalFunc(func(v *string) ([]byte, error) {
-					panic("should not be called")
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v []byte) error {
-					panic("should not be called")
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v *int64) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		in:   structOmitZeroAll{},
-		want: `{}`,
-	}, {
-		name: jsontest.Name("Functions/Struct/Inlined"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(v structInlinedL1) ([]byte, error) {
-					panic("should not be called")
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v *StructEmbed2) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		in:   structInlined{},
-		want: `{"D":""}`,
-	}, {
-		name: jsontest.Name("Functions/Slice/Elem"),
-		opts: []Options{
-			WithMarshalers(MarshalFunc(func(v bool) ([]byte, error) {
-				return []byte(`"` + strconv.FormatBool(v) + `"`), nil
-			})),
-		},
-		in:   []bool{true, false},
-		want: `["true","false"]`,
-	}, {
-		name: jsontest.Name("Functions/Array/Elem"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *bool) error {
-				return enc.WriteValue([]byte(`"` + strconv.FormatBool(*v) + `"`))
-			})),
-		},
-		in:   [2]bool{true, false},
-		want: `["true","false"]`,
-	}, {
-		name: jsontest.Name("Functions/Pointer/Nil"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *bool) error {
-				panic("should not be called")
-			})),
-		},
-		in:   struct{ X *bool }{nil},
-		want: `{"X":null}`,
-	}, {
-		name: jsontest.Name("Functions/Pointer/NonNil"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *bool) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   struct{ X *bool }{addr(false)},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Interface/Nil"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v fmt.Stringer) error {
-				panic("should not be called")
-			})),
-		},
-		in:   struct{ X fmt.Stringer }{nil},
-		want: `{"X":null}`,
-	}, {
-		name: jsontest.Name("Functions/Interface/NonNil/MatchInterface"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v fmt.Stringer) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   struct{ X fmt.Stringer }{valueStringer{}},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Interface/NonNil/MatchConcrete"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v valueStringer) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   struct{ X fmt.Stringer }{valueStringer{}},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Interface/NonNil/MatchPointer"),
-		opts: []Options{
-			WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, v *valueStringer) error {
-				return enc.WriteValue([]byte(`"called"`))
-			})),
-		},
-		in:   struct{ X fmt.Stringer }{valueStringer{}},
-		want: `{"X":"called"}`,
-	}, {
-		name: jsontest.Name("Functions/Interface/Any"),
-		in: []any{
-			nil,                           // nil
-			valueStringer{},               // T
-			(*valueStringer)(nil),         // *T
-			addr(valueStringer{}),         // *T
-			(**valueStringer)(nil),        // **T
-			addr((*valueStringer)(nil)),   // **T
-			addr(addr(valueStringer{})),   // **T
-			pointerStringer{},             // T
-			(*pointerStringer)(nil),       // *T
-			addr(pointerStringer{}),       // *T
-			(**pointerStringer)(nil),      // **T
-			addr((*pointerStringer)(nil)), // **T
-			addr(addr(pointerStringer{})), // **T
-			"LAST",
-		},
-		want: `[null,{},null,{},null,null,{},{},null,{},null,null,{},"LAST"]`,
-		opts: []Options{
-			WithMarshalers(func() *Marshalers {
-				type P struct {
-					D int
-					N int64
-				}
-				type PV struct {
-					P P
-					V any
-				}
-
-				var lastChecks []func() error
-				checkLast := func() error {
-					for _, fn := range lastChecks {
-						if err := fn(); err != nil {
-							return err
-						}
-					}
-					return SkipFunc
-				}
-				makeValueChecker := func(name string, want []PV) func(e *jsontext.Encoder, v any) error {
-					checkNext := func(e *jsontext.Encoder, v any) error {
-						xe := export.Encoder(e)
-						p := P{len(xe.Tokens.Stack), xe.Tokens.Last.Length()}
-						rv := reflect.ValueOf(v)
-						pv := PV{p, v}
-						switch {
-						case len(want) == 0:
-							return fmt.Errorf("%s: %v: got more values than expected", name, p)
-						case !rv.IsValid() || rv.Kind() != reflect.Pointer || rv.IsNil():
-							return fmt.Errorf("%s: %v: got %#v, want non-nil pointer type", name, p, v)
-						case !reflect.DeepEqual(pv, want[0]):
-							return fmt.Errorf("%s:\n\tgot  %#v\n\twant %#v", name, pv, want[0])
-						default:
-							want = want[1:]
-							return SkipFunc
-						}
-					}
-					lastChecks = append(lastChecks, func() error {
-						if len(want) > 0 {
-							return fmt.Errorf("%s: did not get enough values, want %d more", name, len(want))
-						}
-						return nil
-					})
-					return checkNext
-				}
-				makePositionChecker := func(name string, want []P) func(e *jsontext.Encoder, v any) error {
-					checkNext := func(e *jsontext.Encoder, v any) error {
-						xe := export.Encoder(e)
-						p := P{len(xe.Tokens.Stack), xe.Tokens.Last.Length()}
-						switch {
-						case len(want) == 0:
-							return fmt.Errorf("%s: %v: got more values than wanted", name, p)
-						case p != want[0]:
-							return fmt.Errorf("%s: got %v, want %v", name, p, want[0])
-						default:
-							want = want[1:]
-							return SkipFunc
-						}
-					}
-					lastChecks = append(lastChecks, func() error {
-						if len(want) > 0 {
-							return fmt.Errorf("%s: did not get enough values, want %d more", name, len(want))
-						}
-						return nil
-					})
-					return checkNext
-				}
-
-				wantAny := []PV{
-					{P{0, 0}, addr([]any{
-						nil,
-						valueStringer{},
-						(*valueStringer)(nil),
-						addr(valueStringer{}),
-						(**valueStringer)(nil),
-						addr((*valueStringer)(nil)),
-						addr(addr(valueStringer{})),
-						pointerStringer{},
-						(*pointerStringer)(nil),
-						addr(pointerStringer{}),
-						(**pointerStringer)(nil),
-						addr((*pointerStringer)(nil)),
-						addr(addr(pointerStringer{})),
-						"LAST",
-					})},
-					{P{1, 0}, addr(any(nil))},
-					{P{1, 1}, addr(any(valueStringer{}))},
-					{P{1, 1}, addr(valueStringer{})},
-					{P{1, 2}, addr(any((*valueStringer)(nil)))},
-					{P{1, 2}, addr((*valueStringer)(nil))},
-					{P{1, 3}, addr(any(addr(valueStringer{})))},
-					{P{1, 3}, addr(addr(valueStringer{}))},
-					{P{1, 3}, addr(valueStringer{})},
-					{P{1, 4}, addr(any((**valueStringer)(nil)))},
-					{P{1, 4}, addr((**valueStringer)(nil))},
-					{P{1, 5}, addr(any(addr((*valueStringer)(nil))))},
-					{P{1, 5}, addr(addr((*valueStringer)(nil)))},
-					{P{1, 5}, addr((*valueStringer)(nil))},
-					{P{1, 6}, addr(any(addr(addr(valueStringer{}))))},
-					{P{1, 6}, addr(addr(addr(valueStringer{})))},
-					{P{1, 6}, addr(addr(valueStringer{}))},
-					{P{1, 6}, addr(valueStringer{})},
-					{P{1, 7}, addr(any(pointerStringer{}))},
-					{P{1, 7}, addr(pointerStringer{})},
-					{P{1, 8}, addr(any((*pointerStringer)(nil)))},
-					{P{1, 8}, addr((*pointerStringer)(nil))},
-					{P{1, 9}, addr(any(addr(pointerStringer{})))},
-					{P{1, 9}, addr(addr(pointerStringer{}))},
-					{P{1, 9}, addr(pointerStringer{})},
-					{P{1, 10}, addr(any((**pointerStringer)(nil)))},
-					{P{1, 10}, addr((**pointerStringer)(nil))},
-					{P{1, 11}, addr(any(addr((*pointerStringer)(nil))))},
-					{P{1, 11}, addr(addr((*pointerStringer)(nil)))},
-					{P{1, 11}, addr((*pointerStringer)(nil))},
-					{P{1, 12}, addr(any(addr(addr(pointerStringer{}))))},
-					{P{1, 12}, addr(addr(addr(pointerStringer{})))},
-					{P{1, 12}, addr(addr(pointerStringer{}))},
-					{P{1, 12}, addr(pointerStringer{})},
-					{P{1, 13}, addr(any("LAST"))},
-					{P{1, 13}, addr("LAST")},
-				}
-				checkAny := makeValueChecker("any", wantAny)
-				anyMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v any) error {
-					return checkAny(enc, v)
-				})
-
-				var wantPointerAny []PV
-				for _, v := range wantAny {
-					if _, ok := v.V.(*any); ok {
-						wantPointerAny = append(wantPointerAny, v)
-					}
-				}
-				checkPointerAny := makeValueChecker("*any", wantPointerAny)
-				pointerAnyMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v *any) error {
-					return checkPointerAny(enc, v)
-				})
-
-				checkNamedAny := makeValueChecker("namedAny", wantAny)
-				namedAnyMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v namedAny) error {
-					return checkNamedAny(enc, v)
-				})
-
-				checkPointerNamedAny := makeValueChecker("*namedAny", nil)
-				pointerNamedAnyMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v *namedAny) error {
-					return checkPointerNamedAny(enc, v)
-				})
-
-				type stringer = fmt.Stringer
-				var wantStringer []PV
-				for _, v := range wantAny {
-					if _, ok := v.V.(stringer); ok {
-						wantStringer = append(wantStringer, v)
-					}
-				}
-				checkStringer := makeValueChecker("stringer", wantStringer)
-				stringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v stringer) error {
-					return checkStringer(enc, v)
-				})
-
-				checkPointerStringer := makeValueChecker("*stringer", nil)
-				pointerStringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v *stringer) error {
-					return checkPointerStringer(enc, v)
-				})
-
-				wantValueStringer := []P{{1, 1}, {1, 3}, {1, 6}}
-				checkValueValueStringer := makePositionChecker("valueStringer", wantValueStringer)
-				valueValueStringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v valueStringer) error {
-					return checkValueValueStringer(enc, v)
-				})
-
-				checkPointerValueStringer := makePositionChecker("*valueStringer", wantValueStringer)
-				pointerValueStringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v *valueStringer) error {
-					return checkPointerValueStringer(enc, v)
-				})
-
-				wantPointerStringer := []P{{1, 7}, {1, 9}, {1, 12}}
-				checkValuePointerStringer := makePositionChecker("pointerStringer", wantPointerStringer)
-				valuePointerStringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v pointerStringer) error {
-					return checkValuePointerStringer(enc, v)
-				})
-
-				checkPointerPointerStringer := makePositionChecker("*pointerStringer", wantPointerStringer)
-				pointerPointerStringerMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v *pointerStringer) error {
-					return checkPointerPointerStringer(enc, v)
-				})
-
-				lastMarshaler := MarshalToFunc(func(enc *jsontext.Encoder, v string) error {
-					return checkLast()
-				})
-
-				return JoinMarshalers(
-					anyMarshaler,
-					pointerAnyMarshaler,
-					namedAnyMarshaler,
-					pointerNamedAnyMarshaler, // never called
-					stringerMarshaler,
-					pointerStringerMarshaler, // never called
-					valueValueStringerMarshaler,
-					pointerValueStringerMarshaler,
-					valuePointerStringerMarshaler,
-					pointerPointerStringerMarshaler,
-					lastMarshaler,
-				)
-			}()),
-		},
-	}, {
-		name: jsontest.Name("Functions/Precedence/V1First"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(bool) ([]byte, error) {
-					return []byte(`"called"`), nil
-				}),
-				MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Precedence/V2First"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-					return enc.WriteToken(jsontext.String("called"))
-				}),
-				MarshalFunc(func(bool) ([]byte, error) {
-					panic("should not be called")
-				}),
-			)),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Precedence/V2Skipped"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalToFunc(func(enc *jsontext.Encoder, v bool) error {
-					return SkipFunc
-				}),
-				MarshalFunc(func(bool) ([]byte, error) {
-					return []byte(`"called"`), nil
-				}),
-			)),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Precedence/NestedFirst"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				JoinMarshalers(
-					MarshalFunc(func(bool) ([]byte, error) {
-						return []byte(`"called"`), nil
-					}),
-				),
-				MarshalFunc(func(bool) ([]byte, error) {
-					panic("should not be called")
-				}),
-			)),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Functions/Precedence/NestedLast"),
-		opts: []Options{
-			WithMarshalers(JoinMarshalers(
-				MarshalFunc(func(bool) ([]byte, error) {
-					return []byte(`"called"`), nil
-				}),
-				JoinMarshalers(
-					MarshalFunc(func(bool) ([]byte, error) {
-						panic("should not be called")
-					}),
-				),
-			)),
-		},
-		in:   true,
-		want: `"called"`,
-	}, {
-		name: jsontest.Name("Duration/Zero"),
-		in: struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{0, 0},
-		want: `{"D1":"0s","D2":0}`,
-	}, {
-		name: jsontest.Name("Duration/Positive"),
-		in: struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{
-			123456789123456789,
-			123456789123456789,
-		},
-		want: `{"D1":"34293h33m9.123456789s","D2":123456789123456789}`,
-	}, {
-		name: jsontest.Name("Duration/Negative"),
-		in: struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{
-			-123456789123456789,
-			-123456789123456789,
-		},
-		want: `{"D1":"-34293h33m9.123456789s","D2":-123456789123456789}`,
-	}, {
-		name: jsontest.Name("Duration/Nanos/String"),
-		in: struct {
-			D1 time.Duration `json:",string,format:nano"`
-			D2 time.Duration `json:",string,format:nano"`
-			D3 time.Duration `json:",string,format:nano"`
-		}{
-			math.MinInt64,
-			0,
-			math.MaxInt64,
-		},
-		want: `{"D1":"-9223372036854775808","D2":"0","D3":"9223372036854775807"}`,
-	}, {
-		name: jsontest.Name("Duration/Format/Invalid"),
-		in: struct {
-			D time.Duration `json:",format:invalid"`
-		}{},
-		want:    `{"D"`,
-		wantErr: EM(errInvalidFormatFlag).withPos(`{"D":`, "/D").withType(0, T[time.Duration]()),
-	}, {
-		name: jsontest.Name("Duration/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   time.Duration(0),
-		want: `"0s"`,
-	}, {
-		name: jsontest.Name("Duration/Format"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structDurationFormat{
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-		},
-		want: `{
-	"D1": "12h34m56.078090012s",
-	"D2": "12h34m56.078090012s",
-	"D3": 45296.078090012,
-	"D4": "45296.078090012",
-	"D5": 45296078.090012,
-	"D6": "45296078.090012",
-	"D7": 45296078090.012,
-	"D8": "45296078090.012",
-	"D9": 45296078090012,
-	"D10": "45296078090012"
-}`,
-	}, {
-		name: jsontest.Name("Duration/Format/Legacy"),
-		opts: []Options{jsonflags.FormatTimeWithLegacySemantics | 1},
-		in: structDurationFormat{
-			D1: 12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			D2: 12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-		},
-		want: `{"D1":45296078090012,"D2":"12h34m56.078090012s","D3":0,"D4":"0","D5":0,"D6":"0","D7":0,"D8":"0","D9":0,"D10":"0"}`,
-	}, {
-		name: jsontest.Name("Duration/MapKey"),
-		in:   map[time.Duration]string{time.Second: ""},
-		want: `{"1s":""}`,
-	}, {
-		name: jsontest.Name("Duration/MapKey/Legacy"),
-		opts: []Options{jsonflags.FormatTimeWithLegacySemantics | 1},
-		in:   map[time.Duration]string{time.Second: ""},
-		want: `{"1000000000":""}`,
-	}, {
-		name: jsontest.Name("Time/Zero"),
-		in: struct {
-			T1 time.Time
-			T2 time.Time `json:",format:RFC822"`
-			T3 time.Time `json:",format:'2006-01-02'"`
-			T4 time.Time `json:",omitzero"`
-			T5 time.Time `json:",omitempty"`
-		}{
-			time.Time{},
-			time.Time{},
-			time.Time{},
-			// This is zero according to time.Time.IsZero,
-			// but non-zero according to reflect.Value.IsZero.
-			time.Date(1, 1, 1, 0, 0, 0, 0, time.FixedZone("UTC", 0)),
-			time.Time{},
-		},
-		want: `{"T1":"0001-01-01T00:00:00Z","T2":"01 Jan 01 00:00 UTC","T3":"0001-01-01","T5":"0001-01-01T00:00:00Z"}`,
-	}, {
-		name: jsontest.Name("Time/Format"),
-		opts: []Options{jsontext.Multiline(true)},
-		in: structTimeFormat{
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-			time.Date(1234, 1, 2, 3, 4, 5, 6, time.UTC),
-		},
-		want: `{
-	"T1": "1234-01-02T03:04:05.000000006Z",
-	"T2": "Mon Jan  2 03:04:05 1234",
-	"T3": "Mon Jan  2 03:04:05 UTC 1234",
-	"T4": "Mon Jan 02 03:04:05 +0000 1234",
-	"T5": "02 Jan 34 03:04 UTC",
-	"T6": "02 Jan 34 03:04 +0000",
-	"T7": "Monday, 02-Jan-34 03:04:05 UTC",
-	"T8": "Mon, 02 Jan 1234 03:04:05 UTC",
-	"T9": "Mon, 02 Jan 1234 03:04:05 +0000",
-	"T10": "1234-01-02T03:04:05Z",
-	"T11": "1234-01-02T03:04:05.000000006Z",
-	"T12": "3:04AM",
-	"T13": "Jan  2 03:04:05",
-	"T14": "Jan  2 03:04:05.000",
-	"T15": "Jan  2 03:04:05.000000",
-	"T16": "Jan  2 03:04:05.000000006",
-	"T17": "1234-01-02 03:04:05",
-	"T18": "1234-01-02",
-	"T19": "03:04:05",
-	"T20": "1234-01-02",
-	"T21": "\"weird\"1234",
-	"T22": -23225777754.999999994,
-	"T23": "-23225777754.999999994",
-	"T24": -23225777754999.999994,
-	"T25": "-23225777754999.999994",
-	"T26": -23225777754999999.994,
-	"T27": "-23225777754999999.994",
-	"T28": -23225777754999999994,
-	"T29": "-23225777754999999994"
-}`,
-	}, {
-		name: jsontest.Name("Time/Format/Invalid"),
-		in: struct {
-			T time.Time `json:",format:UndefinedConstant"`
-		}{},
-		want:    `{"T"`,
-		wantErr: EM(errors.New(`invalid format flag "UndefinedConstant"`)).withPos(`{"T":`, "/T").withType(0, timeTimeType),
-	}, {
-		name: jsontest.Name("Time/Format/YearOverflow"),
-		in: struct {
-			T1 time.Time
-			T2 time.Time
-		}{
-			time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Add(-time.Second),
-			time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC),
-		},
-		want:    `{"T1":"9999-12-31T23:59:59Z","T2"`,
-		wantErr: EM(errors.New(`year outside of range [0,9999]`)).withPos(`{"T1":"9999-12-31T23:59:59Z","T2":`, "/T2").withType(0, timeTimeType),
-	}, {
-		name: jsontest.Name("Time/Format/YearUnderflow"),
-		in: struct {
-			T1 time.Time
-			T2 time.Time
-		}{
-			time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC),
-			time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC).Add(-time.Second),
-		},
-		want:    `{"T1":"0000-01-01T00:00:00Z","T2"`,
-		wantErr: EM(errors.New(`year outside of range [0,9999]`)).withPos(`{"T1":"0000-01-01T00:00:00Z","T2":`, "/T2").withType(0, timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/YearUnderflow"),
-		in:      struct{ T time.Time }{time.Date(-998, 1, 1, 0, 0, 0, 0, time.UTC).Add(-time.Second)},
-		want:    `{"T"`,
-		wantErr: EM(errors.New(`year outside of range [0,9999]`)).withPos(`{"T":`, "/T").withType(0, timeTimeType),
-	}, {
-		name: jsontest.Name("Time/Format/ZoneExact"),
-		in:   struct{ T time.Time }{time.Date(2020, 1, 1, 0, 0, 0, 0, time.FixedZone("", 23*60*60+59*60))},
-		want: `{"T":"2020-01-01T00:00:00+23:59"}`,
-	}, {
-		name:    jsontest.Name("Time/Format/ZoneHourOverflow"),
-		in:      struct{ T time.Time }{time.Date(2020, 1, 1, 0, 0, 0, 0, time.FixedZone("", 24*60*60))},
-		want:    `{"T"`,
-		wantErr: EM(errors.New(`timezone hour outside of range [0,23]`)).withPos(`{"T":`, "/T").withType(0, timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/ZoneHourOverflow"),
-		in:      struct{ T time.Time }{time.Date(2020, 1, 1, 0, 0, 0, 0, time.FixedZone("", 123*60*60))},
-		want:    `{"T"`,
-		wantErr: EM(errors.New(`timezone hour outside of range [0,23]`)).withPos(`{"T":`, "/T").withType(0, timeTimeType),
-	}, {
-		name: jsontest.Name("Time/IgnoreInvalidFormat"),
-		opts: []Options{invalidFormatOption},
-		in:   time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
-		want: `"2000-01-01T00:00:00Z"`,
-	}}
-
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			var got []byte
-			var gotErr error
-			if tt.useWriter {
-				bb := new(struct{ bytes.Buffer }) // avoid optimizations with bytes.Buffer
-				gotErr = MarshalWrite(bb, tt.in, tt.opts...)
-				got = bb.Bytes()
-			} else {
-				got, gotErr = Marshal(tt.in, tt.opts...)
-			}
-			if tt.canonicalize {
-				(*jsontext.Value)(&got).Canonicalize()
-			}
-			if string(got) != tt.want {
-				t.Errorf("%s: Marshal output mismatch:\ngot  %s\nwant %s", tt.name.Where, got, tt.want)
-			}
-			if !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("%s: Marshal error mismatch:\ngot  %v\nwant %v", tt.name.Where, gotErr, tt.wantErr)
-			}
-		})
-	}
-}
-
-func TestUnmarshal(t *testing.T) {
-	tests := []struct {
-		name    jsontest.CaseName
-		opts    []Options
-		inBuf   string
-		inVal   any
-		want    any
-		wantErr error
-	}{{
-		name:    jsontest.Name("Nil"),
-		inBuf:   `null`,
-		wantErr: EU(internal.ErrNonNilReference),
-	}, {
-		name:    jsontest.Name("NilPointer"),
-		inBuf:   `null`,
-		inVal:   (*string)(nil),
-		want:    (*string)(nil),
-		wantErr: EU(internal.ErrNonNilReference).withType(0, T[*string]()),
-	}, {
-		name:    jsontest.Name("NonPointer"),
-		inBuf:   `null`,
-		inVal:   "unchanged",
-		want:    "unchanged",
-		wantErr: EU(internal.ErrNonNilReference).withType(0, T[string]()),
-	}, {
-		name:    jsontest.Name("Bools/TrailingJunk"),
-		inBuf:   `falsetrue`,
-		inVal:   addr(true),
-		want:    addr(false),
-		wantErr: newInvalidCharacterError("t", "after top-level value", len64(`false`), ""),
-	}, {
-		name:  jsontest.Name("Bools/Null"),
-		inBuf: `null`,
-		inVal: addr(true),
-		want:  addr(false),
-	}, {
-		name:  jsontest.Name("Bools"),
-		inBuf: `[null,false,true]`,
-		inVal: new([]bool),
-		want:  addr([]bool{false, false, true}),
-	}, {
-		name:  jsontest.Name("Bools/Named"),
-		inBuf: `[null,false,true]`,
-		inVal: new([]namedBool),
-		want:  addr([]namedBool{false, false, true}),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/StringifiedFalse"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"false"`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('"', boolType),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/StringifiedTrue"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"true"`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('"', boolType),
-	}, {
-		name:  jsontest.Name("Bools/StringifiedBool/True"),
-		opts:  []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf: `"true"`,
-		inVal: addr(false),
-		want:  addr(true),
-	}, {
-		name:  jsontest.Name("Bools/StringifiedBool/False"),
-		opts:  []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf: `"false"`,
-		inVal: addr(true),
-		want:  addr(false),
-	}, {
-		name:    jsontest.Name("Bools/StringifiedBool/InvalidWhitespace"),
-		opts:    []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf:   `"false "`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"false "`).withType('"', boolType),
-	}, {
-		name:    jsontest.Name("Bools/StringifiedBool/InvalidBool"),
-		opts:    []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf:   `false`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('f', boolType),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/Number"),
-		inBuf:   `0`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('0', boolType),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/String"),
-		inBuf:   `""`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('"', boolType),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('{', boolType),
-	}, {
-		name:    jsontest.Name("Bools/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr(true),
-		want:    addr(true),
-		wantErr: EU(nil).withType('[', boolType),
-	}, {
-		name:  jsontest.Name("Bools/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `false`,
-		inVal: addr(true),
-		want:  addr(false),
-	}, {
-		name:  jsontest.Name("Strings/Null"),
-		inBuf: `null`,
-		inVal: addr("something"),
-		want:  addr(""),
-	}, {
-		name:  jsontest.Name("Strings"),
-		inBuf: `[null,"","hello","世界"]`,
-		inVal: new([]string),
-		want:  addr([]string{"", "", "hello", "世界"}),
-	}, {
-		name:  jsontest.Name("Strings/Escaped"),
-		inBuf: `[null,"","\u0068\u0065\u006c\u006c\u006f","\u4e16\u754c"]`,
-		inVal: new([]string),
-		want:  addr([]string{"", "", "hello", "世界"}),
-	}, {
-		name:  jsontest.Name("Strings/Named"),
-		inBuf: `[null,"","hello","世界"]`,
-		inVal: new([]namedString),
-		want:  addr([]namedString{"", "", "hello", "世界"}),
-	}, {
-		name:    jsontest.Name("Strings/Invalid/False"),
-		inBuf:   `false`,
-		inVal:   addr("nochange"),
-		want:    addr("nochange"),
-		wantErr: EU(nil).withType('f', stringType),
-	}, {
-		name:    jsontest.Name("Strings/Invalid/True"),
-		inBuf:   `true`,
-		inVal:   addr("nochange"),
-		want:    addr("nochange"),
-		wantErr: EU(nil).withType('t', stringType),
-	}, {
-		name:    jsontest.Name("Strings/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr("nochange"),
-		want:    addr("nochange"),
-		wantErr: EU(nil).withType('{', stringType),
-	}, {
-		name:    jsontest.Name("Strings/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr("nochange"),
-		want:    addr("nochange"),
-		wantErr: EU(nil).withType('[', stringType),
-	}, {
-		name:  jsontest.Name("Strings/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `"hello"`,
-		inVal: addr("goodbye"),
-		want:  addr("hello"),
-	}, {
-		name:  jsontest.Name("Strings/StringifiedString"),
-		opts:  []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf: `"\"foo\""`,
-		inVal: new(string),
-		want:  addr("foo"),
-	}, {
-		name:    jsontest.Name("Strings/StringifiedString/InvalidWhitespace"),
-		opts:    []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf:   `"\"foo\" "`,
-		inVal:   new(string),
-		want:    new(string),
-		wantErr: EU(newInvalidCharacterError(" ", "after string value", 0, "")).withType('"', stringType),
-	}, {
-		name:    jsontest.Name("Strings/StringifiedString/InvalidString"),
-		opts:    []Options{jsonflags.StringifyBoolsAndStrings | 1},
-		inBuf:   `""`,
-		inVal:   new(string),
-		want:    new(string),
-		wantErr: EU(&jsontext.SyntacticError{Err: io.ErrUnexpectedEOF}).withType('"', stringType),
-	}, {
-		name:  jsontest.Name("Bytes/Null"),
-		inBuf: `null`,
-		inVal: addr([]byte("something")),
-		want:  addr([]byte(nil)),
-	}, {
-		name:  jsontest.Name("Bytes"),
-		inBuf: `[null,"","AQ==","AQI=","AQID"]`,
-		inVal: new([][]byte),
-		want:  addr([][]byte{nil, {}, {1}, {1, 2}, {1, 2, 3}}),
-	}, {
-		name:  jsontest.Name("Bytes/Large"),
-		inBuf: `"dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cgYW5kIGF0ZSB0aGUgaG9tZXdvcmsgdGhhdCBJIHNwZW50IHNvIG11Y2ggdGltZSBvbi4="`,
-		inVal: new([]byte),
-		want:  addr([]byte("the quick brown fox jumped over the lazy dog and ate the homework that I spent so much time on.")),
-	}, {
-		name:  jsontest.Name("Bytes/Reuse"),
-		inBuf: `"AQID"`,
-		inVal: addr([]byte("changed")),
-		want:  addr([]byte{1, 2, 3}),
-	}, {
-		name:  jsontest.Name("Bytes/Escaped"),
-		inBuf: `[null,"","\u0041\u0051\u003d\u003d","\u0041\u0051\u0049\u003d","\u0041\u0051\u0049\u0044"]`,
-		inVal: new([][]byte),
-		want:  addr([][]byte{nil, {}, {1}, {1, 2}, {1, 2, 3}}),
-	}, {
-		name:  jsontest.Name("Bytes/Named"),
-		inBuf: `[null,"","AQ==","AQI=","AQID"]`,
-		inVal: new([]namedBytes),
-		want:  addr([]namedBytes{nil, {}, {1}, {1, 2}, {1, 2, 3}}),
-	}, {
-		name:  jsontest.Name("Bytes/NotStringified"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `[null,"","AQ==","AQI=","AQID"]`,
-		inVal: new([][]byte),
-		want:  addr([][]byte{nil, {}, {1}, {1, 2}, {1, 2, 3}}),
-	}, {
-		// NOTE: []namedByte is not assignable to []byte,
-		// so the following should be treated as a slice of uints.
-		name:  jsontest.Name("Bytes/Invariant"),
-		inBuf: `[null,[],[1],[1,2],[1,2,3]]`,
-		inVal: new([][]namedByte),
-		want:  addr([][]namedByte{nil, {}, {1}, {1, 2}, {1, 2, 3}}),
-	}, {
-		// NOTE: This differs in behavior from v1,
-		// but keeps the representation of slices and arrays more consistent.
-		name:  jsontest.Name("Bytes/ByteArray"),
-		inBuf: `"aGVsbG8="`,
-		inVal: new([5]byte),
-		want:  addr([5]byte{'h', 'e', 'l', 'l', 'o'}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray0/Valid"),
-		inBuf: `""`,
-		inVal: new([0]byte),
-		want:  addr([0]byte{}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray0/Invalid"),
-		inBuf: `"A"`,
-		inVal: new([0]byte),
-		want:  addr([0]byte{}),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 0), []byte("A"))
-			return err
-		}()).withType('"', T[[0]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray0/Overflow"),
-		inBuf:   `"AA=="`,
-		inVal:   new([0]byte),
-		want:    addr([0]byte{}),
-		wantErr: EU(errors.New("decoded length of 1 mismatches array length of 0")).withType('"', T[[0]byte]()),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray1/Valid"),
-		inBuf: `"AQ=="`,
-		inVal: new([1]byte),
-		want:  addr([1]byte{1}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray1/Invalid"),
-		inBuf: `"$$=="`,
-		inVal: new([1]byte),
-		want:  addr([1]byte{}),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 1), []byte("$$=="))
-			return err
-		}()).withType('"', T[[1]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray1/Underflow"),
-		inBuf:   `""`,
-		inVal:   new([1]byte),
-		want:    addr([1]byte{}),
-		wantErr: EU(errors.New("decoded length of 0 mismatches array length of 1")).withType('"', T[[1]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray1/Overflow"),
-		inBuf:   `"AQI="`,
-		inVal:   new([1]byte),
-		want:    addr([1]byte{1}),
-		wantErr: EU(errors.New("decoded length of 2 mismatches array length of 1")).withType('"', T[[1]byte]()),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray2/Valid"),
-		inBuf: `"AQI="`,
-		inVal: new([2]byte),
-		want:  addr([2]byte{1, 2}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray2/Invalid"),
-		inBuf: `"$$$="`,
-		inVal: new([2]byte),
-		want:  addr([2]byte{}),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 2), []byte("$$$="))
-			return err
-		}()).withType('"', T[[2]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray2/Underflow"),
-		inBuf:   `"AQ=="`,
-		inVal:   new([2]byte),
-		want:    addr([2]byte{1, 0}),
-		wantErr: EU(errors.New("decoded length of 1 mismatches array length of 2")).withType('"', T[[2]byte]()),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray2/Underflow/Allowed"),
-		opts:  []Options{jsonflags.UnmarshalArrayFromAnyLength | 1},
-		inBuf: `"AQ=="`,
-		inVal: new([2]byte),
-		want:  addr([2]byte{1, 0}),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray2/Overflow"),
-		inBuf:   `"AQID"`,
-		inVal:   new([2]byte),
-		want:    addr([2]byte{1, 2}),
-		wantErr: EU(errors.New("decoded length of 3 mismatches array length of 2")).withType('"', T[[2]byte]()),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray2/Overflow/Allowed"),
-		opts:  []Options{jsonflags.UnmarshalArrayFromAnyLength | 1},
-		inBuf: `"AQID"`,
-		inVal: new([2]byte),
-		want:  addr([2]byte{1, 2}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray3/Valid"),
-		inBuf: `"AQID"`,
-		inVal: new([3]byte),
-		want:  addr([3]byte{1, 2, 3}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray3/Invalid"),
-		inBuf: `"$$$$"`,
-		inVal: new([3]byte),
-		want:  addr([3]byte{}),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 3), []byte("$$$$"))
-			return err
-		}()).withType('"', T[[3]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray3/Underflow"),
-		inBuf:   `"AQI="`,
-		inVal:   addr([3]byte{0xff, 0xff, 0xff}),
-		want:    addr([3]byte{1, 2, 0}),
-		wantErr: EU(errors.New("decoded length of 2 mismatches array length of 3")).withType('"', T[[3]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray3/Overflow"),
-		inBuf:   `"AQIDAQ=="`,
-		inVal:   new([3]byte),
-		want:    addr([3]byte{1, 2, 3}),
-		wantErr: EU(errors.New("decoded length of 4 mismatches array length of 3")).withType('"', T[[3]byte]()),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray4/Valid"),
-		inBuf: `"AQIDBA=="`,
-		inVal: new([4]byte),
-		want:  addr([4]byte{1, 2, 3, 4}),
-	}, {
-		name:  jsontest.Name("Bytes/ByteArray4/Invalid"),
-		inBuf: `"$$$$$$=="`,
-		inVal: new([4]byte),
-		want:  addr([4]byte{}),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 4), []byte("$$$$$$=="))
-			return err
-		}()).withType('"', T[[4]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray4/Underflow"),
-		inBuf:   `"AQID"`,
-		inVal:   new([4]byte),
-		want:    addr([4]byte{1, 2, 3, 0}),
-		wantErr: EU(errors.New("decoded length of 3 mismatches array length of 4")).withType('"', T[[4]byte]()),
-	}, {
-		name:    jsontest.Name("Bytes/ByteArray4/Overflow"),
-		inBuf:   `"AQIDBAU="`,
-		inVal:   new([4]byte),
-		want:    addr([4]byte{1, 2, 3, 4}),
-		wantErr: EU(errors.New("decoded length of 5 mismatches array length of 4")).withType('"', T[[4]byte]()),
-	}, {
-		// NOTE: []namedByte is not assignable to []byte,
-		// so the following should be treated as a array of uints.
-		name:  jsontest.Name("Bytes/NamedByteArray"),
-		inBuf: `[104,101,108,108,111]`,
-		inVal: new([5]namedByte),
-		want:  addr([5]namedByte{'h', 'e', 'l', 'l', 'o'}),
-	}, {
-		name:  jsontest.Name("Bytes/Valid/Denormalized"),
-		inBuf: `"AR=="`,
-		inVal: new([]byte),
-		want:  addr([]byte{1}),
-	}, {
-		name:  jsontest.Name("Bytes/Invalid/Unpadded1"),
-		inBuf: `"AQ="`,
-		inVal: addr([]byte("nochange")),
-		want:  addr([]byte("nochange")),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 0), []byte("AQ="))
-			return err
-		}()).withType('"', bytesType),
-	}, {
-		name:  jsontest.Name("Bytes/Invalid/Unpadded2"),
-		inBuf: `"AQ"`,
-		inVal: addr([]byte("nochange")),
-		want:  addr([]byte("nochange")),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 0), []byte("AQ"))
-			return err
-		}()).withType('"', bytesType),
-	}, {
-		name:  jsontest.Name("Bytes/Invalid/Character"),
-		inBuf: `"@@@@"`,
-		inVal: addr([]byte("nochange")),
-		want:  addr([]byte("nochange")),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 3), []byte("@@@@"))
-			return err
-		}()).withType('"', bytesType),
-	}, {
-		name:    jsontest.Name("Bytes/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr([]byte("nochange")),
-		want:    addr([]byte("nochange")),
-		wantErr: EU(nil).withType('t', bytesType),
-	}, {
-		name:    jsontest.Name("Bytes/Invalid/Number"),
-		inBuf:   `0`,
-		inVal:   addr([]byte("nochange")),
-		want:    addr([]byte("nochange")),
-		wantErr: EU(nil).withType('0', bytesType),
-	}, {
-		name:    jsontest.Name("Bytes/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr([]byte("nochange")),
-		want:    addr([]byte("nochange")),
-		wantErr: EU(nil).withType('{', bytesType),
-	}, {
-		name:    jsontest.Name("Bytes/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr([]byte("nochange")),
-		want:    addr([]byte("nochange")),
-		wantErr: EU(nil).withType('[', bytesType),
-	}, {
-		name:  jsontest.Name("Bytes/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `"aGVsbG8="`,
-		inVal: new([]byte),
-		want:  addr([]byte("hello")),
-	}, {
-		name:  jsontest.Name("Ints/Null"),
-		inBuf: `null`,
-		inVal: addr(int(1)),
-		want:  addr(int(0)),
-	}, {
-		name:  jsontest.Name("Ints/Int"),
-		inBuf: `1`,
-		inVal: addr(int(0)),
-		want:  addr(int(1)),
-	}, {
-		name:    jsontest.Name("Ints/Int8/MinOverflow"),
-		inBuf:   `-129`,
-		inVal:   addr(int8(-1)),
-		want:    addr(int8(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`-129`).withType('0', T[int8]()),
-	}, {
-		name:  jsontest.Name("Ints/Int8/Min"),
-		inBuf: `-128`,
-		inVal: addr(int8(0)),
-		want:  addr(int8(-128)),
-	}, {
-		name:  jsontest.Name("Ints/Int8/Max"),
-		inBuf: `127`,
-		inVal: addr(int8(0)),
-		want:  addr(int8(127)),
-	}, {
-		name:    jsontest.Name("Ints/Int8/MaxOverflow"),
-		inBuf:   `128`,
-		inVal:   addr(int8(-1)),
-		want:    addr(int8(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`128`).withType('0', T[int8]()),
-	}, {
-		name:    jsontest.Name("Ints/Int16/MinOverflow"),
-		inBuf:   `-32769`,
-		inVal:   addr(int16(-1)),
-		want:    addr(int16(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`-32769`).withType('0', T[int16]()),
-	}, {
-		name:  jsontest.Name("Ints/Int16/Min"),
-		inBuf: `-32768`,
-		inVal: addr(int16(0)),
-		want:  addr(int16(-32768)),
-	}, {
-		name:  jsontest.Name("Ints/Int16/Max"),
-		inBuf: `32767`,
-		inVal: addr(int16(0)),
-		want:  addr(int16(32767)),
-	}, {
-		name:    jsontest.Name("Ints/Int16/MaxOverflow"),
-		inBuf:   `32768`,
-		inVal:   addr(int16(-1)),
-		want:    addr(int16(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`32768`).withType('0', T[int16]()),
-	}, {
-		name:    jsontest.Name("Ints/Int32/MinOverflow"),
-		inBuf:   `-2147483649`,
-		inVal:   addr(int32(-1)),
-		want:    addr(int32(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`-2147483649`).withType('0', T[int32]()),
-	}, {
-		name:  jsontest.Name("Ints/Int32/Min"),
-		inBuf: `-2147483648`,
-		inVal: addr(int32(0)),
-		want:  addr(int32(-2147483648)),
-	}, {
-		name:  jsontest.Name("Ints/Int32/Max"),
-		inBuf: `2147483647`,
-		inVal: addr(int32(0)),
-		want:  addr(int32(2147483647)),
-	}, {
-		name:    jsontest.Name("Ints/Int32/MaxOverflow"),
-		inBuf:   `2147483648`,
-		inVal:   addr(int32(-1)),
-		want:    addr(int32(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`2147483648`).withType('0', T[int32]()),
-	}, {
-		name:    jsontest.Name("Ints/Int64/MinOverflow"),
-		inBuf:   `-9223372036854775809`,
-		inVal:   addr(int64(-1)),
-		want:    addr(int64(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`-9223372036854775809`).withType('0', T[int64]()),
-	}, {
-		name:  jsontest.Name("Ints/Int64/Min"),
-		inBuf: `-9223372036854775808`,
-		inVal: addr(int64(0)),
-		want:  addr(int64(-9223372036854775808)),
-	}, {
-		name:  jsontest.Name("Ints/Int64/Max"),
-		inBuf: `9223372036854775807`,
-		inVal: addr(int64(0)),
-		want:  addr(int64(9223372036854775807)),
-	}, {
-		name:    jsontest.Name("Ints/Int64/MaxOverflow"),
-		inBuf:   `9223372036854775808`,
-		inVal:   addr(int64(-1)),
-		want:    addr(int64(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`9223372036854775808`).withType('0', T[int64]()),
-	}, {
-		name:  jsontest.Name("Ints/Named"),
-		inBuf: `-6464`,
-		inVal: addr(namedInt64(0)),
-		want:  addr(namedInt64(-6464)),
-	}, {
-		name:  jsontest.Name("Ints/Stringified"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"-6464"`,
-		inVal: new(int),
-		want:  addr(int(-6464)),
-	}, {
-		name:    jsontest.Name("Ints/Stringified/Invalid"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `-6464`,
-		inVal:   new(int),
-		want:    new(int),
-		wantErr: EU(nil).withType('0', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Stringified/LeadingZero"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"00"`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"00"`).withType('"', T[int]()),
-	}, {
-		name:  jsontest.Name("Ints/Escaped"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"\u002d\u0036\u0034\u0036\u0034"`,
-		inVal: new(int),
-		want:  addr(int(-6464)),
-	}, {
-		name:  jsontest.Name("Ints/Valid/NegativeZero"),
-		inBuf: `-0`,
-		inVal: addr(int(1)),
-		want:  addr(int(0)),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Fraction"),
-		inBuf:   `1.0`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`1.0`).withType('0', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Exponent"),
-		inBuf:   `1e0`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`1e0`).withType('0', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/StringifiedFraction"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1.0"`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1.0"`).withType('"', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/StringifiedExponent"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1e0"`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1e0"`).withType('"', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Overflow"),
-		inBuf:   `100000000000000000000000000000`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrRange).withVal(`100000000000000000000000000000`).withType('0', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/OverflowSyntax"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"100000000000000000000000000000x"`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"100000000000000000000000000000x"`).withType('"', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Whitespace"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"0 "`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"0 "`).withType('"', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(nil).withType('t', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/String"),
-		inBuf:   `"0"`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(nil).withType('"', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(nil).withType('{', T[int]()),
-	}, {
-		name:    jsontest.Name("Ints/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr(int(-1)),
-		want:    addr(int(-1)),
-		wantErr: EU(nil).withType('[', T[int]()),
-	}, {
-		name:  jsontest.Name("Ints/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `1`,
-		inVal: addr(int(0)),
-		want:  addr(int(1)),
-	}, {
-		name:  jsontest.Name("Uints/Null"),
-		inBuf: `null`,
-		inVal: addr(uint(1)),
-		want:  addr(uint(0)),
-	}, {
-		name:  jsontest.Name("Uints/Uint"),
-		inBuf: `1`,
-		inVal: addr(uint(0)),
-		want:  addr(uint(1)),
-	}, {
-		name:  jsontest.Name("Uints/Uint8/Min"),
-		inBuf: `0`,
-		inVal: addr(uint8(1)),
-		want:  addr(uint8(0)),
-	}, {
-		name:  jsontest.Name("Uints/Uint8/Max"),
-		inBuf: `255`,
-		inVal: addr(uint8(0)),
-		want:  addr(uint8(255)),
-	}, {
-		name:    jsontest.Name("Uints/Uint8/MaxOverflow"),
-		inBuf:   `256`,
-		inVal:   addr(uint8(1)),
-		want:    addr(uint8(1)),
-		wantErr: EU(strconv.ErrRange).withVal(`256`).withType('0', T[uint8]()),
-	}, {
-		name:  jsontest.Name("Uints/Uint16/Min"),
-		inBuf: `0`,
-		inVal: addr(uint16(1)),
-		want:  addr(uint16(0)),
-	}, {
-		name:  jsontest.Name("Uints/Uint16/Max"),
-		inBuf: `65535`,
-		inVal: addr(uint16(0)),
-		want:  addr(uint16(65535)),
-	}, {
-		name:    jsontest.Name("Uints/Uint16/MaxOverflow"),
-		inBuf:   `65536`,
-		inVal:   addr(uint16(1)),
-		want:    addr(uint16(1)),
-		wantErr: EU(strconv.ErrRange).withVal(`65536`).withType('0', T[uint16]()),
-	}, {
-		name:  jsontest.Name("Uints/Uint32/Min"),
-		inBuf: `0`,
-		inVal: addr(uint32(1)),
-		want:  addr(uint32(0)),
-	}, {
-		name:  jsontest.Name("Uints/Uint32/Max"),
-		inBuf: `4294967295`,
-		inVal: addr(uint32(0)),
-		want:  addr(uint32(4294967295)),
-	}, {
-		name:    jsontest.Name("Uints/Uint32/MaxOverflow"),
-		inBuf:   `4294967296`,
-		inVal:   addr(uint32(1)),
-		want:    addr(uint32(1)),
-		wantErr: EU(strconv.ErrRange).withVal(`4294967296`).withType('0', T[uint32]()),
-	}, {
-		name:  jsontest.Name("Uints/Uint64/Min"),
-		inBuf: `0`,
-		inVal: addr(uint64(1)),
-		want:  addr(uint64(0)),
-	}, {
-		name:  jsontest.Name("Uints/Uint64/Max"),
-		inBuf: `18446744073709551615`,
-		inVal: addr(uint64(0)),
-		want:  addr(uint64(18446744073709551615)),
-	}, {
-		name:    jsontest.Name("Uints/Uint64/MaxOverflow"),
-		inBuf:   `18446744073709551616`,
-		inVal:   addr(uint64(1)),
-		want:    addr(uint64(1)),
-		wantErr: EU(strconv.ErrRange).withVal(`18446744073709551616`).withType('0', T[uint64]()),
-	}, {
-		name:  jsontest.Name("Uints/Uintptr"),
-		inBuf: `1`,
-		inVal: addr(uintptr(0)),
-		want:  addr(uintptr(1)),
-	}, {
-		name:  jsontest.Name("Uints/Named"),
-		inBuf: `6464`,
-		inVal: addr(namedUint64(0)),
-		want:  addr(namedUint64(6464)),
-	}, {
-		name:  jsontest.Name("Uints/Stringified"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"6464"`,
-		inVal: new(uint),
-		want:  addr(uint(6464)),
-	}, {
-		name:    jsontest.Name("Uints/Stringified/Invalid"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `6464`,
-		inVal:   new(uint),
-		want:    new(uint),
-		wantErr: EU(nil).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Stringified/LeadingZero"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"00"`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"00"`).withType('"', T[uint]()),
-	}, {
-		name:  jsontest.Name("Uints/Escaped"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"\u0036\u0034\u0036\u0034"`,
-		inVal: new(uint),
-		want:  addr(uint(6464)),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/NegativeOne"),
-		inBuf:   `-1`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`-1`).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/NegativeZero"),
-		inBuf:   `-0`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`-0`).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Fraction"),
-		inBuf:   `1.0`,
-		inVal:   addr(uint(10)),
-		want:    addr(uint(10)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`1.0`).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Exponent"),
-		inBuf:   `1e0`,
-		inVal:   addr(uint(10)),
-		want:    addr(uint(10)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`1e0`).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/StringifiedFraction"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1.0"`,
-		inVal:   addr(uint(10)),
-		want:    addr(uint(10)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1.0"`).withType('"', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/StringifiedExponent"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1e0"`,
-		inVal:   addr(uint(10)),
-		want:    addr(uint(10)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1e0"`).withType('"', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Overflow"),
-		inBuf:   `100000000000000000000000000000`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrRange).withVal(`100000000000000000000000000000`).withType('0', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/OverflowSyntax"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"100000000000000000000000000000x"`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"100000000000000000000000000000x"`).withType('"', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Whitespace"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"0 "`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"0 "`).withType('"', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(nil).withType('t', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/String"),
-		inBuf:   `"0"`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(nil).withType('"', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(nil).withType('{', T[uint]()),
-	}, {
-		name:    jsontest.Name("Uints/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr(uint(1)),
-		want:    addr(uint(1)),
-		wantErr: EU(nil).withType('[', T[uint]()),
-	}, {
-		name:  jsontest.Name("Uints/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `1`,
-		inVal: addr(uint(0)),
-		want:  addr(uint(1)),
-	}, {
-		name:  jsontest.Name("Floats/Null"),
-		inBuf: `null`,
-		inVal: addr(float64(64.64)),
-		want:  addr(float64(0)),
-	}, {
-		name:  jsontest.Name("Floats/Float32/Pi"),
-		inBuf: `3.14159265358979323846264338327950288419716939937510582097494459`,
-		inVal: addr(float32(32.32)),
-		want:  addr(float32(math.Pi)),
-	}, {
-		name:  jsontest.Name("Floats/Float32/Underflow"),
-		inBuf: `1e-1000`,
-		inVal: addr(float32(32.32)),
-		want:  addr(float32(0)),
-	}, {
-		name:    jsontest.Name("Floats/Float32/Overflow"),
-		inBuf:   `-1e1000`,
-		inVal:   addr(float32(32.32)),
-		want:    addr(float32(-math.MaxFloat32)),
-		wantErr: EU(strconv.ErrRange).withVal(`-1e1000`).withType('0', T[float32]()),
-	}, {
-		name:  jsontest.Name("Floats/Float64/Pi"),
-		inBuf: `3.14159265358979323846264338327950288419716939937510582097494459`,
-		inVal: addr(float64(64.64)),
-		want:  addr(float64(math.Pi)),
-	}, {
-		name:  jsontest.Name("Floats/Float64/Underflow"),
-		inBuf: `1e-1000`,
-		inVal: addr(float64(64.64)),
-		want:  addr(float64(0)),
-	}, {
-		name:    jsontest.Name("Floats/Float64/Overflow"),
-		inBuf:   `-1e1000`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(-math.MaxFloat64)),
-		wantErr: EU(strconv.ErrRange).withVal(`-1e1000`).withType('0', T[float64]()),
-	}, {
-		name:    jsontest.Name("Floats/Any/Overflow"),
-		inBuf:   `1e1000`,
-		inVal:   new(any),
-		want:    addr(any(float64(math.MaxFloat64))),
-		wantErr: EU(strconv.ErrRange).withVal(`1e1000`).withType('0', T[float64]()),
-	}, {
-		name:  jsontest.Name("Floats/Named"),
-		inBuf: `64.64`,
-		inVal: addr(namedFloat64(0)),
-		want:  addr(namedFloat64(64.64)),
-	}, {
-		name:  jsontest.Name("Floats/Stringified"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"64.64"`,
-		inVal: new(float64),
-		want:  addr(float64(64.64)),
-	}, {
-		name:    jsontest.Name("Floats/Stringified/Invalid"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `64.64`,
-		inVal:   new(float64),
-		want:    new(float64),
-		wantErr: EU(nil).withType('0', T[float64]()),
-	}, {
-		name:  jsontest.Name("Floats/Escaped"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `"\u0036\u0034\u002e\u0036\u0034"`,
-		inVal: new(float64),
-		want:  addr(float64(64.64)),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/NaN"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"NaN"`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"NaN"`).withType('"', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/Infinity"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"Infinity"`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"Infinity"`).withType('"', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/Whitespace"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1 "`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1 "`).withType('"', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/GoSyntax"),
-		opts:    []Options{StringifyNumbers(true)},
-		inBuf:   `"1p-2"`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(strconv.ErrSyntax).withVal(`"1p-2"`).withType('"', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(nil).withType('t', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/String"),
-		inBuf:   `"0"`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(nil).withType('"', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(nil).withType('{', float64Type),
-	}, {
-		name:    jsontest.Name("Floats/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr(float64(64.64)),
-		want:    addr(float64(64.64)),
-		wantErr: EU(nil).withType('[', float64Type),
-	}, {
-		name:  jsontest.Name("Floats/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `1`,
-		inVal: addr(float64(0)),
-		want:  addr(float64(1)),
-	}, {
-		name:  jsontest.Name("Maps/Null"),
-		inBuf: `null`,
-		inVal: addr(map[string]string{"key": "value"}),
-		want:  new(map[string]string),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Bool"),
-		inBuf:   `{"true":"false"}`,
-		inVal:   new(map[bool]bool),
-		want:    addr(make(map[bool]bool)),
-		wantErr: EU(nil).withPos(`{`, "/true").withType('"', boolType),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/NamedBool"),
-		inBuf:   `{"true":"false"}`,
-		inVal:   new(map[namedBool]bool),
-		want:    addr(make(map[namedBool]bool)),
-		wantErr: EU(nil).withPos(`{`, "/true").withType('"', T[namedBool]()),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Array"),
-		inBuf:   `{"key":"value"}`,
-		inVal:   new(map[[1]string]string),
-		want:    addr(make(map[[1]string]string)),
-		wantErr: EU(nil).withPos(`{`, "/key").withType('"', T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Maps/InvalidKey/Channel"),
-		inBuf:   `{"key":"value"}`,
-		inVal:   new(map[chan string]string),
-		want:    addr(make(map[chan string]string)),
-		wantErr: EU(nil).withPos(`{`, "").withType(0, T[chan string]()),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/Int"),
-		inBuf: `{"0":0,"-1":1,"2":2,"-3":3}`,
-		inVal: new(map[int]int),
-		want:  addr(map[int]int{0: 0, -1: 1, 2: 2, -3: 3}),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/NamedInt"),
-		inBuf: `{"0":0,"-1":1,"2":2,"-3":3}`,
-		inVal: new(map[namedInt64]int),
-		want:  addr(map[namedInt64]int{0: 0, -1: 1, 2: 2, -3: 3}),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/Uint"),
-		inBuf: `{"0":0,"1":1,"2":2,"3":3}`,
-		inVal: new(map[uint]uint),
-		want:  addr(map[uint]uint{0: 0, 1: 1, 2: 2, 3: 3}),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/NamedUint"),
-		inBuf: `{"0":0,"1":1,"2":2,"3":3}`,
-		inVal: new(map[namedUint64]uint),
-		want:  addr(map[namedUint64]uint{0: 0, 1: 1, 2: 2, 3: 3}),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/Float"),
-		inBuf: `{"1.234":1.234,"12.34":12.34,"123.4":123.4}`,
-		inVal: new(map[float64]float64),
-		want:  addr(map[float64]float64{1.234: 1.234, 12.34: 12.34, 123.4: 123.4}),
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/Int"),
-		inBuf:   `{"0":1,"-0":-1}`,
-		inVal:   new(map[int]int),
-		want:    addr(map[int]int{0: 1}),
-		wantErr: newDuplicateNameError("", []byte(`"-0"`), len64(`{"0":1,`)),
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/Int/MergeWithLegacySemantics"),
-		opts:    []Options{jsonflags.MergeWithLegacySemantics | 1},
-		inBuf:   `{"0":1,"-0":-1}`,
-		inVal:   new(map[int]int),
-		want:    addr(map[int]int{0: 1}),
-		wantErr: newDuplicateNameError("", []byte(`"-0"`), len64(`{"0":1,`)),
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/Int/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"0":1,"-0":-1}`,
-		inVal: new(map[int]int),
-		want:  addr(map[int]int{0: -1}), // latter takes precedence
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/Int/OverwriteExisting"),
-		inBuf: `{"-0":-1}`,
-		inVal: addr(map[int]int{0: 1}),
-		want:  addr(map[int]int{0: -1}),
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/Float"),
-		inBuf:   `{"1.0":"1.0","1":"1","1e0":"1e0"}`,
-		inVal:   new(map[float64]string),
-		want:    addr(map[float64]string{1: "1.0"}),
-		wantErr: newDuplicateNameError("", []byte(`"1"`), len64(`{"1.0":"1.0",`)),
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/Float/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"1.0":"1.0","1":"1","1e0":"1e0"}`,
-		inVal: new(map[float64]string),
-		want:  addr(map[float64]string{1: "1e0"}), // latter takes precedence
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/Float/OverwriteExisting"),
-		inBuf: `{"1.0":"1.0"}`,
-		inVal: addr(map[float64]string{1: "1"}),
-		want:  addr(map[float64]string{1: "1.0"}),
-	}, {
-		name:    jsontest.Name("Maps/DuplicateName/NoCaseString"),
-		inBuf:   `{"hello":"hello","HELLO":"HELLO"}`,
-		inVal:   new(map[nocaseString]string),
-		want:    addr(map[nocaseString]string{"hello": "hello"}),
-		wantErr: newDuplicateNameError("", []byte(`"HELLO"`), len64(`{"hello":"hello",`)),
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/NoCaseString/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"hello":"hello","HELLO":"HELLO"}`,
-		inVal: new(map[nocaseString]string),
-		want:  addr(map[nocaseString]string{"hello": "HELLO"}), // latter takes precedence
-	}, {
-		name:  jsontest.Name("Maps/DuplicateName/NoCaseString/OverwriteExisting"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"HELLO":"HELLO"}`,
-		inVal: addr(map[nocaseString]string{"hello": "hello"}),
-		want:  addr(map[nocaseString]string{"hello": "HELLO"}),
-	}, {
-		name:  jsontest.Name("Maps/ValidKey/Interface"),
-		inBuf: `{"false":"false","true":"true","string":"string","0":"0","[]":"[]","{}":"{}"}`,
-		inVal: new(map[any]string),
-		want: addr(map[any]string{
-			"false":  "false",
-			"true":   "true",
-			"string": "string",
-			"0":      "0",
-			"[]":     "[]",
-			"{}":     "{}",
-		}),
-	}, {
-		name:  jsontest.Name("Maps/InvalidValue/Channel"),
-		inBuf: `{"key":"value"}`,
-		inVal: new(map[string]chan string),
-		want: addr(map[string]chan string{
-			"key": nil,
-		}),
-		wantErr: EU(nil).withPos(`{"key":`, "/key").withType(0, T[chan string]()),
-	}, {
-		name:  jsontest.Name("Maps/RecursiveMap"),
-		inBuf: `{"buzz":{},"fizz":{"bar":{},"foo":{}}}`,
-		inVal: new(recursiveMap),
-		want: addr(recursiveMap{
-			"fizz": {
-				"foo": {},
-				"bar": {},
-			},
-			"buzz": {},
-		}),
-	}, {
-		// NOTE: The semantics differs from v1,
-		// where existing map entries were not merged into.
-		// See https://go.dev/issue/31924.
-		name:  jsontest.Name("Maps/Merge"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"k1":{"k2":"v2"},"k2":{"k1":"v1"},"k2":{"k2":"v2"}}`,
-		inVal: addr(map[string]map[string]string{
-			"k1": {"k1": "v1"},
-		}),
-		want: addr(map[string]map[string]string{
-			"k1": {"k1": "v1", "k2": "v2"},
-			"k2": {"k1": "v1", "k2": "v2"},
-		}),
-	}, {
-		name:    jsontest.Name("Maps/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr(map[string]string{"key": "value"}),
-		want:    addr(map[string]string{"key": "value"}),
-		wantErr: EU(nil).withType('t', T[map[string]string]()),
-	}, {
-		name:    jsontest.Name("Maps/Invalid/String"),
-		inBuf:   `""`,
-		inVal:   addr(map[string]string{"key": "value"}),
-		want:    addr(map[string]string{"key": "value"}),
-		wantErr: EU(nil).withType('"', T[map[string]string]()),
-	}, {
-		name:    jsontest.Name("Maps/Invalid/Number"),
-		inBuf:   `0`,
-		inVal:   addr(map[string]string{"key": "value"}),
-		want:    addr(map[string]string{"key": "value"}),
-		wantErr: EU(nil).withType('0', T[map[string]string]()),
-	}, {
-		name:    jsontest.Name("Maps/Invalid/Array"),
-		inBuf:   `[]`,
-		inVal:   addr(map[string]string{"key": "value"}),
-		want:    addr(map[string]string{"key": "value"}),
-		wantErr: EU(nil).withType('[', T[map[string]string]()),
-	}, {
-		name:  jsontest.Name("Maps/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `{"hello":"goodbye"}`,
-		inVal: addr(map[string]string{}),
-		want:  addr(map[string]string{"hello": "goodbye"}),
-	}, {
-		name:  jsontest.Name("Structs/Null"),
-		inBuf: `null`,
-		inVal: addr(structAll{String: "something"}),
-		want:  addr(structAll{}),
-	}, {
-		name:  jsontest.Name("Structs/Empty"),
-		inBuf: `{}`,
-		inVal: addr(structAll{
-			String: "hello",
-			Map:    map[string]string{},
-			Slice:  []string{},
-		}),
-		want: addr(structAll{
-			String: "hello",
-			Map:    map[string]string{},
-			Slice:  []string{},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Normal"),
-		inBuf: `{
-	"Bool": true,
-	"String": "hello",
-	"Bytes": "AQID",
-	"Int": -64,
-	"Uint": 64,
-	"Float": 3.14159,
-	"Map": {"key": "value"},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": -64,
-		"Uint": 64,
-		"Float": 3.14159
-	},
-	"StructMaps": {
-		"MapBool": {"": true},
-		"MapString": {"": "hello"},
-		"MapBytes": {"": "AQID"},
-		"MapInt": {"": -64},
-		"MapUint": {"": 64},
-		"MapFloat": {"": 3.14159}
-	},
-	"StructSlices": {
-		"SliceBool": [true],
-		"SliceString": ["hello"],
-		"SliceBytes": ["AQID"],
-		"SliceInt": [-64],
-		"SliceUint": [64],
-		"SliceFloat": [3.14159]
-	},
-	"Slice": ["fizz","buzz"],
-	"Array": ["goodbye"],
-	"Pointer": {},
-	"Interface": null
-}`,
-		inVal: new(structAll),
-		want: addr(structAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,
-			Uint:   +64,
-			Float:  3.14159,
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},
-				MapUint:   map[string]uint64{"": +64},
-				MapFloat:  map[string]float64{"": 3.14159},
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},
-				SliceUint:   []uint64{+64},
-				SliceFloat:  []float64{3.14159},
-			},
-			Slice:   []string{"fizz", "buzz"},
-			Array:   [1]string{"goodbye"},
-			Pointer: new(structAll),
-		}),
-	}, {
-		name: jsontest.Name("Structs/Merge"),
-		inBuf: `{
-	"Bool": false,
-	"String": "goodbye",
-	"Int": -64,
-	"Float": 3.14159,
-	"Map": {"k2": "v2"},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": -64
-	},
-	"StructMaps": {
-		"MapBool": {"": true},
-		"MapString": {"": "hello"},
-		"MapBytes": {"": "AQID"},
-		"MapInt": {"": -64},
-		"MapUint": {"": 64},
-		"MapFloat": {"": 3.14159}
-	},
-	"StructSlices": {
-		"SliceString": ["hello"],
-		"SliceBytes": ["AQID"],
-		"SliceInt": [-64],
-		"SliceUint": [64]
-	},
-	"Slice": ["fizz","buzz"],
-	"Array": ["goodbye"],
-	"Pointer": {},
-	"Interface": {"k2":"v2"}
-}`,
-		inVal: addr(structAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Uint:   +64,
-			Float:  math.NaN(),
-			Map:    map[string]string{"k1": "v1"},
-			StructScalars: structScalars{
-				String: "hello",
-				Bytes:  make([]byte, 2, 4),
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:  map[string]bool{"": false},
-				MapBytes: map[string][]byte{"": {}},
-				MapInt:   map[string]int64{"": 123},
-				MapFloat: map[string]float64{"": math.Inf(+1)},
-			},
-			StructSlices: structSlices{
-				SliceBool:  []bool{true},
-				SliceBytes: [][]byte{nil, nil},
-				SliceInt:   []int64{-123},
-				SliceUint:  []uint64{+123},
-				SliceFloat: []float64{3.14159},
-			},
-			Slice:     []string{"buzz", "fizz", "gizz"},
-			Array:     [1]string{"hello"},
-			Pointer:   new(structAll),
-			Interface: map[string]string{"k1": "v1"},
-		}),
-		want: addr(structAll{
-			Bool:   false,
-			String: "goodbye",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,
-			Uint:   +64,
-			Float:  3.14159,
-			Map:    map[string]string{"k1": "v1", "k2": "v2"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},
-				MapUint:   map[string]uint64{"": +64},
-				MapFloat:  map[string]float64{"": 3.14159},
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},
-				SliceUint:   []uint64{+64},
-				SliceFloat:  []float64{3.14159},
-			},
-			Slice:     []string{"fizz", "buzz"},
-			Array:     [1]string{"goodbye"},
-			Pointer:   new(structAll),
-			Interface: map[string]string{"k1": "v1", "k2": "v2"},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Stringified/Normal"),
-		inBuf: `{
-	"Bool": true,
-	"String": "hello",
-	"Bytes": "AQID",
-	"Int": "-64",
-	"Uint": "64",
-	"Float": "3.14159",
-	"Map": {"key": "value"},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": "-64",
-		"Uint": "64",
-		"Float": "3.14159"
-	},
-	"StructMaps": {
-		"MapBool": {"": true},
-		"MapString": {"": "hello"},
-		"MapBytes": {"": "AQID"},
-		"MapInt": {"": "-64"},
-		"MapUint": {"": "64"},
-		"MapFloat": {"": "3.14159"}
-	},
-	"StructSlices": {
-		"SliceBool": [true],
-		"SliceString": ["hello"],
-		"SliceBytes": ["AQID"],
-		"SliceInt": ["-64"],
-		"SliceUint": ["64"],
-		"SliceFloat": ["3.14159"]
-	},
-	"Slice": ["fizz","buzz"],
-	"Array": ["goodbye"],
-	"Pointer": {},
-	"Interface": null
-}`,
-		inVal: new(structStringifiedAll),
-		want: addr(structStringifiedAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,     // may be stringified
-			Uint:   +64,     // may be stringified
-			Float:  3.14159, // may be stringified
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,     // may be stringified
-				Uint:   +64,     // may be stringified
-				Float:  3.14159, // may be stringified
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},       // may be stringified
-				MapUint:   map[string]uint64{"": +64},      // may be stringified
-				MapFloat:  map[string]float64{"": 3.14159}, // may be stringified
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},       // may be stringified
-				SliceUint:   []uint64{+64},      // may be stringified
-				SliceFloat:  []float64{3.14159}, // may be stringified
-			},
-			Slice:   []string{"fizz", "buzz"},
-			Array:   [1]string{"goodbye"},
-			Pointer: new(structStringifiedAll), // may be stringified
-		}),
-	}, {
-		name: jsontest.Name("Structs/Stringified/String"),
-		inBuf: `{
-	"Bool": true,
-	"String": "hello",
-	"Bytes": "AQID",
-	"Int": "-64",
-	"Uint": "64",
-	"Float": "3.14159",
-	"Map": {"key": "value"},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": "-64",
-		"Uint": "64",
-		"Float": "3.14159"
-	},
-	"StructMaps": {
-		"MapBool": {"": true},
-		"MapString": {"": "hello"},
-		"MapBytes": {"": "AQID"},
-		"MapInt": {"": "-64"},
-		"MapUint": {"": "64"},
-		"MapFloat": {"": "3.14159"}
-	},
-	"StructSlices": {
-		"SliceBool": [true],
-		"SliceString": ["hello"],
-		"SliceBytes": ["AQID"],
-		"SliceInt": ["-64"],
-		"SliceUint": ["64"],
-		"SliceFloat": ["3.14159"]
-	},
-	"Slice": ["fizz","buzz"],
-	"Array": ["goodbye"],
-	"Pointer": {},
-	"Interface": null
-}`,
-		inVal: new(structStringifiedAll),
-		want: addr(structStringifiedAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,     // may be stringified
-			Uint:   +64,     // may be stringified
-			Float:  3.14159, // may be stringified
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,     // may be stringified
-				Uint:   +64,     // may be stringified
-				Float:  3.14159, // may be stringified
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},       // may be stringified
-				MapUint:   map[string]uint64{"": +64},      // may be stringified
-				MapFloat:  map[string]float64{"": 3.14159}, // may be stringified
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},       // may be stringified
-				SliceUint:   []uint64{+64},      // may be stringified
-				SliceFloat:  []float64{3.14159}, // may be stringified
-			},
-			Slice:   []string{"fizz", "buzz"},
-			Array:   [1]string{"goodbye"},
-			Pointer: new(structStringifiedAll), // may be stringified
-		}),
-	}, {
-		name:    jsontest.Name("Structs/Stringified/InvalidEmpty"),
-		inBuf:   `{"Int":""}`,
-		inVal:   new(structStringifiedAll),
-		want:    new(structStringifiedAll),
-		wantErr: EU(strconv.ErrSyntax).withVal(`""`).withPos(`{"Int":`, "/Int").withType('"', T[int64]()),
-	}, {
-		name: jsontest.Name("Structs/LegacyStringified"),
-		opts: []Options{jsonflags.StringifyWithLegacySemantics | 1},
-		inBuf: `{
-	"Bool": "true",
-	"String": "\"hello\"",
-	"Bytes": "AQID",
-	"Int": "-64",
-	"Uint": "64",
-	"Float": "3.14159",
-	"Map": {"key": "value"},
-	"StructScalars": {
-		"Bool": true,
-		"String": "hello",
-		"Bytes": "AQID",
-		"Int": -64,
-		"Uint": 64,
-		"Float": 3.14159
-	},
-	"StructMaps": {
-		"MapBool": {"": true},
-		"MapString": {"": "hello"},
-		"MapBytes": {"": "AQID"},
-		"MapInt": {"": -64},
-		"MapUint": {"": 64},
-		"MapFloat": {"": 3.14159}
-	},
-	"StructSlices": {
-		"SliceBool": [true],
-		"SliceString": ["hello"],
-		"SliceBytes": ["AQID"],
-		"SliceInt": [-64],
-		"SliceUint": [64],
-		"SliceFloat": [3.14159]
-	},
-	"Slice": ["fizz", "buzz"],
-	"Array": ["goodbye"]
-}`,
-		inVal: new(structStringifiedAll),
-		want: addr(structStringifiedAll{
-			Bool:   true,
-			String: "hello",
-			Bytes:  []byte{1, 2, 3},
-			Int:    -64,
-			Uint:   +64,
-			Float:  3.14159,
-			Map:    map[string]string{"key": "value"},
-			StructScalars: structScalars{
-				Bool:   true,
-				String: "hello",
-				Bytes:  []byte{1, 2, 3},
-				Int:    -64,
-				Uint:   +64,
-				Float:  3.14159,
-			},
-			StructMaps: structMaps{
-				MapBool:   map[string]bool{"": true},
-				MapString: map[string]string{"": "hello"},
-				MapBytes:  map[string][]byte{"": {1, 2, 3}},
-				MapInt:    map[string]int64{"": -64},
-				MapUint:   map[string]uint64{"": +64},
-				MapFloat:  map[string]float64{"": 3.14159},
-			},
-			StructSlices: structSlices{
-				SliceBool:   []bool{true},
-				SliceString: []string{"hello"},
-				SliceBytes:  [][]byte{{1, 2, 3}},
-				SliceInt:    []int64{-64},
-				SliceUint:   []uint64{+64},
-				SliceFloat:  []float64{3.14159},
-			},
-			Slice: []string{"fizz", "buzz"},
-			Array: [1]string{"goodbye"},
-		}),
-	}, {
-		name:    jsontest.Name("Structs/LegacyStringified/InvalidBool"),
-		opts:    []Options{jsonflags.StringifyWithLegacySemantics | 1},
-		inBuf:   `{"Bool": true}`,
-		inVal:   new(structStringifiedAll),
-		wantErr: EU(nil).withPos(`{"Bool": `, "/Bool").withType('t', T[bool]()),
-	}, {
-		name:  jsontest.Name("Structs/LegacyStringified/InvalidString"),
-		opts:  []Options{jsonflags.StringifyWithLegacySemantics | 1},
-		inBuf: `{"String": "string"}`,
-		inVal: new(structStringifiedAll),
-		wantErr: EU(newInvalidCharacterError("s", "at start of string (expecting '\"')", 0, "")).
-			withPos(`{"String": `, "/String").withType('"', T[string]()),
-	}, {
-		name: jsontest.Name("Structs/Format/Bytes"),
-		inBuf: `{
-	"Base16": "0123456789abcdef",
-	"Base32": "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
-	"Base32Hex": "0123456789ABCDEFGHIJKLMNOPQRSTUV",
-	"Base64": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
-	"Base64URL": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",
-	"Array": [1, 2, 3, 4]
-}`,
-		inVal: new(structFormatBytes),
-		want: addr(structFormatBytes{
-			Base16:    []byte("\x01\x23\x45\x67\x89\xab\xcd\xef"),
-			Base32:    []byte("\x00D2\x14\xc7BT\xb65τe:V\xd7\xc6u\xbew\xdf"),
-			Base32Hex: []byte("\x00D2\x14\xc7BT\xb65τe:V\xd7\xc6u\xbew\xdf"),
-			Base64:    []byte("\x00\x10\x83\x10Q\x87 \x92\x8b0ӏA\x14\x93QU\x97a\x96\x9bqן\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2ۯ\xc3\x1c\xb3\xd3]\xb7㞻\xf3߿"),
-			Base64URL: []byte("\x00\x10\x83\x10Q\x87 \x92\x8b0ӏA\x14\x93QU\x97a\x96\x9bqן\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2ۯ\xc3\x1c\xb3\xd3]\xb7㞻\xf3߿"),
-			Array:     []byte{1, 2, 3, 4},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Format/ArrayBytes"),
-		inBuf: `{
-	"Base16": "01020304",
-	"Base32": "AEBAGBA=",
-	"Base32Hex": "0410610=",
-	"Base64": "AQIDBA==",
-	"Base64URL": "AQIDBA==",
-	"Array": [1, 2, 3, 4],
-	"Default": "AQIDBA=="
-}`,
-		inVal: new(structFormatArrayBytes),
-		want: addr(structFormatArrayBytes{
-			Base16:    [4]byte{1, 2, 3, 4},
-			Base32:    [4]byte{1, 2, 3, 4},
-			Base32Hex: [4]byte{1, 2, 3, 4},
-			Base64:    [4]byte{1, 2, 3, 4},
-			Base64URL: [4]byte{1, 2, 3, 4},
-			Array:     [4]byte{1, 2, 3, 4},
-			Default:   [4]byte{1, 2, 3, 4},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Format/ArrayBytes/Legacy"),
-		opts: []Options{jsonflags.FormatBytesWithLegacySemantics | 1},
-		inBuf: `{
-	"Base16": "01020304",
-	"Base32": "AEBAGBA=",
-	"Base32Hex": "0410610=",
-	"Base64": "AQIDBA==",
-	"Base64URL": "AQIDBA==",
-	"Array": [1, 2, 3, 4],
-	"Default": [1, 2, 3, 4]
-}`,
-		inVal: new(structFormatArrayBytes),
-		want: addr(structFormatArrayBytes{
-			Base16:    [4]byte{1, 2, 3, 4},
-			Base32:    [4]byte{1, 2, 3, 4},
-			Base32Hex: [4]byte{1, 2, 3, 4},
-			Base64:    [4]byte{1, 2, 3, 4},
-			Base64URL: [4]byte{1, 2, 3, 4},
-			Array:     [4]byte{1, 2, 3, 4},
-			Default:   [4]byte{1, 2, 3, 4},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Format/Bytes/Array"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *byte) error {
-				if string(b) == "true" {
-					*v = 1
-				} else {
-					*v = 0
-				}
-				return nil
-			})),
-		},
-		inBuf: `{"Array":[false,true,false,true,false,true]}`,
-		inVal: new(struct {
-			Array []byte `json:",format:array"`
-		}),
-		want: addr(struct {
-			Array []byte `json:",format:array"`
-		}{
-			Array: []byte{0, 1, 0, 1, 0, 1},
-		}),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base16/WrongKind"),
-		inBuf:   `{"Base16": [1,2,3,4]}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(nil).withPos(`{"Base16": `, "/Base16").withType('[', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/AllPadding"),
-		inBuf: `{"Base16": "===="}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 2), []byte("====="))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/EvenPadding"),
-		inBuf: `{"Base16": "0123456789abcdef="}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 8), []byte("0123456789abcdef="))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/OddPadding"),
-		inBuf: `{"Base16": "0123456789abcdef0="}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 9), []byte("0123456789abcdef0="))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/NonAlphabet/LineFeed"),
-		inBuf: `{"Base16": "aa\naa"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 9), []byte("aa\naa"))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/NonAlphabet/CarriageReturn"),
-		inBuf: `{"Base16": "aa\raa"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 9), []byte("aa\raa"))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base16/NonAlphabet/Space"),
-		inBuf: `{"Base16": "aa aa"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := hex.Decode(make([]byte, 9), []byte("aa aa"))
-			return err
-		}()).withPos(`{"Base16": `, "/Base16").withType('"', T[[]byte]()),
-	}, {
-		name: jsontest.Name("Structs/Format/Bytes/Invalid/Base32/Padding"),
-		inBuf: `[
-			{"Base32": "NA======"},
-			{"Base32": "NBSQ===="},
-			{"Base32": "NBSWY==="},
-			{"Base32": "NBSWY3A="},
-			{"Base32": "NBSWY3DP"}
-		]`,
-		inVal: new([]structFormatBytes),
-		want: addr([]structFormatBytes{
-			{Base32: []byte("h")},
-			{Base32: []byte("he")},
-			{Base32: []byte("hel")},
-			{Base32: []byte("hell")},
-			{Base32: []byte("hello")},
-		}),
-	}, {
-		name: jsontest.Name("Structs/Format/Bytes/Invalid/Base32/Invalid/NoPadding"),
-		inBuf: `[
-				{"Base32": "NA"},
-				{"Base32": "NBSQ"},
-				{"Base32": "NBSWY"},
-				{"Base32": "NBSWY3A"},
-				{"Base32": "NBSWY3DP"}
-			]`,
-		inVal: new([]structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := base32.StdEncoding.Decode(make([]byte, 1), []byte("NA"))
-			return err
-		}()).withPos(`[`+"\n\t\t\t\t"+`{"Base32": `, "/0/Base32").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base32/WrongAlphabet"),
-		inBuf: `{"Base32": "0123456789ABCDEFGHIJKLMNOPQRSTUV"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := base32.StdEncoding.Decode(make([]byte, 20), []byte("0123456789ABCDEFGHIJKLMNOPQRSTUV"))
-			return err
-		}()).withPos(`{"Base32": `, "/Base32").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base32Hex/WrongAlphabet"),
-		inBuf: `{"Base32Hex": "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := base32.HexEncoding.Decode(make([]byte, 20), []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"))
-			return err
-		}()).withPos(`{"Base32Hex": `, "/Base32Hex").withType('"', T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base32/NonAlphabet/LineFeed"),
-		inBuf:   `{"Base32": "AAAA\nAAAA"}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(errors.New("illegal character '\\n' at offset 4")).withPos(`{"Base32": `, "/Base32").withType('"', T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base32/NonAlphabet/CarriageReturn"),
-		inBuf:   `{"Base32": "AAAA\rAAAA"}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(errors.New("illegal character '\\r' at offset 4")).withPos(`{"Base32": `, "/Base32").withType('"', T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base32/NonAlphabet/Space"),
-		inBuf:   `{"Base32": "AAAA AAAA"}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(base32.CorruptInputError(4)).withPos(`{"Base32": `, "/Base32").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base64/WrongAlphabet"),
-		inBuf: `{"Base64": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := base64.StdEncoding.Decode(make([]byte, 48), []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"))
-			return err
-		}()).withPos(`{"Base64": `, "/Base64").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Invalid/Base64URL/WrongAlphabet"),
-		inBuf: `{"Base64URL": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"}`,
-		inVal: new(structFormatBytes),
-		wantErr: EU(func() error {
-			_, err := base64.URLEncoding.Decode(make([]byte, 48), []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))
-			return err
-		}()).withPos(`{"Base64URL": `, "/Base64URL").withType('"', T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base64/NonAlphabet/LineFeed"),
-		inBuf:   `{"Base64": "aa=\n="}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(errors.New("illegal character '\\n' at offset 3")).withPos(`{"Base64": `, "/Base64").withType('"', T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base64/NonAlphabet/CarriageReturn"),
-		inBuf:   `{"Base64": "aa=\r="}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(errors.New("illegal character '\\r' at offset 3")).withPos(`{"Base64": `, "/Base64").withType('"', T[[]byte]()),
-	}, {
-		name:  jsontest.Name("Structs/Format/Bytes/Base64/NonAlphabet/Ignored"),
-		opts:  []Options{jsonflags.FormatBytesWithLegacySemantics | 1},
-		inBuf: `{"Base64": "aa=\r\n="}`,
-		inVal: new(structFormatBytes),
-		want:  &structFormatBytes{Base64: []byte{105}},
-	}, {
-		name:    jsontest.Name("Structs/Format/Bytes/Invalid/Base64/NonAlphabet/Space"),
-		inBuf:   `{"Base64": "aa= ="}`,
-		inVal:   new(structFormatBytes),
-		wantErr: EU(base64.CorruptInputError(2)).withPos(`{"Base64": `, "/Base64").withType('"', T[[]byte]()),
-	}, {
-		name: jsontest.Name("Structs/Format/Floats"),
-		inBuf: `[
-	{"NonFinite": 3.141592653589793, "PointerNonFinite": 3.141592653589793},
-	{"NonFinite": "-Infinity", "PointerNonFinite": "-Infinity"},
-	{"NonFinite": "Infinity", "PointerNonFinite": "Infinity"}
-]`,
-		inVal: new([]structFormatFloats),
-		want: addr([]structFormatFloats{
-			{NonFinite: math.Pi, PointerNonFinite: addr(math.Pi)},
-			{NonFinite: math.Inf(-1), PointerNonFinite: addr(math.Inf(-1))},
-			{NonFinite: math.Inf(+1), PointerNonFinite: addr(math.Inf(+1))},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/Format/Floats/NaN"),
-		inBuf: `{"NonFinite": "NaN"}`,
-		inVal: new(structFormatFloats),
-		// Avoid checking want since reflect.DeepEqual fails for NaNs.
-	}, {
-		name:    jsontest.Name("Structs/Format/Floats/Invalid/NaN"),
-		inBuf:   `{"NonFinite": "nan"}`,
-		inVal:   new(structFormatFloats),
-		wantErr: EU(nil).withPos(`{"NonFinite": `, "/NonFinite").withType('"', T[float64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Floats/Invalid/PositiveInfinity"),
-		inBuf:   `{"NonFinite": "+Infinity"}`,
-		inVal:   new(structFormatFloats),
-		wantErr: EU(nil).withPos(`{"NonFinite": `, "/NonFinite").withType('"', T[float64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Floats/Invalid/NegativeInfinitySpace"),
-		inBuf:   `{"NonFinite": "-Infinity "}`,
-		inVal:   new(structFormatFloats),
-		wantErr: EU(nil).withPos(`{"NonFinite": `, "/NonFinite").withType('"', T[float64]()),
-	}, {
-		name: jsontest.Name("Structs/Format/Maps"),
-		inBuf: `[
-	{"EmitNull": null, "PointerEmitNull": null, "EmitEmpty": null, "PointerEmitEmpty": null, "EmitDefault": null, "PointerEmitDefault": null},
-	{"EmitNull": {}, "PointerEmitNull": {}, "EmitEmpty": {}, "PointerEmitEmpty": {}, "EmitDefault": {}, "PointerEmitDefault": {}},
-	{"EmitNull": {"k": "v"}, "PointerEmitNull": {"k": "v"}, "EmitEmpty": {"k": "v"}, "PointerEmitEmpty": {"k": "v"}, "EmitDefault": {"k": "v"}, "PointerEmitDefault": {"k": "v"}}
-]`,
-		inVal: new([]structFormatMaps),
-		want: addr([]structFormatMaps{{
-			EmitNull: map[string]string(nil), PointerEmitNull: (*map[string]string)(nil),
-			EmitEmpty: map[string]string(nil), PointerEmitEmpty: (*map[string]string)(nil),
-			EmitDefault: map[string]string(nil), PointerEmitDefault: (*map[string]string)(nil),
-		}, {
-			EmitNull: map[string]string{}, PointerEmitNull: addr(map[string]string{}),
-			EmitEmpty: map[string]string{}, PointerEmitEmpty: addr(map[string]string{}),
-			EmitDefault: map[string]string{}, PointerEmitDefault: addr(map[string]string{}),
-		}, {
-			EmitNull: map[string]string{"k": "v"}, PointerEmitNull: addr(map[string]string{"k": "v"}),
-			EmitEmpty: map[string]string{"k": "v"}, PointerEmitEmpty: addr(map[string]string{"k": "v"}),
-			EmitDefault: map[string]string{"k": "v"}, PointerEmitDefault: addr(map[string]string{"k": "v"}),
-		}}),
-	}, {
-		name: jsontest.Name("Structs/Format/Slices"),
-		inBuf: `[
-	{"EmitNull": null, "PointerEmitNull": null, "EmitEmpty": null, "PointerEmitEmpty": null, "EmitDefault": null, "PointerEmitDefault": null},
-	{"EmitNull": [], "PointerEmitNull": [], "EmitEmpty": [], "PointerEmitEmpty": [], "EmitDefault": [], "PointerEmitDefault": []},
-	{"EmitNull": ["v"], "PointerEmitNull": ["v"], "EmitEmpty": ["v"], "PointerEmitEmpty": ["v"], "EmitDefault": ["v"], "PointerEmitDefault": ["v"]}
-]`,
-		inVal: new([]structFormatSlices),
-		want: addr([]structFormatSlices{{
-			EmitNull: []string(nil), PointerEmitNull: (*[]string)(nil),
-			EmitEmpty: []string(nil), PointerEmitEmpty: (*[]string)(nil),
-			EmitDefault: []string(nil), PointerEmitDefault: (*[]string)(nil),
-		}, {
-			EmitNull: []string{}, PointerEmitNull: addr([]string{}),
-			EmitEmpty: []string{}, PointerEmitEmpty: addr([]string{}),
-			EmitDefault: []string{}, PointerEmitDefault: addr([]string{}),
-		}, {
-			EmitNull: []string{"v"}, PointerEmitNull: addr([]string{"v"}),
-			EmitEmpty: []string{"v"}, PointerEmitEmpty: addr([]string{"v"}),
-			EmitDefault: []string{"v"}, PointerEmitDefault: addr([]string{"v"}),
-		}}),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Bool"),
-		inBuf:   `{"Bool":true}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Bool":`, "/Bool").withType(0, T[bool]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/String"),
-		inBuf:   `{"String": "string"}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"String": `, "/String").withType(0, T[string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Bytes"),
-		inBuf:   `{"Bytes": "bytes"}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Bytes": `, "/Bytes").withType(0, T[[]byte]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Int"),
-		inBuf:   `{"Int":   1}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Int":   `, "/Int").withType(0, T[int64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Uint"),
-		inBuf:   `{"Uint": 1}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Uint": `, "/Uint").withType(0, T[uint64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Float"),
-		inBuf:   `{"Float" : 1}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Float" : `, "/Float").withType(0, T[float64]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Map"),
-		inBuf:   `{"Map":{}}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Map":`, "/Map").withType(0, T[map[string]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Struct"),
-		inBuf:   `{"Struct": {}}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Struct": `, "/Struct").withType(0, T[structAll]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Slice"),
-		inBuf:   `{"Slice": {}}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Slice": `, "/Slice").withType(0, T[[]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Array"),
-		inBuf:   `{"Array": []}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Array": `, "/Array").withType(0, T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Structs/Format/Invalid/Interface"),
-		inBuf:   `{"Interface": "anything"}`,
-		inVal:   new(structFormatInvalid),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"Interface": `, "/Interface").withType(0, T[any]()),
-	}, {
-		name:  jsontest.Name("Structs/Inline/Zero"),
-		inBuf: `{"D":""}`,
-		inVal: new(structInlined),
-		want:  new(structInlined),
-	}, {
-		name:  jsontest.Name("Structs/Inline/Alloc"),
-		inBuf: `{"E":"","F":"","G":"","A":"","B":"","D":""}`,
-		inVal: new(structInlined),
-		want: addr(structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{},
-				StructEmbed1: StructEmbed1{},
-			},
-			StructEmbed2: &StructEmbed2{},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/Inline/NonZero"),
-		inBuf: `{"E":"E3","F":"F3","G":"G3","A":"A1","B":"B1","D":"D2"}`,
-		inVal: new(structInlined),
-		want: addr(structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{A: "A1", B: "B1" /* C: "C1" */},
-				StructEmbed1: StructEmbed1{ /* C: "C2" */ D: "D2" /* E: "E2" */},
-			},
-			StructEmbed2: &StructEmbed2{E: "E3", F: "F3", G: "G3"},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/Inline/Merge"),
-		inBuf: `{"E":"E3","F":"F3","G":"G3","A":"A1","B":"B1","D":"D2"}`,
-		inVal: addr(structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{B: "##", C: "C1"},
-				StructEmbed1: StructEmbed1{C: "C2", E: "E2"},
-			},
-			StructEmbed2: &StructEmbed2{E: "##", G: "G3"},
-		}),
-		want: addr(structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{A: "A1", B: "B1", C: "C1"},
-				StructEmbed1: StructEmbed1{C: "C2", D: "D2", E: "E2"},
-			},
-			StructEmbed2: &StructEmbed2{E: "E3", F: "F3", G: "G3"},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/Noop"),
-		inBuf: `{"A":1,"B":2}`,
-		inVal: new(structInlineTextValue),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(nil), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/MergeN1/Nil"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlineTextValue),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":"buzz"}`), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/MergeN1/Empty"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlineTextValue{X: jsontext.Value{}}),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":"buzz"}`), B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/MergeN1/Whitespace"),
-		inBuf:   `{"A":1,"fizz":"buzz","B":2}`,
-		inVal:   addr(structInlineTextValue{X: jsontext.Value("\n\r\t ")}),
-		want:    addr(structInlineTextValue{A: 1, X: jsontext.Value("")}),
-		wantErr: EU(errRawInlinedNotObject).withPos(`{"A":1,`, "/fizz").withType('"', T[jsontext.Value]()),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/MergeN1/Null"),
-		inBuf:   `{"A":1,"fizz":"buzz","B":2}`,
-		inVal:   addr(structInlineTextValue{X: jsontext.Value("null")}),
-		want:    addr(structInlineTextValue{A: 1, X: jsontext.Value("null")}),
-		wantErr: EU(errRawInlinedNotObject).withPos(`{"A":1,`, "/fizz").withType('"', T[jsontext.Value]()),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/MergeN1/ObjectN0"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlineTextValue{X: jsontext.Value(` { } `)}),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(` {"fizz":"buzz"}`), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/MergeN2/ObjectN1"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"foo": [ 1 , 2 , 3 ]}`,
-		inVal: addr(structInlineTextValue{X: jsontext.Value(` { "fizz" : "buzz" } `)}),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(` { "fizz" : "buzz","fizz":"buzz","foo":[ 1 , 2 , 3 ]}`), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/Merge/EndObject"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlineTextValue{X: jsontext.Value(` } `)}),
-		// NOTE: This produces invalid output,
-		// but the value being merged into is already invalid.
-		want: addr(structInlineTextValue{A: 1, X: jsontext.Value(`,"fizz":"buzz"}`), B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/MergeInvalidValue"),
-		inBuf:   `{"A":1,"fizz":nil,"B":2}`,
-		inVal:   new(structInlineTextValue),
-		want:    addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":`)}),
-		wantErr: newInvalidCharacterError("i", "in literal null (expecting 'u')", len64(`{"A":1,"fizz":n`), "/fizz"),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/CaseSensitive"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"a":3}`,
-		inVal: new(structInlineTextValue),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":"buzz","a":3}`), B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/TextValue/RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(false)},
-		inBuf:   `{"A":1,"fizz":"buzz","B":2,"fizz":"buzz"}`,
-		inVal:   new(structInlineTextValue),
-		want:    addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":"buzz"}`), B: 2}),
-		wantErr: newDuplicateNameError("", []byte(`"fizz"`), len64(`{"A":1,"fizz":"buzz","B":2,`)),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"fizz":"buzz"}`,
-		inVal: new(structInlineTextValue),
-		want:  addr(structInlineTextValue{A: 1, X: jsontext.Value(`{"fizz":"buzz","fizz":"buzz"}`), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/Nested/Noop"),
-		inBuf: `{}`,
-		inVal: new(structInlinePointerInlineTextValue),
-		want:  new(structInlinePointerInlineTextValue),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/Nested/Alloc"),
-		inBuf: `{"A":1,"fizz":"buzz"}`,
-		inVal: new(structInlinePointerInlineTextValue),
-		want: addr(structInlinePointerInlineTextValue{
-			X: &struct {
-				A int
-				X jsontext.Value `json:",inline"`
-			}{A: 1, X: jsontext.Value(`{"fizz":"buzz"}`)},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/TextValue/Nested/Merge"),
-		inBuf: `{"fizz":"buzz"}`,
-		inVal: addr(structInlinePointerInlineTextValue{
-			X: &struct {
-				A int
-				X jsontext.Value `json:",inline"`
-			}{A: 1},
-		}),
-		want: addr(structInlinePointerInlineTextValue{
-			X: &struct {
-				A int
-				X jsontext.Value `json:",inline"`
-			}{A: 1, X: jsontext.Value(`{"fizz":"buzz"}`)},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerTextValue/Noop"),
-		inBuf: `{"A":1,"B":2}`,
-		inVal: new(structInlinePointerTextValue),
-		want:  addr(structInlinePointerTextValue{A: 1, X: nil, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerTextValue/Alloc"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlinePointerTextValue),
-		want:  addr(structInlinePointerTextValue{A: 1, X: addr(jsontext.Value(`{"fizz":"buzz"}`)), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerTextValue/Merge"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlinePointerTextValue{X: addr(jsontext.Value(`{"fizz":"buzz"}`))}),
-		want:  addr(structInlinePointerTextValue{A: 1, X: addr(jsontext.Value(`{"fizz":"buzz","fizz":"buzz"}`)), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerTextValue/Nested/Nil"),
-		inBuf: `{"fizz":"buzz"}`,
-		inVal: new(structInlineInlinePointerTextValue),
-		want: addr(structInlineInlinePointerTextValue{
-			X: struct {
-				X *jsontext.Value `json:",inline"`
-			}{X: addr(jsontext.Value(`{"fizz":"buzz"}`))},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/Noop"),
-		inBuf: `{"A":1,"B":2}`,
-		inVal: new(structInlineMapStringAny),
-		want:  addr(structInlineMapStringAny{A: 1, X: nil, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeN1/Nil"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlineMapStringAny),
-		want:  addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": "buzz"}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeN1/Empty"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlineMapStringAny{X: jsonObject{}}),
-		want:  addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": "buzz"}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeN1/ObjectN1"),
-		inBuf: `{"A":1,"fizz":{"charlie":"DELTA","echo":"foxtrot"},"B":2}`,
-		inVal: addr(structInlineMapStringAny{X: jsonObject{"fizz": jsonObject{
-			"alpha":   "bravo",
-			"charlie": "delta",
-		}}}),
-		want: addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": jsonObject{
-			"alpha":   "bravo",
-			"charlie": "DELTA",
-			"echo":    "foxtrot",
-		}}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeN2/ObjectN1"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"foo": [ 1 , 2 , 3 ]}`,
-		inVal: addr(structInlineMapStringAny{X: jsonObject{"fizz": "wuzz"}}),
-		want:  addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": "buzz", "foo": jsonArray{1.0, 2.0, 3.0}}, B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeInvalidValue"),
-		inBuf:   `{"A":1,"fizz":nil,"B":2}`,
-		inVal:   new(structInlineMapStringAny),
-		want:    addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": nil}}),
-		wantErr: newInvalidCharacterError("i", "in literal null (expecting 'u')", len64(`{"A":1,"fizz":n`), "/fizz"),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapStringAny/MergeInvalidValue/Existing"),
-		inBuf:   `{"A":1,"fizz":nil,"B":2}`,
-		inVal:   addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": true}}),
-		want:    addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": true}}),
-		wantErr: newInvalidCharacterError("i", "in literal null (expecting 'u')", len64(`{"A":1,"fizz":n`), "/fizz"),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/CaseSensitive"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"a":3}`,
-		inVal: new(structInlineMapStringAny),
-		want:  addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": "buzz", "a": 3.0}, B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapStringAny/RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(false)},
-		inBuf:   `{"A":1,"fizz":"buzz","B":2,"fizz":"buzz"}`,
-		inVal:   new(structInlineMapStringAny),
-		want:    addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": "buzz"}, B: 2}),
-		wantErr: newDuplicateNameError("", []byte(`"fizz"`), len64(`{"A":1,"fizz":"buzz","B":2,`)),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"A":1,"fizz":{"one":1,"two":-2},"B":2,"fizz":{"two":2,"three":3}}`,
-		inVal: new(structInlineMapStringAny),
-		want:  addr(structInlineMapStringAny{A: 1, X: jsonObject{"fizz": jsonObject{"one": 1.0, "two": 2.0, "three": 3.0}}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/Nested/Noop"),
-		inBuf: `{}`,
-		inVal: new(structInlinePointerInlineMapStringAny),
-		want:  new(structInlinePointerInlineMapStringAny),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/Nested/Alloc"),
-		inBuf: `{"A":1,"fizz":"buzz"}`,
-		inVal: new(structInlinePointerInlineMapStringAny),
-		want: addr(structInlinePointerInlineMapStringAny{
-			X: &struct {
-				A int
-				X jsonObject `json:",inline"`
-			}{A: 1, X: jsonObject{"fizz": "buzz"}},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringAny/Nested/Merge"),
-		inBuf: `{"fizz":"buzz"}`,
-		inVal: addr(structInlinePointerInlineMapStringAny{
-			X: &struct {
-				A int
-				X jsonObject `json:",inline"`
-			}{A: 1},
-		}),
-		want: addr(structInlinePointerInlineMapStringAny{
-			X: &struct {
-				A int
-				X jsonObject `json:",inline"`
-			}{A: 1, X: jsonObject{"fizz": "buzz"}},
-		}),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/UnmarshalFunc"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *any) error {
-				var err error
-				*v, err = strconv.ParseFloat(string(bytes.Trim(b, `"`)), 64)
-				return err
-			})),
-		},
-		inBuf: `{"D":"1.1","E":"2.2","F":"3.3"}`,
-		inVal: new(structInlineMapStringAny),
-		want:  addr(structInlineMapStringAny{X: jsonObject{"D": 1.1, "E": 2.2, "F": 3.3}}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Noop"),
-		inBuf: `{"A":1,"B":2}`,
-		inVal: new(structInlinePointerMapStringAny),
-		want:  addr(structInlinePointerMapStringAny{A: 1, X: nil, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Alloc"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlinePointerMapStringAny),
-		want:  addr(structInlinePointerMapStringAny{A: 1, X: addr(jsonObject{"fizz": "buzz"}), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Merge"),
-		inBuf: `{"A":1,"fizz":"wuzz","B":2}`,
-		inVal: addr(structInlinePointerMapStringAny{X: addr(jsonObject{"fizz": "buzz"})}),
-		want:  addr(structInlinePointerMapStringAny{A: 1, X: addr(jsonObject{"fizz": "wuzz"}), B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/PointerMapStringAny/Nested/Nil"),
-		inBuf: `{"fizz":"buzz"}`,
-		inVal: new(structInlineInlinePointerMapStringAny),
-		want: addr(structInlineInlinePointerMapStringAny{
-			X: struct {
-				X *jsonObject `json:",inline"`
-			}{X: addr(jsonObject{"fizz": "buzz"})},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringInt"),
-		inBuf: `{"zero": 0, "one": 1, "two": 2}`,
-		inVal: new(structInlineMapStringInt),
-		want: addr(structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringInt/Null"),
-		inBuf: `{"zero": 0, "one": null, "two": 2}`,
-		inVal: new(structInlineMapStringInt),
-		want: addr(structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 0, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringInt/Invalid"),
-		inBuf: `{"zero": 0, "one": {}, "two": 2}`,
-		inVal: new(structInlineMapStringInt),
-		want: addr(structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 0},
-		}),
-		wantErr: EU(nil).withPos(`{"zero": 0, "one": `, "/one").withType('{', T[int]()),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapStringInt/StringifiedNumbers"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `{"zero": "0", "one": "1", "two": "2"}`,
-		inVal: new(structInlineMapStringInt),
-		want: addr(structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		}),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapStringInt/UnmarshalFunc"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *int) error {
-				i, err := strconv.ParseInt(string(bytes.Trim(b, `"`)), 10, 64)
-				if err != nil {
-					return err
-				}
-				*v = int(i)
-				return nil
-			})),
-		},
-		inBuf: `{"zero": "0", "one": "1", "two": "2"}`,
-		inVal: new(structInlineMapStringInt),
-		want: addr(structInlineMapStringInt{
-			X: map[string]int{"zero": 0, "one": 1, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringInt"),
-		inBuf: `{"zero": 0, "one": 1, "two": 2}`,
-		inVal: new(structInlineMapNamedStringInt),
-		want: addr(structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 1, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringInt/Null"),
-		inBuf: `{"zero": 0, "one": null, "two": 2}`,
-		inVal: new(structInlineMapNamedStringInt),
-		want: addr(structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 0, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringInt/Invalid"),
-		inBuf: `{"zero": 0, "one": {}, "two": 2}`,
-		inVal: new(structInlineMapNamedStringInt),
-		want: addr(structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 0},
-		}),
-		wantErr: EU(nil).withPos(`{"zero": 0, "one": `, "/one").withType('{', T[int]()),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringInt/StringifiedNumbers"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `{"zero": "0", "one": 1, "two": "2"}`,
-		inVal: new(structInlineMapNamedStringInt),
-		want: addr(structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 0},
-		}),
-		wantErr: EU(nil).withPos(`{"zero": "0", "one": `, "/one").withType('0', T[int]()),
-	}, {
-		name: jsontest.Name("Structs/InlinedFallback/MapNamedStringInt/UnmarshalFunc"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *int) error {
-				i, err := strconv.ParseInt(string(bytes.Trim(b, `"`)), 10, 64)
-				if err != nil {
-					return err
-				}
-				*v = int(i)
-				return nil
-			})),
-		},
-		inBuf: `{"zero": "0", "one": "1", "two": "2"}`,
-		inVal: new(structInlineMapNamedStringInt),
-		want: addr(structInlineMapNamedStringInt{
-			X: map[namedString]int{"zero": 0, "one": 1, "two": 2},
-		}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/Noop"),
-		inBuf: `{"A":1,"B":2}`,
-		inVal: new(structInlineMapNamedStringAny),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: nil, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeN1/Nil"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlineMapNamedStringAny),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": "buzz"}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeN1/Empty"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: addr(structInlineMapNamedStringAny{X: map[namedString]any{}}),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": "buzz"}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeN1/ObjectN1"),
-		inBuf: `{"A":1,"fizz":{"charlie":"DELTA","echo":"foxtrot"},"B":2}`,
-		inVal: addr(structInlineMapNamedStringAny{X: map[namedString]any{"fizz": jsonObject{
-			"alpha":   "bravo",
-			"charlie": "delta",
-		}}}),
-		want: addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": jsonObject{
-			"alpha":   "bravo",
-			"charlie": "DELTA",
-			"echo":    "foxtrot",
-		}}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeN2/ObjectN1"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"foo": [ 1 , 2 , 3 ]}`,
-		inVal: addr(structInlineMapNamedStringAny{X: map[namedString]any{"fizz": "wuzz"}}),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": "buzz", "foo": jsonArray{1.0, 2.0, 3.0}}, B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeInvalidValue"),
-		inBuf:   `{"A":1,"fizz":nil,"B":2}`,
-		inVal:   new(structInlineMapNamedStringAny),
-		want:    addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": nil}}),
-		wantErr: newInvalidCharacterError("i", "in literal null (expecting 'u')", len64(`{"A":1,"fizz":n`), "/fizz"),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/MergeInvalidValue/Existing"),
-		inBuf:   `{"A":1,"fizz":nil,"B":2}`,
-		inVal:   addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": true}}),
-		want:    addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": true}}),
-		wantErr: newInvalidCharacterError("i", "in literal null (expecting 'u')", len64(`{"A":1,"fizz":n`), "/fizz"),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/CaseSensitive"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2,"a":3}`,
-		inVal: new(structInlineMapNamedStringAny),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": "buzz", "a": 3.0}, B: 2}),
-	}, {
-		name:    jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(false)},
-		inBuf:   `{"A":1,"fizz":"buzz","B":2,"fizz":"buzz"}`,
-		inVal:   new(structInlineMapNamedStringAny),
-		want:    addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": "buzz"}, B: 2}),
-		wantErr: newDuplicateNameError("", []byte(`"fizz"`), len64(`{"A":1,"fizz":"buzz","B":2,`)),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/MapNamedStringAny/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"A":1,"fizz":{"one":1,"two":-2},"B":2,"fizz":{"two":2,"three":3}}`,
-		inVal: new(structInlineMapNamedStringAny),
-		want:  addr(structInlineMapNamedStringAny{A: 1, X: map[namedString]any{"fizz": map[string]any{"one": 1.0, "two": 2.0, "three": 3.0}}, B: 2}),
-	}, {
-		name:  jsontest.Name("Structs/InlinedFallback/RejectUnknownMembers"),
-		opts:  []Options{RejectUnknownMembers(true)},
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structInlineTextValue),
-		// NOTE: DiscardUnknownMembers has no effect since this is "inline".
-		want: addr(structInlineTextValue{
-			A: 1,
-			X: jsontext.Value(`{"fizz":"buzz"}`),
-			B: 2,
-		}),
-	}, {
-		name:    jsontest.Name("Structs/UnknownFallback/RejectUnknownMembers"),
-		opts:    []Options{RejectUnknownMembers(true)},
-		inBuf:   `{"A":1,"fizz":"buzz","B":2}`,
-		inVal:   new(structUnknownTextValue),
-		want:    addr(structUnknownTextValue{A: 1}),
-		wantErr: EU(ErrUnknownName).withPos(`{"A":1,`, "/fizz").withType('"', T[structUnknownTextValue]()),
-	}, {
-		name:  jsontest.Name("Structs/UnknownFallback"),
-		inBuf: `{"A":1,"fizz":"buzz","B":2}`,
-		inVal: new(structUnknownTextValue),
-		want: addr(structUnknownTextValue{
-			A: 1,
-			X: jsontext.Value(`{"fizz":"buzz"}`),
-			B: 2,
-		}),
-	}, {
-		name:  jsontest.Name("Structs/UnknownIgnored"),
-		opts:  []Options{RejectUnknownMembers(false)},
-		inBuf: `{"unknown":"fizzbuzz"}`,
-		inVal: new(structAll),
-		want:  new(structAll),
-	}, {
-		name:    jsontest.Name("Structs/RejectUnknownMembers"),
-		opts:    []Options{RejectUnknownMembers(true)},
-		inBuf:   `{"unknown":"fizzbuzz"}`,
-		inVal:   new(structAll),
-		want:    new(structAll),
-		wantErr: EU(ErrUnknownName).withPos(`{`, "/unknown").withType('"', T[structAll]()),
-	}, {
-		name:  jsontest.Name("Structs/UnexportedIgnored"),
-		inBuf: `{"ignored":"unused"}`,
-		inVal: new(structUnexportedIgnored),
-		want:  new(structUnexportedIgnored),
-	}, {
-		name:  jsontest.Name("Structs/IgnoredUnexportedEmbedded"),
-		inBuf: `{"namedString":"unused"}`,
-		inVal: new(structIgnoredUnexportedEmbedded),
-		want:  new(structIgnoredUnexportedEmbedded),
-	}, {
-		name:  jsontest.Name("Structs/WeirdNames"),
-		inBuf: `{"":"empty",",":"comma","\"":"quote"}`,
-		inVal: new(structWeirdNames),
-		want:  addr(structWeirdNames{Empty: "empty", Comma: "comma", Quote: "quote"}),
-	}, {
-		name:  jsontest.Name("Structs/NoCase/Exact"),
-		inBuf: `{"Aaa":"Aaa","AA_A":"AA_A","AaA":"AaA","AAa":"AAa","AAA":"AAA"}`,
-		inVal: new(structNoCase),
-		want:  addr(structNoCase{AaA: "AaA", AAa: "AAa", Aaa: "Aaa", AAA: "AAA", AA_A: "AA_A"}),
-	}, {
-		name:  jsontest.Name("Structs/NoCase/CaseInsensitiveDefault"),
-		inBuf: `{"aa_a":"aa_a"}`,
-		inVal: new(structNoCase),
-		want:  addr(structNoCase{AaA: "aa_a"}),
-	}, {
-		name:  jsontest.Name("Structs/NoCase/MatchCaseSensitiveDelimiter"),
-		opts:  []Options{jsonflags.MatchCaseSensitiveDelimiter | 1},
-		inBuf: `{"aa_a":"aa_a"}`,
-		inVal: new(structNoCase),
-		want:  addr(structNoCase{}),
-	}, {
-		name:  jsontest.Name("Structs/NoCase/MatchCaseInsensitiveNames+MatchCaseSensitiveDelimiter"),
-		opts:  []Options{MatchCaseInsensitiveNames(true), jsonflags.MatchCaseSensitiveDelimiter | 1},
-		inBuf: `{"aa_a":"aa_a"}`,
-		inVal: new(structNoCase),
-		want:  addr(structNoCase{AA_A: "aa_a"}),
-	}, {
-		name:  jsontest.Name("Structs/NoCase/Merge/AllowDuplicateNames"),
-		opts:  []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf: `{"AaA":"AaA","aaa":"aaa","aAa":"aAa"}`,
-		inVal: new(structNoCase),
-		want:  addr(structNoCase{AaA: "aAa"}),
-	}, {
-		name:    jsontest.Name("Structs/NoCase/Merge/RejectDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(false)},
-		inBuf:   `{"AaA":"AaA","aaa":"aaa"}`,
-		inVal:   new(structNoCase),
-		want:    addr(structNoCase{AaA: "AaA"}),
-		wantErr: newDuplicateNameError("", []byte(`"aaa"`), len64(`{"AaA":"AaA",`)),
-	}, {
-		name:  jsontest.Name("Structs/CaseSensitive"),
-		inBuf: `{"BOOL": true, "STRING": "hello", "BYTES": "AQID", "INT": -64, "UINT": 64, "FLOAT": 3.14159}`,
-		inVal: new(structScalars),
-		want:  addr(structScalars{}),
-	}, {
-		name:  jsontest.Name("Structs/DuplicateName/NoCase/ExactDifferent"),
-		inBuf: `{"AAA":"AAA","AaA":"AaA","AAa":"AAa","Aaa":"Aaa"}`,
-		inVal: addr(structNoCaseInlineTextValue{}),
-		want:  addr(structNoCaseInlineTextValue{AAA: "AAA", AaA: "AaA", AAa: "AAa", Aaa: "Aaa"}),
-	}, {
-		name:    jsontest.Name("Structs/DuplicateName/NoCase/ExactConflict"),
-		inBuf:   `{"AAA":"AAA","AAA":"AAA"}`,
-		inVal:   addr(structNoCaseInlineTextValue{}),
-		want:    addr(structNoCaseInlineTextValue{AAA: "AAA"}),
-		wantErr: newDuplicateNameError("", []byte(`"AAA"`), len64(`{"AAA":"AAA",`)),
-	}, {
-		name:  jsontest.Name("Structs/DuplicateName/NoCase/OverwriteExact"),
-		inBuf: `{"AAA":"after"}`,
-		inVal: addr(structNoCaseInlineTextValue{AAA: "before"}),
-		want:  addr(structNoCaseInlineTextValue{AAA: "after"}),
-	}, {
-		name:    jsontest.Name("Structs/DuplicateName/NoCase/NoCaseConflict"),
-		inBuf:   `{"aaa":"aaa","aaA":"aaA"}`,
-		inVal:   addr(structNoCaseInlineTextValue{}),
-		want:    addr(structNoCaseInlineTextValue{AaA: "aaa"}),
-		wantErr: newDuplicateNameError("", []byte(`"aaA"`), len64(`{"aaa":"aaa",`)),
-	}, {
-		name:    jsontest.Name("Structs/DuplicateName/NoCase/OverwriteNoCase"),
-		inBuf:   `{"aaa":"aaa","aaA":"aaA"}`,
-		inVal:   addr(structNoCaseInlineTextValue{}),
-		want:    addr(structNoCaseInlineTextValue{AaA: "aaa"}),
-		wantErr: newDuplicateNameError("", []byte(`"aaA"`), len64(`{"aaa":"aaa",`)),
-	}, {
-		name:  jsontest.Name("Structs/DuplicateName/Inline/Unknown"),
-		inBuf: `{"unknown":""}`,
-		inVal: addr(structNoCaseInlineTextValue{}),
-		want:  addr(structNoCaseInlineTextValue{X: jsontext.Value(`{"unknown":""}`)}),
-	}, {
-		name:  jsontest.Name("Structs/DuplicateName/Inline/UnknownMerge"),
-		inBuf: `{"unknown":""}`,
-		inVal: addr(structNoCaseInlineTextValue{X: jsontext.Value(`{"unknown":""}`)}),
-		want:  addr(structNoCaseInlineTextValue{X: jsontext.Value(`{"unknown":"","unknown":""}`)}),
-	}, {
-		name:  jsontest.Name("Structs/DuplicateName/Inline/NoCaseOkay"),
-		inBuf: `{"b":"","B":""}`,
-		inVal: addr(structNoCaseInlineTextValue{}),
-		want:  addr(structNoCaseInlineTextValue{X: jsontext.Value(`{"b":"","B":""}`)}),
-	}, {
-		name:    jsontest.Name("Structs/DuplicateName/Inline/ExactConflict"),
-		inBuf:   `{"b":"","b":""}`,
-		inVal:   addr(structNoCaseInlineTextValue{}),
-		want:    addr(structNoCaseInlineTextValue{X: jsontext.Value(`{"b":""}`)}),
-		wantErr: newDuplicateNameError("", []byte(`"b"`), len64(`{"b":"",`)),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/ErrUnexpectedEOF"),
-		inBuf:   ``,
-		inVal:   addr(structAll{}),
-		want:    addr(structAll{}),
-		wantErr: io.ErrUnexpectedEOF,
-	}, {
-		name:    jsontest.Name("Structs/Invalid/NestedErrUnexpectedEOF"),
-		inBuf:   `{"Pointer":`,
-		inVal:   addr(structAll{}),
-		want:    addr(structAll{Pointer: new(structAll)}),
-		wantErr: &jsontext.SyntacticError{ByteOffset: len64(`{"Pointer":`), JSONPointer: "/Pointer", Err: io.ErrUnexpectedEOF},
-	}, {
-		name:    jsontest.Name("Structs/Invalid/Conflicting"),
-		inBuf:   `{}`,
-		inVal:   addr(structConflicting{}),
-		want:    addr(structConflicting{}),
-		wantErr: EU(errors.New(`Go struct fields A and B conflict over JSON object name "conflict"`)).withType('{', T[structConflicting]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/NoneExported"),
-		inBuf:   ` {}`,
-		inVal:   addr(structNoneExported{}),
-		want:    addr(structNoneExported{}),
-		wantErr: EU(errNoExportedFields).withPos(` `, "").withType('{', T[structNoneExported]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/MalformedTag"),
-		inBuf:   `{}`,
-		inVal:   addr(structMalformedTag{}),
-		want:    addr(structMalformedTag{}),
-		wantErr: EU(errors.New("Go struct field Malformed has malformed `json` tag: invalid character '\"' at start of option (expecting Unicode letter or single quote)")).withType('{', T[structMalformedTag]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/UnexportedTag"),
-		inBuf:   `{}`,
-		inVal:   addr(structUnexportedTag{}),
-		want:    addr(structUnexportedTag{}),
-		wantErr: EU(errors.New("unexported Go struct field unexported cannot have non-ignored `json:\"name\"` tag")).withType('{', T[structUnexportedTag]()),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/ExportedEmbedded"),
-		inBuf:   `{"NamedString":"hello"}`,
-		inVal:   addr(structExportedEmbedded{}),
-		want:    addr(structExportedEmbedded{}),
-		wantErr: EU(errors.New("embedded Go struct field NamedString of non-struct type must be explicitly given a JSON name")).withType('{', T[structExportedEmbedded]()),
-	}, {
-		name:  jsontest.Name("Structs/Valid/ExportedEmbedded"),
-		opts:  []Options{jsonflags.ReportErrorsWithLegacySemantics | 1},
-		inBuf: `{"NamedString":"hello"}`,
-		inVal: addr(structExportedEmbedded{}),
-		want:  addr(structExportedEmbedded{"hello"}),
-	}, {
-		name:  jsontest.Name("Structs/Valid/ExportedEmbeddedTag"),
-		inBuf: `{"name":"hello"}`,
-		inVal: addr(structExportedEmbeddedTag{}),
-		want:  addr(structExportedEmbeddedTag{"hello"}),
-	}, {
-		name:    jsontest.Name("Structs/Invalid/UnexportedEmbedded"),
-		inBuf:   `{}`,
-		inVal:   addr(structUnexportedEmbedded{}),
-		want:    addr(structUnexportedEmbedded{}),
-		wantErr: EU(errors.New("embedded Go struct field namedString of non-struct type must be explicitly given a JSON name")).withType('{', T[structUnexportedEmbedded]()),
-	}, {
-		name:  jsontest.Name("Structs/UnexportedEmbeddedStruct"),
-		inBuf: `{"Bool":true,"FizzBuzz":5,"Addr":"192.168.0.1"}`,
-		inVal: addr(structUnexportedEmbeddedStruct{}),
-		want:  addr(structUnexportedEmbeddedStruct{structOmitZeroAll{Bool: true}, 5, structNestedAddr{netip.AddrFrom4([4]byte{192, 168, 0, 1})}}),
-	}, {
-		name:    jsontest.Name("Structs/UnexportedEmbeddedStructPointer/Nil"),
-		inBuf:   `{"Bool":true,"FizzBuzz":5}`,
-		inVal:   addr(structUnexportedEmbeddedStructPointer{}),
-		wantErr: EU(errNilField).withPos(`{"Bool":`, "/Bool").withType(0, T[structUnexportedEmbeddedStructPointer]()),
-	}, {
-		name:    jsontest.Name("Structs/UnexportedEmbeddedStructPointer/Nil"),
-		inBuf:   `{"FizzBuzz":5,"Addr":"192.168.0.1"}`,
-		inVal:   addr(structUnexportedEmbeddedStructPointer{}),
-		wantErr: EU(errNilField).withPos(`{"FizzBuzz":5,"Addr":`, "/Addr").withType(0, T[structUnexportedEmbeddedStructPointer]()),
-	}, {
-		name:  jsontest.Name("Structs/UnexportedEmbeddedStructPointer/Nil"),
-		inBuf: `{"Bool":true,"FizzBuzz":10,"Addr":"192.168.0.1"}`,
-		inVal: addr(structUnexportedEmbeddedStructPointer{&structOmitZeroAll{Int: 5}, 5, &structNestedAddr{netip.AddrFrom4([4]byte{127, 0, 0, 1})}}),
-		want:  addr(structUnexportedEmbeddedStructPointer{&structOmitZeroAll{Bool: true, Int: 5}, 10, &structNestedAddr{netip.AddrFrom4([4]byte{192, 168, 0, 1})}}),
-	}, {
-		name: jsontest.Name("Structs/Unknown"),
-		inBuf: `{
-	"object0": {},
-	"object1": {"key1": "value"},
-	"object2": {"key1": "value", "key2": "value"},
-	"objects": {"":{"":{"":{}}}},
-	"array0": [],
-	"array1": ["value1"],
-	"array2": ["value1", "value2"],
-	"array": [[[]]],
-	"scalars": [null, false, true, "string", 12.345]
-}`,
-		inVal: addr(struct{}{}),
-		want:  addr(struct{}{}),
-	}, {
-		name:  jsontest.Name("Structs/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `{"Field":"Value"}`,
-		inVal: addr(struct{ Field string }{}),
-		want:  addr(struct{ Field string }{"Value"}),
-	}, {
-		name:  jsontest.Name("Slices/Null"),
-		inBuf: `null`,
-		inVal: addr([]string{"something"}),
-		want:  addr([]string(nil)),
-	}, {
-		name:  jsontest.Name("Slices/Bool"),
-		inBuf: `[true,false]`,
-		inVal: new([]bool),
-		want:  addr([]bool{true, false}),
-	}, {
-		name:  jsontest.Name("Slices/String"),
-		inBuf: `["hello","goodbye"]`,
-		inVal: new([]string),
-		want:  addr([]string{"hello", "goodbye"}),
-	}, {
-		name:  jsontest.Name("Slices/Bytes"),
-		inBuf: `["aGVsbG8=","Z29vZGJ5ZQ=="]`,
-		inVal: new([][]byte),
-		want:  addr([][]byte{[]byte("hello"), []byte("goodbye")}),
-	}, {
-		name:  jsontest.Name("Slices/Int"),
-		inBuf: `[-2,-1,0,1,2]`,
-		inVal: new([]int),
-		want:  addr([]int{-2, -1, 0, 1, 2}),
-	}, {
-		name:  jsontest.Name("Slices/Uint"),
-		inBuf: `[0,1,2,3,4]`,
-		inVal: new([]uint),
-		want:  addr([]uint{0, 1, 2, 3, 4}),
-	}, {
-		name:  jsontest.Name("Slices/Float"),
-		inBuf: `[3.14159,12.34]`,
-		inVal: new([]float64),
-		want:  addr([]float64{3.14159, 12.34}),
-	}, {
-		// NOTE: The semantics differs from v1, where the slice length is reset
-		// and new elements are appended to the end.
-		// See https://go.dev/issue/21092.
-		name:  jsontest.Name("Slices/Merge"),
-		inBuf: `[{"k3":"v3"},{"k4":"v4"}]`,
-		inVal: addr([]map[string]string{{"k1": "v1"}, {"k2": "v2"}}[:1]),
-		want:  addr([]map[string]string{{"k3": "v3"}, {"k4": "v4"}}),
-	}, {
-		name:    jsontest.Name("Slices/Invalid/Channel"),
-		inBuf:   `["hello"]`,
-		inVal:   new([]chan string),
-		want:    addr([]chan string{nil}),
-		wantErr: EU(nil).withPos(`[`, "/0").withType(0, T[chan string]()),
-	}, {
-		name:  jsontest.Name("Slices/RecursiveSlice"),
-		inBuf: `[[],[],[[]],[[],[]]]`,
-		inVal: new(recursiveSlice),
-		want: addr(recursiveSlice{
-			{},
-			{},
-			{{}},
-			{{}, {}},
-		}),
-	}, {
-		name:    jsontest.Name("Slices/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr([]string{"nochange"}),
-		want:    addr([]string{"nochange"}),
-		wantErr: EU(nil).withType('t', T[[]string]()),
-	}, {
-		name:    jsontest.Name("Slices/Invalid/String"),
-		inBuf:   `""`,
-		inVal:   addr([]string{"nochange"}),
-		want:    addr([]string{"nochange"}),
-		wantErr: EU(nil).withType('"', T[[]string]()),
-	}, {
-		name:    jsontest.Name("Slices/Invalid/Number"),
-		inBuf:   `0`,
-		inVal:   addr([]string{"nochange"}),
-		want:    addr([]string{"nochange"}),
-		wantErr: EU(nil).withType('0', T[[]string]()),
-	}, {
-		name:    jsontest.Name("Slices/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr([]string{"nochange"}),
-		want:    addr([]string{"nochange"}),
-		wantErr: EU(nil).withType('{', T[[]string]()),
-	}, {
-		name:  jsontest.Name("Slices/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `[false,true]`,
-		inVal: addr([]bool{true, false}),
-		want:  addr([]bool{false, true}),
-	}, {
-		name:  jsontest.Name("Arrays/Null"),
-		inBuf: `null`,
-		inVal: addr([1]string{"something"}),
-		want:  addr([1]string{}),
-	}, {
-		name:  jsontest.Name("Arrays/Bool"),
-		inBuf: `[true,false]`,
-		inVal: new([2]bool),
-		want:  addr([2]bool{true, false}),
-	}, {
-		name:  jsontest.Name("Arrays/String"),
-		inBuf: `["hello","goodbye"]`,
-		inVal: new([2]string),
-		want:  addr([2]string{"hello", "goodbye"}),
-	}, {
-		name:  jsontest.Name("Arrays/Bytes"),
-		inBuf: `["aGVsbG8=","Z29vZGJ5ZQ=="]`,
-		inVal: new([2][]byte),
-		want:  addr([2][]byte{[]byte("hello"), []byte("goodbye")}),
-	}, {
-		name:  jsontest.Name("Arrays/Int"),
-		inBuf: `[-2,-1,0,1,2]`,
-		inVal: new([5]int),
-		want:  addr([5]int{-2, -1, 0, 1, 2}),
-	}, {
-		name:  jsontest.Name("Arrays/Uint"),
-		inBuf: `[0,1,2,3,4]`,
-		inVal: new([5]uint),
-		want:  addr([5]uint{0, 1, 2, 3, 4}),
-	}, {
-		name:  jsontest.Name("Arrays/Float"),
-		inBuf: `[3.14159,12.34]`,
-		inVal: new([2]float64),
-		want:  addr([2]float64{3.14159, 12.34}),
-	}, {
-		// NOTE: The semantics differs from v1, where elements are not merged.
-		// This is to maintain consistent merge semantics with slices.
-		name:  jsontest.Name("Arrays/Merge"),
-		inBuf: `[{"k3":"v3"},{"k4":"v4"}]`,
-		inVal: addr([2]map[string]string{{"k1": "v1"}, {"k2": "v2"}}),
-		want:  addr([2]map[string]string{{"k3": "v3"}, {"k4": "v4"}}),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Channel"),
-		inBuf:   `["hello"]`,
-		inVal:   new([1]chan string),
-		want:    new([1]chan string),
-		wantErr: EU(nil).withPos(`[`, "/0").withType(0, T[chan string]()),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Underflow"),
-		inBuf:   `{"F":[   ]}`,
-		inVal:   new(struct{ F [1]string }),
-		want:    addr(struct{ F [1]string }{}),
-		wantErr: EU(errArrayUnderflow).withPos(`{"F":[   `, "/F").withType(']', T[[1]string]()),
-	}, {
-		name:  jsontest.Name("Arrays/Invalid/Underflow/UnmarshalArrayFromAnyLength"),
-		opts:  []Options{jsonflags.UnmarshalArrayFromAnyLength | 1},
-		inBuf: `[-1,-2]`,
-		inVal: addr([4]int{1, 2, 3, 4}),
-		want:  addr([4]int{-1, -2, 0, 0}),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Overflow"),
-		inBuf:   `["1","2"]`,
-		inVal:   new([1]string),
-		want:    addr([1]string{"1"}),
-		wantErr: EU(errArrayOverflow).withPos(`["1","2"`, "").withType(']', T[[1]string]()),
-	}, {
-		name:  jsontest.Name("Arrays/Invalid/Overflow/UnmarshalArrayFromAnyLength"),
-		opts:  []Options{jsonflags.UnmarshalArrayFromAnyLength | 1},
-		inBuf: `[-1,-2,-3,-4,-5,-6]`,
-		inVal: addr([4]int{1, 2, 3, 4}),
-		want:  addr([4]int{-1, -2, -3, -4}),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Bool"),
-		inBuf:   `true`,
-		inVal:   addr([1]string{"nochange"}),
-		want:    addr([1]string{"nochange"}),
-		wantErr: EU(nil).withType('t', T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/String"),
-		inBuf:   `""`,
-		inVal:   addr([1]string{"nochange"}),
-		want:    addr([1]string{"nochange"}),
-		wantErr: EU(nil).withType('"', T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Number"),
-		inBuf:   `0`,
-		inVal:   addr([1]string{"nochange"}),
-		want:    addr([1]string{"nochange"}),
-		wantErr: EU(nil).withType('0', T[[1]string]()),
-	}, {
-		name:    jsontest.Name("Arrays/Invalid/Object"),
-		inBuf:   `{}`,
-		inVal:   addr([1]string{"nochange"}),
-		want:    addr([1]string{"nochange"}),
-		wantErr: EU(nil).withType('{', T[[1]string]()),
-	}, {
-		name:  jsontest.Name("Arrays/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `[false,true]`,
-		inVal: addr([2]bool{true, false}),
-		want:  addr([2]bool{false, true}),
-	}, {
-		name:  jsontest.Name("Pointers/NullL0"),
-		inBuf: `null`,
-		inVal: new(*string),
-		want:  addr((*string)(nil)),
-	}, {
-		name:  jsontest.Name("Pointers/NullL1"),
-		inBuf: `null`,
-		inVal: addr(new(*string)),
-		want:  addr((**string)(nil)),
-	}, {
-		name:  jsontest.Name("Pointers/Bool"),
-		inBuf: `true`,
-		inVal: addr(new(bool)),
-		want:  addr(addr(true)),
-	}, {
-		name:  jsontest.Name("Pointers/String"),
-		inBuf: `"hello"`,
-		inVal: addr(new(string)),
-		want:  addr(addr("hello")),
-	}, {
-		name:  jsontest.Name("Pointers/Bytes"),
-		inBuf: `"aGVsbG8="`,
-		inVal: addr(new([]byte)),
-		want:  addr(addr([]byte("hello"))),
-	}, {
-		name:  jsontest.Name("Pointers/Int"),
-		inBuf: `-123`,
-		inVal: addr(new(int)),
-		want:  addr(addr(int(-123))),
-	}, {
-		name:  jsontest.Name("Pointers/Uint"),
-		inBuf: `123`,
-		inVal: addr(new(int)),
-		want:  addr(addr(int(123))),
-	}, {
-		name:  jsontest.Name("Pointers/Float"),
-		inBuf: `123.456`,
-		inVal: addr(new(float64)),
-		want:  addr(addr(float64(123.456))),
-	}, {
-		name:  jsontest.Name("Pointers/Allocate"),
-		inBuf: `"hello"`,
-		inVal: addr((*string)(nil)),
-		want:  addr(addr("hello")),
-	}, {
-		name:  jsontest.Name("Points/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `true`,
-		inVal: addr(new(bool)),
-		want:  addr(addr(true)),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/Null"),
-		inBuf: `null`,
-		inVal: new(any),
-		want:  new(any),
-	}, {
-		name:  jsontest.Name("Interfaces/NonEmpty/Null"),
-		inBuf: `null`,
-		inVal: new(io.Reader),
-		want:  new(io.Reader),
-	}, {
-		name:    jsontest.Name("Interfaces/NonEmpty/Invalid"),
-		inBuf:   `"hello"`,
-		inVal:   new(io.Reader),
-		want:    new(io.Reader),
-		wantErr: EU(errNilInterface).withType(0, T[io.Reader]()),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/False"),
-		inBuf: `false`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = false
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/True"),
-		inBuf: `true`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = true
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/String"),
-		inBuf: `"string"`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = "string"
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/Number"),
-		inBuf: `3.14159`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = 3.14159
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/Object"),
-		inBuf: `{"k":"v"}`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = map[string]any{"k": "v"}
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Empty/Array"),
-		inBuf: `["v"]`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = []any{"v"}
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/NamedAny/String"),
-		inBuf: `"string"`,
-		inVal: new(namedAny),
-		want: func() namedAny {
-			var vi namedAny = "string"
-			return &vi
-		}(),
-	}, {
-		name:    jsontest.Name("Interfaces/Invalid"),
-		inBuf:   `]`,
-		inVal:   new(any),
-		want:    new(any),
-		wantErr: newInvalidCharacterError("]", "at start of value", 0, ""),
-	}, {
-		// NOTE: The semantics differs from v1,
-		// where existing map entries were not merged into.
-		// See https://go.dev/issue/26946.
-		// See https://go.dev/issue/33993.
-		name:  jsontest.Name("Interfaces/Merge/Map"),
-		inBuf: `{"k2":"v2"}`,
-		inVal: func() any {
-			var vi any = map[string]string{"k1": "v1"}
-			return &vi
-		}(),
-		want: func() any {
-			var vi any = map[string]string{"k1": "v1", "k2": "v2"}
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Merge/Struct"),
-		inBuf: `{"Array":["goodbye"]}`,
-		inVal: func() any {
-			var vi any = structAll{String: "hello"}
-			return &vi
-		}(),
-		want: func() any {
-			var vi any = structAll{String: "hello", Array: [1]string{"goodbye"}}
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Merge/NamedInt"),
-		inBuf: `64`,
-		inVal: func() any {
-			var vi any = namedInt64(-64)
-			return &vi
-		}(),
-		want: func() any {
-			var vi any = namedInt64(+64)
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `true`,
-		inVal: new(any),
-		want: func() any {
-			var vi any = true
-			return &vi
-		}(),
-	}, {
-		name:  jsontest.Name("Interfaces/Any"),
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{nil, false, true, "", 0.0, map[string]any{}, []any{}}}),
-	}, {
-		name:  jsontest.Name("Interfaces/Any/Named"),
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X namedAny }),
-		want:  addr(struct{ X namedAny }{[]any{nil, false, true, "", 0.0, map[string]any{}, []any{}}}),
-	}, {
-		name:  jsontest.Name("Interfaces/Any/Stringified"),
-		opts:  []Options{StringifyNumbers(true)},
-		inBuf: `{"X":"0"}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{"0"}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/Any"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *any) error {
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{"called"}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/Bool"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *bool) error {
-				*v = string(b) != "true"
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{nil, true, false, "", 0.0, map[string]any{}, []any{}}}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/String"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *string) error {
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{nil, false, true, "called", 0.0, map[string]any{}, []any{}}}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/Float64"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *float64) error {
-				*v = 3.14159
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{nil, false, true, "", 3.14159, map[string]any{}, []any{}}}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/MapStringAny"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *map[string]any) error {
-				*v = map[string]any{"called": nil}
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{nil, false, true, "", 0.0, map[string]any{"called": nil}, []any{}}}),
-	}, {
-		name: jsontest.Name("Interfaces/Any/UnmarshalFunc/SliceAny"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *[]any) error {
-				*v = []any{"called"}
-				return nil
-			})),
-		},
-		inBuf: `{"X":[null,false,true,"",0,{},[]]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{"called"}}),
-	}, {
-		name:  jsontest.Name("Interfaces/Any/Maps/NonEmpty"),
-		inBuf: `{"X":{"fizz":"buzz"}}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{map[string]any{"fizz": "buzz"}}),
-	}, {
-		name:    jsontest.Name("Interfaces/Any/Maps/RejectDuplicateNames"),
-		inBuf:   `{"X":{"fizz":"buzz","fizz":true}}`,
-		inVal:   new(struct{ X any }),
-		want:    addr(struct{ X any }{map[string]any{"fizz": "buzz"}}),
-		wantErr: newDuplicateNameError("/X", []byte(`"fizz"`), len64(`{"X":{"fizz":"buzz",`)),
-	}, {
-		name:    jsontest.Name("Interfaces/Any/Maps/AllowDuplicateNames"),
-		opts:    []Options{jsontext.AllowDuplicateNames(true)},
-		inBuf:   `{"X":{"fizz":"buzz","fizz":true}}`,
-		inVal:   new(struct{ X any }),
-		want:    addr(struct{ X any }{map[string]any{"fizz": "buzz"}}),
-		wantErr: EU(nil).withPos(`{"X":{"fizz":"buzz","fizz":`, "/X/fizz").withType('t', T[string]()),
-	}, {
-		name:  jsontest.Name("Interfaces/Any/Slices/NonEmpty"),
-		inBuf: `{"X":["fizz","buzz"]}`,
-		inVal: new(struct{ X any }),
-		want:  addr(struct{ X any }{[]any{"fizz", "buzz"}}),
-	}, {
-		name:  jsontest.Name("Methods/NilPointer/Null"),
-		inBuf: `{"X":null}`,
-		inVal: addr(struct{ X *allMethods }{X: (*allMethods)(nil)}),
-		want:  addr(struct{ X *allMethods }{X: (*allMethods)(nil)}), // method should not be called
-	}, {
-		name:  jsontest.Name("Methods/NilPointer/Value"),
-		inBuf: `{"X":"value"}`,
-		inVal: addr(struct{ X *allMethods }{X: (*allMethods)(nil)}),
-		want:  addr(struct{ X *allMethods }{X: &allMethods{method: "UnmarshalJSONFrom", value: []byte(`"value"`)}}),
-	}, {
-		name:  jsontest.Name("Methods/NilInterface/Null"),
-		inBuf: `{"X":null}`,
-		inVal: addr(struct{ X MarshalerTo }{X: (*allMethods)(nil)}),
-		want:  addr(struct{ X MarshalerTo }{X: nil}), // interface value itself is nil'd out
-	}, {
-		name:  jsontest.Name("Methods/NilInterface/Value"),
-		inBuf: `{"X":"value"}`,
-		inVal: addr(struct{ X MarshalerTo }{X: (*allMethods)(nil)}),
-		want:  addr(struct{ X MarshalerTo }{X: &allMethods{method: "UnmarshalJSONFrom", value: []byte(`"value"`)}}),
-	}, {
-		name:  jsontest.Name("Methods/AllMethods"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *allMethods }),
-		want:  addr(struct{ X *allMethods }{X: &allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}}),
-	}, {
-		name:  jsontest.Name("Methods/AllMethodsExceptJSONv2"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *allMethodsExceptJSONv2 }),
-		want:  addr(struct{ X *allMethodsExceptJSONv2 }{X: &allMethodsExceptJSONv2{allMethods: allMethods{method: "UnmarshalJSON", value: []byte(`"hello"`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/AllMethodsExceptJSONv1"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *allMethodsExceptJSONv1 }),
-		want:  addr(struct{ X *allMethodsExceptJSONv1 }{X: &allMethodsExceptJSONv1{allMethods: allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/AllMethodsExceptText"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *allMethodsExceptText }),
-		want:  addr(struct{ X *allMethodsExceptText }{X: &allMethodsExceptText{allMethods: allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/OnlyMethodJSONv2"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *onlyMethodJSONv2 }),
-		want:  addr(struct{ X *onlyMethodJSONv2 }{X: &onlyMethodJSONv2{allMethods: allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/OnlyMethodJSONv1"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *onlyMethodJSONv1 }),
-		want:  addr(struct{ X *onlyMethodJSONv1 }{X: &onlyMethodJSONv1{allMethods: allMethods{method: "UnmarshalJSON", value: []byte(`"hello"`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/OnlyMethodText"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X *onlyMethodText }),
-		want:  addr(struct{ X *onlyMethodText }{X: &onlyMethodText{allMethods: allMethods{method: "UnmarshalText", value: []byte(`hello`)}}}),
-	}, {
-		name:  jsontest.Name("Methods/Text/Null"),
-		inBuf: `{"X":null}`,
-		inVal: addr(struct{ X unmarshalTextFunc }{unmarshalTextFunc(func(b []byte) error {
-			return errMustNotCall
-		})}),
-		want: addr(struct{ X unmarshalTextFunc }{nil}),
-	}, {
-		name:  jsontest.Name("Methods/IP"),
-		inBuf: `"192.168.0.100"`,
-		inVal: new(net.IP),
-		want:  addr(net.IPv4(192, 168, 0, 100)),
-	}, {
-		// NOTE: Fixes https://go.dev/issue/46516.
-		name:  jsontest.Name("Methods/Anonymous"),
-		inBuf: `{"X":"hello"}`,
-		inVal: new(struct{ X struct{ allMethods } }),
-		want:  addr(struct{ X struct{ allMethods } }{X: struct{ allMethods }{allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}}}),
-	}, {
-		// NOTE: Fixes https://go.dev/issue/22967.
-		name:  jsontest.Name("Methods/Addressable"),
-		inBuf: `{"V":"hello","M":{"K":"hello"},"I":"hello"}`,
-		inVal: addr(struct {
-			V allMethods
-			M map[string]allMethods
-			I any
-		}{
-			I: allMethods{}, // need to initialize with concrete value
-		}),
-		want: addr(struct {
-			V allMethods
-			M map[string]allMethods
-			I any
-		}{
-			V: allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)},
-			M: map[string]allMethods{"K": {method: "UnmarshalJSONFrom", value: []byte(`"hello"`)}},
-			I: allMethods{method: "UnmarshalJSONFrom", value: []byte(`"hello"`)},
-		}),
-	}, {
-		// NOTE: Fixes https://go.dev/issue/29732.
-		name:  jsontest.Name("Methods/MapKey/JSONv2"),
-		inBuf: `{"k1":"v1b","k2":"v2"}`,
-		inVal: addr(map[structMethodJSONv2]string{{"k1"}: "v1a", {"k3"}: "v3"}),
-		want:  addr(map[structMethodJSONv2]string{{"k1"}: "v1b", {"k2"}: "v2", {"k3"}: "v3"}),
-	}, {
-		// NOTE: Fixes https://go.dev/issue/29732.
-		name:  jsontest.Name("Methods/MapKey/JSONv1"),
-		inBuf: `{"k1":"v1b","k2":"v2"}`,
-		inVal: addr(map[structMethodJSONv1]string{{"k1"}: "v1a", {"k3"}: "v3"}),
-		want:  addr(map[structMethodJSONv1]string{{"k1"}: "v1b", {"k2"}: "v2", {"k3"}: "v3"}),
-	}, {
-		name:  jsontest.Name("Methods/MapKey/Text"),
-		inBuf: `{"k1":"v1b","k2":"v2"}`,
-		inVal: addr(map[structMethodText]string{{"k1"}: "v1a", {"k3"}: "v3"}),
-		want:  addr(map[structMethodText]string{{"k1"}: "v1b", {"k2"}: "v2", {"k3"}: "v3"}),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/JSONv2/Error"),
-		inBuf: `{}`,
-		inVal: addr(unmarshalJSONv2Func(func(*jsontext.Decoder) error {
-			return errSomeError
-		})),
-		wantErr: EU(errSomeError).withType(0, T[unmarshalJSONv2Func]()),
-	}, {
-		name: jsontest.Name("Methods/Invalid/JSONv2/TooFew"),
-		inVal: addr(unmarshalJSONv2Func(func(*jsontext.Decoder) error {
-			return nil // do nothing
-		})),
-		wantErr: EU(errNonSingularValue).withType(0, T[unmarshalJSONv2Func]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/JSONv2/TooMany"),
-		inBuf: `{}{}`,
-		inVal: addr(unmarshalJSONv2Func(func(dec *jsontext.Decoder) error {
-			dec.ReadValue()
-			dec.ReadValue()
-			return nil
-		})),
-		wantErr: EU(errNonSingularValue).withPos(`{}`, "").withType(0, T[unmarshalJSONv2Func]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/JSONv2/SkipFunc"),
-		inBuf: `{}`,
-		inVal: addr(unmarshalJSONv2Func(func(*jsontext.Decoder) error {
-			return SkipFunc
-		})),
-		wantErr: EU(wrapSkipFunc(SkipFunc, "unmarshal method")).withType(0, T[unmarshalJSONv2Func]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/JSONv1/Error"),
-		inBuf: `{}`,
-		inVal: addr(unmarshalJSONv1Func(func([]byte) error {
-			return errSomeError
-		})),
-		wantErr: EU(errSomeError).withType('{', T[unmarshalJSONv1Func]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/JSONv1/SkipFunc"),
-		inBuf: `{}`,
-		inVal: addr(unmarshalJSONv1Func(func([]byte) error {
-			return SkipFunc
-		})),
-		wantErr: EU(wrapSkipFunc(SkipFunc, "unmarshal method")).withType('{', T[unmarshalJSONv1Func]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/Text/Error"),
-		inBuf: `"value"`,
-		inVal: addr(unmarshalTextFunc(func([]byte) error {
-			return errSomeError
-		})),
-		wantErr: EU(errSomeError).withType('"', T[unmarshalTextFunc]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/Text/Syntax"),
-		inBuf: `{}`,
-		inVal: addr(unmarshalTextFunc(func([]byte) error {
-			panic("should not be called")
-		})),
-		wantErr: EU(errNonStringValue).withType('{', T[unmarshalTextFunc]()),
-	}, {
-		name:  jsontest.Name("Methods/Invalid/Text/SkipFunc"),
-		inBuf: `"value"`,
-		inVal: addr(unmarshalTextFunc(func([]byte) error {
-			return SkipFunc
-		})),
-		wantErr: EU(wrapSkipFunc(SkipFunc, "unmarshal method")).withType('"', T[unmarshalTextFunc]()),
-	}, {
-		name: jsontest.Name("Functions/String/V1"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *string) error {
-				if string(b) != `""` {
-					return fmt.Errorf("got %s, want %s", b, `""`)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name:  jsontest.Name("Functions/String/Empty"),
-		opts:  []Options{WithUnmarshalers(nil)},
-		inBuf: `"hello"`,
-		inVal: addr(""),
-		want:  addr("hello"),
-	}, {
-		name: jsontest.Name("Functions/NamedString/V1/NoMatch"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *namedString) error {
-				panic("should not be called")
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr(""),
-	}, {
-		name: jsontest.Name("Functions/NamedString/V1/Match"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *namedString) error {
-				if string(b) != `""` {
-					return fmt.Errorf("got %s, want %s", b, `""`)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(namedString("")),
-		want:  addr(namedString("called")),
-	}, {
-		name: jsontest.Name("Functions/String/V2"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				switch b, err := dec.ReadValue(); {
-				case err != nil:
-					return err
-				case string(b) != `""`:
-					return fmt.Errorf("got %s, want %s", b, `""`)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name: jsontest.Name("Functions/NamedString/V2/NoMatch"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *namedString) error {
-				panic("should not be called")
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr(""),
-	}, {
-		name: jsontest.Name("Functions/NamedString/V2/Match"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *namedString) error {
-				switch t, err := dec.ReadToken(); {
-				case err != nil:
-					return err
-				case t.String() != ``:
-					return fmt.Errorf("got %q, want %q", t, ``)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(namedString("")),
-		want:  addr(namedString("called")),
-	}, {
-		name: jsontest.Name("Functions/String/Empty1/NoMatch"),
-		opts: []Options{
-			WithUnmarshalers(new(Unmarshalers)),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr(""),
-	}, {
-		name: jsontest.Name("Functions/String/Empty2/NoMatch"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers()),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr(""),
-	}, {
-		name: jsontest.Name("Functions/String/V1/DirectError"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func([]byte, *string) error {
-				return errSomeError
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(errSomeError).withType('"', reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V1/SkipError"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func([]byte, *string) error {
-				return SkipFunc
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(wrapSkipFunc(SkipFunc, "unmarshal function of type func([]byte, T) error")).withType('"', reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V2/DirectError"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				return errSomeError
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(errSomeError).withType(0, reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V2/TooFew"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				return nil
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(errNonSingularValue).withType(0, reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V2/TooMany"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				if _, err := dec.ReadValue(); err != nil {
-					return err
-				}
-				if _, err := dec.ReadValue(); err != nil {
-					return err
-				}
-				return nil
-			})),
-		},
-		inBuf:   `{"X":["",""]}`,
-		inVal:   addr(struct{ X []string }{}),
-		want:    addr(struct{ X []string }{[]string{""}}),
-		wantErr: EU(errNonSingularValue).withPos(`{"X":["",`, "/X").withType(0, reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V2/Skipped"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				return SkipFunc
-			})),
-		},
-		inBuf: `""`,
-		inVal: addr(""),
-		want:  addr(""),
-	}, {
-		name: jsontest.Name("Functions/String/V2/ProcessBeforeSkip"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				if _, err := dec.ReadValue(); err != nil {
-					return err
-				}
-				return SkipFunc
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(errSkipMutation).withType(0, reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/String/V2/WrappedSkipError"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				return fmt.Errorf("wrap: %w", SkipFunc)
-			})),
-		},
-		inBuf:   `""`,
-		inVal:   addr(""),
-		want:    addr(""),
-		wantErr: EU(fmt.Errorf("wrap: %w", SkipFunc)).withType(0, reflect.PointerTo(stringType)),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V1"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *nocaseString) error {
-				if string(b) != `"hello"` {
-					return fmt.Errorf("got %s, want %s", b, `"hello"`)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[nocaseString]string{}),
-		want:  addr(map[nocaseString]string{"called": "world"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/TextMarshaler/V1"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v encoding.TextMarshaler) error {
-				if string(b) != `"hello"` {
-					return fmt.Errorf("got %s, want %s", b, `"hello"`)
-				}
-				*v.(*nocaseString) = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[nocaseString]string{}),
-		want:  addr(map[nocaseString]string{"called": "world"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/NoCaseString/V2"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *nocaseString) error {
-				switch t, err := dec.ReadToken(); {
-				case err != nil:
-					return err
-				case t.String() != "hello":
-					return fmt.Errorf("got %q, want %q", t, "hello")
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[nocaseString]string{}),
-		want:  addr(map[nocaseString]string{"called": "world"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/TextMarshaler/V2"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v encoding.TextMarshaler) error {
-				switch b, err := dec.ReadValue(); {
-				case err != nil:
-					return err
-				case string(b) != `"hello"`:
-					return fmt.Errorf("got %s, want %s", b, `"hello"`)
-				}
-				*v.(*nocaseString) = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[nocaseString]string{}),
-		want:  addr(map[nocaseString]string{"called": "world"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Key/String/V1/DuplicateName"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				if _, err := dec.ReadValue(); err != nil {
-					return err
-				}
-				xd := export.Decoder(dec)
-				*v = fmt.Sprintf("%d-%d", len(xd.Tokens.Stack), xd.Tokens.Last.Length())
-				return nil
-			})),
-		},
-		inBuf:   `{"name":"value","name":"value"}`,
-		inVal:   addr(map[string]string{}),
-		want:    addr(map[string]string{"1-1": "1-2"}),
-		wantErr: newDuplicateNameError("", []byte(`"name"`), len64(`{"name":"value",`)),
-	}, {
-		name: jsontest.Name("Functions/Map/Value/NoCaseString/V1"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *nocaseString) error {
-				if string(b) != `"world"` {
-					return fmt.Errorf("got %s, want %s", b, `"world"`)
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[string]nocaseString{}),
-		want:  addr(map[string]nocaseString{"hello": "called"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Value/TextMarshaler/V1"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v encoding.TextMarshaler) error {
-				if string(b) != `"world"` {
-					return fmt.Errorf("got %s, want %s", b, `"world"`)
-				}
-				*v.(*nocaseString) = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[string]nocaseString{}),
-		want:  addr(map[string]nocaseString{"hello": "called"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Value/NoCaseString/V2"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *nocaseString) error {
-				switch t, err := dec.ReadToken(); {
-				case err != nil:
-					return err
-				case t.String() != "world":
-					return fmt.Errorf("got %q, want %q", t, "world")
-				}
-				*v = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[string]nocaseString{}),
-		want:  addr(map[string]nocaseString{"hello": "called"}),
-	}, {
-		name: jsontest.Name("Functions/Map/Value/TextMarshaler/V2"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v encoding.TextMarshaler) error {
-				switch b, err := dec.ReadValue(); {
-				case err != nil:
-					return err
-				case string(b) != `"world"`:
-					return fmt.Errorf("got %s, want %s", b, `"world"`)
-				}
-				*v.(*nocaseString) = "called"
-				return nil
-			})),
-		},
-		inBuf: `{"hello":"world"}`,
-		inVal: addr(map[string]nocaseString{}),
-		want:  addr(map[string]nocaseString{"hello": "called"}),
-	}, {
-		name: jsontest.Name("Funtions/Struct/Fields"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFunc(func(b []byte, v *bool) error {
-					if string(b) != `"called1"` {
-						return fmt.Errorf("got %s, want %s", b, `"called1"`)
-					}
-					*v = true
-					return nil
-				}),
-				UnmarshalFunc(func(b []byte, v *string) error {
-					if string(b) != `"called2"` {
-						return fmt.Errorf("got %s, want %s", b, `"called2"`)
-					}
-					*v = "called2"
-					return nil
-				}),
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *[]byte) error {
-					switch t, err := dec.ReadToken(); {
-					case err != nil:
-						return err
-					case t.String() != "called3":
-						return fmt.Errorf("got %q, want %q", t, "called3")
-					}
-					*v = []byte("called3")
-					return nil
-				}),
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *int64) error {
-					switch b, err := dec.ReadValue(); {
-					case err != nil:
-						return err
-					case string(b) != `"called4"`:
-						return fmt.Errorf("got %s, want %s", b, `"called4"`)
-					}
-					*v = 123
-					return nil
-				}),
-			)),
-		},
-		inBuf: `{"Bool":"called1","String":"called2","Bytes":"called3","Int":"called4","Uint":456,"Float":789}`,
-		inVal: addr(structScalars{}),
-		want:  addr(structScalars{Bool: true, String: "called2", Bytes: []byte("called3"), Int: 123, Uint: 456, Float: 789}),
-	}, {
-		name: jsontest.Name("Functions/Struct/Inlined"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFunc(func([]byte, *structInlinedL1) error {
-					panic("should not be called")
-				}),
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *StructEmbed2) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		inBuf: `{"E":"E3","F":"F3","G":"G3","A":"A1","B":"B1","D":"D2"}`,
-		inVal: new(structInlined),
-		want: addr(structInlined{
-			X: structInlinedL1{
-				X:            &structInlinedL2{A: "A1", B: "B1" /* C: "C1" */},
-				StructEmbed1: StructEmbed1{ /* C: "C2" */ D: "D2" /* E: "E2" */},
-			},
-			StructEmbed2: &StructEmbed2{E: "E3", F: "F3", G: "G3"},
-		}),
-	}, {
-		name: jsontest.Name("Functions/Slice/Elem"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *string) error {
-				*v = strings.Trim(strings.ToUpper(string(b)), `"`)
-				return nil
-			})),
-		},
-		inBuf: `["hello","World"]`,
-		inVal: addr([]string{}),
-		want:  addr([]string{"HELLO", "WORLD"}),
-	}, {
-		name: jsontest.Name("Functions/Array/Elem"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFunc(func(b []byte, v *string) error {
-				*v = strings.Trim(strings.ToUpper(string(b)), `"`)
-				return nil
-			})),
-		},
-		inBuf: `["hello","World"]`,
-		inVal: addr([2]string{}),
-		want:  addr([2]string{"HELLO", "WORLD"}),
-	}, {
-		name: jsontest.Name("Functions/Pointer/Nil"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				t, err := dec.ReadToken()
-				*v = strings.ToUpper(t.String())
-				return err
-			})),
-		},
-		inBuf: `{"X":"hello"}`,
-		inVal: addr(struct{ X *string }{nil}),
-		want:  addr(struct{ X *string }{addr("HELLO")}),
-	}, {
-		name: jsontest.Name("Functions/Pointer/NonNil"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-				t, err := dec.ReadToken()
-				*v = strings.ToUpper(t.String())
-				return err
-			})),
-		},
-		inBuf: `{"X":"hello"}`,
-		inVal: addr(struct{ X *string }{addr("")}),
-		want:  addr(struct{ X *string }{addr("HELLO")}),
-	}, {
-		name: jsontest.Name("Functions/Interface/Nil"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v fmt.Stringer) error {
-				panic("should not be called")
-			})),
-		},
-		inBuf:   `{"X":"hello"}`,
-		inVal:   addr(struct{ X fmt.Stringer }{nil}),
-		want:    addr(struct{ X fmt.Stringer }{nil}),
-		wantErr: EU(errNilInterface).withPos(`{"X":`, "/X").withType(0, T[fmt.Stringer]()),
-	}, {
-		name: jsontest.Name("Functions/Interface/NetIP"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *fmt.Stringer) error {
-				*v = net.IP{}
-				return SkipFunc
-			})),
-		},
-		inBuf: `{"X":"1.1.1.1"}`,
-		inVal: addr(struct{ X fmt.Stringer }{nil}),
-		want:  addr(struct{ X fmt.Stringer }{net.IPv4(1, 1, 1, 1)}),
-	}, {
-		name: jsontest.Name("Functions/Interface/NewPointerNetIP"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *fmt.Stringer) error {
-				*v = new(net.IP)
-				return SkipFunc
-			})),
-		},
-		inBuf: `{"X":"1.1.1.1"}`,
-		inVal: addr(struct{ X fmt.Stringer }{nil}),
-		want:  addr(struct{ X fmt.Stringer }{addr(net.IPv4(1, 1, 1, 1))}),
-	}, {
-		name: jsontest.Name("Functions/Interface/NilPointerNetIP"),
-		opts: []Options{
-			WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, v *fmt.Stringer) error {
-				*v = (*net.IP)(nil)
-				return SkipFunc
-			})),
-		},
-		inBuf: `{"X":"1.1.1.1"}`,
-		inVal: addr(struct{ X fmt.Stringer }{nil}),
-		want:  addr(struct{ X fmt.Stringer }{addr(net.IPv4(1, 1, 1, 1))}),
-	}, {
-		name: jsontest.Name("Functions/Interface/NilPointerNetIP/Override"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *fmt.Stringer) error {
-					*v = (*net.IP)(nil)
-					return SkipFunc
-				}),
-				UnmarshalFunc(func(b []byte, v *net.IP) error {
-					b = bytes.ReplaceAll(b, []byte(`1`), []byte(`8`))
-					return v.UnmarshalText(bytes.Trim(b, `"`))
-				}),
-			)),
-		},
-		inBuf: `{"X":"1.1.1.1"}`,
-		inVal: addr(struct{ X fmt.Stringer }{nil}),
-		want:  addr(struct{ X fmt.Stringer }{addr(net.IPv4(8, 8, 8, 8))}),
-	}, {
-		name:  jsontest.Name("Functions/Interface/Any"),
-		inBuf: `[null,{},{},{},{},{},{},{},{},{},{},{},{},"LAST"]`,
-		inVal: addr([...]any{
-			nil,                           // nil
-			valueStringer{},               // T
-			(*valueStringer)(nil),         // *T
-			addr(valueStringer{}),         // *T
-			(**valueStringer)(nil),        // **T
-			addr((*valueStringer)(nil)),   // **T
-			addr(addr(valueStringer{})),   // **T
-			pointerStringer{},             // T
-			(*pointerStringer)(nil),       // *T
-			addr(pointerStringer{}),       // *T
-			(**pointerStringer)(nil),      // **T
-			addr((*pointerStringer)(nil)), // **T
-			addr(addr(pointerStringer{})), // **T
-			"LAST",
-		}),
-		opts: []Options{
-			WithUnmarshalers(func() *Unmarshalers {
-				type P struct {
-					D int
-					N int64
-				}
-				type PV struct {
-					P P
-					V any
-				}
-
-				var lastChecks []func() error
-				checkLast := func() error {
-					for _, fn := range lastChecks {
-						if err := fn(); err != nil {
-							return err
-						}
-					}
-					return SkipFunc
-				}
-				makeValueChecker := func(name string, want []PV) func(d *jsontext.Decoder, v any) error {
-					checkNext := func(d *jsontext.Decoder, v any) error {
-						xd := export.Decoder(d)
-						p := P{len(xd.Tokens.Stack), xd.Tokens.Last.Length()}
-						rv := reflect.ValueOf(v)
-						pv := PV{p, v}
-						switch {
-						case len(want) == 0:
-							return fmt.Errorf("%s: %v: got more values than expected", name, p)
-						case !rv.IsValid() || rv.Kind() != reflect.Pointer || rv.IsNil():
-							return fmt.Errorf("%s: %v: got %#v, want non-nil pointer type", name, p, v)
-						case !reflect.DeepEqual(pv, want[0]):
-							return fmt.Errorf("%s:\n\tgot  %#v\n\twant %#v", name, pv, want[0])
-						default:
-							want = want[1:]
-							return SkipFunc
-						}
-					}
-					lastChecks = append(lastChecks, func() error {
-						if len(want) > 0 {
-							return fmt.Errorf("%s: did not get enough values, want %d more", name, len(want))
-						}
-						return nil
-					})
-					return checkNext
-				}
-				makePositionChecker := func(name string, want []P) func(d *jsontext.Decoder, v any) error {
-					checkNext := func(d *jsontext.Decoder, v any) error {
-						xd := export.Decoder(d)
-						p := P{len(xd.Tokens.Stack), xd.Tokens.Last.Length()}
-						switch {
-						case len(want) == 0:
-							return fmt.Errorf("%s: %v: got more values than wanted", name, p)
-						case p != want[0]:
-							return fmt.Errorf("%s: got %v, want %v", name, p, want[0])
-						default:
-							want = want[1:]
-							return SkipFunc
-						}
-					}
-					lastChecks = append(lastChecks, func() error {
-						if len(want) > 0 {
-							return fmt.Errorf("%s: did not get enough values, want %d more", name, len(want))
-						}
-						return nil
-					})
-					return checkNext
-				}
-
-				// In contrast to marshal, unmarshal automatically allocates for
-				// nil pointers, which causes unmarshal to visit more values.
-				wantAny := []PV{
-					{P{1, 0}, addr(any(nil))},
-					{P{1, 1}, addr(any(valueStringer{}))},
-					{P{1, 1}, addr(valueStringer{})},
-					{P{1, 2}, addr(any((*valueStringer)(nil)))},
-					{P{1, 2}, addr((*valueStringer)(nil))},
-					{P{1, 2}, addr(valueStringer{})},
-					{P{1, 3}, addr(any(addr(valueStringer{})))},
-					{P{1, 3}, addr(addr(valueStringer{}))},
-					{P{1, 3}, addr(valueStringer{})},
-					{P{1, 4}, addr(any((**valueStringer)(nil)))},
-					{P{1, 4}, addr((**valueStringer)(nil))},
-					{P{1, 4}, addr((*valueStringer)(nil))},
-					{P{1, 4}, addr(valueStringer{})},
-					{P{1, 5}, addr(any(addr((*valueStringer)(nil))))},
-					{P{1, 5}, addr(addr((*valueStringer)(nil)))},
-					{P{1, 5}, addr((*valueStringer)(nil))},
-					{P{1, 5}, addr(valueStringer{})},
-					{P{1, 6}, addr(any(addr(addr(valueStringer{}))))},
-					{P{1, 6}, addr(addr(addr(valueStringer{})))},
-					{P{1, 6}, addr(addr(valueStringer{}))},
-					{P{1, 6}, addr(valueStringer{})},
-					{P{1, 7}, addr(any(pointerStringer{}))},
-					{P{1, 7}, addr(pointerStringer{})},
-					{P{1, 8}, addr(any((*pointerStringer)(nil)))},
-					{P{1, 8}, addr((*pointerStringer)(nil))},
-					{P{1, 8}, addr(pointerStringer{})},
-					{P{1, 9}, addr(any(addr(pointerStringer{})))},
-					{P{1, 9}, addr(addr(pointerStringer{}))},
-					{P{1, 9}, addr(pointerStringer{})},
-					{P{1, 10}, addr(any((**pointerStringer)(nil)))},
-					{P{1, 10}, addr((**pointerStringer)(nil))},
-					{P{1, 10}, addr((*pointerStringer)(nil))},
-					{P{1, 10}, addr(pointerStringer{})},
-					{P{1, 11}, addr(any(addr((*pointerStringer)(nil))))},
-					{P{1, 11}, addr(addr((*pointerStringer)(nil)))},
-					{P{1, 11}, addr((*pointerStringer)(nil))},
-					{P{1, 11}, addr(pointerStringer{})},
-					{P{1, 12}, addr(any(addr(addr(pointerStringer{}))))},
-					{P{1, 12}, addr(addr(addr(pointerStringer{})))},
-					{P{1, 12}, addr(addr(pointerStringer{}))},
-					{P{1, 12}, addr(pointerStringer{})},
-					{P{1, 13}, addr(any("LAST"))},
-					{P{1, 13}, addr("LAST")},
-				}
-				checkAny := makeValueChecker("any", wantAny)
-				anyUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v any) error {
-					return checkAny(dec, v)
-				})
-
-				var wantPointerAny []PV
-				for _, v := range wantAny {
-					if _, ok := v.V.(*any); ok {
-						wantPointerAny = append(wantPointerAny, v)
-					}
-				}
-				checkPointerAny := makeValueChecker("*any", wantPointerAny)
-				pointerAnyUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *any) error {
-					return checkPointerAny(dec, v)
-				})
-
-				checkNamedAny := makeValueChecker("namedAny", wantAny)
-				namedAnyUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v namedAny) error {
-					return checkNamedAny(dec, v)
-				})
-
-				checkPointerNamedAny := makeValueChecker("*namedAny", nil)
-				pointerNamedAnyUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *namedAny) error {
-					return checkPointerNamedAny(dec, v)
-				})
-
-				type stringer = fmt.Stringer
-				var wantStringer []PV
-				for _, v := range wantAny {
-					if _, ok := v.V.(stringer); ok {
-						wantStringer = append(wantStringer, v)
-					}
-				}
-				checkStringer := makeValueChecker("stringer", wantStringer)
-				stringerUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v stringer) error {
-					return checkStringer(dec, v)
-				})
-
-				checkPointerStringer := makeValueChecker("*stringer", nil)
-				pointerStringerUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *stringer) error {
-					return checkPointerStringer(dec, v)
-				})
-
-				wantValueStringer := []P{{1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {1, 6}}
-				checkPointerValueStringer := makePositionChecker("*valueStringer", wantValueStringer)
-				pointerValueStringerUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *valueStringer) error {
-					return checkPointerValueStringer(dec, v)
-				})
-
-				wantPointerStringer := []P{{1, 7}, {1, 8}, {1, 9}, {1, 10}, {1, 11}, {1, 12}}
-				checkPointerPointerStringer := makePositionChecker("*pointerStringer", wantPointerStringer)
-				pointerPointerStringerUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *pointerStringer) error {
-					return checkPointerPointerStringer(dec, v)
-				})
-
-				lastUnmarshaler := UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-					return checkLast()
-				})
-
-				return JoinUnmarshalers(
-					// This is just like unmarshaling into a Go array,
-					// but avoids zeroing the element before calling unmarshal.
-					UnmarshalFromFunc(func(dec *jsontext.Decoder, v *[14]any) error {
-						if _, err := dec.ReadToken(); err != nil {
-							return err
-						}
-						for i := range len(*v) {
-							if err := UnmarshalDecode(dec, &(*v)[i]); err != nil {
-								return err
-							}
-						}
-						if _, err := dec.ReadToken(); err != nil {
-							return err
-						}
-						return nil
-					}),
-
-					anyUnmarshaler,
-					pointerAnyUnmarshaler,
-					namedAnyUnmarshaler,
-					pointerNamedAnyUnmarshaler, // never called
-					stringerUnmarshaler,
-					pointerStringerUnmarshaler, // never called
-					pointerValueStringerUnmarshaler,
-					pointerPointerStringerUnmarshaler,
-					lastUnmarshaler,
-				)
-			}()),
-		},
-	}, {
-		name: jsontest.Name("Functions/Precedence/V1First"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFunc(func(b []byte, v *string) error {
-					if string(b) != `"called"` {
-						return fmt.Errorf("got %s, want %s", b, `"called"`)
-					}
-					*v = "called"
-					return nil
-				}),
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		inBuf: `"called"`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name: jsontest.Name("Functions/Precedence/V2First"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-					switch t, err := dec.ReadToken(); {
-					case err != nil:
-						return err
-					case t.String() != "called":
-						return fmt.Errorf("got %q, want %q", t, "called")
-					}
-					*v = "called"
-					return nil
-				}),
-				UnmarshalFunc(func([]byte, *string) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		inBuf: `"called"`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name: jsontest.Name("Functions/Precedence/V2Skipped"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFromFunc(func(dec *jsontext.Decoder, v *string) error {
-					return SkipFunc
-				}),
-				UnmarshalFunc(func(b []byte, v *string) error {
-					if string(b) != `"called"` {
-						return fmt.Errorf("got %s, want %s", b, `"called"`)
-					}
-					*v = "called"
-					return nil
-				}),
-			)),
-		},
-		inBuf: `"called"`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name: jsontest.Name("Functions/Precedence/NestedFirst"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				JoinUnmarshalers(
-					UnmarshalFunc(func(b []byte, v *string) error {
-						if string(b) != `"called"` {
-							return fmt.Errorf("got %s, want %s", b, `"called"`)
-						}
-						*v = "called"
-						return nil
-					}),
-				),
-				UnmarshalFunc(func([]byte, *string) error {
-					panic("should not be called")
-				}),
-			)),
-		},
-		inBuf: `"called"`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name: jsontest.Name("Functions/Precedence/NestedLast"),
-		opts: []Options{
-			WithUnmarshalers(JoinUnmarshalers(
-				UnmarshalFunc(func(b []byte, v *string) error {
-					if string(b) != `"called"` {
-						return fmt.Errorf("got %s, want %s", b, `"called"`)
-					}
-					*v = "called"
-					return nil
-				}),
-				JoinUnmarshalers(
-					UnmarshalFunc(func([]byte, *string) error {
-						panic("should not be called")
-					}),
-				),
-			)),
-		},
-		inBuf: `"called"`,
-		inVal: addr(""),
-		want:  addr("called"),
-	}, {
-		name:  jsontest.Name("Duration/Null"),
-		inBuf: `{"D1":null,"D2":null}`,
-		inVal: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{1, 1}),
-		want: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{0, 0}),
-	}, {
-		name:  jsontest.Name("Duration/Zero"),
-		inBuf: `{"D1":"0s","D2":0}`,
-		inVal: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{1, 1}),
-		want: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{0, 0}),
-	}, {
-		name:  jsontest.Name("Duration/Positive"),
-		inBuf: `{"D1":"34293h33m9.123456789s","D2":123456789123456789}`,
-		inVal: new(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}),
-		want: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{
-			123456789123456789,
-			123456789123456789,
-		}),
-	}, {
-		name:  jsontest.Name("Duration/Negative"),
-		inBuf: `{"D1":"-34293h33m9.123456789s","D2":-123456789123456789}`,
-		inVal: new(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}),
-		want: addr(struct {
-			D1 time.Duration
-			D2 time.Duration `json:",format:nano"`
-		}{
-			-123456789123456789,
-			-123456789123456789,
-		}),
-	}, {
-		name:  jsontest.Name("Duration/Nanos/String"),
-		inBuf: `{"D":"12345"}`,
-		inVal: addr(struct {
-			D time.Duration `json:",string,format:nano"`
-		}{1}),
-		want: addr(struct {
-			D time.Duration `json:",string,format:nano"`
-		}{12345}),
-	}, {
-		name:  jsontest.Name("Duration/Nanos/String/Invalid"),
-		inBuf: `{"D":"+12345"}`,
-		inVal: addr(struct {
-			D time.Duration `json:",string,format:nano"`
-		}{1}),
-		want: addr(struct {
-			D time.Duration `json:",string,format:nano"`
-		}{1}),
-		wantErr: EU(fmt.Errorf(`invalid duration "+12345": %w`, strconv.ErrSyntax)).withPos(`{"D":`, "/D").withType('"', timeDurationType),
-	}, {
-		name:  jsontest.Name("Duration/Nanos/Mismatch"),
-		inBuf: `{"D":"34293h33m9.123456789s"}`,
-		inVal: addr(struct {
-			D time.Duration `json:",format:nano"`
-		}{1}),
-		want: addr(struct {
-			D time.Duration `json:",format:nano"`
-		}{1}),
-		wantErr: EU(nil).withPos(`{"D":`, "/D").withType('"', timeDurationType),
-	}, {
-		name:  jsontest.Name("Duration/Nanos"),
-		inBuf: `{"D":1.324}`,
-		inVal: addr(struct {
-			D time.Duration `json:",format:nano"`
-		}{-1}),
-		want: addr(struct {
-			D time.Duration `json:",format:nano"`
-		}{1}),
-	}, {
-		name:  jsontest.Name("Duration/String/Mismatch"),
-		inBuf: `{"D":-123456789123456789}`,
-		inVal: addr(struct {
-			D time.Duration
-		}{1}),
-		want: addr(struct {
-			D time.Duration
-		}{1}),
-		wantErr: EU(nil).withPos(`{"D":`, "/D").withType('0', timeDurationType),
-	}, {
-		name:  jsontest.Name("Duration/String/Invalid"),
-		inBuf: `{"D":"5minkutes"}`,
-		inVal: addr(struct {
-			D time.Duration
-		}{1}),
-		want: addr(struct {
-			D time.Duration
-		}{1}),
-		wantErr: EU(func() error {
-			_, err := time.ParseDuration("5minkutes")
-			return err
-		}()).withPos(`{"D":`, "/D").withType('"', timeDurationType),
-	}, {
-		name:  jsontest.Name("Duration/Syntax/Invalid"),
-		inBuf: `{"D":x}`,
-		inVal: addr(struct {
-			D time.Duration
-		}{1}),
-		want: addr(struct {
-			D time.Duration
-		}{1}),
-		wantErr: newInvalidCharacterError("x", "at start of value", len64(`{"D":`), "/D"),
-	}, {
-		name:  jsontest.Name("Duration/Format/Invalid"),
-		inBuf: `{"D":"0s"}`,
-		inVal: addr(struct {
-			D time.Duration `json:",format:invalid"`
-		}{1}),
-		want: addr(struct {
-			D time.Duration `json:",format:invalid"`
-		}{1}),
-		wantErr: EU(errInvalidFormatFlag).withPos(`{"D":`, "/D").withType(0, timeDurationType),
-	}, {
-		name:  jsontest.Name("Duration/Format/Legacy"),
-		inBuf: `{"D1":45296078090012,"D2":"12h34m56.078090012s"}`,
-		opts:  []Options{jsonflags.FormatTimeWithLegacySemantics | 1},
-		inVal: new(structDurationFormat),
-		want: addr(structDurationFormat{
-			D1: 12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-			D2: 12*time.Hour + 34*time.Minute + 56*time.Second + 78*time.Millisecond + 90*time.Microsecond + 12*time.Nanosecond,
-		}),
-	}, {
-		name:  jsontest.Name("Duration/MapKey"),
-		inBuf: `{"1s":""}`,
-		inVal: new(map[time.Duration]string),
-		want:  addr(map[time.Duration]string{time.Second: ""}),
-	}, {
-		name:  jsontest.Name("Duration/MapKey/Legacy"),
-		opts:  []Options{jsonflags.FormatTimeWithLegacySemantics | 1},
-		inBuf: `{"1000000000":""}`,
-		inVal: new(map[time.Duration]string),
-		want:  addr(map[time.Duration]string{time.Second: ""}),
-	}, {
-		name:  jsontest.Name("Duration/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `"1s"`,
-		inVal: addr(time.Duration(0)),
-		want:  addr(time.Second),
-	}, {
-		name:  jsontest.Name("Time/Zero"),
-		inBuf: `{"T1":"0001-01-01T00:00:00Z","T2":"01 Jan 01 00:00 UTC","T3":"0001-01-01","T4":"0001-01-01T00:00:00Z","T5":"0001-01-01T00:00:00Z"}`,
-		inVal: new(struct {
-			T1 time.Time
-			T2 time.Time `json:",format:RFC822"`
-			T3 time.Time `json:",format:'2006-01-02'"`
-			T4 time.Time `json:",omitzero"`
-			T5 time.Time `json:",omitempty"`
-		}),
-		want: addr(struct {
-			T1 time.Time
-			T2 time.Time `json:",format:RFC822"`
-			T3 time.Time `json:",format:'2006-01-02'"`
-			T4 time.Time `json:",omitzero"`
-			T5 time.Time `json:",omitempty"`
-		}{
-			mustParseTime(time.RFC3339Nano, "0001-01-01T00:00:00Z"),
-			mustParseTime(time.RFC822, "01 Jan 01 00:00 UTC"),
-			mustParseTime("2006-01-02", "0001-01-01"),
-			mustParseTime(time.RFC3339Nano, "0001-01-01T00:00:00Z"),
-			mustParseTime(time.RFC3339Nano, "0001-01-01T00:00:00Z"),
-		}),
-	}, {
-		name: jsontest.Name("Time/Format"),
-		inBuf: `{
-			"T1": "1234-01-02T03:04:05.000000006Z",
-			"T2": "Mon Jan  2 03:04:05 1234",
-			"T3": "Mon Jan  2 03:04:05 UTC 1234",
-			"T4": "Mon Jan 02 03:04:05 +0000 1234",
-			"T5": "02 Jan 34 03:04 UTC",
-			"T6": "02 Jan 34 03:04 +0000",
-			"T7": "Monday, 02-Jan-34 03:04:05 UTC",
-			"T8": "Mon, 02 Jan 1234 03:04:05 UTC",
-			"T9": "Mon, 02 Jan 1234 03:04:05 +0000",
-			"T10": "1234-01-02T03:04:05Z",
-			"T11": "1234-01-02T03:04:05.000000006Z",
-			"T12": "3:04AM",
-			"T13": "Jan  2 03:04:05",
-			"T14": "Jan  2 03:04:05.000",
-			"T15": "Jan  2 03:04:05.000000",
-			"T16": "Jan  2 03:04:05.000000006",
-			"T17": "1234-01-02 03:04:05",
-			"T18": "1234-01-02",
-			"T19": "03:04:05",
-			"T20": "1234-01-02",
-			"T21": "\"weird\"1234",
-			"T22": -23225777754.999999994,
-			"T23": "-23225777754.999999994",
-			"T24": -23225777754999.999994,
-			"T25": "-23225777754999.999994",
-			"T26": -23225777754999999.994,
-			"T27": "-23225777754999999.994",
-			"T28": -23225777754999999994,
-			"T29": "-23225777754999999994"
-		}`,
-		inVal: new(structTimeFormat),
-		want: addr(structTimeFormat{
-			mustParseTime(time.RFC3339Nano, "1234-01-02T03:04:05.000000006Z"),
-			mustParseTime(time.ANSIC, "Mon Jan  2 03:04:05 1234"),
-			mustParseTime(time.UnixDate, "Mon Jan  2 03:04:05 UTC 1234"),
-			mustParseTime(time.RubyDate, "Mon Jan 02 03:04:05 +0000 1234"),
-			mustParseTime(time.RFC822, "02 Jan 34 03:04 UTC"),
-			mustParseTime(time.RFC822Z, "02 Jan 34 03:04 +0000"),
-			mustParseTime(time.RFC850, "Monday, 02-Jan-34 03:04:05 UTC"),
-			mustParseTime(time.RFC1123, "Mon, 02 Jan 1234 03:04:05 UTC"),
-			mustParseTime(time.RFC1123Z, "Mon, 02 Jan 1234 03:04:05 +0000"),
-			mustParseTime(time.RFC3339, "1234-01-02T03:04:05Z"),
-			mustParseTime(time.RFC3339Nano, "1234-01-02T03:04:05.000000006Z"),
-			mustParseTime(time.Kitchen, "3:04AM"),
-			mustParseTime(time.Stamp, "Jan  2 03:04:05"),
-			mustParseTime(time.StampMilli, "Jan  2 03:04:05.000"),
-			mustParseTime(time.StampMicro, "Jan  2 03:04:05.000000"),
-			mustParseTime(time.StampNano, "Jan  2 03:04:05.000000006"),
-			mustParseTime(time.DateTime, "1234-01-02 03:04:05"),
-			mustParseTime(time.DateOnly, "1234-01-02"),
-			mustParseTime(time.TimeOnly, "03:04:05"),
-			mustParseTime("2006-01-02", "1234-01-02"),
-			mustParseTime(`\"weird\"2006`, `\"weird\"1234`),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-		}),
-	}, {
-		name: jsontest.Name("Time/Format/UnixString/InvalidNumber"),
-		inBuf: `{
-			"T23": -23225777754.999999994,
-			"T25": -23225777754999.999994,
-			"T27": -23225777754999999.994,
-			"T29": -23225777754999999994
-		}`,
-		inVal:   new(structTimeFormat),
-		want:    new(structTimeFormat),
-		wantErr: EU(nil).withPos(`{`+"\n\t\t\t"+`"T23": `, "/T23").withType('0', timeTimeType),
-	}, {
-		name: jsontest.Name("Time/Format/UnixString/InvalidString"),
-		inBuf: `{
-			"T22": "-23225777754.999999994",
-			"T24": "-23225777754999.999994",
-			"T26": "-23225777754999999.994",
-			"T28": "-23225777754999999994"
-		}`,
-		inVal:   new(structTimeFormat),
-		want:    new(structTimeFormat),
-		wantErr: EU(nil).withPos(`{`+"\n\t\t\t"+`"T22": `, "/T22").withType('"', timeTimeType),
-	}, {
-		name:  jsontest.Name("Time/Format/Null"),
-		inBuf: `{"T1":null,"T2":null,"T3":null,"T4":null,"T5":null,"T6":null,"T7":null,"T8":null,"T9":null,"T10":null,"T11":null,"T12":null,"T13":null,"T14":null,"T15":null,"T16":null,"T17":null,"T18":null,"T19":null,"T20":null,"T21":null,"T22":null,"T23":null,"T24":null,"T25":null,"T26":null,"T27":null,"T28":null,"T29":null}`,
-		inVal: addr(structTimeFormat{
-			mustParseTime(time.RFC3339Nano, "1234-01-02T03:04:05.000000006Z"),
-			mustParseTime(time.ANSIC, "Mon Jan  2 03:04:05 1234"),
-			mustParseTime(time.UnixDate, "Mon Jan  2 03:04:05 UTC 1234"),
-			mustParseTime(time.RubyDate, "Mon Jan 02 03:04:05 +0000 1234"),
-			mustParseTime(time.RFC822, "02 Jan 34 03:04 UTC"),
-			mustParseTime(time.RFC822Z, "02 Jan 34 03:04 +0000"),
-			mustParseTime(time.RFC850, "Monday, 02-Jan-34 03:04:05 UTC"),
-			mustParseTime(time.RFC1123, "Mon, 02 Jan 1234 03:04:05 UTC"),
-			mustParseTime(time.RFC1123Z, "Mon, 02 Jan 1234 03:04:05 +0000"),
-			mustParseTime(time.RFC3339, "1234-01-02T03:04:05Z"),
-			mustParseTime(time.RFC3339Nano, "1234-01-02T03:04:05.000000006Z"),
-			mustParseTime(time.Kitchen, "3:04AM"),
-			mustParseTime(time.Stamp, "Jan  2 03:04:05"),
-			mustParseTime(time.StampMilli, "Jan  2 03:04:05.000"),
-			mustParseTime(time.StampMicro, "Jan  2 03:04:05.000000"),
-			mustParseTime(time.StampNano, "Jan  2 03:04:05.000000006"),
-			mustParseTime(time.DateTime, "1234-01-02 03:04:05"),
-			mustParseTime(time.DateOnly, "1234-01-02"),
-			mustParseTime(time.TimeOnly, "03:04:05"),
-			mustParseTime("2006-01-02", "1234-01-02"),
-			mustParseTime(`\"weird\"2006`, `\"weird\"1234`),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-			time.Unix(-23225777755, 6).UTC(),
-		}),
-		want: new(structTimeFormat),
-	}, {
-		name:  jsontest.Name("Time/RFC3339/Mismatch"),
-		inBuf: `{"T":1234}`,
-		inVal: new(struct {
-			T time.Time
-		}),
-		wantErr: EU(nil).withPos(`{"T":`, "/T").withType('0', timeTimeType),
-	}, {
-		name:  jsontest.Name("Time/RFC3339/ParseError"),
-		inBuf: `{"T":"2021-09-29T12:44:52"}`,
-		inVal: new(struct {
-			T time.Time
-		}),
-		wantErr: EU(func() error {
-			_, err := time.Parse(time.RFC3339, "2021-09-29T12:44:52")
-			return err
-		}()).withPos(`{"T":`, "/T").withType('"', timeTimeType),
-	}, {
-		name:  jsontest.Name("Time/Format/Invalid"),
-		inBuf: `{"T":""}`,
-		inVal: new(struct {
-			T time.Time `json:",format:UndefinedConstant"`
-		}),
-		wantErr: EU(errors.New(`invalid format flag "UndefinedConstant"`)).withPos(`{"T":`, "/T").withType(0, timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/SingleDigitHour"),
-		inBuf:   `{"T":"2000-01-01T1:12:34Z"}`,
-		inVal:   new(struct{ T time.Time }),
-		wantErr: EU(newParseTimeError(time.RFC3339, "2000-01-01T1:12:34Z", "15", "1", "")).withPos(`{"T":`, "/T").withType('"', timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/SubsecondComma"),
-		inBuf:   `{"T":"2000-01-01T00:00:00,000Z"}`,
-		inVal:   new(struct{ T time.Time }),
-		wantErr: EU(newParseTimeError(time.RFC3339, "2000-01-01T00:00:00,000Z", ".", ",", "")).withPos(`{"T":`, "/T").withType('"', timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/TimezoneHourOverflow"),
-		inBuf:   `{"T":"2000-01-01T00:00:00+24:00"}`,
-		inVal:   new(struct{ T time.Time }),
-		wantErr: EU(newParseTimeError(time.RFC3339, "2000-01-01T00:00:00+24:00", "Z07:00", "+24:00", ": timezone hour out of range")).withPos(`{"T":`, "/T").withType('"', timeTimeType),
-	}, {
-		name:    jsontest.Name("Time/Format/TimezoneMinuteOverflow"),
-		inBuf:   `{"T":"2000-01-01T00:00:00+00:60"}`,
-		inVal:   new(struct{ T time.Time }),
-		wantErr: EU(newParseTimeError(time.RFC3339, "2000-01-01T00:00:00+00:60", "Z07:00", "+00:60", ": timezone minute out of range")).withPos(`{"T":`, "/T").withType('"', timeTimeType),
-	}, {
-		name:  jsontest.Name("Time/Syntax/Invalid"),
-		inBuf: `{"T":x}`,
-		inVal: new(struct {
-			T time.Time
-		}),
-		wantErr: newInvalidCharacterError("x", "at start of value", len64(`{"T":`), "/T"),
-	}, {
-		name:  jsontest.Name("Time/IgnoreInvalidFormat"),
-		opts:  []Options{invalidFormatOption},
-		inBuf: `"2000-01-01T00:00:00Z"`,
-		inVal: addr(time.Time{}),
-		want:  addr(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)),
-	}}
-
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			got := tt.inVal
-			gotErr := Unmarshal([]byte(tt.inBuf), got, tt.opts...)
-			if !reflect.DeepEqual(got, tt.want) && tt.want != nil {
-				t.Errorf("%s: Unmarshal output mismatch:\ngot  %v\nwant %v", tt.name.Where, got, tt.want)
-			}
-			if !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("%s: Unmarshal error mismatch:\ngot  %v\nwant %v", tt.name.Where, gotErr, tt.wantErr)
-			}
-		})
-	}
-}
-
-func TestMarshalInvalidNamespace(t *testing.T) {
-	tests := []struct {
-		name jsontest.CaseName
-		val  any
-	}{
-		{jsontest.Name("Map"), map[string]string{"X": "\xde\xad\xbe\xef"}},
-		{jsontest.Name("Struct"), struct{ X string }{"\xde\xad\xbe\xef"}},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			enc := jsontext.NewEncoder(new(bytes.Buffer))
-			if err := MarshalEncode(enc, tt.val); err == nil {
-				t.Fatalf("%s: MarshalEncode error is nil, want non-nil", tt.name.Where)
-			}
-			for _, tok := range []jsontext.Token{
-				jsontext.Null, jsontext.String(""), jsontext.Int(0), jsontext.BeginObject, jsontext.EndObject, jsontext.BeginArray, jsontext.EndArray,
-			} {
-				if err := enc.WriteToken(tok); err == nil {
-					t.Fatalf("%s: WriteToken error is nil, want non-nil", tt.name.Where)
-				}
-			}
-			for _, val := range []string{`null`, `""`, `0`, `{}`, `[]`} {
-				if err := enc.WriteValue([]byte(val)); err == nil {
-					t.Fatalf("%s: WriteToken error is nil, want non-nil", tt.name.Where)
-				}
-			}
-		})
-	}
-}
-
-func TestUnmarshalInvalidNamespace(t *testing.T) {
-	tests := []struct {
-		name jsontest.CaseName
-		val  any
-	}{
-		{jsontest.Name("Map"), addr(map[string]int{})},
-		{jsontest.Name("Struct"), addr(struct{ X int }{})},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			dec := jsontext.NewDecoder(strings.NewReader(`{"X":""}`))
-			if err := UnmarshalDecode(dec, tt.val); err == nil {
-				t.Fatalf("%s: UnmarshalDecode error is nil, want non-nil", tt.name.Where)
-			}
-			if _, err := dec.ReadToken(); err == nil {
-				t.Fatalf("%s: ReadToken error is nil, want non-nil", tt.name.Where)
-			}
-			if _, err := dec.ReadValue(); err == nil {
-				t.Fatalf("%s: ReadValue error is nil, want non-nil", tt.name.Where)
-			}
-		})
-	}
-}
-
-func TestUnmarshalReuse(t *testing.T) {
-	t.Run("Bytes", func(t *testing.T) {
-		in := make([]byte, 3)
-		want := &in[0]
-		if err := Unmarshal([]byte(`"AQID"`), &in); err != nil {
-			t.Fatalf("Unmarshal error: %v", err)
-		}
-		got := &in[0]
-		if got != want {
-			t.Errorf("input buffer was not reused")
-		}
-	})
-	t.Run("Slices", func(t *testing.T) {
-		in := make([]int, 3)
-		want := &in[0]
-		if err := Unmarshal([]byte(`[0,1,2]`), &in); err != nil {
-			t.Fatalf("Unmarshal error: %v", err)
-		}
-		got := &in[0]
-		if got != want {
-			t.Errorf("input slice was not reused")
-		}
-	})
-	t.Run("Maps", func(t *testing.T) {
-		in := make(map[string]string)
-		want := reflect.ValueOf(in).Pointer()
-		if err := Unmarshal([]byte(`{"key":"value"}`), &in); err != nil {
-			t.Fatalf("Unmarshal error: %v", err)
-		}
-		got := reflect.ValueOf(in).Pointer()
-		if got != want {
-			t.Errorf("input map was not reused")
-		}
-	})
-	t.Run("Pointers", func(t *testing.T) {
-		in := addr(addr(addr("hello")))
-		want := **in
-		if err := Unmarshal([]byte(`"goodbye"`), &in); err != nil {
-			t.Fatalf("Unmarshal error: %v", err)
-		}
-		got := **in
-		if got != want {
-			t.Errorf("input pointer was not reused")
-		}
-	})
-}
-
-type ReaderFunc func([]byte) (int, error)
-
-func (f ReaderFunc) Read(b []byte) (int, error) { return f(b) }
-
-type WriterFunc func([]byte) (int, error)
-
-func (f WriterFunc) Write(b []byte) (int, error) { return f(b) }
-
-func TestCoderBufferGrowth(t *testing.T) {
-	// The growth rate of the internal buffer should be exponential,
-	// but should not grow unbounded.
-	checkGrowth := func(ns []int) {
-		t.Helper()
-		var sumBytes, sumRates, numGrows float64
-		prev := ns[0]
-		for i := 1; i < len(ns)-1; i++ {
-			n := ns[i]
-			if n != prev {
-				sumRates += float64(n) / float64(prev)
-				numGrows++
-				prev = n
-			}
-			if n > 1<<20 {
-				t.Fatalf("single Read/Write too large: %d", n)
-			}
-			sumBytes += float64(n)
-		}
-		if mean := sumBytes / float64(len(ns)); mean < 1<<10 {
-			t.Fatalf("average Read/Write too small: %0.1f", mean)
-		}
-		switch mean := sumRates / numGrows; {
-		case mean < 1.25:
-			t.Fatalf("average growth rate too slow: %0.3f", mean)
-		case mean > 2.00:
-			t.Fatalf("average growth rate too fast: %0.3f", mean)
-		}
-	}
-
-	// bb is identical to bytes.Buffer,
-	// but a different type to avoid any optimizations for bytes.Buffer.
-	bb := struct{ *bytes.Buffer }{new(bytes.Buffer)}
-
-	var writeSizes []int
-	if err := MarshalWrite(WriterFunc(func(b []byte) (int, error) {
-		n, err := bb.Write(b)
-		writeSizes = append(writeSizes, n)
-		return n, err
-	}), make([]struct{}, 1e6)); err != nil {
-		t.Fatalf("MarshalWrite error: %v", err)
-	}
-	checkGrowth(writeSizes)
-
-	var readSizes []int
-	if err := UnmarshalRead(ReaderFunc(func(b []byte) (int, error) {
-		n, err := bb.Read(b)
-		readSizes = append(readSizes, n)
-		return n, err
-	}), new([]struct{})); err != nil {
-		t.Fatalf("UnmarshalRead error: %v", err)
-	}
-	checkGrowth(readSizes)
-}
-
-func TestUintSet(t *testing.T) {
-	type operation any // has | insert
-	type has struct {
-		in   uint
-		want bool
-	}
-	type insert struct {
-		in   uint
-		want bool
-	}
-
-	// Sequence of operations to perform (order matters).
-	ops := []operation{
-		has{0, false},
-		has{63, false},
-		has{64, false},
-		has{1234, false},
-		insert{3, true},
-		has{2, false},
-		has{3, true},
-		has{4, false},
-		has{63, false},
-		insert{3, false},
-		insert{63, true},
-		has{63, true},
-		insert{64, true},
-		insert{64, false},
-		has{64, true},
-		insert{3264, true},
-		has{3264, true},
-		insert{3, false},
-		has{3, true},
-	}
-
-	var us uintSet
-	for i, op := range ops {
-		switch op := op.(type) {
-		case has:
-			if got := us.has(op.in); got != op.want {
-				t.Fatalf("%d: uintSet.has(%v) = %v, want %v", i, op.in, got, op.want)
-			}
-		case insert:
-			if got := us.insert(op.in); got != op.want {
-				t.Fatalf("%d: uintSet.insert(%v) = %v, want %v", i, op.in, got, op.want)
-			}
-		default:
-			panic(fmt.Sprintf("unknown operation: %T", op))
-		}
-	}
-}
-
-func TestUnmarshalDecodeOptions(t *testing.T) {
-	var calledFuncs int
-	var calledOptions Options
-	in := strings.NewReader(strings.Repeat("\"\xde\xad\xbe\xef\"\n", 5))
-	dec := jsontext.NewDecoder(in,
-		jsontext.AllowInvalidUTF8(true), // decoder-specific option
-		WithUnmarshalers(UnmarshalFromFunc(func(dec *jsontext.Decoder, _ any) error {
-			opts := dec.Options()
-			if v, _ := GetOption(opts, jsontext.AllowInvalidUTF8); !v {
-				t.Errorf("nested Options.AllowInvalidUTF8 = false, want true")
-			}
-			calledFuncs++
-			calledOptions = opts
-			return SkipFunc
-		})), // unmarshal-specific option; only relevant for UnmarshalDecode
-	)
-
-	if err := UnmarshalDecode(dec, new(string)); err != nil {
-		t.Fatalf("UnmarshalDecode: %v", err)
-	}
-	if calledFuncs != 1 {
-		t.Fatalf("calledFuncs = %d, want 1", calledFuncs)
-	}
-	if err := UnmarshalDecode(dec, new(string), calledOptions); err != nil {
-		t.Fatalf("UnmarshalDecode: %v", err)
-	}
-	if calledFuncs != 2 {
-		t.Fatalf("calledFuncs = %d, want 2", calledFuncs)
-	}
-	if err := UnmarshalDecode(dec, new(string),
-		jsontext.AllowInvalidUTF8(false), // should be ignored
-		WithUnmarshalers(nil),            // should override
-	); err != nil {
-		t.Fatalf("UnmarshalDecode: %v", err)
-	}
-	if calledFuncs != 2 {
-		t.Fatalf("calledFuncs = %d, want 2", calledFuncs)
-	}
-	if err := UnmarshalDecode(dec, new(string)); err != nil {
-		t.Fatalf("UnmarshalDecode: %v", err)
-	}
-	if calledFuncs != 3 {
-		t.Fatalf("calledFuncs = %d, want 3", calledFuncs)
-	}
-	if err := UnmarshalDecode(dec, new(string), JoinOptions(
-		jsontext.AllowInvalidUTF8(false), // should be ignored
-		WithUnmarshalers(UnmarshalFromFunc(func(_ *jsontext.Decoder, _ any) error {
-			opts := dec.Options()
-			if v, _ := GetOption(opts, jsontext.AllowInvalidUTF8); !v {
-				t.Errorf("nested Options.AllowInvalidUTF8 = false, want true")
-			}
-			calledFuncs = math.MaxInt
-			return SkipFunc
-		})), // should override
-	)); err != nil {
-		t.Fatalf("UnmarshalDecode: %v", err)
-	}
-	if calledFuncs != math.MaxInt {
-		t.Fatalf("calledFuncs = %d, want %d", calledFuncs, math.MaxInt)
-	}
-
-	// Reset with the decoder options as part of the arguments should not
-	// observe mutations to the options until after Reset is done.
-	opts := dec.Options()                                 // AllowInvalidUTF8 is currently true
-	dec.Reset(in, jsontext.AllowInvalidUTF8(false), opts) // earlier AllowInvalidUTF8(false) should be overridden by latter AllowInvalidUTF8(true) in opts
-	if v, _ := GetOption(dec.Options(), jsontext.AllowInvalidUTF8); v == false {
-		t.Errorf("Options.AllowInvalidUTF8 = false, want true")
-	}
-}
-
-// BenchmarkUnmarshalDecodeOptions is a minimal decode operation to measure
-// the overhead options setup before the unmarshal operation.
-func BenchmarkUnmarshalDecodeOptions(b *testing.B) {
-	var i int
-	in := new(bytes.Buffer)
-	dec := jsontext.NewDecoder(in)
-	makeBench := func(opts ...Options) func(*testing.B) {
-		return func(b *testing.B) {
-			for range b.N {
-				in.WriteString("0 ")
-			}
-			dec.Reset(in)
-			b.ResetTimer()
-			for range b.N {
-				UnmarshalDecode(dec, &i, opts...)
-			}
-		}
-	}
-	b.Run("None", makeBench())
-	b.Run("Same", makeBench(&export.Decoder(dec).Struct))
-	b.Run("New", makeBench(DefaultOptionsV2()))
-}
-
-func TestMarshalEncodeOptions(t *testing.T) {
-	var calledFuncs int
-	var calledOptions Options
-	out := new(bytes.Buffer)
-	enc := jsontext.NewEncoder(
-		out,
-		jsontext.AllowInvalidUTF8(true), // encoder-specific option
-		WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, _ any) error {
-			opts := enc.Options()
-			if v, _ := GetOption(opts, jsontext.AllowInvalidUTF8); !v {
-				t.Errorf("nested Options.AllowInvalidUTF8 = false, want true")
-			}
-			calledFuncs++
-			calledOptions = opts
-			return SkipFunc
-		})), // marshal-specific option; only relevant for MarshalEncode
-	)
-
-	if err := MarshalEncode(enc, "\xde\xad\xbe\xef"); err != nil {
-		t.Fatalf("MarshalEncode: %v", err)
-	}
-	if calledFuncs != 1 {
-		t.Fatalf("calledFuncs = %d, want 1", calledFuncs)
-	}
-	if err := MarshalEncode(enc, "\xde\xad\xbe\xef", calledOptions); err != nil {
-		t.Fatalf("MarshalEncode: %v", err)
-	}
-	if calledFuncs != 2 {
-		t.Fatalf("calledFuncs = %d, want 2", calledFuncs)
-	}
-	if err := MarshalEncode(enc, "\xde\xad\xbe\xef",
-		jsontext.AllowInvalidUTF8(false), // should be ignored
-		WithMarshalers(nil),              // should override
-	); err != nil {
-		t.Fatalf("MarshalEncode: %v", err)
-	}
-	if calledFuncs != 2 {
-		t.Fatalf("calledFuncs = %d, want 2", calledFuncs)
-	}
-	if err := MarshalEncode(enc, "\xde\xad\xbe\xef"); err != nil {
-		t.Fatalf("MarshalEncode: %v", err)
-	}
-	if calledFuncs != 3 {
-		t.Fatalf("calledFuncs = %d, want 3", calledFuncs)
-	}
-	if err := MarshalEncode(enc, "\xde\xad\xbe\xef", JoinOptions(
-		jsontext.AllowInvalidUTF8(false), // should be ignored
-		WithMarshalers(MarshalToFunc(func(enc *jsontext.Encoder, _ any) error {
-			opts := enc.Options()
-			if v, _ := GetOption(opts, jsontext.AllowInvalidUTF8); !v {
-				t.Errorf("nested Options.AllowInvalidUTF8 = false, want true")
-			}
-			calledFuncs = math.MaxInt
-			return SkipFunc
-		})), // should override
-	)); err != nil {
-		t.Fatalf("MarshalEncode: %v", err)
-	}
-	if calledFuncs != math.MaxInt {
-		t.Fatalf("calledFuncs = %d, want %d", calledFuncs, math.MaxInt)
-	}
-	if out.String() != strings.Repeat("\"\xde\xad\ufffd\ufffd\"\n", 5) {
-		t.Fatalf("output mismatch:\n\tgot:  %s\n\twant: %s", out.String(), strings.Repeat("\"\xde\xad\xbe\xef\"\n", 5))
-	}
-
-	// Reset with the encoder options as part of the arguments should not
-	// observe mutations to the options until after Reset is done.
-	opts := enc.Options()                                  // AllowInvalidUTF8 is currently true
-	enc.Reset(out, jsontext.AllowInvalidUTF8(false), opts) // earlier AllowInvalidUTF8(false) should be overridden by latter AllowInvalidUTF8(true) in opts
-	if v, _ := GetOption(enc.Options(), jsontext.AllowInvalidUTF8); v == false {
-		t.Errorf("Options.AllowInvalidUTF8 = false, want true")
-	}
-}
-
-// BenchmarkMarshalEncodeOptions is a minimal encode operation to measure
-// the overhead of options setup before the marshal operation.
-func BenchmarkMarshalEncodeOptions(b *testing.B) {
-	var i int
-	out := new(bytes.Buffer)
-	enc := jsontext.NewEncoder(out)
-	makeBench := func(opts ...Options) func(*testing.B) {
-		return func(b *testing.B) {
-			out.Reset()
-			enc.Reset(out)
-			b.ResetTimer()
-			for range b.N {
-				MarshalEncode(enc, &i, opts...)
-			}
-		}
-	}
-	b.Run("None", makeBench())
-	b.Run("Same", makeBench(&export.Encoder(enc).Struct))
-	b.Run("New", makeBench(DefaultOptionsV2()))
-}
diff --git a/src/encoding/json/v2/arshal_time.go b/src/encoding/json/v2/arshal_time.go
deleted file mode 100644
index e40a04f12a0ed4..00000000000000
--- a/src/encoding/json/v2/arshal_time.go
+++ /dev/null
@@ -1,600 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"cmp"
-	"errors"
-	"fmt"
-	"math"
-	"math/bits"
-	"reflect"
-	"strconv"
-	"strings"
-	"time"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-var (
-	timeDurationType = reflect.TypeFor[time.Duration]()
-	timeTimeType     = reflect.TypeFor[time.Time]()
-)
-
-func makeTimeArshaler(fncs *arshaler, t reflect.Type) *arshaler {
-	// Ideally, time types would implement MarshalerTo and UnmarshalerFrom,
-	// but that would incur a dependency on package json from package time.
-	// Given how widely used time is, it is more acceptable that we incur a
-	// dependency on time from json.
-	//
-	// Injecting the arshaling functionality like this will not be identical
-	// to actually declaring methods on the time types since embedding of the
-	// time types will not be able to forward this functionality.
-	switch t {
-	case timeDurationType:
-		fncs.nonDefault = true
-		marshalNano := fncs.marshal
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) error {
-			xe := export.Encoder(enc)
-			var m durationArshaler
-			if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-				if !m.initFormat(mo.Format) {
-					return newInvalidFormatError(enc, t, mo)
-				}
-			} else if mo.Flags.Get(jsonflags.FormatTimeWithLegacySemantics) {
-				return marshalNano(enc, va, mo)
-			}
-
-			// TODO(https://go.dev/issue/62121): Use reflect.Value.AssertTo.
-			m.td = *va.Addr().Interface().(*time.Duration)
-			k := stringOrNumberKind(!m.isNumeric() || xe.Tokens.Last.NeedObjectName() || mo.Flags.Get(jsonflags.StringifyNumbers))
-			if err := xe.AppendRaw(k, true, m.appendMarshal); err != nil {
-				if !isSyntacticError(err) && !export.IsIOError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-		unmarshalNano := fncs.unmarshal
-		fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) error {
-			xd := export.Decoder(dec)
-			var u durationArshaler
-			if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-				if !u.initFormat(uo.Format) {
-					return newInvalidFormatError(dec, t, uo)
-				}
-			} else if uo.Flags.Get(jsonflags.FormatTimeWithLegacySemantics) {
-				return unmarshalNano(dec, va, uo)
-			}
-
-			stringify := !u.isNumeric() || xd.Tokens.Last.NeedObjectName() || uo.Flags.Get(jsonflags.StringifyNumbers)
-			var flags jsonwire.ValueFlags
-			td := va.Addr().Interface().(*time.Duration)
-			val, err := xd.ReadValue(&flags)
-			if err != nil {
-				return err
-			}
-			switch k := val.Kind(); k {
-			case 'n':
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					*td = time.Duration(0)
-				}
-				return nil
-			case '"':
-				if !stringify {
-					break
-				}
-				val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-				if err := u.unmarshal(val); err != nil {
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-				*td = u.td
-				return nil
-			case '0':
-				if stringify {
-					break
-				}
-				if err := u.unmarshal(val); err != nil {
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-				*td = u.td
-				return nil
-			}
-			return newUnmarshalErrorAfter(dec, t, nil)
-		}
-	case timeTimeType:
-		fncs.nonDefault = true
-		fncs.marshal = func(enc *jsontext.Encoder, va addressableValue, mo *jsonopts.Struct) (err error) {
-			xe := export.Encoder(enc)
-			var m timeArshaler
-			if mo.Format != "" && mo.FormatDepth == xe.Tokens.Depth() {
-				if !m.initFormat(mo.Format) {
-					return newInvalidFormatError(enc, t, mo)
-				}
-			}
-
-			// TODO(https://go.dev/issue/62121): Use reflect.Value.AssertTo.
-			m.tt = *va.Addr().Interface().(*time.Time)
-			k := stringOrNumberKind(!m.isNumeric() || xe.Tokens.Last.NeedObjectName() || mo.Flags.Get(jsonflags.StringifyNumbers))
-			if err := xe.AppendRaw(k, !m.hasCustomFormat(), m.appendMarshal); err != nil {
-				if mo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-					return internal.NewMarshalerError(va.Addr().Interface(), err, "MarshalJSON") // unlike unmarshal, always wrapped
-				}
-				if !isSyntacticError(err) && !export.IsIOError(err) {
-					err = newMarshalErrorBefore(enc, t, err)
-				}
-				return err
-			}
-			return nil
-		}
-		fncs.unmarshal = func(dec *jsontext.Decoder, va addressableValue, uo *jsonopts.Struct) (err error) {
-			xd := export.Decoder(dec)
-			var u timeArshaler
-			if uo.Format != "" && uo.FormatDepth == xd.Tokens.Depth() {
-				if !u.initFormat(uo.Format) {
-					return newInvalidFormatError(dec, t, uo)
-				}
-			} else if uo.Flags.Get(jsonflags.FormatTimeWithLegacySemantics) {
-				u.looseRFC3339 = true
-			}
-
-			stringify := !u.isNumeric() || xd.Tokens.Last.NeedObjectName() || uo.Flags.Get(jsonflags.StringifyNumbers)
-			var flags jsonwire.ValueFlags
-			tt := va.Addr().Interface().(*time.Time)
-			val, err := xd.ReadValue(&flags)
-			if err != nil {
-				return err
-			}
-			switch k := val.Kind(); k {
-			case 'n':
-				if !uo.Flags.Get(jsonflags.MergeWithLegacySemantics) {
-					*tt = time.Time{}
-				}
-				return nil
-			case '"':
-				if !stringify {
-					break
-				}
-				val = jsonwire.UnquoteMayCopy(val, flags.IsVerbatim())
-				if err := u.unmarshal(val); err != nil {
-					if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-						return err // unlike marshal, never wrapped
-					}
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-				*tt = u.tt
-				return nil
-			case '0':
-				if stringify {
-					break
-				}
-				if err := u.unmarshal(val); err != nil {
-					if uo.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-						return err // unlike marshal, never wrapped
-					}
-					return newUnmarshalErrorAfter(dec, t, err)
-				}
-				*tt = u.tt
-				return nil
-			}
-			return newUnmarshalErrorAfter(dec, t, nil)
-		}
-	}
-	return fncs
-}
-
-type durationArshaler struct {
-	td time.Duration
-
-	// base records the representation where:
-	//   - 0 uses time.Duration.String
-	//   - 1e0, 1e3, 1e6, or 1e9 use a decimal encoding of the duration as
-	//     nanoseconds, microseconds, milliseconds, or seconds.
-	base uint64
-}
-
-func (a *durationArshaler) initFormat(format string) (ok bool) {
-	switch format {
-	case "units":
-		a.base = 0
-	case "sec":
-		a.base = 1e9
-	case "milli":
-		a.base = 1e6
-	case "micro":
-		a.base = 1e3
-	case "nano":
-		a.base = 1e0
-	default:
-		return false
-	}
-	return true
-}
-
-func (a *durationArshaler) isNumeric() bool {
-	return a.base != 0 && a.base != 60
-}
-
-func (a *durationArshaler) appendMarshal(b []byte) ([]byte, error) {
-	switch a.base {
-	case 0:
-		return append(b, a.td.String()...), nil
-	default:
-		return appendDurationBase10(b, a.td, a.base), nil
-	}
-}
-
-func (a *durationArshaler) unmarshal(b []byte) (err error) {
-	switch a.base {
-	case 0:
-		a.td, err = time.ParseDuration(string(b))
-	default:
-		a.td, err = parseDurationBase10(b, a.base)
-	}
-	return err
-}
-
-type timeArshaler struct {
-	tt time.Time
-
-	// base records the representation where:
-	//   - 0 uses RFC 3339 encoding of the timestamp
-	//   - 1e0, 1e3, 1e6, or 1e9 use a decimal encoding of the timestamp as
-	//     seconds, milliseconds, microseconds, or nanoseconds since Unix epoch.
-	//   - math.MaxUint uses time.Time.Format to encode the timestamp
-	base   uint64
-	format string // time format passed to time.Parse
-
-	looseRFC3339 bool
-}
-
-func (a *timeArshaler) initFormat(format string) bool {
-	// We assume that an exported constant in the time package will
-	// always start with an uppercase ASCII letter.
-	if len(format) == 0 {
-		return false
-	}
-	a.base = math.MaxUint // implies custom format
-	if c := format[0]; !('a' <= c && c <= 'z') && !('A' <= c && c <= 'Z') {
-		a.format = format
-		return true
-	}
-	switch format {
-	case "ANSIC":
-		a.format = time.ANSIC
-	case "UnixDate":
-		a.format = time.UnixDate
-	case "RubyDate":
-		a.format = time.RubyDate
-	case "RFC822":
-		a.format = time.RFC822
-	case "RFC822Z":
-		a.format = time.RFC822Z
-	case "RFC850":
-		a.format = time.RFC850
-	case "RFC1123":
-		a.format = time.RFC1123
-	case "RFC1123Z":
-		a.format = time.RFC1123Z
-	case "RFC3339":
-		a.base = 0
-		a.format = time.RFC3339
-	case "RFC3339Nano":
-		a.base = 0
-		a.format = time.RFC3339Nano
-	case "Kitchen":
-		a.format = time.Kitchen
-	case "Stamp":
-		a.format = time.Stamp
-	case "StampMilli":
-		a.format = time.StampMilli
-	case "StampMicro":
-		a.format = time.StampMicro
-	case "StampNano":
-		a.format = time.StampNano
-	case "DateTime":
-		a.format = time.DateTime
-	case "DateOnly":
-		a.format = time.DateOnly
-	case "TimeOnly":
-		a.format = time.TimeOnly
-	case "unix":
-		a.base = 1e0
-	case "unixmilli":
-		a.base = 1e3
-	case "unixmicro":
-		a.base = 1e6
-	case "unixnano":
-		a.base = 1e9
-	default:
-		// Reject any Go identifier in case new constants are supported.
-		if strings.TrimFunc(format, isLetterOrDigit) == "" {
-			return false
-		}
-		a.format = format
-	}
-	return true
-}
-
-func (a *timeArshaler) isNumeric() bool {
-	return int(a.base) > 0
-}
-
-func (a *timeArshaler) hasCustomFormat() bool {
-	return a.base == math.MaxUint
-}
-
-func (a *timeArshaler) appendMarshal(b []byte) ([]byte, error) {
-	switch a.base {
-	case 0:
-		format := cmp.Or(a.format, time.RFC3339Nano)
-		n0 := len(b)
-		b = a.tt.AppendFormat(b, format)
-		// Not all Go timestamps can be represented as valid RFC 3339.
-		// Explicitly check for these edge cases.
-		// See https://go.dev/issue/4556 and https://go.dev/issue/54580.
-		switch b := b[n0:]; {
-		case b[len("9999")] != '-': // year must be exactly 4 digits wide
-			return b, errors.New("year outside of range [0,9999]")
-		case b[len(b)-1] != 'Z':
-			c := b[len(b)-len("Z07:00")]
-			if ('0' <= c && c <= '9') || parseDec2(b[len(b)-len("07:00"):]) >= 24 {
-				return b, errors.New("timezone hour outside of range [0,23]")
-			}
-		}
-		return b, nil
-	case math.MaxUint:
-		return a.tt.AppendFormat(b, a.format), nil
-	default:
-		return appendTimeUnix(b, a.tt, a.base), nil
-	}
-}
-
-func (a *timeArshaler) unmarshal(b []byte) (err error) {
-	switch a.base {
-	case 0:
-		// Use time.Time.UnmarshalText to avoid possible string allocation.
-		if err := a.tt.UnmarshalText(b); err != nil {
-			return err
-		}
-		// TODO(https://go.dev/issue/57912):
-		// RFC 3339 specifies the grammar for a valid timestamp.
-		// However, the parsing functionality in "time" is too loose and
-		// incorrectly accepts invalid timestamps as valid.
-		// Remove these manual checks when "time" checks it for us.
-		newParseError := func(layout, value, layoutElem, valueElem, message string) error {
-			return &time.ParseError{Layout: layout, Value: value, LayoutElem: layoutElem, ValueElem: valueElem, Message: message}
-		}
-		switch {
-		case a.looseRFC3339:
-			return nil
-		case b[len("2006-01-02T")+1] == ':': // hour must be two digits
-			return newParseError(time.RFC3339, string(b), "15", string(b[len("2006-01-02T"):][:1]), "")
-		case b[len("2006-01-02T15:04:05")] == ',': // sub-second separator must be a period
-			return newParseError(time.RFC3339, string(b), ".", ",", "")
-		case b[len(b)-1] != 'Z':
-			switch {
-			case parseDec2(b[len(b)-len("07:00"):]) >= 24: // timezone hour must be in range
-				return newParseError(time.RFC3339, string(b), "Z07:00", string(b[len(b)-len("Z07:00"):]), ": timezone hour out of range")
-			case parseDec2(b[len(b)-len("00"):]) >= 60: // timezone minute must be in range
-				return newParseError(time.RFC3339, string(b), "Z07:00", string(b[len(b)-len("Z07:00"):]), ": timezone minute out of range")
-			}
-		}
-		return nil
-	case math.MaxUint:
-		a.tt, err = time.Parse(a.format, string(b))
-		return err
-	default:
-		a.tt, err = parseTimeUnix(b, a.base)
-		return err
-	}
-}
-
-// appendDurationBase10 appends d formatted as a decimal fractional number,
-// where pow10 is a power-of-10 used to scale down the number.
-func appendDurationBase10(b []byte, d time.Duration, pow10 uint64) []byte {
-	b, n := mayAppendDurationSign(b, d)            // append sign
-	whole, frac := bits.Div64(0, n, uint64(pow10)) // compute whole and frac fields
-	b = strconv.AppendUint(b, whole, 10)           // append whole field
-	return appendFracBase10(b, frac, pow10)        // append frac field
-}
-
-// parseDurationBase10 parses d from a decimal fractional number,
-// where pow10 is a power-of-10 used to scale up the number.
-func parseDurationBase10(b []byte, pow10 uint64) (time.Duration, error) {
-	suffix, neg := consumeSign(b)                            // consume sign
-	wholeBytes, fracBytes := bytesCutByte(suffix, '.', true) // consume whole and frac fields
-	whole, okWhole := jsonwire.ParseUint(wholeBytes)         // parse whole field; may overflow
-	frac, okFrac := parseFracBase10(fracBytes, pow10)        // parse frac field
-	hi, lo := bits.Mul64(whole, uint64(pow10))               // overflow if hi > 0
-	sum, co := bits.Add64(lo, uint64(frac), 0)               // overflow if co > 0
-	switch d := mayApplyDurationSign(sum, neg); {            // overflow if neg != (d < 0)
-	case (!okWhole && whole != math.MaxUint64) || !okFrac:
-		return 0, fmt.Errorf("invalid duration %q: %w", b, strconv.ErrSyntax)
-	case !okWhole || hi > 0 || co > 0 || neg != (d < 0):
-		return 0, fmt.Errorf("invalid duration %q: %w", b, strconv.ErrRange)
-	default:
-		return d, nil
-	}
-}
-
-// mayAppendDurationSign appends a negative sign if n is negative.
-func mayAppendDurationSign(b []byte, d time.Duration) ([]byte, uint64) {
-	if d < 0 {
-		b = append(b, '-')
-		d *= -1
-	}
-	return b, uint64(d)
-}
-
-// mayApplyDurationSign inverts n if neg is specified.
-func mayApplyDurationSign(n uint64, neg bool) time.Duration {
-	if neg {
-		return -1 * time.Duration(n)
-	} else {
-		return +1 * time.Duration(n)
-	}
-}
-
-// appendTimeUnix appends t formatted as a decimal fractional number,
-// where pow10 is a power-of-10 used to scale up the number.
-func appendTimeUnix(b []byte, t time.Time, pow10 uint64) []byte {
-	sec, nsec := t.Unix(), int64(t.Nanosecond())
-	if sec < 0 {
-		b = append(b, '-')
-		sec, nsec = negateSecNano(sec, nsec)
-	}
-	switch {
-	case pow10 == 1e0: // fast case where units is in seconds
-		b = strconv.AppendUint(b, uint64(sec), 10)
-		return appendFracBase10(b, uint64(nsec), 1e9)
-	case uint64(sec) < 1e9: // intermediate case where units is not seconds, but no overflow
-		b = strconv.AppendUint(b, uint64(sec)*uint64(pow10)+uint64(uint64(nsec)/(1e9/pow10)), 10)
-		return appendFracBase10(b, (uint64(nsec)*pow10)%1e9, 1e9)
-	default: // slow case where units is not seconds and overflow would occur
-		b = strconv.AppendUint(b, uint64(sec), 10)
-		b = appendPaddedBase10(b, uint64(nsec)/(1e9/pow10), pow10)
-		return appendFracBase10(b, (uint64(nsec)*pow10)%1e9, 1e9)
-	}
-}
-
-// parseTimeUnix parses t formatted as a decimal fractional number,
-// where pow10 is a power-of-10 used to scale down the number.
-func parseTimeUnix(b []byte, pow10 uint64) (time.Time, error) {
-	suffix, neg := consumeSign(b)                            // consume sign
-	wholeBytes, fracBytes := bytesCutByte(suffix, '.', true) // consume whole and frac fields
-	whole, okWhole := jsonwire.ParseUint(wholeBytes)         // parse whole field; may overflow
-	frac, okFrac := parseFracBase10(fracBytes, 1e9/pow10)    // parse frac field
-	var sec, nsec int64
-	switch {
-	case pow10 == 1e0: // fast case where units is in seconds
-		sec = int64(whole) // check overflow later after negation
-		nsec = int64(frac) // cannot overflow
-	case okWhole: // intermediate case where units is not seconds, but no overflow
-		sec = int64(whole / pow10)                     // check overflow later after negation
-		nsec = int64((whole%pow10)*(1e9/pow10) + frac) // cannot overflow
-	case !okWhole && whole == math.MaxUint64: // slow case where units is not seconds and overflow occurred
-		width := int(math.Log10(float64(pow10)))                                // compute len(strconv.Itoa(pow10-1))
-		whole, okWhole = jsonwire.ParseUint(wholeBytes[:len(wholeBytes)-width]) // parse the upper whole field
-		mid, _ := parsePaddedBase10(wholeBytes[len(wholeBytes)-width:], pow10)  // parse the lower whole field
-		sec = int64(whole)                                                      // check overflow later after negation
-		nsec = int64(mid*(1e9/pow10) + frac)                                    // cannot overflow
-	}
-	if neg {
-		sec, nsec = negateSecNano(sec, nsec)
-	}
-	switch t := time.Unix(sec, nsec).UTC(); {
-	case (!okWhole && whole != math.MaxUint64) || !okFrac:
-		return time.Time{}, fmt.Errorf("invalid time %q: %w", b, strconv.ErrSyntax)
-	case !okWhole || neg != (t.Unix() < 0):
-		return time.Time{}, fmt.Errorf("invalid time %q: %w", b, strconv.ErrRange)
-	default:
-		return t, nil
-	}
-}
-
-// negateSecNano negates a Unix timestamp, where nsec must be within [0, 1e9).
-func negateSecNano(sec, nsec int64) (int64, int64) {
-	sec = ^sec               // twos-complement negation (i.e., -1*sec + 1)
-	nsec = -nsec + 1e9       // negate nsec and add 1e9 (which is the extra +1 from sec negation)
-	sec += int64(nsec / 1e9) // handle possible overflow of nsec if it started as zero
-	nsec %= 1e9              // ensure nsec stays within [0, 1e9)
-	return sec, nsec
-}
-
-// appendFracBase10 appends the fraction of n/max10,
-// where max10 is a power-of-10 that is larger than n.
-func appendFracBase10(b []byte, n, max10 uint64) []byte {
-	if n == 0 {
-		return b
-	}
-	return bytes.TrimRight(appendPaddedBase10(append(b, '.'), n, max10), "0")
-}
-
-// parseFracBase10 parses the fraction of n/max10,
-// where max10 is a power-of-10 that is larger than n.
-func parseFracBase10(b []byte, max10 uint64) (n uint64, ok bool) {
-	switch {
-	case len(b) == 0:
-		return 0, true
-	case len(b) < len(".0") || b[0] != '.':
-		return 0, false
-	}
-	return parsePaddedBase10(b[len("."):], max10)
-}
-
-// appendPaddedBase10 appends a zero-padded encoding of n,
-// where max10 is a power-of-10 that is larger than n.
-func appendPaddedBase10(b []byte, n, max10 uint64) []byte {
-	if n < max10/10 {
-		// Formatting of n is shorter than log10(max10),
-		// so add max10/10 to ensure the length is equal to log10(max10).
-		i := len(b)
-		b = strconv.AppendUint(b, n+max10/10, 10)
-		b[i]-- // subtract the addition of max10/10
-		return b
-	}
-	return strconv.AppendUint(b, n, 10)
-}
-
-// parsePaddedBase10 parses b as the zero-padded encoding of n,
-// where max10 is a power-of-10 that is larger than n.
-// Truncated suffix is treated as implicit zeros.
-// Extended suffix is ignored, but verified to contain only digits.
-func parsePaddedBase10(b []byte, max10 uint64) (n uint64, ok bool) {
-	pow10 := uint64(1)
-	for pow10 < max10 {
-		n *= 10
-		if len(b) > 0 {
-			if b[0] < '0' || '9' < b[0] {
-				return n, false
-			}
-			n += uint64(b[0] - '0')
-			b = b[1:]
-		}
-		pow10 *= 10
-	}
-	if len(b) > 0 && len(bytes.TrimRight(b, "0123456789")) > 0 {
-		return n, false // trailing characters are not digits
-	}
-	return n, true
-}
-
-// consumeSign consumes an optional leading negative sign.
-func consumeSign(b []byte) ([]byte, bool) {
-	if len(b) > 0 && b[0] == '-' {
-		return b[len("-"):], true
-	}
-	return b, false
-}
-
-// bytesCutByte is similar to bytes.Cut(b, []byte{c}),
-// except c may optionally be included as part of the suffix.
-func bytesCutByte(b []byte, c byte, include bool) ([]byte, []byte) {
-	if i := bytes.IndexByte(b, c); i >= 0 {
-		if include {
-			return b[:i], b[i:]
-		}
-		return b[:i], b[i+1:]
-	}
-	return b, nil
-}
-
-// parseDec2 parses b as an unsigned, base-10, 2-digit number.
-// The result is undefined if digits are not base-10.
-func parseDec2(b []byte) byte {
-	if len(b) < 2 {
-		return 0
-	}
-	return 10*(b[0]-'0') + (b[1] - '0')
-}
diff --git a/src/encoding/json/v2/arshal_time_test.go b/src/encoding/json/v2/arshal_time_test.go
deleted file mode 100644
index faa09de5098505..00000000000000
--- a/src/encoding/json/v2/arshal_time_test.go
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"fmt"
-	"math"
-	"testing"
-	"time"
-
-	"encoding/json/internal/jsonwire"
-)
-
-func baseLabel(base uint64) string {
-	if log10 := math.Log10(float64(base)); log10 == float64(int64(log10)) {
-		return fmt.Sprintf("1e%d", int(log10))
-	}
-	return fmt.Sprint(base)
-}
-
-var formatDurationTestdata = []struct {
-	td          time.Duration
-	base10Sec   string
-	base10Milli string
-	base10Micro string
-	base10Nano  string
-}{
-	{math.MaxInt64, "9223372036.854775807", "9223372036854.775807", "9223372036854775.807", "9223372036854775807"},
-	{1e12 + 1e12, "2000", "2000000", "2000000000", "2000000000000"},
-	{1e12 + 1e11, "1100", "1100000", "1100000000", "1100000000000"},
-	{1e12 + 1e10, "1010", "1010000", "1010000000", "1010000000000"},
-	{1e12 + 1e9, "1001", "1001000", "1001000000", "1001000000000"},
-	{1e12 + 1e8, "1000.1", "1000100", "1000100000", "1000100000000"},
-	{1e12 + 1e7, "1000.01", "1000010", "1000010000", "1000010000000"},
-	{1e12 + 1e6, "1000.001", "1000001", "1000001000", "1000001000000"},
-	{1e12 + 1e5, "1000.0001", "1000000.1", "1000000100", "1000000100000"},
-	{1e12 + 1e4, "1000.00001", "1000000.01", "1000000010", "1000000010000"},
-	{1e12 + 1e3, "1000.000001", "1000000.001", "1000000001", "1000000001000"},
-	{1e12 + 1e2, "1000.0000001", "1000000.0001", "1000000000.1", "1000000000100"},
-	{1e12 + 1e1, "1000.00000001", "1000000.00001", "1000000000.01", "1000000000010"},
-	{1e12 + 1e0, "1000.000000001", "1000000.000001", "1000000000.001", "1000000000001"},
-	{+(1e9 + 1), "1.000000001", "1000.000001", "1000000.001", "1000000001"},
-	{+(1e9), "1", "1000", "1000000", "1000000000"},
-	{+(1e9 - 1), "0.999999999", "999.999999", "999999.999", "999999999"},
-	{+100000000, "0.1", "100", "100000", "100000000"},
-	{+120000000, "0.12", "120", "120000", "120000000"},
-	{+123000000, "0.123", "123", "123000", "123000000"},
-	{+123400000, "0.1234", "123.4", "123400", "123400000"},
-	{+123450000, "0.12345", "123.45", "123450", "123450000"},
-	{+123456000, "0.123456", "123.456", "123456", "123456000"},
-	{+123456700, "0.1234567", "123.4567", "123456.7", "123456700"},
-	{+123456780, "0.12345678", "123.45678", "123456.78", "123456780"},
-	{+123456789, "0.123456789", "123.456789", "123456.789", "123456789"},
-	{+12345678, "0.012345678", "12.345678", "12345.678", "12345678"},
-	{+1234567, "0.001234567", "1.234567", "1234.567", "1234567"},
-	{+123456, "0.000123456", "0.123456", "123.456", "123456"},
-	{+12345, "0.000012345", "0.012345", "12.345", "12345"},
-	{+1234, "0.000001234", "0.001234", "1.234", "1234"},
-	{+123, "0.000000123", "0.000123", "0.123", "123"},
-	{+12, "0.000000012", "0.000012", "0.012", "12"},
-	{+1, "0.000000001", "0.000001", "0.001", "1"},
-	{0, "0", "0", "0", "0"},
-	{-1, "-0.000000001", "-0.000001", "-0.001", "-1"},
-	{-12, "-0.000000012", "-0.000012", "-0.012", "-12"},
-	{-123, "-0.000000123", "-0.000123", "-0.123", "-123"},
-	{-1234, "-0.000001234", "-0.001234", "-1.234", "-1234"},
-	{-12345, "-0.000012345", "-0.012345", "-12.345", "-12345"},
-	{-123456, "-0.000123456", "-0.123456", "-123.456", "-123456"},
-	{-1234567, "-0.001234567", "-1.234567", "-1234.567", "-1234567"},
-	{-12345678, "-0.012345678", "-12.345678", "-12345.678", "-12345678"},
-	{-123456789, "-0.123456789", "-123.456789", "-123456.789", "-123456789"},
-	{-123456780, "-0.12345678", "-123.45678", "-123456.78", "-123456780"},
-	{-123456700, "-0.1234567", "-123.4567", "-123456.7", "-123456700"},
-	{-123456000, "-0.123456", "-123.456", "-123456", "-123456000"},
-	{-123450000, "-0.12345", "-123.45", "-123450", "-123450000"},
-	{-123400000, "-0.1234", "-123.4", "-123400", "-123400000"},
-	{-123000000, "-0.123", "-123", "-123000", "-123000000"},
-	{-120000000, "-0.12", "-120", "-120000", "-120000000"},
-	{-100000000, "-0.1", "-100", "-100000", "-100000000"},
-	{-(1e9 - 1), "-0.999999999", "-999.999999", "-999999.999", "-999999999"},
-	{-(1e9), "-1", "-1000", "-1000000", "-1000000000"},
-	{-(1e9 + 1), "-1.000000001", "-1000.000001", "-1000000.001", "-1000000001"},
-	{math.MinInt64, "-9223372036.854775808", "-9223372036854.775808", "-9223372036854775.808", "-9223372036854775808"},
-}
-
-func TestFormatDuration(t *testing.T) {
-	var gotBuf []byte
-	check := func(td time.Duration, s string, base uint64) {
-		a := durationArshaler{td, base}
-		gotBuf, _ = a.appendMarshal(gotBuf[:0])
-		if string(gotBuf) != s {
-			t.Errorf("formatDuration(%d, %s) = %q, want %q", td, baseLabel(base), string(gotBuf), s)
-		}
-		if err := a.unmarshal(gotBuf); err != nil {
-			t.Errorf("parseDuration(%q, %s) error: %v", gotBuf, baseLabel(base), err)
-		}
-		if a.td != td {
-			t.Errorf("parseDuration(%q, %s) = %d, want %d", gotBuf, baseLabel(base), a.td, td)
-		}
-	}
-	for _, tt := range formatDurationTestdata {
-		check(tt.td, tt.base10Sec, 1e9)
-		check(tt.td, tt.base10Milli, 1e6)
-		check(tt.td, tt.base10Micro, 1e3)
-		check(tt.td, tt.base10Nano, 1e0)
-	}
-}
-
-var parseDurationTestdata = []struct {
-	in      string
-	base    uint64
-	want    time.Duration
-	wantErr bool
-}{
-	{"0", 1e0, 0, false},
-	{"0.", 1e0, 0, true},
-	{"0.0", 1e0, 0, false},
-	{"0.00", 1e0, 0, false},
-	{"00.0", 1e0, 0, true},
-	{"+0", 1e0, 0, true},
-	{"1e0", 1e0, 0, true},
-	{"1.000000000x", 1e9, 0, true},
-	{"1.000000x", 1e6, 0, true},
-	{"1.000x", 1e3, 0, true},
-	{"1.x", 1e0, 0, true},
-	{"1.0000000009", 1e9, +time.Second, false},
-	{"1.0000009", 1e6, +time.Millisecond, false},
-	{"1.0009", 1e3, +time.Microsecond, false},
-	{"1.9", 1e0, +time.Nanosecond, false},
-	{"-9223372036854775809", 1e0, 0, true},
-	{"9223372036854775.808", 1e3, 0, true},
-	{"-9223372036854.775809", 1e6, 0, true},
-	{"9223372036.854775808", 1e9, 0, true},
-	{"-1.9", 1e0, -time.Nanosecond, false},
-	{"-1.0009", 1e3, -time.Microsecond, false},
-	{"-1.0000009", 1e6, -time.Millisecond, false},
-	{"-1.0000000009", 1e9, -time.Second, false},
-}
-
-func TestParseDuration(t *testing.T) {
-	for _, tt := range parseDurationTestdata {
-		a := durationArshaler{base: tt.base}
-		switch err := a.unmarshal([]byte(tt.in)); {
-		case a.td != tt.want:
-			t.Errorf("parseDuration(%q, %s) = %v, want %v", tt.in, baseLabel(tt.base), a.td, tt.want)
-		case (err == nil) && tt.wantErr:
-			t.Errorf("parseDuration(%q, %s) error is nil, want non-nil", tt.in, baseLabel(tt.base))
-		case (err != nil) && !tt.wantErr:
-			t.Errorf("parseDuration(%q, %s) error is non-nil, want nil", tt.in, baseLabel(tt.base))
-		}
-	}
-}
-
-func FuzzFormatDuration(f *testing.F) {
-	for _, tt := range formatDurationTestdata {
-		f.Add(int64(tt.td))
-	}
-	f.Fuzz(func(t *testing.T, want int64) {
-		var buf []byte
-		for _, base := range [...]uint64{1e0, 1e3, 1e6, 1e9} {
-			a := durationArshaler{td: time.Duration(want), base: base}
-			buf, _ = a.appendMarshal(buf[:0])
-			switch err := a.unmarshal(buf); {
-			case err != nil:
-				t.Fatalf("parseDuration(%q, %s) error: %v", buf, baseLabel(base), err)
-			case a.td != time.Duration(want):
-				t.Fatalf("parseDuration(%q, %s) = %v, want %v", buf, baseLabel(base), a.td, time.Duration(want))
-			}
-		}
-	})
-}
-
-func FuzzParseDuration(f *testing.F) {
-	for _, tt := range parseDurationTestdata {
-		f.Add([]byte(tt.in))
-	}
-	f.Fuzz(func(t *testing.T, in []byte) {
-		for _, base := range [...]uint64{1e0, 1e3, 1e6, 1e9, 60} {
-			a := durationArshaler{base: base}
-			if err := a.unmarshal(in); err == nil && base != 60 {
-				if n, err := jsonwire.ConsumeNumber(in); err != nil || n != len(in) {
-					t.Fatalf("parseDuration(%q) error is nil for invalid JSON number", in)
-				}
-			}
-		}
-	})
-}
-
-type formatTimeTestdataEntry struct {
-	ts        time.Time
-	unixSec   string
-	unixMilli string
-	unixMicro string
-	unixNano  string
-}
-
-var formatTimeTestdata = func() []formatTimeTestdataEntry {
-	out := []formatTimeTestdataEntry{
-		{time.Unix(math.MaxInt64/int64(1e0), 1e9-1).UTC(), "9223372036854775807.999999999", "9223372036854775807999.999999", "9223372036854775807999999.999", "9223372036854775807999999999"},
-		{time.Unix(math.MaxInt64/int64(1e1), 1e9-1).UTC(), "922337203685477580.999999999", "922337203685477580999.999999", "922337203685477580999999.999", "922337203685477580999999999"},
-		{time.Unix(math.MaxInt64/int64(1e2), 1e9-1).UTC(), "92233720368547758.999999999", "92233720368547758999.999999", "92233720368547758999999.999", "92233720368547758999999999"},
-		{time.Unix(math.MinInt64, 1).UTC(), "-9223372036854775807.999999999", "-9223372036854775807999.999999", "-9223372036854775807999999.999", "-9223372036854775807999999999"},
-		{time.Unix(math.MinInt64, 0).UTC(), "-9223372036854775808", "-9223372036854775808000", "-9223372036854775808000000", "-9223372036854775808000000000"},
-	}
-	for _, tt := range formatDurationTestdata {
-		out = append(out, formatTimeTestdataEntry{time.Unix(0, int64(tt.td)).UTC(), tt.base10Sec, tt.base10Milli, tt.base10Micro, tt.base10Nano})
-	}
-	return out
-}()
-
-func TestFormatTime(t *testing.T) {
-	var gotBuf []byte
-	check := func(ts time.Time, s string, pow10 uint64) {
-		gotBuf = appendTimeUnix(gotBuf[:0], ts, pow10)
-		if string(gotBuf) != s {
-			t.Errorf("formatTime(time.Unix(%d, %d), %s) = %q, want %q", ts.Unix(), ts.Nanosecond(), baseLabel(pow10), string(gotBuf), s)
-		}
-		gotTS, err := parseTimeUnix(gotBuf, pow10)
-		if err != nil {
-			t.Errorf("parseTime(%q, %s) error: %v", gotBuf, baseLabel(pow10), err)
-		}
-		if !gotTS.Equal(ts) {
-			t.Errorf("parseTime(%q, %s) = time.Unix(%d, %d), want time.Unix(%d, %d)", gotBuf, baseLabel(pow10), gotTS.Unix(), gotTS.Nanosecond(), ts.Unix(), ts.Nanosecond())
-		}
-	}
-	for _, tt := range formatTimeTestdata {
-		check(tt.ts, tt.unixSec, 1e0)
-		check(tt.ts, tt.unixMilli, 1e3)
-		check(tt.ts, tt.unixMicro, 1e6)
-		check(tt.ts, tt.unixNano, 1e9)
-	}
-}
-
-var parseTimeTestdata = []struct {
-	in      string
-	base    uint64
-	want    time.Time
-	wantErr bool
-}{
-	{"0", 1e0, time.Unix(0, 0).UTC(), false},
-	{"0.", 1e0, time.Time{}, true},
-	{"0.0", 1e0, time.Unix(0, 0).UTC(), false},
-	{"0.00", 1e0, time.Unix(0, 0).UTC(), false},
-	{"00.0", 1e0, time.Time{}, true},
-	{"+0", 1e0, time.Time{}, true},
-	{"1e0", 1e0, time.Time{}, true},
-	{"1234567890123456789012345678901234567890", 1e0, time.Time{}, true},
-	{"9223372036854775808000.000000", 1e3, time.Time{}, true},
-	{"9223372036854775807999999.9999", 1e6, time.Unix(math.MaxInt64, 1e9-1).UTC(), false},
-	{"9223372036854775807999999999.9", 1e9, time.Unix(math.MaxInt64, 1e9-1).UTC(), false},
-	{"9223372036854775807.999999999x", 1e0, time.Time{}, true},
-	{"9223372036854775807000000000", 1e9, time.Unix(math.MaxInt64, 0).UTC(), false},
-	{"-9223372036854775808", 1e0, time.Unix(math.MinInt64, 0).UTC(), false},
-	{"-9223372036854775808000.000001", 1e3, time.Time{}, true},
-	{"-9223372036854775808000000.0001", 1e6, time.Unix(math.MinInt64, 0).UTC(), false},
-	{"-9223372036854775808000000000.x", 1e9, time.Time{}, true},
-	{"-1234567890123456789012345678901234567890", 1e9, time.Time{}, true},
-}
-
-func TestParseTime(t *testing.T) {
-	for _, tt := range parseTimeTestdata {
-		a := timeArshaler{base: tt.base}
-		switch err := a.unmarshal([]byte(tt.in)); {
-		case a.tt != tt.want:
-			t.Errorf("parseTime(%q, %s) = time.Unix(%d, %d), want time.Unix(%d, %d)", tt.in, baseLabel(tt.base), a.tt.Unix(), a.tt.Nanosecond(), tt.want.Unix(), tt.want.Nanosecond())
-		case (err == nil) && tt.wantErr:
-			t.Errorf("parseTime(%q, %s) = (time.Unix(%d, %d), nil), want non-nil error", tt.in, baseLabel(tt.base), a.tt.Unix(), a.tt.Nanosecond())
-		case (err != nil) && !tt.wantErr:
-			t.Errorf("parseTime(%q, %s) error is non-nil, want nil", tt.in, baseLabel(tt.base))
-		}
-	}
-}
-
-func FuzzFormatTime(f *testing.F) {
-	for _, tt := range formatTimeTestdata {
-		f.Add(tt.ts.Unix(), int64(tt.ts.Nanosecond()))
-	}
-	f.Fuzz(func(t *testing.T, wantSec, wantNano int64) {
-		want := time.Unix(wantSec, int64(uint64(wantNano)%1e9)).UTC()
-		var buf []byte
-		for _, base := range [...]uint64{1e0, 1e3, 1e6, 1e9} {
-			a := timeArshaler{tt: want, base: base}
-			buf, _ = a.appendMarshal(buf[:0])
-			switch err := a.unmarshal(buf); {
-			case err != nil:
-				t.Fatalf("parseTime(%q, %s) error: %v", buf, baseLabel(base), err)
-			case a.tt != want:
-				t.Fatalf("parseTime(%q, %s) = time.Unix(%d, %d), want time.Unix(%d, %d)", buf, baseLabel(base), a.tt.Unix(), a.tt.Nanosecond(), want.Unix(), want.Nanosecond())
-			}
-		}
-	})
-}
-
-func FuzzParseTime(f *testing.F) {
-	for _, tt := range parseTimeTestdata {
-		f.Add([]byte(tt.in))
-	}
-	f.Fuzz(func(t *testing.T, in []byte) {
-		for _, base := range [...]uint64{1e0, 1e3, 1e6, 1e9} {
-			a := timeArshaler{base: base}
-			if err := a.unmarshal(in); err == nil {
-				if n, err := jsonwire.ConsumeNumber(in); err != nil || n != len(in) {
-					t.Fatalf("parseTime(%q) error is nil for invalid JSON number", in)
-				}
-			}
-		}
-	})
-}
diff --git a/src/encoding/json/v2/bench_test.go b/src/encoding/json/v2/bench_test.go
deleted file mode 100644
index a46f4ab5d37b5f..00000000000000
--- a/src/encoding/json/v2/bench_test.go
+++ /dev/null
@@ -1,647 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json_test
-
-import (
-	"bytes"
-	"cmp"
-	"fmt"
-	"io"
-	"os"
-	"path"
-	"reflect"
-	"strings"
-	"testing"
-	"testing/iotest"
-	"time"
-
-	jsonv1 "encoding/json"
-
-	jsonv1in2 "encoding/json"
-	"encoding/json/internal/jsontest"
-	"encoding/json/jsontext"
-	jsonv2 "encoding/json/v2"
-)
-
-// benchVersion is the version to benchmark (either "v1", "v1in2", or "v2").
-var benchVersion = cmp.Or(os.Getenv("BENCHMARK_VERSION"), "v2")
-
-var jsonFuncs = func() (funcs struct {
-	marshal      func(any) ([]byte, error)
-	unmarshal    func([]byte, any) error
-	encodeValue  func(w io.Writer, b []byte) error
-	encodeTokens func(w io.Writer, toks []jsontext.Token) error
-	decodeValue  func(r io.Reader) error
-	decodeTokens func(r io.Reader) error
-}) {
-	ignoreEOF := func(err error) error {
-		if err == io.EOF {
-			err = nil
-		}
-		return err
-	}
-
-	switch benchVersion {
-	case "v1":
-		funcs.marshal = jsonv1.Marshal
-		funcs.unmarshal = jsonv1.Unmarshal
-		funcs.encodeValue = func(w io.Writer, b []byte) error {
-			return jsonv1.NewEncoder(w).Encode(jsonv1.RawMessage(b))
-		}
-		funcs.decodeValue = func(r io.Reader) error {
-			var v jsonv1.RawMessage
-			return jsonv1.NewDecoder(r).Decode(&v)
-		}
-		funcs.decodeTokens = func(r io.Reader) error {
-			d := jsonv1.NewDecoder(r)
-			for {
-				if _, err := d.Token(); err != nil {
-					return ignoreEOF(err)
-				}
-			}
-		}
-	case "v1in2":
-		funcs.marshal = jsonv1in2.Marshal
-		funcs.unmarshal = jsonv1in2.Unmarshal
-		funcs.encodeValue = func(w io.Writer, b []byte) error {
-			return jsonv1in2.NewEncoder(w).Encode(jsonv1in2.RawMessage(b))
-		}
-		funcs.decodeValue = func(r io.Reader) error {
-			var v jsonv1in2.RawMessage
-			return jsonv1in2.NewDecoder(r).Decode(&v)
-		}
-		funcs.decodeTokens = func(r io.Reader) error {
-			d := jsonv1in2.NewDecoder(r)
-			for {
-				if _, err := d.Token(); err != nil {
-					return ignoreEOF(err)
-				}
-			}
-		}
-	case "v2":
-		funcs.marshal = func(v any) ([]byte, error) { return jsonv2.Marshal(v) }
-		funcs.unmarshal = func(b []byte, v any) error { return jsonv2.Unmarshal(b, v) }
-		funcs.encodeValue = func(w io.Writer, b []byte) error {
-			return jsontext.NewEncoder(w).WriteValue(b)
-		}
-		funcs.encodeTokens = func(w io.Writer, toks []jsontext.Token) error {
-			e := jsontext.NewEncoder(w)
-			for _, tok := range toks {
-				if err := e.WriteToken(tok); err != nil {
-					return err
-				}
-			}
-			return nil
-		}
-		funcs.decodeValue = func(r io.Reader) error {
-			_, err := jsontext.NewDecoder(r).ReadValue()
-			return err
-		}
-		funcs.decodeTokens = func(r io.Reader) error {
-			d := jsontext.NewDecoder(r)
-			for {
-				if _, err := d.ReadToken(); err != nil {
-					return ignoreEOF(err)
-				}
-			}
-		}
-	default:
-		panic("unknown version: " + benchVersion)
-	}
-	return
-}()
-
-// bytesBuffer is identical to bytes.Buffer,
-// but a different type to avoid any optimizations for bytes.Buffer.
-type bytesBuffer struct{ *bytes.Buffer }
-
-func addr[T any](v T) *T {
-	return &v
-}
-
-func len64[Bytes ~[]byte | ~string](in Bytes) int64 {
-	return int64(len(in))
-}
-
-var arshalTestdata = []struct {
-	name   string
-	raw    []byte
-	val    any
-	new    func() any
-	skipV1 bool
-}{{
-	name: "Bool",
-	raw:  []byte("true"),
-	val:  addr(true),
-	new:  func() any { return new(bool) },
-}, {
-	name: "String",
-	raw:  []byte(`"hello, world!"`),
-	val:  addr("hello, world!"),
-	new:  func() any { return new(string) },
-}, {
-	name: "Int",
-	raw:  []byte("-1234"),
-	val:  addr(int64(-1234)),
-	new:  func() any { return new(int64) },
-}, {
-	name: "Uint",
-	raw:  []byte("1234"),
-	val:  addr(uint64(1234)),
-	new:  func() any { return new(uint64) },
-}, {
-	name: "Float",
-	raw:  []byte("12.34"),
-	val:  addr(float64(12.34)),
-	new:  func() any { return new(float64) },
-}, {
-	name: "Map/ManyEmpty",
-	raw:  []byte(`[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]`),
-	val: addr(func() (out []map[string]string) {
-		for range 100 {
-			out = append(out, map[string]string{})
-		}
-		return out
-	}()),
-	new: func() any { return new([]map[string]string) },
-}, {
-	name: "Map/OneLarge",
-	raw:  []byte(`{"A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H","I":"I","J":"J","K":"K","L":"L","M":"M","N":"N","O":"O","P":"P","Q":"Q","R":"R","S":"S","T":"T","U":"U","V":"V","W":"W","X":"X","Y":"Y","Z":"Z"}`),
-	val:  addr(map[string]string{"A": "A", "B": "B", "C": "C", "D": "D", "E": "E", "F": "F", "G": "G", "H": "H", "I": "I", "J": "J", "K": "K", "L": "L", "M": "M", "N": "N", "O": "O", "P": "P", "Q": "Q", "R": "R", "S": "S", "T": "T", "U": "U", "V": "V", "W": "W", "X": "X", "Y": "Y", "Z": "Z"}),
-	new:  func() any { return new(map[string]string) },
-}, {
-	name: "Map/ManySmall",
-	raw:  []byte(`{"A":{"K":"V"},"B":{"K":"V"},"C":{"K":"V"},"D":{"K":"V"},"E":{"K":"V"},"F":{"K":"V"},"G":{"K":"V"},"H":{"K":"V"},"I":{"K":"V"},"J":{"K":"V"},"K":{"K":"V"},"L":{"K":"V"},"M":{"K":"V"},"N":{"K":"V"},"O":{"K":"V"},"P":{"K":"V"},"Q":{"K":"V"},"R":{"K":"V"},"S":{"K":"V"},"T":{"K":"V"},"U":{"K":"V"},"V":{"K":"V"},"W":{"K":"V"},"X":{"K":"V"},"Y":{"K":"V"},"Z":{"K":"V"}}`),
-	val:  addr(map[string]map[string]string{"A": {"K": "V"}, "B": {"K": "V"}, "C": {"K": "V"}, "D": {"K": "V"}, "E": {"K": "V"}, "F": {"K": "V"}, "G": {"K": "V"}, "H": {"K": "V"}, "I": {"K": "V"}, "J": {"K": "V"}, "K": {"K": "V"}, "L": {"K": "V"}, "M": {"K": "V"}, "N": {"K": "V"}, "O": {"K": "V"}, "P": {"K": "V"}, "Q": {"K": "V"}, "R": {"K": "V"}, "S": {"K": "V"}, "T": {"K": "V"}, "U": {"K": "V"}, "V": {"K": "V"}, "W": {"K": "V"}, "X": {"K": "V"}, "Y": {"K": "V"}, "Z": {"K": "V"}}),
-	new:  func() any { return new(map[string]map[string]string) },
-}, {
-	name: "Struct/ManyEmpty",
-	raw:  []byte(`[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]`),
-	val:  addr(make([]struct{}, 100)),
-	new: func() any {
-		return new([]struct{})
-	},
-}, {
-	name: "Struct/OneLarge",
-	raw:  []byte(`{"A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H","I":"I","J":"J","K":"K","L":"L","M":"M","N":"N","O":"O","P":"P","Q":"Q","R":"R","S":"S","T":"T","U":"U","V":"V","W":"W","X":"X","Y":"Y","Z":"Z"}`),
-	val:  addr(struct{ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z string }{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}),
-	new: func() any {
-		return new(struct{ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z string })
-	},
-}, {
-	name: "Struct/ManySmall",
-	raw:  []byte(`{"A":{"K":"V"},"B":{"K":"V"},"C":{"K":"V"},"D":{"K":"V"},"E":{"K":"V"},"F":{"K":"V"},"G":{"K":"V"},"H":{"K":"V"},"I":{"K":"V"},"J":{"K":"V"},"K":{"K":"V"},"L":{"K":"V"},"M":{"K":"V"},"N":{"K":"V"},"O":{"K":"V"},"P":{"K":"V"},"Q":{"K":"V"},"R":{"K":"V"},"S":{"K":"V"},"T":{"K":"V"},"U":{"K":"V"},"V":{"K":"V"},"W":{"K":"V"},"X":{"K":"V"},"Y":{"K":"V"},"Z":{"K":"V"}}`),
-	val: func() any {
-		V := struct{ K string }{"V"}
-		return addr(struct{ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z struct{ K string } }{
-			V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V, V,
-		})
-	}(),
-	new: func() any {
-		return new(struct{ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z struct{ K string } })
-	},
-}, {
-	name: "Slice/ManyEmpty",
-	raw:  []byte(`[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]`),
-	val: addr(func() (out [][]string) {
-		for range 100 {
-			out = append(out, []string{})
-		}
-		return out
-	}()),
-	new: func() any { return new([][]string) },
-}, {
-	name: "Slice/OneLarge",
-	raw:  []byte(`["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]`),
-	val:  addr([]string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}),
-	new:  func() any { return new([]string) },
-}, {
-	name: "Slice/ManySmall",
-	raw:  []byte(`[["A"],["B"],["C"],["D"],["E"],["F"],["G"],["H"],["I"],["J"],["K"],["L"],["M"],["N"],["O"],["P"],["Q"],["R"],["S"],["T"],["U"],["V"],["W"],["X"],["Y"],["Z"]]`),
-	val:  addr([][]string{{"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, {"G"}, {"H"}, {"I"}, {"J"}, {"K"}, {"L"}, {"M"}, {"N"}, {"O"}, {"P"}, {"Q"}, {"R"}, {"S"}, {"T"}, {"U"}, {"V"}, {"W"}, {"X"}, {"Y"}, {"Z"}}),
-	new:  func() any { return new([][]string) },
-}, {
-	name: "Array/OneLarge",
-	raw:  []byte(`["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]`),
-	val:  addr([26]string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}),
-	new:  func() any { return new([26]string) },
-}, {
-	name: "Array/ManySmall",
-	raw:  []byte(`[["A"],["B"],["C"],["D"],["E"],["F"],["G"],["H"],["I"],["J"],["K"],["L"],["M"],["N"],["O"],["P"],["Q"],["R"],["S"],["T"],["U"],["V"],["W"],["X"],["Y"],["Z"]]`),
-	val:  addr([26][1]string{{"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, {"G"}, {"H"}, {"I"}, {"J"}, {"K"}, {"L"}, {"M"}, {"N"}, {"O"}, {"P"}, {"Q"}, {"R"}, {"S"}, {"T"}, {"U"}, {"V"}, {"W"}, {"X"}, {"Y"}, {"Z"}}),
-	new:  func() any { return new([26][1]string) },
-}, {
-	name: "Bytes/Slice",
-	raw:  []byte(`"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="`),
-	val:  addr([]byte{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}),
-	new:  func() any { return new([]byte) },
-}, {
-	name:   "Bytes/Array",
-	raw:    []byte(`"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="`),
-	val:    addr([32]byte{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}),
-	new:    func() any { return new([32]byte) },
-	skipV1: true,
-}, {
-	name: "Pointer",
-	raw:  []byte("true"),
-	val:  addr(addr(addr(addr(addr(addr(addr(addr(addr(addr(addr(true))))))))))),
-	new:  func() any { return new(**********bool) },
-}, {
-	name: "TextArshal",
-	raw:  []byte(`"method"`),
-	val:  new(textArshaler),
-	new:  func() any { return new(textArshaler) },
-}, {
-	name: "JSONArshalV1",
-	raw:  []byte(`"method"`),
-	val:  new(jsonArshalerV1),
-	new:  func() any { return new(jsonArshalerV1) },
-}, {
-	name:   "JSONArshalV2",
-	raw:    []byte(`"method"`),
-	val:    new(jsonArshalerV2),
-	new:    func() any { return new(jsonArshalerV2) },
-	skipV1: true,
-}, {
-	name:   "Duration",
-	raw:    []byte(`"1h1m1s"`),
-	val:    addr(time.Hour + time.Minute + time.Second),
-	new:    func() any { return new(time.Duration) },
-	skipV1: true,
-}, {
-	name: "Time",
-	raw:  []byte(`"2006-01-02T22:04:05Z"`),
-	val:  addr(time.Unix(1136239445, 0).UTC()),
-	new:  func() any { return new(time.Time) },
-}}
-
-type textArshaler struct{ _ [4]int }
-
-func (textArshaler) MarshalText() ([]byte, error) {
-	return []byte("method"), nil
-}
-func (*textArshaler) UnmarshalText(b []byte) error {
-	if string(b) != "method" {
-		return fmt.Errorf("UnmarshalText: got %q, want %q", b, "method")
-	}
-	return nil
-}
-
-type jsonArshalerV1 struct{ _ [4]int }
-
-func (jsonArshalerV1) MarshalJSON() ([]byte, error) {
-	return []byte(`"method"`), nil
-}
-func (*jsonArshalerV1) UnmarshalJSON(b []byte) error {
-	if string(b) != `"method"` {
-		return fmt.Errorf("UnmarshalJSON: got %q, want %q", b, `"method"`)
-	}
-	return nil
-}
-
-type jsonArshalerV2 struct{ _ [4]int }
-
-func (jsonArshalerV2) MarshalJSONTo(enc *jsontext.Encoder) error {
-	return enc.WriteToken(jsontext.String("method"))
-}
-func (*jsonArshalerV2) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	b, err := dec.ReadValue()
-	if string(b) != `"method"` {
-		return fmt.Errorf("UnmarshalJSONFrom: got %q, want %q", b, `"method"`)
-	}
-	return err
-}
-
-func TestBenchmarkUnmarshal(t *testing.T) { runUnmarshal(t) }
-func BenchmarkUnmarshal(b *testing.B)     { runUnmarshal(b) }
-
-func runUnmarshal(tb testing.TB) {
-	for _, tt := range arshalTestdata {
-		if tt.skipV1 && strings.HasPrefix(benchVersion, "v1") {
-			runTestOrBench(tb, tt.name, 0, func(tb testing.TB) { tb.Skip("not supported in v1") })
-			return
-		}
-
-		// Setup the unmarshal operation.
-		var val any
-		run := func(tb testing.TB) {
-			val = tt.new()
-			if err := jsonFuncs.unmarshal(tt.raw, val); err != nil {
-				tb.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-
-		// Verify the results.
-		if _, ok := tb.(*testing.T); ok {
-			run0 := run
-			run = func(tb testing.TB) {
-				run0(tb)
-				if !reflect.DeepEqual(val, tt.val) {
-					tb.Fatalf("Unmarshal output mismatch:\ngot  %v\nwant %v", val, tt.val)
-				}
-			}
-		}
-
-		runTestOrBench(tb, tt.name, len64(tt.raw), run)
-	}
-}
-
-func TestBenchmarkMarshal(t *testing.T) { runMarshal(t) }
-func BenchmarkMarshal(b *testing.B)     { runMarshal(b) }
-
-func runMarshal(tb testing.TB) {
-	for _, tt := range arshalTestdata {
-		if tt.skipV1 && strings.HasPrefix(benchVersion, "v1") {
-			runTestOrBench(tb, tt.name, 0, func(tb testing.TB) { tb.Skip("not supported in v1") })
-			return
-		}
-
-		// Setup the marshal operation.
-		var raw []byte
-		run := func(tb testing.TB) {
-			var err error
-			raw, err = jsonFuncs.marshal(tt.val)
-			if err != nil {
-				tb.Fatalf("Marshal error: %v", err)
-			}
-		}
-
-		// Verify the results.
-		if _, ok := tb.(*testing.T); ok {
-			run0 := run
-			run = func(tb testing.TB) {
-				run0(tb)
-				if !bytes.Equal(raw, tt.raw) {
-					// Map marshaling in v2 is non-deterministic.
-					byteHistogram := func(b []byte) (h [256]int) {
-						for _, c := range b {
-							h[c]++
-						}
-						return h
-					}
-					if !(strings.HasPrefix(tt.name, "Map/") && byteHistogram(raw) == byteHistogram(tt.raw)) {
-						tb.Fatalf("Marshal output mismatch:\ngot  %s\nwant %s", raw, tt.raw)
-					}
-				}
-			}
-		}
-
-		runTestOrBench(tb, tt.name, len64(tt.raw), run)
-	}
-}
-
-func TestBenchmarkTestdata(t *testing.T) { runAllTestdata(t) }
-func BenchmarkTestdata(b *testing.B)     { runAllTestdata(b) }
-
-func runAllTestdata(tb testing.TB) {
-	for _, td := range jsontest.Data {
-		for _, arshalName := range []string{"Marshal", "Unmarshal"} {
-			for _, typeName := range []string{"Concrete", "Interface"} {
-				newValue := func() any { return new(any) }
-				if typeName == "Concrete" {
-					if td.New == nil {
-						continue
-					}
-					newValue = td.New
-				}
-				value := mustUnmarshalValue(tb, td.Data(), newValue)
-				name := path.Join(td.Name, arshalName, typeName)
-				runTestOrBench(tb, name, int64(len(td.Data())), func(tb testing.TB) {
-					runArshal(tb, arshalName, newValue, td.Data(), value)
-				})
-			}
-		}
-
-		tokens := mustDecodeTokens(tb, td.Data())
-		buffer := make([]byte, 0, 2*len(td.Data()))
-		for _, codeName := range []string{"Encode", "Decode"} {
-			for _, typeName := range []string{"Token", "Value"} {
-				for _, modeName := range []string{"Streaming", "Buffered"} {
-					name := path.Join(td.Name, codeName, typeName, modeName)
-					runTestOrBench(tb, name, int64(len(td.Data())), func(tb testing.TB) {
-						runCode(tb, codeName, typeName, modeName, buffer, td.Data(), tokens)
-					})
-				}
-			}
-		}
-	}
-}
-
-func mustUnmarshalValue(t testing.TB, data []byte, newValue func() any) (value any) {
-	value = newValue()
-	if err := jsonv2.Unmarshal(data, value); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	return value
-}
-
-func runArshal(t testing.TB, arshalName string, newValue func() any, data []byte, value any) {
-	switch arshalName {
-	case "Marshal":
-		if _, err := jsonFuncs.marshal(value); err != nil {
-			t.Fatalf("Marshal error: %v", err)
-		}
-	case "Unmarshal":
-		if err := jsonFuncs.unmarshal(data, newValue()); err != nil {
-			t.Fatalf("Unmarshal error: %v", err)
-		}
-	}
-}
-
-func mustDecodeTokens(t testing.TB, data []byte) []jsontext.Token {
-	var tokens []jsontext.Token
-	dec := jsontext.NewDecoder(bytes.NewReader(data))
-	for {
-		tok, err := dec.ReadToken()
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			t.Fatalf("Decoder.ReadToken error: %v", err)
-		}
-
-		// Prefer exact representation for JSON strings and numbers
-		// since this more closely matches common use cases.
-		switch tok.Kind() {
-		case '"':
-			tokens = append(tokens, jsontext.String(tok.String()))
-		case '0':
-			tokens = append(tokens, jsontext.Float(tok.Float()))
-		default:
-			tokens = append(tokens, tok.Clone())
-		}
-	}
-	return tokens
-}
-
-func runCode(t testing.TB, codeName, typeName, modeName string, buffer, data []byte, tokens []jsontext.Token) {
-	switch codeName {
-	case "Encode":
-		runEncode(t, typeName, modeName, buffer, data, tokens)
-	case "Decode":
-		runDecode(t, typeName, modeName, buffer, data, tokens)
-	}
-}
-
-func runEncode(t testing.TB, typeName, modeName string, buffer, data []byte, tokens []jsontext.Token) {
-	if strings.HasPrefix(benchVersion, "v1") {
-		switch {
-		case modeName == "Buffered":
-			t.Skip("no support for direct buffered output in v1; see https://go.dev/issue/7872")
-		case typeName == "Token":
-			t.Skip("no support for encoding tokens in v1; see https://go.dev/issue/40127")
-		}
-	}
-
-	var w io.Writer
-	switch modeName {
-	case "Streaming":
-		w = bytesBuffer{bytes.NewBuffer(buffer[:0])}
-	case "Buffered":
-		w = bytes.NewBuffer(buffer[:0])
-	}
-	switch typeName {
-	case "Token":
-		if err := jsonFuncs.encodeTokens(w, tokens); err != nil {
-			t.Fatalf("Encoder.WriteToken error: %v", err)
-		}
-	case "Value":
-		if err := jsonFuncs.encodeValue(w, data); err != nil {
-			t.Fatalf("Encoder.WriteValue error: %v", err)
-		}
-	}
-}
-
-func runDecode(t testing.TB, typeName, modeName string, buffer, data []byte, tokens []jsontext.Token) {
-	if strings.HasPrefix(benchVersion, "v1") && modeName == "Buffered" {
-		t.Skip("no support for direct buffered input in v1; see https://go.dev/issue/11046")
-	}
-
-	var r io.Reader
-	switch modeName {
-	case "Streaming":
-		r = bytesBuffer{bytes.NewBuffer(data)}
-	case "Buffered":
-		r = bytes.NewBuffer(data)
-	}
-	switch typeName {
-	case "Token":
-		if err := jsonFuncs.decodeTokens(r); err != nil {
-			t.Fatalf("Decoder.ReadToken error: %v", err)
-		}
-	case "Value":
-		if err := jsonFuncs.decodeValue(r); err != nil {
-			t.Fatalf("Decoder.ReadValue error: %v", err)
-		}
-	}
-}
-
-var ws = strings.Repeat(" ", 4<<10)
-var slowStreamingDecodeTestdata = []struct {
-	name string
-	data []byte
-}{
-	{"LargeString", []byte(`"` + strings.Repeat(" ", 4<<10) + `"`)},
-	{"LargeNumber", []byte("0." + strings.Repeat("0", 4<<10))},
-	{"LargeWhitespace/Null", []byte(ws + "null" + ws)},
-	{"LargeWhitespace/Object", []byte(ws + "{" + ws + `"name1"` + ws + ":" + ws + `"value"` + ws + "," + ws + `"name2"` + ws + ":" + ws + `"value"` + ws + "}" + ws)},
-	{"LargeWhitespace/Array", []byte(ws + "[" + ws + `"value"` + ws + "," + ws + `"value"` + ws + "]" + ws)},
-}
-
-func TestBenchmarkSlowStreamingDecode(t *testing.T) { runAllSlowStreamingDecode(t) }
-func BenchmarkSlowStreamingDecode(b *testing.B)     { runAllSlowStreamingDecode(b) }
-
-func runAllSlowStreamingDecode(tb testing.TB) {
-	for _, td := range slowStreamingDecodeTestdata {
-		for _, typeName := range []string{"Token", "Value"} {
-			name := path.Join(td.name, typeName)
-			runTestOrBench(tb, name, len64(td.data), func(tb testing.TB) {
-				runSlowStreamingDecode(tb, typeName, td.data)
-			})
-		}
-	}
-}
-
-// runSlowStreamingDecode tests a streaming Decoder operating on
-// a slow io.Reader that only returns 1 byte at a time,
-// which tends to exercise pathological behavior.
-func runSlowStreamingDecode(t testing.TB, typeName string, data []byte) {
-	r := iotest.OneByteReader(bytes.NewReader(data))
-	switch typeName {
-	case "Token":
-		if err := jsonFuncs.decodeTokens(r); err != nil {
-			t.Fatalf("Decoder.ReadToken error: %v", err)
-		}
-	case "Value":
-		if err := jsonFuncs.decodeValue(r); err != nil {
-			t.Fatalf("Decoder.ReadValue error: %v", err)
-		}
-	}
-}
-
-func TestBenchmarkTextValue(t *testing.T) { runValue(t) }
-func BenchmarkTextValue(b *testing.B)     { runValue(b) }
-
-func runValue(tb testing.TB) {
-	if testing.Short() {
-		tb.Skip() // CitmCatalog is not loaded in short mode
-	}
-	var data []byte
-	for _, ts := range jsontest.Data {
-		if ts.Name == "CitmCatalog" {
-			data = ts.Data()
-		}
-	}
-
-	runTestOrBench(tb, "IsValid", len64(data), func(tb testing.TB) {
-		jsontext.Value(data).IsValid()
-	})
-
-	methods := []struct {
-		name   string
-		format func(*jsontext.Value, ...jsontext.Options) error
-	}{
-		{"Compact", (*jsontext.Value).Compact},
-		{"Indent", (*jsontext.Value).Indent},
-		{"Canonicalize", (*jsontext.Value).Canonicalize},
-	}
-
-	var v jsontext.Value
-	for _, method := range methods {
-		runTestOrBench(tb, method.name, len64(data), func(tb testing.TB) {
-			v = append(v[:0], data...) // reset with original input
-			if err := method.format(&v); err != nil {
-				tb.Errorf("jsontext.Value.%v error: %v", method.name, err)
-			}
-		})
-		v = append(v[:0], data...)
-		method.format(&v)
-		runTestOrBench(tb, method.name+"/Noop", len64(data), func(tb testing.TB) {
-			if err := method.format(&v); err != nil {
-				tb.Errorf("jsontext.Value.%v error: %v", method.name, err)
-			}
-		})
-	}
-}
-
-func runTestOrBench(tb testing.TB, name string, numBytes int64, run func(tb testing.TB)) {
-	switch tb := tb.(type) {
-	case *testing.T:
-		tb.Run(name, func(t *testing.T) {
-			run(t)
-		})
-	case *testing.B:
-		tb.Run(name, func(b *testing.B) {
-			b.ResetTimer()
-			b.ReportAllocs()
-			b.SetBytes(numBytes)
-			for range b.N {
-				run(b)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/v2/doc.go b/src/encoding/json/v2/doc.go
deleted file mode 100644
index 203139754c2034..00000000000000
--- a/src/encoding/json/v2/doc.go
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-// Package json implements semantic processing of JSON as specified in RFC 8259.
-// JSON is a simple data interchange format that can represent
-// primitive data types such as booleans, strings, and numbers,
-// in addition to structured data types such as objects and arrays.
-//
-// This package (encoding/json/v2) is experimental,
-// and not subject to the Go 1 compatibility promise.
-// It only exists when building with the GOEXPERIMENT=jsonv2 environment variable set.
-// Most users should use [encoding/json].
-//
-// [Marshal] and [Unmarshal] encode and decode Go values
-// to/from JSON text contained within a []byte.
-// [MarshalWrite] and [UnmarshalRead] operate on JSON text
-// by writing to or reading from an [io.Writer] or [io.Reader].
-// [MarshalEncode] and [UnmarshalDecode] operate on JSON text
-// by encoding to or decoding from a [jsontext.Encoder] or [jsontext.Decoder].
-// [Options] may be passed to each of the marshal or unmarshal functions
-// to configure the semantic behavior of marshaling and unmarshaling
-// (i.e., alter how JSON data is understood as Go data and vice versa).
-// [jsontext.Options] may also be passed to the marshal or unmarshal functions
-// to configure the syntactic behavior of encoding or decoding.
-//
-// The data types of JSON are mapped to/from the data types of Go based on
-// the closest logical equivalent between the two type systems. For example,
-// a JSON boolean corresponds with a Go bool,
-// a JSON string corresponds with a Go string,
-// a JSON number corresponds with a Go int, uint or float,
-// a JSON array corresponds with a Go slice or array, and
-// a JSON object corresponds with a Go struct or map.
-// See the documentation on [Marshal] and [Unmarshal] for a comprehensive list
-// of how the JSON and Go type systems correspond.
-//
-// Arbitrary Go types can customize their JSON representation by implementing
-// [Marshaler], [MarshalerTo], [Unmarshaler], or [UnmarshalerFrom].
-// This provides authors of Go types with control over how their types are
-// serialized as JSON. Alternatively, users can implement functions that match
-// [MarshalFunc], [MarshalToFunc], [UnmarshalFunc], or [UnmarshalFromFunc]
-// to specify the JSON representation for arbitrary types.
-// This provides callers of JSON functionality with control over
-// how any arbitrary type is serialized as JSON.
-//
-// # JSON Representation of Go structs
-//
-// A Go struct is naturally represented as a JSON object,
-// where each Go struct field corresponds with a JSON object member.
-// When marshaling, all Go struct fields are recursively encoded in depth-first
-// order as JSON object members except those that are ignored or omitted.
-// When unmarshaling, JSON object members are recursively decoded
-// into the corresponding Go struct fields.
-// Object members that do not match any struct fields,
-// also known as “unknown members”, are ignored by default or rejected
-// if [RejectUnknownMembers] is specified.
-//
-// The representation of each struct field can be customized in the
-// "json" struct field tag, where the tag is a comma separated list of options.
-// As a special case, if the entire tag is `json:"-"`,
-// then the field is ignored with regard to its JSON representation.
-// Some options also have equivalent behavior controlled by a caller-specified [Options].
-// Field-specified options take precedence over caller-specified options.
-//
-// The first option is the JSON object name override for the Go struct field.
-// If the name is not specified, then the Go struct field name
-// is used as the JSON object name. JSON names containing commas or quotes,
-// or names identical to "" or "-", can be specified using
-// a single-quoted string literal, where the syntax is identical to
-// the Go grammar for a double-quoted string literal,
-// but instead uses single quotes as the delimiters.
-// By default, unmarshaling uses case-sensitive matching to identify
-// the Go struct field associated with a JSON object name.
-//
-// After the name, the following tag options are supported:
-//
-//   - omitzero: When marshaling, the "omitzero" option specifies that
-//     the struct field should be omitted if the field value is zero
-//     as determined by the "IsZero() bool" method if present,
-//     otherwise based on whether the field is the zero Go value.
-//     This option has no effect when unmarshaling.
-//
-//   - omitempty: When marshaling, the "omitempty" option specifies that
-//     the struct field should be omitted if the field value would have been
-//     encoded as a JSON null, empty string, empty object, or empty array.
-//     This option has no effect when unmarshaling.
-//
-//   - string: The "string" option specifies that [StringifyNumbers]
-//     be set when marshaling or unmarshaling a struct field value.
-//     This causes numeric types to be encoded as a JSON number
-//     within a JSON string, and to be decoded from a JSON string
-//     containing the JSON number without any surrounding whitespace.
-//     This extra level of encoding is often necessary since
-//     many JSON parsers cannot precisely represent 64-bit integers.
-//
-//   - case: When unmarshaling, the "case" option specifies how
-//     JSON object names are matched with the JSON name for Go struct fields.
-//     The option is a key-value pair specified as "case:value" where
-//     the value must either be 'ignore' or 'strict'.
-//     The 'ignore' value specifies that matching is case-insensitive
-//     where dashes and underscores are also ignored. If multiple fields match,
-//     the first declared field in breadth-first order takes precedence.
-//     The 'strict' value specifies that matching is case-sensitive.
-//     This takes precedence over the [MatchCaseInsensitiveNames] option.
-//
-//   - inline: The "inline" option specifies that
-//     the JSON representable content of this field type is to be promoted
-//     as if they were specified in the parent struct.
-//     It is the JSON equivalent of Go struct embedding.
-//     A Go embedded field is implicitly inlined unless an explicit JSON name
-//     is specified. The inlined field must be a Go struct
-//     (that does not implement any JSON methods), [jsontext.Value],
-//     map[~string]T, or an unnamed pointer to such types. When marshaling,
-//     inlined fields from a pointer type are omitted if it is nil.
-//     Inlined fields of type [jsontext.Value] and map[~string]T are called
-//     “inlined fallbacks” as they can represent all possible
-//     JSON object members not directly handled by the parent struct.
-//     Only one inlined fallback field may be specified in a struct,
-//     while many non-fallback fields may be specified. This option
-//     must not be specified with any other option (including the JSON name).
-//
-//   - unknown: The "unknown" option is a specialized variant
-//     of the inlined fallback to indicate that this Go struct field
-//     contains any number of unknown JSON object members. The field type must
-//     be a [jsontext.Value], map[~string]T, or an unnamed pointer to such types.
-//     If [DiscardUnknownMembers] is specified when marshaling,
-//     the contents of this field are ignored.
-//     If [RejectUnknownMembers] is specified when unmarshaling,
-//     any unknown object members are rejected regardless of whether
-//     an inlined fallback with the "unknown" option exists. This option
-//     must not be specified with any other option (including the JSON name).
-//
-//   - format: The "format" option specifies a format flag
-//     used to specialize the formatting of the field value.
-//     The option is a key-value pair specified as "format:value" where
-//     the value must be either a literal consisting of letters and numbers
-//     (e.g., "format:RFC3339") or a single-quoted string literal
-//     (e.g., "format:'2006-01-02'"). The interpretation of the format flag
-//     is determined by the struct field type.
-//
-// The "omitzero" and "omitempty" options are mostly semantically identical.
-// The former is defined in terms of the Go type system,
-// while the latter in terms of the JSON type system.
-// Consequently they behave differently in some circumstances.
-// For example, only a nil slice or map is omitted under "omitzero", while
-// an empty slice or map is omitted under "omitempty" regardless of nilness.
-// The "omitzero" option is useful for types with a well-defined zero value
-// (e.g., [net/netip.Addr]) or have an IsZero method (e.g., [time.Time.IsZero]).
-//
-// Every Go struct corresponds to a list of JSON representable fields
-// which is constructed by performing a breadth-first search over
-// all struct fields (excluding unexported or ignored fields),
-// where the search recursively descends into inlined structs.
-// The set of non-inlined fields in a struct must have unique JSON names.
-// If multiple fields all have the same JSON name, then the one
-// at shallowest depth takes precedence and the other fields at deeper depths
-// are excluded from the list of JSON representable fields.
-// If multiple fields at the shallowest depth have the same JSON name,
-// but exactly one is explicitly tagged with a JSON name,
-// then that field takes precedence and all others are excluded from the list.
-// This is analogous to Go visibility rules for struct field selection
-// with embedded struct types.
-//
-// Marshaling or unmarshaling a non-empty struct
-// without any JSON representable fields results in a [SemanticError].
-// Unexported fields must not have any `json` tags except for `json:"-"`.
-package json
-
-// requireKeyedLiterals can be embedded in a struct to require keyed literals.
-type requireKeyedLiterals struct{}
-
-// nonComparable can be embedded in a struct to prevent comparability.
-type nonComparable [0]func()
diff --git a/src/encoding/json/v2/errors.go b/src/encoding/json/v2/errors.go
deleted file mode 100644
index 48cdcc953b5f71..00000000000000
--- a/src/encoding/json/v2/errors.go
+++ /dev/null
@@ -1,420 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"cmp"
-	"errors"
-	"fmt"
-	"reflect"
-	"strconv"
-	"strings"
-	"sync"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-// ErrUnknownName indicates that a JSON object member could not be
-// unmarshaled because the name is not known to the target Go struct.
-// This error is directly wrapped within a [SemanticError] when produced.
-//
-// The name of an unknown JSON object member can be extracted as:
-//
-//	err := ...
-//	var serr json.SemanticError
-//	if errors.As(err, &serr) && serr.Err == json.ErrUnknownName {
-//		ptr := serr.JSONPointer // JSON pointer to unknown name
-//		name := ptr.LastToken() // unknown name itself
-//		...
-//	}
-//
-// This error is only returned if [RejectUnknownMembers] is true.
-var ErrUnknownName = errors.New("unknown object member name")
-
-const errorPrefix = "json: "
-
-func isSemanticError(err error) bool {
-	_, ok := err.(*SemanticError)
-	return ok
-}
-
-func isSyntacticError(err error) bool {
-	_, ok := err.(*jsontext.SyntacticError)
-	return ok
-}
-
-// isFatalError reports whether this error must terminate asharling.
-// All errors are considered fatal unless operating under
-// [jsonflags.ReportErrorsWithLegacySemantics] in which case only
-// syntactic errors and I/O errors are considered fatal.
-func isFatalError(err error, flags jsonflags.Flags) bool {
-	return !flags.Get(jsonflags.ReportErrorsWithLegacySemantics) ||
-		isSyntacticError(err) || export.IsIOError(err)
-}
-
-// SemanticError describes an error determining the meaning
-// of JSON data as Go data or vice-versa.
-//
-// The contents of this error as produced by this package may change over time.
-type SemanticError struct {
-	requireKeyedLiterals
-	nonComparable
-
-	action string // either "marshal" or "unmarshal"
-
-	// ByteOffset indicates that an error occurred after this byte offset.
-	ByteOffset int64
-	// JSONPointer indicates that an error occurred within this JSON value
-	// as indicated using the JSON Pointer notation (see RFC 6901).
-	JSONPointer jsontext.Pointer
-
-	// JSONKind is the JSON kind that could not be handled.
-	JSONKind jsontext.Kind // may be zero if unknown
-	// JSONValue is the JSON number or string that could not be unmarshaled.
-	// It is not populated during marshaling.
-	JSONValue jsontext.Value // may be nil if irrelevant or unknown
-	// GoType is the Go type that could not be handled.
-	GoType reflect.Type // may be nil if unknown
-
-	// Err is the underlying error.
-	Err error // may be nil
-}
-
-// coder is implemented by [jsontext.Encoder] or [jsontext.Decoder].
-type coder interface{ StackPointer() jsontext.Pointer }
-
-// newInvalidFormatError wraps err in a SemanticError because
-// the current type t cannot handle the provided options format.
-// This error must be called before producing or consuming the next value.
-//
-// If [jsonflags.ReportErrorsWithLegacySemantics] is specified,
-// then this automatically skips the next value when unmarshaling
-// to ensure that the value is fully consumed.
-func newInvalidFormatError(c coder, t reflect.Type, o *jsonopts.Struct) error {
-	err := fmt.Errorf("invalid format flag %q", o.Format)
-	switch c := c.(type) {
-	case *jsontext.Encoder:
-		err = newMarshalErrorBefore(c, t, err)
-	case *jsontext.Decoder:
-		err = newUnmarshalErrorBeforeWithSkipping(c, o, t, err)
-	}
-	return err
-}
-
-// newMarshalErrorBefore wraps err in a SemanticError assuming that e
-// is positioned right before the next token or value, which causes an error.
-func newMarshalErrorBefore(e *jsontext.Encoder, t reflect.Type, err error) error {
-	return &SemanticError{action: "marshal", GoType: t, Err: err,
-		ByteOffset:  e.OutputOffset() + int64(export.Encoder(e).CountNextDelimWhitespace()),
-		JSONPointer: jsontext.Pointer(export.Encoder(e).AppendStackPointer(nil, +1))}
-}
-
-// newUnmarshalErrorBefore wraps err in a SemanticError assuming that d
-// is positioned right before the next token or value, which causes an error.
-// It does not record the next JSON kind as this error is used to indicate
-// the receiving Go value is invalid to unmarshal into (and not a JSON error).
-func newUnmarshalErrorBefore(d *jsontext.Decoder, t reflect.Type, err error) error {
-	return &SemanticError{action: "unmarshal", GoType: t, Err: err,
-		ByteOffset:  d.InputOffset() + int64(export.Decoder(d).CountNextDelimWhitespace()),
-		JSONPointer: jsontext.Pointer(export.Decoder(d).AppendStackPointer(nil, +1))}
-}
-
-// newUnmarshalErrorBeforeWithSkipping is like [newUnmarshalErrorBefore],
-// but automatically skips the next value if
-// [jsonflags.ReportErrorsWithLegacySemantics] is specified.
-func newUnmarshalErrorBeforeWithSkipping(d *jsontext.Decoder, o *jsonopts.Struct, t reflect.Type, err error) error {
-	err = newUnmarshalErrorBefore(d, t, err)
-	if o.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		if err2 := export.Decoder(d).SkipValue(); err2 != nil {
-			return err2
-		}
-	}
-	return err
-}
-
-// newUnmarshalErrorAfter wraps err in a SemanticError assuming that d
-// is positioned right after the previous token or value, which caused an error.
-func newUnmarshalErrorAfter(d *jsontext.Decoder, t reflect.Type, err error) error {
-	tokOrVal := export.Decoder(d).PreviousTokenOrValue()
-	return &SemanticError{action: "unmarshal", GoType: t, Err: err,
-		ByteOffset:  d.InputOffset() - int64(len(tokOrVal)),
-		JSONPointer: jsontext.Pointer(export.Decoder(d).AppendStackPointer(nil, -1)),
-		JSONKind:    jsontext.Value(tokOrVal).Kind()}
-}
-
-// newUnmarshalErrorAfter wraps err in a SemanticError assuming that d
-// is positioned right after the previous token or value, which caused an error.
-// It also stores a copy of the last JSON value if it is a string or number.
-func newUnmarshalErrorAfterWithValue(d *jsontext.Decoder, t reflect.Type, err error) error {
-	serr := newUnmarshalErrorAfter(d, t, err).(*SemanticError)
-	if serr.JSONKind == '"' || serr.JSONKind == '0' {
-		serr.JSONValue = jsontext.Value(export.Decoder(d).PreviousTokenOrValue()).Clone()
-	}
-	return serr
-}
-
-// newUnmarshalErrorAfterWithSkipping is like [newUnmarshalErrorAfter],
-// but automatically skips the remainder of the current value if
-// [jsonflags.ReportErrorsWithLegacySemantics] is specified.
-func newUnmarshalErrorAfterWithSkipping(d *jsontext.Decoder, o *jsonopts.Struct, t reflect.Type, err error) error {
-	err = newUnmarshalErrorAfter(d, t, err)
-	if o.Flags.Get(jsonflags.ReportErrorsWithLegacySemantics) {
-		if err2 := export.Decoder(d).SkipValueRemainder(); err2 != nil {
-			return err2
-		}
-	}
-	return err
-}
-
-// newSemanticErrorWithPosition wraps err in a SemanticError assuming that
-// the error occurred at the provided depth, and length.
-// If err is already a SemanticError, then position information is only
-// injected if it is currently unpopulated.
-//
-// If the position is unpopulated, it is ambiguous where the error occurred
-// in the user code, whether it was before or after the current position.
-// For the byte offset, we assume that the error occurred before the last read
-// token or value when decoding, or before the next value when encoding.
-// For the JSON pointer, we point to the parent object or array unless
-// we can be certain that it happened with an object member.
-//
-// This is used to annotate errors returned by user-provided
-// v2 MarshalJSON or UnmarshalJSON methods or functions.
-func newSemanticErrorWithPosition(c coder, t reflect.Type, prevDepth int, prevLength int64, err error) error {
-	serr, _ := err.(*SemanticError)
-	if serr == nil {
-		serr = &SemanticError{Err: err}
-	}
-	var currDepth int
-	var currLength int64
-	var coderState interface{ AppendStackPointer([]byte, int) []byte }
-	var offset int64
-	switch c := c.(type) {
-	case *jsontext.Encoder:
-		e := export.Encoder(c)
-		serr.action = cmp.Or(serr.action, "marshal")
-		currDepth, currLength = e.Tokens.DepthLength()
-		offset = c.OutputOffset() + int64(export.Encoder(c).CountNextDelimWhitespace())
-		coderState = e
-	case *jsontext.Decoder:
-		d := export.Decoder(c)
-		serr.action = cmp.Or(serr.action, "unmarshal")
-		currDepth, currLength = d.Tokens.DepthLength()
-		tokOrVal := d.PreviousTokenOrValue()
-		offset = c.InputOffset() - int64(len(tokOrVal))
-		if (prevDepth == currDepth && prevLength == currLength) || len(tokOrVal) == 0 {
-			// If no Read method was called in the user-defined method or
-			// if the Peek method was called, then use the offset of the next value.
-			offset = c.InputOffset() + int64(export.Decoder(c).CountNextDelimWhitespace())
-		}
-		coderState = d
-	}
-	serr.ByteOffset = cmp.Or(serr.ByteOffset, offset)
-	if serr.JSONPointer == "" {
-		where := 0 // default to ambiguous positioning
-		switch {
-		case prevDepth == currDepth && prevLength+0 == currLength:
-			where = +1
-		case prevDepth == currDepth && prevLength+1 == currLength:
-			where = -1
-		}
-		serr.JSONPointer = jsontext.Pointer(coderState.AppendStackPointer(nil, where))
-	}
-	serr.GoType = cmp.Or(serr.GoType, t)
-	return serr
-}
-
-// collapseSemanticErrors collapses double SemanticErrors at the outer levels
-// into a single SemanticError by preserving the inner error,
-// but prepending the ByteOffset and JSONPointer with the outer error.
-//
-// For example:
-//
-//	collapseSemanticErrors(&SemanticError{
-//		ByteOffset:  len64(`[0,{"alpha":[0,1,`),
-//		JSONPointer: "/1/alpha/2",
-//		GoType:      reflect.TypeFor[outerType](),
-//		Err: &SemanticError{
-//			ByteOffset:  len64(`{"foo":"bar","fizz":[0,`),
-//			JSONPointer: "/fizz/1",
-//			GoType:      reflect.TypeFor[innerType](),
-//			Err:         ...,
-//		},
-//	})
-//
-// results in:
-//
-//	&SemanticError{
-//		ByteOffset:  len64(`[0,{"alpha":[0,1,`) + len64(`{"foo":"bar","fizz":[0,`),
-//		JSONPointer: "/1/alpha/2" + "/fizz/1",
-//		GoType:      reflect.TypeFor[innerType](),
-//		Err:         ...,
-//	}
-//
-// This is used to annotate errors returned by user-provided
-// v1 MarshalJSON or UnmarshalJSON methods with precise position information
-// if they themselves happened to return a SemanticError.
-// Since MarshalJSON and UnmarshalJSON are not operating on the root JSON value,
-// their positioning must be relative to the nested JSON value
-// returned by UnmarshalJSON or passed to MarshalJSON.
-// Therefore, we can construct an absolute position by concatenating
-// the outer with the inner positions.
-//
-// Note that we do not use collapseSemanticErrors with user-provided functions
-// that take in an [jsontext.Encoder] or [jsontext.Decoder] since they contain
-// methods to report position relative to the root JSON value.
-// We assume user-constructed errors are correctly precise about position.
-func collapseSemanticErrors(err error) error {
-	if serr1, ok := err.(*SemanticError); ok {
-		if serr2, ok := serr1.Err.(*SemanticError); ok {
-			serr2.ByteOffset = serr1.ByteOffset + serr2.ByteOffset
-			serr2.JSONPointer = serr1.JSONPointer + serr2.JSONPointer
-			*serr1 = *serr2
-		}
-	}
-	return err
-}
-
-// errorModalVerb is a modal verb like "cannot" or "unable to".
-//
-// Once per process, Hyrum-proof the error message by deliberately
-// switching between equivalent renderings of the same error message.
-// The randomization is tied to the Hyrum-proofing already applied
-// on map iteration in Go.
-var errorModalVerb = sync.OnceValue(func() string {
-	for phrase := range map[string]struct{}{"cannot": {}, "unable to": {}} {
-		return phrase // use whichever phrase we get in the first iteration
-	}
-	return ""
-})
-
-func (e *SemanticError) Error() string {
-	var sb strings.Builder
-	sb.WriteString(errorPrefix)
-	sb.WriteString(errorModalVerb())
-
-	// Format action.
-	var preposition string
-	switch e.action {
-	case "marshal":
-		sb.WriteString(" marshal")
-		preposition = " from"
-	case "unmarshal":
-		sb.WriteString(" unmarshal")
-		preposition = " into"
-	default:
-		sb.WriteString(" handle")
-		preposition = " with"
-	}
-
-	// Format JSON kind.
-	switch e.JSONKind {
-	case 'n':
-		sb.WriteString(" JSON null")
-	case 'f', 't':
-		sb.WriteString(" JSON boolean")
-	case '"':
-		sb.WriteString(" JSON string")
-	case '0':
-		sb.WriteString(" JSON number")
-	case '{', '}':
-		sb.WriteString(" JSON object")
-	case '[', ']':
-		sb.WriteString(" JSON array")
-	default:
-		if e.action == "" {
-			preposition = ""
-		}
-	}
-	if len(e.JSONValue) > 0 && len(e.JSONValue) < 100 {
-		sb.WriteByte(' ')
-		sb.Write(e.JSONValue)
-	}
-
-	// Format Go type.
-	if e.GoType != nil {
-		typeString := e.GoType.String()
-		if len(typeString) > 100 {
-			// An excessively long type string most likely occurs for
-			// an anonymous struct declaration with many fields.
-			// Reduce the noise by just printing the kind,
-			// and optionally prepending it with the package name
-			// if the struct happens to include an unexported field.
-			typeString = e.GoType.Kind().String()
-			if e.GoType.Kind() == reflect.Struct && e.GoType.Name() == "" {
-				for i := range e.GoType.NumField() {
-					if pkgPath := e.GoType.Field(i).PkgPath; pkgPath != "" {
-						typeString = pkgPath[strings.LastIndexByte(pkgPath, '/')+len("/"):] + ".struct"
-						break
-					}
-				}
-			}
-		}
-		sb.WriteString(preposition)
-		sb.WriteString(" Go ")
-		sb.WriteString(typeString)
-	}
-
-	// Special handling for unknown names.
-	if e.Err == ErrUnknownName {
-		sb.WriteString(": ")
-		sb.WriteString(ErrUnknownName.Error())
-		sb.WriteString(" ")
-		sb.WriteString(strconv.Quote(e.JSONPointer.LastToken()))
-		if parent := e.JSONPointer.Parent(); parent != "" {
-			sb.WriteString(" within ")
-			sb.WriteString(strconv.Quote(jsonwire.TruncatePointer(string(parent), 100)))
-		}
-		return sb.String()
-	}
-
-	// Format where.
-	// Avoid printing if it overlaps with a wrapped SyntacticError.
-	switch serr, _ := e.Err.(*jsontext.SyntacticError); {
-	case e.JSONPointer != "":
-		if serr == nil || !e.JSONPointer.Contains(serr.JSONPointer) {
-			sb.WriteString(" within ")
-			sb.WriteString(strconv.Quote(jsonwire.TruncatePointer(string(e.JSONPointer), 100)))
-		}
-	case e.ByteOffset > 0:
-		if serr == nil || !(e.ByteOffset <= serr.ByteOffset) {
-			sb.WriteString(" after offset ")
-			sb.WriteString(strconv.FormatInt(e.ByteOffset, 10))
-		}
-	}
-
-	// Format underlying error.
-	if e.Err != nil {
-		errString := e.Err.Error()
-		if isSyntacticError(e.Err) {
-			errString = strings.TrimPrefix(errString, "jsontext: ")
-		}
-		sb.WriteString(": ")
-		sb.WriteString(errString)
-	}
-
-	return sb.String()
-}
-
-func (e *SemanticError) Unwrap() error {
-	return e.Err
-}
-
-func newDuplicateNameError(ptr jsontext.Pointer, quotedName []byte, offset int64) error {
-	if quotedName != nil {
-		name, _ := jsonwire.AppendUnquote(nil, quotedName)
-		ptr = ptr.AppendToken(string(name))
-	}
-	return &jsontext.SyntacticError{
-		ByteOffset:  offset,
-		JSONPointer: ptr,
-		Err:         jsontext.ErrDuplicateName,
-	}
-}
diff --git a/src/encoding/json/v2/errors_test.go b/src/encoding/json/v2/errors_test.go
deleted file mode 100644
index 76a7f2ae31d4c8..00000000000000
--- a/src/encoding/json/v2/errors_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"archive/tar"
-	"bytes"
-	"errors"
-	"io"
-	"strings"
-	"testing"
-
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-)
-
-func TestSemanticError(t *testing.T) {
-	tests := []struct {
-		err  error
-		want string
-	}{{
-		err:  &SemanticError{},
-		want: `json: cannot handle`,
-	}, {
-		err:  &SemanticError{JSONKind: 'n'},
-		want: `json: cannot handle JSON null`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: 't'},
-		want: `json: cannot unmarshal JSON boolean`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: 'x'},
-		want: `json: cannot unmarshal`, // invalid token kinds are ignored
-	}, {
-		err:  &SemanticError{action: "marshal", JSONKind: '"'},
-		want: `json: cannot marshal JSON string`,
-	}, {
-		err:  &SemanticError{GoType: T[bool]()},
-		want: `json: cannot handle Go bool`,
-	}, {
-		err:  &SemanticError{action: "marshal", GoType: T[int]()},
-		want: `json: cannot marshal from Go int`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", GoType: T[uint]()},
-		want: `json: cannot unmarshal into Go uint`,
-	}, {
-		err:  &SemanticError{GoType: T[struct{ Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel string }]()},
-		want: `json: cannot handle Go struct`,
-	}, {
-		err:  &SemanticError{GoType: T[struct{ Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel, x string }]()},
-		want: `json: cannot handle Go v2.struct`,
-	}, {
-		err:  &SemanticError{JSONKind: '0', GoType: T[tar.Header]()},
-		want: `json: cannot handle JSON number with Go tar.Header`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: '0', JSONValue: jsontext.Value(`1e1000`), GoType: T[int]()},
-		want: `json: cannot unmarshal JSON number 1e1000 into Go int`,
-	}, {
-		err:  &SemanticError{action: "marshal", JSONKind: '{', GoType: T[bytes.Buffer]()},
-		want: `json: cannot marshal JSON object from Go bytes.Buffer`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: ']', GoType: T[strings.Reader]()},
-		want: `json: cannot unmarshal JSON array into Go strings.Reader`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: '{', GoType: T[float64](), ByteOffset: 123},
-		want: `json: cannot unmarshal JSON object into Go float64 after offset 123`,
-	}, {
-		err:  &SemanticError{action: "marshal", JSONKind: 'f', GoType: T[complex128](), ByteOffset: 123, JSONPointer: "/foo/2/bar/3"},
-		want: `json: cannot marshal JSON boolean from Go complex128 within "/foo/2/bar/3"`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONKind: '}', GoType: T[io.Reader](), ByteOffset: 123, JSONPointer: "/foo/2/bar/3", Err: errors.New("some underlying error")},
-		want: `json: cannot unmarshal JSON object into Go io.Reader within "/foo/2/bar/3": some underlying error`,
-	}, {
-		err:  &SemanticError{Err: errors.New("some underlying error")},
-		want: `json: cannot handle: some underlying error`,
-	}, {
-		err:  &SemanticError{ByteOffset: 123},
-		want: `json: cannot handle after offset 123`,
-	}, {
-		err:  &SemanticError{JSONPointer: "/foo/2/bar/3"},
-		want: `json: cannot handle within "/foo/2/bar/3"`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONPointer: "/3", GoType: T[struct{ Fizz, Buzz string }](), Err: ErrUnknownName},
-		want: `json: cannot unmarshal into Go struct { Fizz string; Buzz string }: unknown object member name "3"`,
-	}, {
-		err:  &SemanticError{action: "unmarshal", JSONPointer: "/foo/2/bar/3", GoType: T[struct{ Foo string }](), Err: ErrUnknownName},
-		want: `json: cannot unmarshal into Go struct { Foo string }: unknown object member name "3" within "/foo/2/bar"`,
-	}, {
-		err:  &SemanticError{JSONPointer: "/foo/bar", ByteOffset: 16, GoType: T[string](), Err: &jsontext.SyntacticError{JSONPointer: "/foo/bar/baz", ByteOffset: 53, Err: jsonwire.ErrInvalidUTF8}},
-		want: `json: cannot handle Go string: invalid UTF-8 within "/foo/bar/baz" after offset 53`,
-	}, {
-		err:  &SemanticError{JSONPointer: "/fizz/bar", ByteOffset: 16, GoType: T[string](), Err: &jsontext.SyntacticError{JSONPointer: "/foo/bar/baz", ByteOffset: 53, Err: jsonwire.ErrInvalidUTF8}},
-		want: `json: cannot handle Go string within "/fizz/bar": invalid UTF-8 within "/foo/bar/baz" after offset 53`,
-	}, {
-		err:  &SemanticError{ByteOffset: 16, GoType: T[string](), Err: &jsontext.SyntacticError{JSONPointer: "/foo/bar/baz", ByteOffset: 53, Err: jsonwire.ErrInvalidUTF8}},
-		want: `json: cannot handle Go string: invalid UTF-8 within "/foo/bar/baz" after offset 53`,
-	}, {
-		err:  &SemanticError{ByteOffset: 85, GoType: T[string](), Err: &jsontext.SyntacticError{JSONPointer: "/foo/bar/baz", ByteOffset: 53, Err: jsonwire.ErrInvalidUTF8}},
-		want: `json: cannot handle Go string after offset 85: invalid UTF-8 within "/foo/bar/baz" after offset 53`,
-	}}
-
-	for _, tt := range tests {
-		got := tt.err.Error()
-		// Cleanup the error of non-deterministic rendering effects.
-		if strings.HasPrefix(got, errorPrefix+"unable to ") {
-			got = errorPrefix + "cannot " + strings.TrimPrefix(got, errorPrefix+"unable to ")
-		}
-		if got != tt.want {
-			t.Errorf("%#v.Error mismatch:\ngot  %v\nwant %v", tt.err, got, tt.want)
-		}
-	}
-}
diff --git a/src/encoding/json/v2/example_orderedobject_test.go b/src/encoding/json/v2/example_orderedobject_test.go
deleted file mode 100644
index d68782f7252013..00000000000000
--- a/src/encoding/json/v2/example_orderedobject_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2022 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.
-
-//go:build goexperiment.jsonv2
-
-package json_test
-
-import (
-	"fmt"
-	"log"
-	"reflect"
-
-	"encoding/json/jsontext"
-	"encoding/json/v2"
-)
-
-// OrderedObject is an ordered sequence of name/value members in a JSON object.
-//
-// RFC 8259 defines an object as an "unordered collection".
-// JSON implementations need not make "ordering of object members visible"
-// to applications nor will they agree on the semantic meaning of an object if
-// "the names within an object are not unique". For maximum compatibility,
-// applications should avoid relying on ordering or duplicity of object names.
-type OrderedObject[V any] []ObjectMember[V]
-
-// ObjectMember is a JSON object member.
-type ObjectMember[V any] struct {
-	Name  string
-	Value V
-}
-
-// MarshalJSONTo encodes obj as a JSON object into enc.
-func (obj *OrderedObject[V]) MarshalJSONTo(enc *jsontext.Encoder) error {
-	if err := enc.WriteToken(jsontext.BeginObject); err != nil {
-		return err
-	}
-	for i := range *obj {
-		member := &(*obj)[i]
-		if err := json.MarshalEncode(enc, &member.Name); err != nil {
-			return err
-		}
-		if err := json.MarshalEncode(enc, &member.Value); err != nil {
-			return err
-		}
-	}
-	if err := enc.WriteToken(jsontext.EndObject); err != nil {
-		return err
-	}
-	return nil
-}
-
-// UnmarshalJSONFrom decodes a JSON object from dec into obj.
-func (obj *OrderedObject[V]) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	if k := dec.PeekKind(); k != '{' {
-		return fmt.Errorf("expected object start, but encountered %v", k)
-	}
-	if _, err := dec.ReadToken(); err != nil {
-		return err
-	}
-	for dec.PeekKind() != '}' {
-		*obj = append(*obj, ObjectMember[V]{})
-		member := &(*obj)[len(*obj)-1]
-		if err := json.UnmarshalDecode(dec, &member.Name); err != nil {
-			return err
-		}
-		if err := json.UnmarshalDecode(dec, &member.Value); err != nil {
-			return err
-		}
-	}
-	if _, err := dec.ReadToken(); err != nil {
-		return err
-	}
-	return nil
-}
-
-// The exact order of JSON object can be preserved through the use of a
-// specialized type that implements [MarshalerTo] and [UnmarshalerFrom].
-func Example_orderedObject() {
-	// Round-trip marshal and unmarshal an ordered object.
-	// We expect the order and duplicity of JSON object members to be preserved.
-	// Specify jsontext.AllowDuplicateNames since this object contains "fizz" twice.
-	want := OrderedObject[string]{
-		{"fizz", "buzz"},
-		{"hello", "world"},
-		{"fizz", "wuzz"},
-	}
-	b, err := json.Marshal(&want, jsontext.AllowDuplicateNames(true))
-	if err != nil {
-		log.Fatal(err)
-	}
-	var got OrderedObject[string]
-	err = json.Unmarshal(b, &got, jsontext.AllowDuplicateNames(true))
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// Sanity check.
-	if !reflect.DeepEqual(got, want) {
-		log.Fatalf("roundtrip mismatch: got %v, want %v", got, want)
-	}
-
-	// Print the serialized JSON object.
-	(*jsontext.Value)(&b).Indent() // indent for readability
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"fizz": "buzz",
-	// 	"hello": "world",
-	// 	"fizz": "wuzz"
-	// }
-}
diff --git a/src/encoding/json/v2/example_test.go b/src/encoding/json/v2/example_test.go
deleted file mode 100644
index fe40bff964cf84..00000000000000
--- a/src/encoding/json/v2/example_test.go
+++ /dev/null
@@ -1,692 +0,0 @@
-// Copyright 2022 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.
-
-//go:build goexperiment.jsonv2
-
-package json_test
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"log"
-	"math"
-	"net/http"
-	"net/netip"
-	"os"
-	"reflect"
-	"strconv"
-	"strings"
-	"sync/atomic"
-	"time"
-
-	"encoding/json/jsontext"
-	"encoding/json/v2"
-)
-
-// If a type implements [encoding.TextMarshaler] and/or [encoding.TextUnmarshaler],
-// then the MarshalText and UnmarshalText methods are used to encode/decode
-// the value to/from a JSON string.
-func Example_textMarshal() {
-	// Round-trip marshal and unmarshal a hostname map where the netip.Addr type
-	// implements both encoding.TextMarshaler and encoding.TextUnmarshaler.
-	want := map[netip.Addr]string{
-		netip.MustParseAddr("192.168.0.100"): "carbonite",
-		netip.MustParseAddr("192.168.0.101"): "obsidian",
-		netip.MustParseAddr("192.168.0.102"): "diamond",
-	}
-	b, err := json.Marshal(&want, json.Deterministic(true))
-	if err != nil {
-		log.Fatal(err)
-	}
-	var got map[netip.Addr]string
-	err = json.Unmarshal(b, &got)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// Sanity check.
-	if !reflect.DeepEqual(got, want) {
-		log.Fatalf("roundtrip mismatch: got %v, want %v", got, want)
-	}
-
-	// Print the serialized JSON object.
-	(*jsontext.Value)(&b).Indent() // indent for readability
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"192.168.0.100": "carbonite",
-	// 	"192.168.0.101": "obsidian",
-	// 	"192.168.0.102": "diamond"
-	// }
-}
-
-// By default, JSON object names for Go struct fields are derived from
-// the Go field name, but may be specified in the `json` tag.
-// Due to JSON's heritage in JavaScript, the most common naming convention
-// used for JSON object names is camelCase.
-func Example_fieldNames() {
-	var value struct {
-		// This field is explicitly ignored with the special "-" name.
-		Ignored any `json:"-"`
-		// No JSON name is not provided, so the Go field name is used.
-		GoName any
-		// A JSON name is provided without any special characters.
-		JSONName any `json:"jsonName"`
-		// No JSON name is not provided, so the Go field name is used.
-		Option any `json:",case:ignore"`
-		// An empty JSON name specified using an single-quoted string literal.
-		Empty any `json:"''"`
-		// A dash JSON name specified using an single-quoted string literal.
-		Dash any `json:"'-'"`
-		// A comma JSON name specified using an single-quoted string literal.
-		Comma any `json:"','"`
-		// JSON name with quotes specified using a single-quoted string literal.
-		Quote any `json:"'\"\\''"`
-		// An unexported field is always ignored.
-		unexported any
-	}
-
-	b, err := json.Marshal(value)
-	if err != nil {
-		log.Fatal(err)
-	}
-	(*jsontext.Value)(&b).Indent() // indent for readability
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"GoName": null,
-	// 	"jsonName": null,
-	// 	"Option": null,
-	// 	"": null,
-	// 	"-": null,
-	// 	",": null,
-	// 	"\"'": null
-	// }
-}
-
-// Unmarshal matches JSON object names with Go struct fields using
-// a case-sensitive match, but can be configured to use a case-insensitive
-// match with the "case:ignore" option. This permits unmarshaling from inputs
-// that use naming conventions such as camelCase, snake_case, or kebab-case.
-func Example_caseSensitivity() {
-	// JSON input using various naming conventions.
-	const input = `[
-		{"firstname": true},
-		{"firstName": true},
-		{"FirstName": true},
-		{"FIRSTNAME": true},
-		{"first_name": true},
-		{"FIRST_NAME": true},
-		{"first-name": true},
-		{"FIRST-NAME": true},
-		{"unknown": true}
-	]`
-
-	// Without "case:ignore", Unmarshal looks for an exact match.
-	var caseStrict []struct {
-		X bool `json:"firstName"`
-	}
-	if err := json.Unmarshal([]byte(input), &caseStrict); err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(caseStrict) // exactly 1 match found
-
-	// With "case:ignore", Unmarshal looks first for an exact match,
-	// then for a case-insensitive match if none found.
-	var caseIgnore []struct {
-		X bool `json:"firstName,case:ignore"`
-	}
-	if err := json.Unmarshal([]byte(input), &caseIgnore); err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(caseIgnore) // 8 matches found
-
-	// Output:
-	// [{false} {true} {false} {false} {false} {false} {false} {false} {false}]
-	// [{true} {true} {true} {true} {true} {true} {true} {true} {false}]
-}
-
-// Go struct fields can be omitted from the output depending on either
-// the input Go value or the output JSON encoding of the value.
-// The "omitzero" option omits a field if it is the zero Go value or
-// implements a "IsZero() bool" method that reports true.
-// The "omitempty" option omits a field if it encodes as an empty JSON value,
-// which we define as a JSON null or empty JSON string, object, or array.
-// In many cases, the behavior of "omitzero" and "omitempty" are equivalent.
-// If both provide the desired effect, then using "omitzero" is preferred.
-func Example_omitFields() {
-	type MyStruct struct {
-		Foo string `json:",omitzero"`
-		Bar []int  `json:",omitempty"`
-		// Both "omitzero" and "omitempty" can be specified together,
-		// in which case the field is omitted if either would take effect.
-		// This omits the Baz field either if it is a nil pointer or
-		// if it would have encoded as an empty JSON object.
-		Baz *MyStruct `json:",omitzero,omitempty"`
-	}
-
-	// Demonstrate behavior of "omitzero".
-	b, err := json.Marshal(struct {
-		Bool         bool        `json:",omitzero"`
-		Int          int         `json:",omitzero"`
-		String       string      `json:",omitzero"`
-		Time         time.Time   `json:",omitzero"`
-		Addr         netip.Addr  `json:",omitzero"`
-		Struct       MyStruct    `json:",omitzero"`
-		SliceNil     []int       `json:",omitzero"`
-		Slice        []int       `json:",omitzero"`
-		MapNil       map[int]int `json:",omitzero"`
-		Map          map[int]int `json:",omitzero"`
-		PointerNil   *string     `json:",omitzero"`
-		Pointer      *string     `json:",omitzero"`
-		InterfaceNil any         `json:",omitzero"`
-		Interface    any         `json:",omitzero"`
-	}{
-		// Bool is omitted since false is the zero value for a Go bool.
-		Bool: false,
-		// Int is omitted since 0 is the zero value for a Go int.
-		Int: 0,
-		// String is omitted since "" is the zero value for a Go string.
-		String: "",
-		// Time is omitted since time.Time.IsZero reports true.
-		Time: time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC),
-		// Addr is omitted since netip.Addr{} is the zero value for a Go struct.
-		Addr: netip.Addr{},
-		// Struct is NOT omitted since it is not the zero value for a Go struct.
-		Struct: MyStruct{Bar: []int{}, Baz: new(MyStruct)},
-		// SliceNil is omitted since nil is the zero value for a Go slice.
-		SliceNil: nil,
-		// Slice is NOT omitted since []int{} is not the zero value for a Go slice.
-		Slice: []int{},
-		// MapNil is omitted since nil is the zero value for a Go map.
-		MapNil: nil,
-		// Map is NOT omitted since map[int]int{} is not the zero value for a Go map.
-		Map: map[int]int{},
-		// PointerNil is omitted since nil is the zero value for a Go pointer.
-		PointerNil: nil,
-		// Pointer is NOT omitted since new(string) is not the zero value for a Go pointer.
-		Pointer: new(string),
-		// InterfaceNil is omitted since nil is the zero value for a Go interface.
-		InterfaceNil: nil,
-		// Interface is NOT omitted since (*string)(nil) is not the zero value for a Go interface.
-		Interface: (*string)(nil),
-	})
-	if err != nil {
-		log.Fatal(err)
-	}
-	(*jsontext.Value)(&b).Indent()      // indent for readability
-	fmt.Println("OmitZero:", string(b)) // outputs "Struct", "Slice", "Map", "Pointer", and "Interface"
-
-	// Demonstrate behavior of "omitempty".
-	b, err = json.Marshal(struct {
-		Bool         bool        `json:",omitempty"`
-		Int          int         `json:",omitempty"`
-		String       string      `json:",omitempty"`
-		Time         time.Time   `json:",omitempty"`
-		Addr         netip.Addr  `json:",omitempty"`
-		Struct       MyStruct    `json:",omitempty"`
-		Slice        []int       `json:",omitempty"`
-		Map          map[int]int `json:",omitempty"`
-		PointerNil   *string     `json:",omitempty"`
-		Pointer      *string     `json:",omitempty"`
-		InterfaceNil any         `json:",omitempty"`
-		Interface    any         `json:",omitempty"`
-	}{
-		// Bool is NOT omitted since false is not an empty JSON value.
-		Bool: false,
-		// Int is NOT omitted since 0 is not a empty JSON value.
-		Int: 0,
-		// String is omitted since "" is an empty JSON string.
-		String: "",
-		// Time is NOT omitted since this encodes as a non-empty JSON string.
-		Time: time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC),
-		// Addr is omitted since this encodes as an empty JSON string.
-		Addr: netip.Addr{},
-		// Struct is omitted since {} is an empty JSON object.
-		Struct: MyStruct{Bar: []int{}, Baz: new(MyStruct)},
-		// Slice is omitted since [] is an empty JSON array.
-		Slice: []int{},
-		// Map is omitted since {} is an empty JSON object.
-		Map: map[int]int{},
-		// PointerNil is omitted since null is an empty JSON value.
-		PointerNil: nil,
-		// Pointer is omitted since "" is an empty JSON string.
-		Pointer: new(string),
-		// InterfaceNil is omitted since null is an empty JSON value.
-		InterfaceNil: nil,
-		// Interface is omitted since null is an empty JSON value.
-		Interface: (*string)(nil),
-	})
-	if err != nil {
-		log.Fatal(err)
-	}
-	(*jsontext.Value)(&b).Indent()       // indent for readability
-	fmt.Println("OmitEmpty:", string(b)) // outputs "Bool", "Int", and "Time"
-
-	// Output:
-	// OmitZero: {
-	// 	"Struct": {},
-	// 	"Slice": [],
-	// 	"Map": {},
-	// 	"Pointer": "",
-	// 	"Interface": null
-	// }
-	// OmitEmpty: {
-	// 	"Bool": false,
-	// 	"Int": 0,
-	// 	"Time": "0001-01-01T00:00:00Z"
-	// }
-}
-
-// JSON objects can be inlined within a parent object similar to
-// how Go structs can be embedded within a parent struct.
-// The inlining rules are similar to those of Go embedding,
-// but operates upon the JSON namespace.
-func Example_inlinedFields() {
-	// Base is embedded within Container.
-	type Base struct {
-		// ID is promoted into the JSON object for Container.
-		ID string
-		// Type is ignored due to presence of Container.Type.
-		Type string
-		// Time cancels out with Container.Inlined.Time.
-		Time time.Time
-	}
-	// Other is embedded within Container.
-	type Other struct{ Cost float64 }
-	// Container embeds Base and Other.
-	type Container struct {
-		// Base is an embedded struct and is implicitly JSON inlined.
-		Base
-		// Type takes precedence over Base.Type.
-		Type int
-		// Inlined is a named Go field, but is explicitly JSON inlined.
-		Inlined struct {
-			// User is promoted into the JSON object for Container.
-			User string
-			// Time cancels out with Base.Time.
-			Time string
-		} `json:",inline"`
-		// ID does not conflict with Base.ID since the JSON name is different.
-		ID string `json:"uuid"`
-		// Other is not JSON inlined since it has an explicit JSON name.
-		Other `json:"other"`
-	}
-
-	// Format an empty Container to show what fields are JSON serializable.
-	var input Container
-	b, err := json.Marshal(&input)
-	if err != nil {
-		log.Fatal(err)
-	}
-	(*jsontext.Value)(&b).Indent() // indent for readability
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"ID": "",
-	// 	"Type": 0,
-	// 	"User": "",
-	// 	"uuid": "",
-	// 	"other": {
-	// 		"Cost": 0
-	// 	}
-	// }
-}
-
-// Due to version skew, the set of JSON object members known at compile-time
-// may differ from the set of members encountered at execution-time.
-// As such, it may be useful to have finer grain handling of unknown members.
-// This package supports preserving, rejecting, or discarding such members.
-func Example_unknownMembers() {
-	const input = `{
-		"Name": "Teal",
-		"Value": "#008080",
-		"WebSafe": false
-	}`
-	type Color struct {
-		Name  string
-		Value string
-
-		// Unknown is a Go struct field that holds unknown JSON object members.
-		// It is marked as having this behavior with the "unknown" tag option.
-		//
-		// The type may be a jsontext.Value or map[string]T.
-		Unknown jsontext.Value `json:",unknown"`
-	}
-
-	// By default, unknown members are stored in a Go field marked as "unknown"
-	// or ignored if no such field exists.
-	var color Color
-	err := json.Unmarshal([]byte(input), &color)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println("Unknown members:", string(color.Unknown))
-
-	// Specifying RejectUnknownMembers causes Unmarshal
-	// to reject the presence of any unknown members.
-	err = json.Unmarshal([]byte(input), new(Color), json.RejectUnknownMembers(true))
-	var serr *json.SemanticError
-	if errors.As(err, &serr) && serr.Err == json.ErrUnknownName {
-		fmt.Println("Unmarshal error:", serr.Err, strconv.Quote(serr.JSONPointer.LastToken()))
-	}
-
-	// By default, Marshal preserves unknown members stored in
-	// a Go struct field marked as "unknown".
-	b, err := json.Marshal(color)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println("Output with unknown members:   ", string(b))
-
-	// Specifying DiscardUnknownMembers causes Marshal
-	// to discard any unknown members.
-	b, err = json.Marshal(color, json.DiscardUnknownMembers(true))
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println("Output without unknown members:", string(b))
-
-	// Output:
-	// Unknown members: {"WebSafe":false}
-	// Unmarshal error: unknown object member name "WebSafe"
-	// Output with unknown members:    {"Name":"Teal","Value":"#008080","WebSafe":false}
-	// Output without unknown members: {"Name":"Teal","Value":"#008080"}
-}
-
-// The "format" tag option can be used to alter the formatting of certain types.
-func Example_formatFlags() {
-	value := struct {
-		BytesBase64    []byte         `json:",format:base64"`
-		BytesHex       [8]byte        `json:",format:hex"`
-		BytesArray     []byte         `json:",format:array"`
-		FloatNonFinite float64        `json:",format:nonfinite"`
-		MapEmitNull    map[string]any `json:",format:emitnull"`
-		SliceEmitNull  []any          `json:",format:emitnull"`
-		TimeDateOnly   time.Time      `json:",format:'2006-01-02'"`
-		TimeUnixSec    time.Time      `json:",format:unix"`
-		DurationSecs   time.Duration  `json:",format:sec"`
-		DurationNanos  time.Duration  `json:",format:nano"`
-	}{
-		BytesBase64:    []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
-		BytesHex:       [8]byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
-		BytesArray:     []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
-		FloatNonFinite: math.NaN(),
-		MapEmitNull:    nil,
-		SliceEmitNull:  nil,
-		TimeDateOnly:   time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
-		TimeUnixSec:    time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
-		DurationSecs:   12*time.Hour + 34*time.Minute + 56*time.Second + 7*time.Millisecond + 8*time.Microsecond + 9*time.Nanosecond,
-		DurationNanos:  12*time.Hour + 34*time.Minute + 56*time.Second + 7*time.Millisecond + 8*time.Microsecond + 9*time.Nanosecond,
-	}
-
-	b, err := json.Marshal(&value)
-	if err != nil {
-		log.Fatal(err)
-	}
-	(*jsontext.Value)(&b).Indent() // indent for readability
-	fmt.Println(string(b))
-
-	// Output:
-	// {
-	// 	"BytesBase64": "ASNFZ4mrze8=",
-	// 	"BytesHex": "0123456789abcdef",
-	// 	"BytesArray": [
-	// 		1,
-	// 		35,
-	// 		69,
-	// 		103,
-	// 		137,
-	// 		171,
-	// 		205,
-	// 		239
-	// 	],
-	// 	"FloatNonFinite": "NaN",
-	// 	"MapEmitNull": null,
-	// 	"SliceEmitNull": null,
-	//	"TimeDateOnly": "2000-01-01",
-	//	"TimeUnixSec": 946684800,
-	//	"DurationSecs": 45296.007008009,
-	//	"DurationNanos": 45296007008009
-	// }
-}
-
-// When implementing HTTP endpoints, it is common to be operating with an
-// [io.Reader] and an [io.Writer]. The [MarshalWrite] and [UnmarshalRead] functions
-// assist in operating on such input/output types.
-// [UnmarshalRead] reads the entirety of the [io.Reader] to ensure that [io.EOF]
-// is encountered without any unexpected bytes after the top-level JSON value.
-func Example_serveHTTP() {
-	// Some global state maintained by the server.
-	var n int64
-
-	// The "add" endpoint accepts a POST request with a JSON object
-	// containing a number to atomically add to the server's global counter.
-	// It returns the updated value of the counter.
-	http.HandleFunc("/api/add", func(w http.ResponseWriter, r *http.Request) {
-		// Unmarshal the request from the client.
-		var val struct{ N int64 }
-		if err := json.UnmarshalRead(r.Body, &val); err != nil {
-			// Inability to unmarshal the input suggests a client-side problem.
-			http.Error(w, err.Error(), http.StatusBadRequest)
-			return
-		}
-
-		// Marshal a response from the server.
-		val.N = atomic.AddInt64(&n, val.N)
-		if err := json.MarshalWrite(w, &val); err != nil {
-			// Inability to marshal the output suggests a server-side problem.
-			// This error is not always observable by the client since
-			// json.MarshalWrite may have already written to the output.
-			http.Error(w, err.Error(), http.StatusInternalServerError)
-			return
-		}
-	})
-}
-
-// Some Go types have a custom JSON representation where the implementation
-// is delegated to some external package. Consequently, the "json" package
-// will not know how to use that external implementation.
-// For example, the [google.golang.org/protobuf/encoding/protojson] package
-// implements JSON for all [google.golang.org/protobuf/proto.Message] types.
-// [WithMarshalers] and [WithUnmarshalers] can be used
-// to configure "json" and "protojson" to cooperate together.
-func Example_protoJSON() {
-	// Let protoMessage be "google.golang.org/protobuf/proto".Message.
-	type protoMessage interface{ ProtoReflect() }
-	// Let foopbMyMessage be a concrete implementation of proto.Message.
-	type foopbMyMessage struct{ protoMessage }
-	// Let protojson be an import of "google.golang.org/protobuf/encoding/protojson".
-	var protojson struct {
-		Marshal   func(protoMessage) ([]byte, error)
-		Unmarshal func([]byte, protoMessage) error
-	}
-
-	// This value mixes both non-proto.Message types and proto.Message types.
-	// It should use the "json" package to handle non-proto.Message types and
-	// should use the "protojson" package to handle proto.Message types.
-	var value struct {
-		// GoStruct does not implement proto.Message and
-		// should use the default behavior of the "json" package.
-		GoStruct struct {
-			Name string
-			Age  int
-		}
-
-		// ProtoMessage implements proto.Message and
-		// should be handled using protojson.Marshal.
-		ProtoMessage *foopbMyMessage
-	}
-
-	// Marshal using protojson.Marshal for proto.Message types.
-	b, err := json.Marshal(&value,
-		// Use protojson.Marshal as a type-specific marshaler.
-		json.WithMarshalers(json.MarshalFunc(protojson.Marshal)))
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// Unmarshal using protojson.Unmarshal for proto.Message types.
-	err = json.Unmarshal(b, &value,
-		// Use protojson.Unmarshal as a type-specific unmarshaler.
-		json.WithUnmarshalers(json.UnmarshalFunc(protojson.Unmarshal)))
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-// Many error types are not serializable since they tend to be Go structs
-// without any exported fields (e.g., errors constructed with [errors.New]).
-// Some applications, may desire to marshal an error as a JSON string
-// even if these errors cannot be unmarshaled.
-func ExampleWithMarshalers_errors() {
-	// Response to serialize with some Go errors encountered.
-	response := []struct {
-		Result string `json:",omitzero"`
-		Error  error  `json:",omitzero"`
-	}{
-		{Result: "Oranges are a good source of Vitamin C."},
-		{Error: &strconv.NumError{Func: "ParseUint", Num: "-1234", Err: strconv.ErrSyntax}},
-		{Error: &os.PathError{Op: "ReadFile", Path: "/path/to/secret/file", Err: os.ErrPermission}},
-	}
-
-	b, err := json.Marshal(&response,
-		// Intercept every attempt to marshal an error type.
-		json.WithMarshalers(json.JoinMarshalers(
-			// Suppose we consider strconv.NumError to be a safe to serialize:
-			// this type-specific marshal function intercepts this type
-			// and encodes the error message as a JSON string.
-			json.MarshalToFunc(func(enc *jsontext.Encoder, err *strconv.NumError) error {
-				return enc.WriteToken(jsontext.String(err.Error()))
-			}),
-			// Error messages may contain sensitive information that may not
-			// be appropriate to serialize. For all errors not handled above,
-			// report some generic error message.
-			json.MarshalFunc(func(error) ([]byte, error) {
-				return []byte(`"internal server error"`), nil
-			}),
-		)),
-		jsontext.Multiline(true)) // expand for readability
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(string(b))
-
-	// Output:
-	// [
-	// 	{
-	// 		"Result": "Oranges are a good source of Vitamin C."
-	// 	},
-	// 	{
-	// 		"Error": "strconv.ParseUint: parsing \"-1234\": invalid syntax"
-	// 	},
-	// 	{
-	// 		"Error": "internal server error"
-	// 	}
-	// ]
-}
-
-// In some applications, the exact precision of JSON numbers needs to be
-// preserved when unmarshaling. This can be accomplished using a type-specific
-// unmarshal function that intercepts all any types and pre-populates the
-// interface value with a [jsontext.Value], which can represent a JSON number exactly.
-func ExampleWithUnmarshalers_rawNumber() {
-	// Input with JSON numbers beyond the representation of a float64.
-	const input = `[false, 1e-1000, 3.141592653589793238462643383279, 1e+1000, true]`
-
-	var value any
-	err := json.Unmarshal([]byte(input), &value,
-		// Intercept every attempt to unmarshal into the any type.
-		json.WithUnmarshalers(
-			json.UnmarshalFromFunc(func(dec *jsontext.Decoder, val *any) error {
-				// If the next value to be decoded is a JSON number,
-				// then provide a concrete Go type to unmarshal into.
-				if dec.PeekKind() == '0' {
-					*val = jsontext.Value(nil)
-				}
-				// Return SkipFunc to fallback on default unmarshal behavior.
-				return json.SkipFunc
-			}),
-		))
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(value)
-
-	// Sanity check.
-	want := []any{false, jsontext.Value("1e-1000"), jsontext.Value("3.141592653589793238462643383279"), jsontext.Value("1e+1000"), true}
-	if !reflect.DeepEqual(value, want) {
-		log.Fatalf("value mismatch:\ngot  %v\nwant %v", value, want)
-	}
-
-	// Output:
-	// [false 1e-1000 3.141592653589793238462643383279 1e+1000 true]
-}
-
-// When using JSON for parsing configuration files,
-// the parsing logic often needs to report an error with a line and column
-// indicating where in the input an error occurred.
-func ExampleWithUnmarshalers_recordOffsets() {
-	// Hypothetical configuration file.
-	const input = `[
-		{"Source": "192.168.0.100:1234", "Destination": "192.168.0.1:80"},
-		{"Source": "192.168.0.251:4004"},
-		{"Source": "192.168.0.165:8080", "Destination": "0.0.0.0:80"}
-	]`
-	type Tunnel struct {
-		Source      netip.AddrPort
-		Destination netip.AddrPort
-
-		// ByteOffset is populated during unmarshal with the byte offset
-		// within the JSON input of the JSON object for this Go struct.
-		ByteOffset int64 `json:"-"` // metadata to be ignored for JSON serialization
-	}
-
-	var tunnels []Tunnel
-	err := json.Unmarshal([]byte(input), &tunnels,
-		// Intercept every attempt to unmarshal into the Tunnel type.
-		json.WithUnmarshalers(
-			json.UnmarshalFromFunc(func(dec *jsontext.Decoder, tunnel *Tunnel) error {
-				// Decoder.InputOffset reports the offset after the last token,
-				// but we want to record the offset before the next token.
-				//
-				// Call Decoder.PeekKind to buffer enough to reach the next token.
-				// Add the number of leading whitespace, commas, and colons
-				// to locate the start of the next token.
-				dec.PeekKind()
-				unread := dec.UnreadBuffer()
-				n := len(unread) - len(bytes.TrimLeft(unread, " \n\r\t,:"))
-				tunnel.ByteOffset = dec.InputOffset() + int64(n)
-
-				// Return SkipFunc to fallback on default unmarshal behavior.
-				return json.SkipFunc
-			}),
-		))
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// lineColumn converts a byte offset into a one-indexed line and column.
-	// The offset must be within the bounds of the input.
-	lineColumn := func(input string, offset int) (line, column int) {
-		line = 1 + strings.Count(input[:offset], "\n")
-		column = 1 + offset - (strings.LastIndex(input[:offset], "\n") + len("\n"))
-		return line, column
-	}
-
-	// Verify that the configuration file is valid.
-	for _, tunnel := range tunnels {
-		if !tunnel.Source.IsValid() || !tunnel.Destination.IsValid() {
-			line, column := lineColumn(input, int(tunnel.ByteOffset))
-			fmt.Printf("%d:%d: source and destination must both be specified", line, column)
-		}
-	}
-
-	// Output:
-	// 3:3: source and destination must both be specified
-}
diff --git a/src/encoding/json/v2/fields.go b/src/encoding/json/v2/fields.go
deleted file mode 100644
index 9413189c0850da..00000000000000
--- a/src/encoding/json/v2/fields.go
+++ /dev/null
@@ -1,646 +0,0 @@
-// Copyright 2021 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"cmp"
-	"errors"
-	"fmt"
-	"io"
-	"reflect"
-	"slices"
-	"strconv"
-	"strings"
-	"unicode"
-	"unicode/utf8"
-
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonwire"
-)
-
-type isZeroer interface {
-	IsZero() bool
-}
-
-var isZeroerType = reflect.TypeFor[isZeroer]()
-
-type structFields struct {
-	flattened       []structField // listed in depth-first ordering
-	byActualName    map[string]*structField
-	byFoldedName    map[string][]*structField
-	inlinedFallback *structField
-}
-
-// reindex recomputes index to avoid bounds check during runtime.
-//
-// During the construction of each [structField] in [makeStructFields],
-// the index field is 0-indexed. However, before it returns,
-// the 0th field is stored in index0 and index stores the remainder.
-func (sf *structFields) reindex() {
-	reindex := func(f *structField) {
-		f.index0 = f.index[0]
-		f.index = f.index[1:]
-		if len(f.index) == 0 {
-			f.index = nil // avoid pinning the backing slice
-		}
-	}
-	for i := range sf.flattened {
-		reindex(&sf.flattened[i])
-	}
-	if sf.inlinedFallback != nil {
-		reindex(sf.inlinedFallback)
-	}
-}
-
-// lookupByFoldedName looks up name by a case-insensitive match
-// that also ignores the presence of dashes and underscores.
-func (fs *structFields) lookupByFoldedName(name []byte) []*structField {
-	return fs.byFoldedName[string(foldName(name))]
-}
-
-type structField struct {
-	id      int   // unique numeric ID in breadth-first ordering
-	index0  int   // 0th index into a struct according to [reflect.Type.FieldByIndex]
-	index   []int // 1st index and remainder according to [reflect.Type.FieldByIndex]
-	typ     reflect.Type
-	fncs    *arshaler
-	isZero  func(addressableValue) bool
-	isEmpty func(addressableValue) bool
-	fieldOptions
-}
-
-var errNoExportedFields = errors.New("Go struct has no exported fields")
-
-func makeStructFields(root reflect.Type) (fs structFields, serr *SemanticError) {
-	orErrorf := func(serr *SemanticError, t reflect.Type, f string, a ...any) *SemanticError {
-		return cmp.Or(serr, &SemanticError{GoType: t, Err: fmt.Errorf(f, a...)})
-	}
-
-	// Setup a queue for a breath-first search.
-	var queueIndex int
-	type queueEntry struct {
-		typ           reflect.Type
-		index         []int
-		visitChildren bool // whether to recursively visit inlined field in this struct
-	}
-	queue := []queueEntry{{root, nil, true}}
-	seen := map[reflect.Type]bool{root: true}
-
-	// Perform a breadth-first search over all reachable fields.
-	// This ensures that len(f.index) will be monotonically increasing.
-	var allFields, inlinedFallbacks []structField
-	for queueIndex < len(queue) {
-		qe := queue[queueIndex]
-		queueIndex++
-
-		t := qe.typ
-		inlinedFallbackIndex := -1         // index of last inlined fallback field in current struct
-		namesIndex := make(map[string]int) // index of each field with a given JSON object name in current struct
-		var hasAnyJSONTag bool             // whether any Go struct field has a `json` tag
-		var hasAnyJSONField bool           // whether any JSON serializable fields exist in current struct
-		for i := range t.NumField() {
-			sf := t.Field(i)
-			_, hasTag := sf.Tag.Lookup("json")
-			hasAnyJSONTag = hasAnyJSONTag || hasTag
-			options, ignored, err := parseFieldOptions(sf)
-			if err != nil {
-				serr = cmp.Or(serr, &SemanticError{GoType: t, Err: err})
-			}
-			if ignored {
-				continue
-			}
-			hasAnyJSONField = true
-			f := structField{
-				// Allocate a new slice (len=N+1) to hold both
-				// the parent index (len=N) and the current index (len=1).
-				// Do this to avoid clobbering the memory of the parent index.
-				index:        append(append(make([]int, 0, len(qe.index)+1), qe.index...), i),
-				typ:          sf.Type,
-				fieldOptions: options,
-			}
-			if sf.Anonymous && !f.hasName {
-				if indirectType(f.typ).Kind() != reflect.Struct {
-					serr = orErrorf(serr, t, "embedded Go struct field %s of non-struct type must be explicitly given a JSON name", sf.Name)
-				} else {
-					f.inline = true // implied by use of Go embedding without an explicit name
-				}
-			}
-			if f.inline || f.unknown {
-				// Handle an inlined field that serializes to/from
-				// zero or more JSON object members.
-
-				switch f.fieldOptions {
-				case fieldOptions{name: f.name, quotedName: f.quotedName, inline: true}:
-				case fieldOptions{name: f.name, quotedName: f.quotedName, unknown: true}:
-				case fieldOptions{name: f.name, quotedName: f.quotedName, inline: true, unknown: true}:
-					serr = orErrorf(serr, t, "Go struct field %s cannot have both `inline` and `unknown` specified", sf.Name)
-					f.inline = false // let `unknown` take precedence
-				default:
-					serr = orErrorf(serr, t, "Go struct field %s cannot have any options other than `inline` or `unknown` specified", sf.Name)
-					if f.hasName {
-						continue // invalid inlined field; treat as ignored
-					}
-					f.fieldOptions = fieldOptions{name: f.name, quotedName: f.quotedName, inline: f.inline, unknown: f.unknown}
-					if f.inline && f.unknown {
-						f.inline = false // let `unknown` take precedence
-					}
-				}
-
-				// Reject any types with custom serialization otherwise
-				// it becomes impossible to know what sub-fields to inline.
-				tf := indirectType(f.typ)
-				if implementsAny(tf, allMethodTypes...) && tf != jsontextValueType {
-					serr = orErrorf(serr, t, "inlined Go struct field %s of type %s must not implement marshal or unmarshal methods", sf.Name, tf)
-				}
-
-				// Handle an inlined field that serializes to/from
-				// a finite number of JSON object members backed by a Go struct.
-				if tf.Kind() == reflect.Struct {
-					if f.unknown {
-						serr = orErrorf(serr, t, "inlined Go struct field %s of type %s with `unknown` tag must be a Go map of string key or a jsontext.Value", sf.Name, tf)
-						continue // invalid inlined field; treat as ignored
-					}
-					if qe.visitChildren {
-						queue = append(queue, queueEntry{tf, f.index, !seen[tf]})
-					}
-					seen[tf] = true
-					continue
-				} else if !sf.IsExported() {
-					serr = orErrorf(serr, t, "inlined Go struct field %s is not exported", sf.Name)
-					continue // invalid inlined field; treat as ignored
-				}
-
-				// Handle an inlined field that serializes to/from any number of
-				// JSON object members back by a Go map or jsontext.Value.
-				switch {
-				case tf == jsontextValueType:
-					f.fncs = nil // specially handled in arshal_inlined.go
-				case tf.Kind() == reflect.Map && tf.Key().Kind() == reflect.String:
-					if implementsAny(tf.Key(), allMethodTypes...) {
-						serr = orErrorf(serr, t, "inlined map field %s of type %s must have a string key that does not implement marshal or unmarshal methods", sf.Name, tf)
-						continue // invalid inlined field; treat as ignored
-					}
-					f.fncs = lookupArshaler(tf.Elem())
-				default:
-					serr = orErrorf(serr, t, "inlined Go struct field %s of type %s must be a Go struct, Go map of string key, or jsontext.Value", sf.Name, tf)
-					continue // invalid inlined field; treat as ignored
-				}
-
-				// Reject multiple inlined fallback fields within the same struct.
-				if inlinedFallbackIndex >= 0 {
-					serr = orErrorf(serr, t, "inlined Go struct fields %s and %s cannot both be a Go map or jsontext.Value", t.Field(inlinedFallbackIndex).Name, sf.Name)
-					// Still append f to inlinedFallbacks as there is still a
-					// check for a dominant inlined fallback before returning.
-				}
-				inlinedFallbackIndex = i
-
-				inlinedFallbacks = append(inlinedFallbacks, f)
-			} else {
-				// Handle normal Go struct field that serializes to/from
-				// a single JSON object member.
-
-				// Unexported fields cannot be serialized except for
-				// embedded fields of a struct type,
-				// which might promote exported fields of their own.
-				if !sf.IsExported() {
-					tf := indirectType(f.typ)
-					if !(sf.Anonymous && tf.Kind() == reflect.Struct) {
-						serr = orErrorf(serr, t, "Go struct field %s is not exported", sf.Name)
-						continue
-					}
-					// Unfortunately, methods on the unexported field
-					// still cannot be called.
-					if implementsAny(tf, allMethodTypes...) ||
-						(f.omitzero && implementsAny(tf, isZeroerType)) {
-						serr = orErrorf(serr, t, "Go struct field %s is not exported for method calls", sf.Name)
-						continue
-					}
-				}
-
-				// Provide a function that uses a type's IsZero method.
-				switch {
-				case sf.Type.Kind() == reflect.Interface && sf.Type.Implements(isZeroerType):
-					f.isZero = func(va addressableValue) bool {
-						// Avoid panics calling IsZero on a nil interface or
-						// non-nil interface with nil pointer.
-						return va.IsNil() || (va.Elem().Kind() == reflect.Pointer && va.Elem().IsNil()) || va.Interface().(isZeroer).IsZero()
-					}
-				case sf.Type.Kind() == reflect.Pointer && sf.Type.Implements(isZeroerType):
-					f.isZero = func(va addressableValue) bool {
-						// Avoid panics calling IsZero on nil pointer.
-						return va.IsNil() || va.Interface().(isZeroer).IsZero()
-					}
-				case sf.Type.Implements(isZeroerType):
-					f.isZero = func(va addressableValue) bool { return va.Interface().(isZeroer).IsZero() }
-				case reflect.PointerTo(sf.Type).Implements(isZeroerType):
-					f.isZero = func(va addressableValue) bool { return va.Addr().Interface().(isZeroer).IsZero() }
-				}
-
-				// Provide a function that can determine whether the value would
-				// serialize as an empty JSON value.
-				switch sf.Type.Kind() {
-				case reflect.String, reflect.Map, reflect.Array, reflect.Slice:
-					f.isEmpty = func(va addressableValue) bool { return va.Len() == 0 }
-				case reflect.Pointer, reflect.Interface:
-					f.isEmpty = func(va addressableValue) bool { return va.IsNil() }
-				}
-
-				// Reject multiple fields with same name within the same struct.
-				if j, ok := namesIndex[f.name]; ok {
-					serr = orErrorf(serr, t, "Go struct fields %s and %s conflict over JSON object name %q", t.Field(j).Name, sf.Name, f.name)
-					// Still append f to allFields as there is still a
-					// check for a dominant field before returning.
-				}
-				namesIndex[f.name] = i
-
-				f.id = len(allFields)
-				f.fncs = lookupArshaler(sf.Type)
-				allFields = append(allFields, f)
-			}
-		}
-
-		// NOTE: New users to the json package are occasionally surprised that
-		// unexported fields are ignored. This occurs by necessity due to our
-		// inability to directly introspect such fields with Go reflection
-		// without the use of unsafe.
-		//
-		// To reduce friction here, refuse to serialize any Go struct that
-		// has no JSON serializable fields, has at least one Go struct field,
-		// and does not have any `json` tags present. For example,
-		// errors returned by errors.New would fail to serialize.
-		isEmptyStruct := t.NumField() == 0
-		if !isEmptyStruct && !hasAnyJSONTag && !hasAnyJSONField {
-			serr = cmp.Or(serr, &SemanticError{GoType: t, Err: errNoExportedFields})
-		}
-	}
-
-	// Sort the fields by exact name (breaking ties by depth and
-	// then by presence of an explicitly provided JSON name).
-	// Select the dominant field from each set of fields with the same name.
-	// If multiple fields have the same name, then the dominant field
-	// is the one that exists alone at the shallowest depth,
-	// or the one that is uniquely tagged with a JSON name.
-	// Otherwise, no dominant field exists for the set.
-	flattened := allFields[:0]
-	slices.SortStableFunc(allFields, func(x, y structField) int {
-		return cmp.Or(
-			strings.Compare(x.name, y.name),
-			cmp.Compare(len(x.index), len(y.index)),
-			boolsCompare(!x.hasName, !y.hasName))
-	})
-	for len(allFields) > 0 {
-		n := 1 // number of fields with the same exact name
-		for n < len(allFields) && allFields[n-1].name == allFields[n].name {
-			n++
-		}
-		if n == 1 || len(allFields[0].index) != len(allFields[1].index) || allFields[0].hasName != allFields[1].hasName {
-			flattened = append(flattened, allFields[0]) // only keep field if there is a dominant field
-		}
-		allFields = allFields[n:]
-	}
-
-	// Sort the fields according to a breadth-first ordering
-	// so that we can re-number IDs with the smallest possible values.
-	// This optimizes use of uintSet such that it fits in the 64-entry bit set.
-	slices.SortFunc(flattened, func(x, y structField) int {
-		return cmp.Compare(x.id, y.id)
-	})
-	for i := range flattened {
-		flattened[i].id = i
-	}
-
-	// Sort the fields according to a depth-first ordering
-	// as the typical order that fields are marshaled.
-	slices.SortFunc(flattened, func(x, y structField) int {
-		return slices.Compare(x.index, y.index)
-	})
-
-	// Compute the mapping of fields in the byActualName map.
-	// Pre-fold all names so that we can lookup folded names quickly.
-	fs = structFields{
-		flattened:    flattened,
-		byActualName: make(map[string]*structField, len(flattened)),
-		byFoldedName: make(map[string][]*structField, len(flattened)),
-	}
-	for i, f := range fs.flattened {
-		foldedName := string(foldName([]byte(f.name)))
-		fs.byActualName[f.name] = &fs.flattened[i]
-		fs.byFoldedName[foldedName] = append(fs.byFoldedName[foldedName], &fs.flattened[i])
-	}
-	for foldedName, fields := range fs.byFoldedName {
-		if len(fields) > 1 {
-			// The precedence order for conflicting ignoreCase names
-			// is by breadth-first order, rather than depth-first order.
-			slices.SortFunc(fields, func(x, y *structField) int {
-				return cmp.Compare(x.id, y.id)
-			})
-			fs.byFoldedName[foldedName] = fields
-		}
-	}
-	if n := len(inlinedFallbacks); n == 1 || (n > 1 && len(inlinedFallbacks[0].index) != len(inlinedFallbacks[1].index)) {
-		fs.inlinedFallback = &inlinedFallbacks[0] // dominant inlined fallback field
-	}
-	fs.reindex()
-	return fs, serr
-}
-
-// indirectType unwraps one level of pointer indirection
-// similar to how Go only allows embedding either T or *T,
-// but not **T or P (which is a named pointer).
-func indirectType(t reflect.Type) reflect.Type {
-	if t.Kind() == reflect.Pointer && t.Name() == "" {
-		t = t.Elem()
-	}
-	return t
-}
-
-// matchFoldedName matches a case-insensitive name depending on the options.
-// It assumes that foldName(f.name) == foldName(name).
-//
-// Case-insensitive matching is used if the `case:ignore` tag option is specified
-// or the MatchCaseInsensitiveNames call option is specified
-// (and the `case:strict` tag option is not specified).
-// Functionally, the `case:ignore` and `case:strict` tag options take precedence.
-//
-// The v1 definition of case-insensitivity operated under strings.EqualFold
-// and would strictly compare dashes and underscores,
-// while the v2 definition would ignore the presence of dashes and underscores.
-// Thus, if the MatchCaseSensitiveDelimiter call option is specified,
-// the match is further restricted to using strings.EqualFold.
-func (f *structField) matchFoldedName(name []byte, flags *jsonflags.Flags) bool {
-	if f.casing == caseIgnore || (flags.Get(jsonflags.MatchCaseInsensitiveNames) && f.casing != caseStrict) {
-		if !flags.Get(jsonflags.MatchCaseSensitiveDelimiter) || strings.EqualFold(string(name), f.name) {
-			return true
-		}
-	}
-	return false
-}
-
-const (
-	caseIgnore = 1
-	caseStrict = 2
-)
-
-type fieldOptions struct {
-	name           string
-	quotedName     string // quoted name per RFC 8785, section 3.2.2.2.
-	hasName        bool
-	nameNeedEscape bool
-	casing         int8 // either 0, caseIgnore, or caseStrict
-	inline         bool
-	unknown        bool
-	omitzero       bool
-	omitempty      bool
-	string         bool
-	format         string
-}
-
-// parseFieldOptions parses the `json` tag in a Go struct field as
-// a structured set of options configuring parameters such as
-// the JSON member name and other features.
-func parseFieldOptions(sf reflect.StructField) (out fieldOptions, ignored bool, err error) {
-	tag, hasTag := sf.Tag.Lookup("json")
-
-	// Check whether this field is explicitly ignored.
-	if tag == "-" {
-		return fieldOptions{}, true, nil
-	}
-
-	// Check whether this field is unexported and not embedded,
-	// which Go reflection cannot mutate for the sake of serialization.
-	//
-	// An embedded field of an unexported type is still capable of
-	// forwarding exported fields, which may be JSON serialized.
-	// This technically operates on the edge of what is permissible by
-	// the Go language, but the most recent decision is to permit this.
-	//
-	// See https://go.dev/issue/24153 and https://go.dev/issue/32772.
-	if !sf.IsExported() && !sf.Anonymous {
-		// Tag options specified on an unexported field suggests user error.
-		if hasTag {
-			err = cmp.Or(err, fmt.Errorf("unexported Go struct field %s cannot have non-ignored `json:%q` tag", sf.Name, tag))
-		}
-		return fieldOptions{}, true, err
-	}
-
-	// Determine the JSON member name for this Go field. A user-specified name
-	// may be provided as either an identifier or a single-quoted string.
-	// The single-quoted string allows arbitrary characters in the name.
-	// See https://go.dev/issue/2718 and https://go.dev/issue/3546.
-	out.name = sf.Name // always starts with an uppercase character
-	if len(tag) > 0 && !strings.HasPrefix(tag, ",") {
-		// For better compatibility with v1, accept almost any unescaped name.
-		n := len(tag) - len(strings.TrimLeftFunc(tag, func(r rune) bool {
-			return !strings.ContainsRune(",\\'\"`", r) // reserve comma, backslash, and quotes
-		}))
-		name := tag[:n]
-
-		// If the next character is not a comma, then the name is either
-		// malformed (if n > 0) or a single-quoted name.
-		// In either case, call consumeTagOption to handle it further.
-		var err2 error
-		if !strings.HasPrefix(tag[n:], ",") && len(name) != len(tag) {
-			name, n, err2 = consumeTagOption(tag)
-			if err2 != nil {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed `json` tag: %v", sf.Name, err2))
-			}
-		}
-		if !utf8.ValidString(name) {
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has JSON object name %q with invalid UTF-8", sf.Name, name))
-			name = string([]rune(name)) // replace invalid UTF-8 with utf8.RuneError
-		}
-		if err2 == nil {
-			out.hasName = true
-			out.name = name
-		}
-		tag = tag[n:]
-	}
-	b, _ := jsonwire.AppendQuote(nil, out.name, &jsonflags.Flags{})
-	out.quotedName = string(b)
-	out.nameNeedEscape = jsonwire.NeedEscape(out.name)
-
-	// Handle any additional tag options (if any).
-	var wasFormat bool
-	seenOpts := make(map[string]bool)
-	for len(tag) > 0 {
-		// Consume comma delimiter.
-		if tag[0] != ',' {
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed `json` tag: invalid character %q before next option (expecting ',')", sf.Name, tag[0]))
-		} else {
-			tag = tag[len(","):]
-			if len(tag) == 0 {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed `json` tag: invalid trailing ',' character", sf.Name))
-				break
-			}
-		}
-
-		// Consume and process the tag option.
-		opt, n, err2 := consumeTagOption(tag)
-		if err2 != nil {
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed `json` tag: %v", sf.Name, err2))
-		}
-		rawOpt := tag[:n]
-		tag = tag[n:]
-		switch {
-		case wasFormat:
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has `format` tag option that was not specified last", sf.Name))
-		case strings.HasPrefix(rawOpt, "'") && strings.TrimFunc(opt, isLetterOrDigit) == "":
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has unnecessarily quoted appearance of `%s` tag option; specify `%s` instead", sf.Name, rawOpt, opt))
-		}
-		switch opt {
-		case "case":
-			if !strings.HasPrefix(tag, ":") {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s is missing value for `case` tag option; specify `case:ignore` or `case:strict` instead", sf.Name))
-				break
-			}
-			tag = tag[len(":"):]
-			opt, n, err2 := consumeTagOption(tag)
-			if err2 != nil {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed value for `case` tag option: %v", sf.Name, err2))
-				break
-			}
-			rawOpt := tag[:n]
-			tag = tag[n:]
-			if strings.HasPrefix(rawOpt, "'") {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has unnecessarily quoted appearance of `case:%s` tag option; specify `case:%s` instead", sf.Name, rawOpt, opt))
-			}
-			switch opt {
-			case "ignore":
-				out.casing |= caseIgnore
-			case "strict":
-				out.casing |= caseStrict
-			default:
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has unknown `case:%s` tag value", sf.Name, rawOpt))
-			}
-		case "inline":
-			out.inline = true
-		case "unknown":
-			out.unknown = true
-		case "omitzero":
-			out.omitzero = true
-		case "omitempty":
-			out.omitempty = true
-		case "string":
-			out.string = true
-		case "format":
-			if !strings.HasPrefix(tag, ":") {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s is missing value for `format` tag option", sf.Name))
-				break
-			}
-			tag = tag[len(":"):]
-			opt, n, err2 := consumeTagOption(tag)
-			if err2 != nil {
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has malformed value for `format` tag option: %v", sf.Name, err2))
-				break
-			}
-			tag = tag[n:]
-			out.format = opt
-			wasFormat = true
-		default:
-			// Reject keys that resemble one of the supported options.
-			// This catches invalid mutants such as "omitEmpty" or "omit_empty".
-			normOpt := strings.ReplaceAll(strings.ToLower(opt), "_", "")
-			switch normOpt {
-			case "case", "inline", "unknown", "omitzero", "omitempty", "string", "format":
-				err = cmp.Or(err, fmt.Errorf("Go struct field %s has invalid appearance of `%s` tag option; specify `%s` instead", sf.Name, opt, normOpt))
-			}
-
-			// NOTE: Everything else is ignored. This does not mean it is
-			// forward compatible to insert arbitrary tag options since
-			// a future version of this package may understand that tag.
-		}
-
-		// Reject duplicates.
-		switch {
-		case out.casing == caseIgnore|caseStrict:
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s cannot have both `case:ignore` and `case:strict` tag options", sf.Name))
-		case seenOpts[opt]:
-			err = cmp.Or(err, fmt.Errorf("Go struct field %s has duplicate appearance of `%s` tag option", sf.Name, rawOpt))
-		}
-		seenOpts[opt] = true
-	}
-	return out, false, err
-}
-
-// consumeTagOption consumes the next option,
-// which is either a Go identifier or a single-quoted string.
-// If the next option is invalid, it returns all of in until the next comma,
-// and reports an error.
-func consumeTagOption(in string) (string, int, error) {
-	// For legacy compatibility with v1, assume options are comma-separated.
-	i := strings.IndexByte(in, ',')
-	if i < 0 {
-		i = len(in)
-	}
-
-	switch r, _ := utf8.DecodeRuneInString(in); {
-	// Option as a Go identifier.
-	case r == '_' || unicode.IsLetter(r):
-		n := len(in) - len(strings.TrimLeftFunc(in, isLetterOrDigit))
-		return in[:n], n, nil
-	// Option as a single-quoted string.
-	case r == '\'':
-		// The grammar is nearly identical to a double-quoted Go string literal,
-		// but uses single quotes as the terminators. The reason for a custom
-		// grammar is because both backtick and double quotes cannot be used
-		// verbatim in a struct tag.
-		//
-		// Convert a single-quoted string to a double-quote string and rely on
-		// strconv.Unquote to handle the rest.
-		var inEscape bool
-		b := []byte{'"'}
-		n := len(`'`)
-		for len(in) > n {
-			r, rn := utf8.DecodeRuneInString(in[n:])
-			switch {
-			case inEscape:
-				if r == '\'' {
-					b = b[:len(b)-1] // remove escape character: `\'` => `'`
-				}
-				inEscape = false
-			case r == '\\':
-				inEscape = true
-			case r == '"':
-				b = append(b, '\\') // insert escape character: `"` => `\"`
-			case r == '\'':
-				b = append(b, '"')
-				n += len(`'`)
-				out, err := strconv.Unquote(string(b))
-				if err != nil {
-					return in[:i], i, fmt.Errorf("invalid single-quoted string: %s", in[:n])
-				}
-				return out, n, nil
-			}
-			b = append(b, in[n:][:rn]...)
-			n += rn
-		}
-		if n > 10 {
-			n = 10 // limit the amount of context printed in the error
-		}
-		return in[:i], i, fmt.Errorf("single-quoted string not terminated: %s...", in[:n])
-	case len(in) == 0:
-		return in[:i], i, io.ErrUnexpectedEOF
-	default:
-		return in[:i], i, fmt.Errorf("invalid character %q at start of option (expecting Unicode letter or single quote)", r)
-	}
-}
-
-func isLetterOrDigit(r rune) bool {
-	return r == '_' || unicode.IsLetter(r) || unicode.IsNumber(r)
-}
-
-// boolsCompare compares x and y, ordering false before true.
-func boolsCompare(x, y bool) int {
-	switch {
-	case !x && y:
-		return -1
-	default:
-		return 0
-	case x && !y:
-		return +1
-	}
-}
diff --git a/src/encoding/json/v2/fields_test.go b/src/encoding/json/v2/fields_test.go
deleted file mode 100644
index 1c36f80905246f..00000000000000
--- a/src/encoding/json/v2/fields_test.go
+++ /dev/null
@@ -1,821 +0,0 @@
-// Copyright 2021 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"encoding"
-	"errors"
-	"reflect"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-	"encoding/json/jsontext"
-)
-
-type unexported struct{}
-
-func TestMakeStructFields(t *testing.T) {
-	type Embed struct {
-		Foo string
-	}
-	type Recursive struct {
-		A          string
-		*Recursive `json:",inline"`
-		B          string
-	}
-	type MapStringAny map[string]any
-	tests := []struct {
-		name    jsontest.CaseName
-		in      any
-		want    structFields
-		wantErr error
-	}{{
-		name: jsontest.Name("Names"),
-		in: struct {
-			F1 string
-			F2 string `json:"-"`
-			F3 string `json:"json_name"`
-			f3 string
-			F5 string `json:"json_name_nocase,case:ignore"`
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0}, typ: stringType, fieldOptions: fieldOptions{name: "F1", quotedName: `"F1"`}},
-				{id: 1, index: []int{2}, typ: stringType, fieldOptions: fieldOptions{name: "json_name", quotedName: `"json_name"`, hasName: true}},
-				{id: 2, index: []int{4}, typ: stringType, fieldOptions: fieldOptions{name: "json_name_nocase", quotedName: `"json_name_nocase"`, hasName: true, casing: caseIgnore}},
-			},
-		},
-	}, {
-		name: jsontest.Name("BreadthFirstSearch"),
-		in: struct {
-			L1A string
-			L1B struct {
-				L2A string
-				L2B struct {
-					L3A string
-				} `json:",inline"`
-				L2C string
-			} `json:",inline"`
-			L1C string
-			L1D struct {
-				L2D string
-				L2E struct {
-					L3B string
-				} `json:",inline"`
-				L2F string
-			} `json:",inline"`
-			L1E string
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0}, typ: stringType, fieldOptions: fieldOptions{name: "L1A", quotedName: `"L1A"`}},
-				{id: 3, index: []int{1, 0}, typ: stringType, fieldOptions: fieldOptions{name: "L2A", quotedName: `"L2A"`}},
-				{id: 7, index: []int{1, 1, 0}, typ: stringType, fieldOptions: fieldOptions{name: "L3A", quotedName: `"L3A"`}},
-				{id: 4, index: []int{1, 2}, typ: stringType, fieldOptions: fieldOptions{name: "L2C", quotedName: `"L2C"`}},
-				{id: 1, index: []int{2}, typ: stringType, fieldOptions: fieldOptions{name: "L1C", quotedName: `"L1C"`}},
-				{id: 5, index: []int{3, 0}, typ: stringType, fieldOptions: fieldOptions{name: "L2D", quotedName: `"L2D"`}},
-				{id: 8, index: []int{3, 1, 0}, typ: stringType, fieldOptions: fieldOptions{name: "L3B", quotedName: `"L3B"`}},
-				{id: 6, index: []int{3, 2}, typ: stringType, fieldOptions: fieldOptions{name: "L2F", quotedName: `"L2F"`}},
-				{id: 2, index: []int{4}, typ: stringType, fieldOptions: fieldOptions{name: "L1E", quotedName: `"L1E"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("NameResolution"),
-		in: struct {
-			X1 struct {
-				X struct {
-					A string // loses in precedence to A
-					B string // cancels out with X2.X.B
-					D string // loses in precedence to D
-				} `json:",inline"`
-			} `json:",inline"`
-			X2 struct {
-				X struct {
-					B string // cancels out with X1.X.B
-					C string
-					D string // loses in precedence to D
-				} `json:",inline"`
-			} `json:",inline"`
-			A string // takes precedence over X1.X.A
-			D string // takes precedence over X1.X.D and X2.X.D
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 2, index: []int{1, 0, 1}, typ: stringType, fieldOptions: fieldOptions{name: "C", quotedName: `"C"`}},
-				{id: 0, index: []int{2}, typ: stringType, fieldOptions: fieldOptions{name: "A", quotedName: `"A"`}},
-				{id: 1, index: []int{3}, typ: stringType, fieldOptions: fieldOptions{name: "D", quotedName: `"D"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("NameResolution/ExplicitNameUniquePrecedence"),
-		in: struct {
-			X1 struct {
-				A string // loses in precedence to X2.A
-			} `json:",inline"`
-			X2 struct {
-				A string `json:"A"`
-			} `json:",inline"`
-			X3 struct {
-				A string // loses in precedence to X2.A
-			} `json:",inline"`
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{1, 0}, typ: stringType, fieldOptions: fieldOptions{hasName: true, name: "A", quotedName: `"A"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("NameResolution/ExplicitNameCancelsOut"),
-		in: struct {
-			X1 struct {
-				A string // loses in precedence to X2.A or X3.A
-			} `json:",inline"`
-			X2 struct {
-				A string `json:"A"` // cancels out with X3.A
-			} `json:",inline"`
-			X3 struct {
-				A string `json:"A"` // cancels out with X2.A
-			} `json:",inline"`
-		}{},
-		want: structFields{flattened: []structField{}},
-	}, {
-		name: jsontest.Name("Embed/Implicit"),
-		in: struct {
-			Embed
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0, 0}, typ: stringType, fieldOptions: fieldOptions{name: "Foo", quotedName: `"Foo"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("Embed/Explicit"),
-		in: struct {
-			Embed `json:",inline"`
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0, 0}, typ: stringType, fieldOptions: fieldOptions{name: "Foo", quotedName: `"Foo"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("Recursive"),
-		in: struct {
-			A         string
-			Recursive `json:",inline"`
-			C         string
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0}, typ: stringType, fieldOptions: fieldOptions{name: "A", quotedName: `"A"`}},
-				{id: 2, index: []int{1, 2}, typ: stringType, fieldOptions: fieldOptions{name: "B", quotedName: `"B"`}},
-				{id: 1, index: []int{2}, typ: stringType, fieldOptions: fieldOptions{name: "C", quotedName: `"C"`}},
-			},
-		},
-	}, {
-		name: jsontest.Name("InlinedFallback/Cancelation"),
-		in: struct {
-			X1 struct {
-				X jsontext.Value `json:",inline"`
-			} `json:",inline"`
-			X2 struct {
-				X map[string]any `json:",unknown"`
-			} `json:",inline"`
-		}{},
-		want: structFields{},
-	}, {
-		name: jsontest.Name("InlinedFallback/Precedence"),
-		in: struct {
-			X1 struct {
-				X jsontext.Value `json:",inline"`
-			} `json:",inline"`
-			X2 struct {
-				X map[string]any `json:",unknown"`
-			} `json:",inline"`
-			X map[string]jsontext.Value `json:",unknown"`
-		}{},
-		want: structFields{
-			inlinedFallback: &structField{id: 0, index: []int{2}, typ: T[map[string]jsontext.Value](), fieldOptions: fieldOptions{name: "X", quotedName: `"X"`, unknown: true}},
-		},
-	}, {
-		name: jsontest.Name("InlinedFallback/InvalidImplicit"),
-		in: struct {
-			MapStringAny
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0}, typ: reflect.TypeOf(MapStringAny(nil)), fieldOptions: fieldOptions{name: "MapStringAny", quotedName: `"MapStringAny"`}},
-			},
-		},
-		wantErr: errors.New("embedded Go struct field MapStringAny of non-struct type must be explicitly given a JSON name"),
-	}, {
-		name: jsontest.Name("InvalidUTF8"),
-		in: struct {
-			Name string `json:"'\\xde\\xad\\xbe\\xef'"`
-		}{},
-		want: structFields{
-			flattened: []structField{
-				{id: 0, index: []int{0}, typ: stringType, fieldOptions: fieldOptions{hasName: true, name: "\u07ad\ufffd\ufffd", quotedName: "\"\u07ad\ufffd\ufffd\"", nameNeedEscape: true}},
-			},
-		},
-		wantErr: errors.New(`Go struct field Name has JSON object name "ޭ\xbe\xef" with invalid UTF-8`),
-	}, {
-		name: jsontest.Name("DuplicateName"),
-		in: struct {
-			A string `json:"same"`
-			B string `json:"same"`
-		}{},
-		want:    structFields{flattened: []structField{}},
-		wantErr: errors.New(`Go struct fields A and B conflict over JSON object name "same"`),
-	}, {
-		name: jsontest.Name("BothInlineAndUnknown"),
-		in: struct {
-			A struct{} `json:",inline,unknown"`
-		}{},
-		wantErr: errors.New("Go struct field A cannot have both `inline` and `unknown` specified"),
-	}, {
-		name: jsontest.Name("InlineWithOptions"),
-		in: struct {
-			A struct{} `json:",inline,omitempty"`
-		}{},
-		wantErr: errors.New("Go struct field A cannot have any options other than `inline` or `unknown` specified"),
-	}, {
-		name: jsontest.Name("UnknownWithOptions"),
-		in: struct {
-			A map[string]any `json:",inline,omitempty"`
-		}{},
-		want: structFields{inlinedFallback: &structField{
-			index: []int{0},
-			typ:   reflect.TypeFor[map[string]any](),
-			fieldOptions: fieldOptions{
-				name:       "A",
-				quotedName: `"A"`,
-				inline:     true,
-			},
-		}},
-		wantErr: errors.New("Go struct field A cannot have any options other than `inline` or `unknown` specified"),
-	}, {
-		name: jsontest.Name("InlineTextMarshaler"),
-		in: struct {
-			A struct{ encoding.TextMarshaler } `json:",inline"`
-		}{},
-		want: structFields{flattened: []structField{{
-			index: []int{0, 0},
-			typ:   reflect.TypeFor[encoding.TextMarshaler](),
-			fieldOptions: fieldOptions{
-				name:       "TextMarshaler",
-				quotedName: `"TextMarshaler"`,
-			},
-		}}},
-		wantErr: errors.New(`inlined Go struct field A of type struct { encoding.TextMarshaler } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("InlineTextAppender"),
-		in: struct {
-			A struct{ encoding.TextAppender } `json:",inline"`
-		}{},
-		want: structFields{flattened: []structField{{
-			index: []int{0, 0},
-			typ:   reflect.TypeFor[encoding.TextAppender](),
-			fieldOptions: fieldOptions{
-				name:       "TextAppender",
-				quotedName: `"TextAppender"`,
-			},
-		}}},
-		wantErr: errors.New(`inlined Go struct field A of type struct { encoding.TextAppender } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("UnknownJSONMarshaler"),
-		in: struct {
-			A struct{ Marshaler } `json:",unknown"`
-		}{},
-		wantErr: errors.New(`inlined Go struct field A of type struct { json.Marshaler } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("InlineJSONMarshalerTo"),
-		in: struct {
-			A struct{ MarshalerTo } `json:",inline"`
-		}{},
-		want: structFields{flattened: []structField{{
-			index: []int{0, 0},
-			typ:   reflect.TypeFor[MarshalerTo](),
-			fieldOptions: fieldOptions{
-				name:       "MarshalerTo",
-				quotedName: `"MarshalerTo"`,
-			},
-		}}},
-		wantErr: errors.New(`inlined Go struct field A of type struct { json.MarshalerTo } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("UnknownTextUnmarshaler"),
-		in: struct {
-			A *struct{ encoding.TextUnmarshaler } `json:",unknown"`
-		}{},
-		wantErr: errors.New(`inlined Go struct field A of type struct { encoding.TextUnmarshaler } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("InlineJSONUnmarshaler"),
-		in: struct {
-			A *struct{ Unmarshaler } `json:",inline"`
-		}{},
-		want: structFields{flattened: []structField{{
-			index: []int{0, 0},
-			typ:   reflect.TypeFor[Unmarshaler](),
-			fieldOptions: fieldOptions{
-				name:       "Unmarshaler",
-				quotedName: `"Unmarshaler"`,
-			},
-		}}},
-		wantErr: errors.New(`inlined Go struct field A of type struct { json.Unmarshaler } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("UnknownJSONUnmarshalerFrom"),
-		in: struct {
-			A struct{ UnmarshalerFrom } `json:",unknown"`
-		}{},
-		wantErr: errors.New(`inlined Go struct field A of type struct { json.UnmarshalerFrom } must not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("UnknownStruct"),
-		in: struct {
-			A struct {
-				X, Y, Z string
-			} `json:",unknown"`
-		}{},
-		wantErr: errors.New("inlined Go struct field A of type struct { X string; Y string; Z string } with `unknown` tag must be a Go map of string key or a jsontext.Value"),
-	}, {
-		name: jsontest.Name("InlineUnsupported/MapIntKey"),
-		in: struct {
-			A map[int]any `json:",unknown"`
-		}{},
-		wantErr: errors.New(`inlined Go struct field A of type map[int]interface {} must be a Go struct, Go map of string key, or jsontext.Value`),
-	}, {
-		name: jsontest.Name("InlineUnsupported/MapTextMarshalerStringKey"),
-		in: struct {
-			A map[nocaseString]any `json:",inline"`
-		}{},
-		wantErr: errors.New(`inlined map field A of type map[json.nocaseString]interface {} must have a string key that does not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("InlineUnsupported/MapMarshalerStringKey"),
-		in: struct {
-			A map[stringMarshalEmpty]any `json:",inline"`
-		}{},
-		wantErr: errors.New(`inlined map field A of type map[json.stringMarshalEmpty]interface {} must have a string key that does not implement marshal or unmarshal methods`),
-	}, {
-		name: jsontest.Name("InlineUnsupported/DoublePointer"),
-		in: struct {
-			A **struct{} `json:",inline"`
-		}{},
-		wantErr: errors.New(`inlined Go struct field A of type *struct {} must be a Go struct, Go map of string key, or jsontext.Value`),
-	}, {
-		name: jsontest.Name("DuplicateInline"),
-		in: struct {
-			A map[string]any `json:",inline"`
-			B jsontext.Value `json:",inline"`
-		}{},
-		wantErr: errors.New(`inlined Go struct fields A and B cannot both be a Go map or jsontext.Value`),
-	}, {
-		name: jsontest.Name("DuplicateEmbedInline"),
-		in: struct {
-			A MapStringAny   `json:",inline"`
-			B jsontext.Value `json:",inline"`
-		}{},
-		wantErr: errors.New(`inlined Go struct fields A and B cannot both be a Go map or jsontext.Value`),
-	}}
-
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			got, err := makeStructFields(reflect.TypeOf(tt.in))
-
-			// Sanity check that pointers are consistent.
-			pointers := make(map[*structField]bool)
-			for i := range got.flattened {
-				pointers[&got.flattened[i]] = true
-			}
-			for _, f := range got.byActualName {
-				if !pointers[f] {
-					t.Errorf("%s: byActualName pointer not in flattened", tt.name.Where)
-				}
-			}
-			for _, fs := range got.byFoldedName {
-				for _, f := range fs {
-					if !pointers[f] {
-						t.Errorf("%s: byFoldedName pointer not in flattened", tt.name.Where)
-					}
-				}
-			}
-
-			// Zero out fields that are incomparable.
-			for i := range got.flattened {
-				got.flattened[i].fncs = nil
-				got.flattened[i].isEmpty = nil
-			}
-			if got.inlinedFallback != nil {
-				got.inlinedFallback.fncs = nil
-				got.inlinedFallback.isEmpty = nil
-			}
-
-			// Reproduce maps in want.
-			tt.want.byActualName = make(map[string]*structField)
-			for i := range tt.want.flattened {
-				f := &tt.want.flattened[i]
-				tt.want.byActualName[f.name] = f
-			}
-			tt.want.byFoldedName = make(map[string][]*structField)
-			for i, f := range tt.want.flattened {
-				foldedName := string(foldName([]byte(f.name)))
-				tt.want.byFoldedName[foldedName] = append(tt.want.byFoldedName[foldedName], &tt.want.flattened[i])
-			}
-
-			// Only compare underlying error to simplify test logic.
-			var gotErr error
-			if err != nil {
-				gotErr = err.Err
-			}
-
-			tt.want.reindex()
-			if !reflect.DeepEqual(got, tt.want) || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("%s: makeStructFields(%T):\n\tgot  (%v, %v)\n\twant (%v, %v)", tt.name.Where, tt.in, got, gotErr, tt.want, tt.wantErr)
-			}
-		})
-	}
-}
-
-func TestParseTagOptions(t *testing.T) {
-	tests := []struct {
-		name        jsontest.CaseName
-		in          any // must be a struct with a single field
-		wantOpts    fieldOptions
-		wantIgnored bool
-		wantErr     error
-	}{{
-		name: jsontest.Name("GoName"),
-		in: struct {
-			FieldName int
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-	}, {
-		name: jsontest.Name("GoNameWithOptions"),
-		in: struct {
-			FieldName int `json:",inline"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, inline: true},
-	}, {
-		name: jsontest.Name("Empty"),
-		in: struct {
-			V int `json:""`
-		}{},
-		wantOpts: fieldOptions{name: "V", quotedName: `"V"`},
-	}, {
-		name: jsontest.Name("Unexported"),
-		in: struct {
-			v int `json:"Hello"`
-		}{},
-		wantIgnored: true,
-		wantErr:     errors.New("unexported Go struct field v cannot have non-ignored `json:\"Hello\"` tag"),
-	}, {
-		name: jsontest.Name("UnexportedEmpty"),
-		in: struct {
-			v int `json:""`
-		}{},
-		wantIgnored: true,
-		wantErr:     errors.New("unexported Go struct field v cannot have non-ignored `json:\"\"` tag"),
-	}, {
-		name: jsontest.Name("EmbedUnexported"),
-		in: struct {
-			unexported
-		}{},
-		wantOpts: fieldOptions{name: "unexported", quotedName: `"unexported"`},
-	}, {
-		name: jsontest.Name("Ignored"),
-		in: struct {
-			V int `json:"-"`
-		}{},
-		wantIgnored: true,
-	}, {
-		name: jsontest.Name("IgnoredEmbedUnexported"),
-		in: struct {
-			unexported `json:"-"`
-		}{},
-		wantIgnored: true,
-	}, {
-		name: jsontest.Name("DashComma"),
-		in: struct {
-			V int `json:"-,"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "-", quotedName: `"-"`},
-		wantErr:  errors.New("Go struct field V has malformed `json` tag: invalid trailing ',' character"),
-	}, {
-		name: jsontest.Name("QuotedDashName"),
-		in: struct {
-			V int `json:"'-'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "-", quotedName: `"-"`},
-	}, {
-		name: jsontest.Name("LatinPunctuationName"),
-		in: struct {
-			V int `json:"$%-/"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "$%-/", quotedName: `"$%-/"`},
-	}, {
-		name: jsontest.Name("QuotedLatinPunctuationName"),
-		in: struct {
-			V int `json:"'$%-/'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "$%-/", quotedName: `"$%-/"`},
-	}, {
-		name: jsontest.Name("LatinDigitsName"),
-		in: struct {
-			V int `json:"0123456789"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "0123456789", quotedName: `"0123456789"`},
-	}, {
-		name: jsontest.Name("QuotedLatinDigitsName"),
-		in: struct {
-			V int `json:"'0123456789'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "0123456789", quotedName: `"0123456789"`},
-	}, {
-		name: jsontest.Name("LatinUppercaseName"),
-		in: struct {
-			V int `json:"ABCDEFGHIJKLMOPQRSTUVWXYZ"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "ABCDEFGHIJKLMOPQRSTUVWXYZ", quotedName: `"ABCDEFGHIJKLMOPQRSTUVWXYZ"`},
-	}, {
-		name: jsontest.Name("LatinLowercaseName"),
-		in: struct {
-			V int `json:"abcdefghijklmnopqrstuvwxyz_"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "abcdefghijklmnopqrstuvwxyz_", quotedName: `"abcdefghijklmnopqrstuvwxyz_"`},
-	}, {
-		name: jsontest.Name("GreekName"),
-		in: struct {
-			V string `json:"Ελλάδα"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "Ελλάδα", quotedName: `"Ελλάδα"`},
-	}, {
-		name: jsontest.Name("QuotedGreekName"),
-		in: struct {
-			V string `json:"'Ελλάδα'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "Ελλάδα", quotedName: `"Ελλάδα"`},
-	}, {
-		name: jsontest.Name("ChineseName"),
-		in: struct {
-			V string `json:"世界"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "世界", quotedName: `"世界"`},
-	}, {
-		name: jsontest.Name("QuotedChineseName"),
-		in: struct {
-			V string `json:"'世界'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "世界", quotedName: `"世界"`},
-	}, {
-		name: jsontest.Name("PercentSlashName"),
-		in: struct {
-			V int `json:"text/html%"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "text/html%", quotedName: `"text/html%"`},
-	}, {
-		name: jsontest.Name("QuotedPercentSlashName"),
-		in: struct {
-			V int `json:"'text/html%'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "text/html%", quotedName: `"text/html%"`},
-	}, {
-		name: jsontest.Name("PunctuationName"),
-		in: struct {
-			V string `json:"!#$%&()*+-./:;<=>?@[]^_{|}~ "`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "!#$%&()*+-./:;<=>?@[]^_{|}~ ", quotedName: `"!#$%&()*+-./:;<=>?@[]^_{|}~ "`, nameNeedEscape: true},
-	}, {
-		name: jsontest.Name("QuotedPunctuationName"),
-		in: struct {
-			V string `json:"'!#$%&()*+-./:;<=>?@[]^_{|}~ '"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "!#$%&()*+-./:;<=>?@[]^_{|}~ ", quotedName: `"!#$%&()*+-./:;<=>?@[]^_{|}~ "`, nameNeedEscape: true},
-	}, {
-		name: jsontest.Name("EmptyName"),
-		in: struct {
-			V int `json:"''"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "", quotedName: `""`},
-	}, {
-		name: jsontest.Name("SpaceName"),
-		in: struct {
-			V int `json:"' '"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: " ", quotedName: `" "`},
-	}, {
-		name: jsontest.Name("CommaQuotes"),
-		in: struct {
-			V int `json:"',\\'\"\\\"'"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: `,'""`, quotedName: `",'\"\""`, nameNeedEscape: true},
-	}, {
-		name: jsontest.Name("SingleComma"),
-		in: struct {
-			V int `json:","`
-		}{},
-		wantOpts: fieldOptions{name: "V", quotedName: `"V"`},
-		wantErr:  errors.New("Go struct field V has malformed `json` tag: invalid trailing ',' character"),
-	}, {
-		name: jsontest.Name("SuperfluousCommas"),
-		in: struct {
-			V int `json:",,,,\"\",,inline,unknown,,,,"`
-		}{},
-		wantOpts: fieldOptions{name: "V", quotedName: `"V"`, inline: true, unknown: true},
-		wantErr:  errors.New("Go struct field V has malformed `json` tag: invalid character ',' at start of option (expecting Unicode letter or single quote)"),
-	}, {
-		name: jsontest.Name("CaseAloneOption"),
-		in: struct {
-			FieldName int `json:",case"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName is missing value for `case` tag option; specify `case:ignore` or `case:strict` instead"),
-	}, {
-		name: jsontest.Name("CaseIgnoreOption"),
-		in: struct {
-			FieldName int `json:",case:ignore"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, casing: caseIgnore},
-	}, {
-		name: jsontest.Name("CaseStrictOption"),
-		in: struct {
-			FieldName int `json:",case:strict"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, casing: caseStrict},
-	}, {
-		name: jsontest.Name("CaseUnknownOption"),
-		in: struct {
-			FieldName int `json:",case:unknown"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName has unknown `case:unknown` tag value"),
-	}, {
-		name: jsontest.Name("CaseQuotedOption"),
-		in: struct {
-			FieldName int `json:",case:'ignore'"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, casing: caseIgnore},
-		wantErr:  errors.New("Go struct field FieldName has unnecessarily quoted appearance of `case:'ignore'` tag option; specify `case:ignore` instead"),
-	}, {
-		name: jsontest.Name("BothCaseOptions"),
-		in: struct {
-			FieldName int `json:",case:ignore,case:strict"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, casing: caseIgnore | caseStrict},
-		wantErr:  errors.New("Go struct field FieldName cannot have both `case:ignore` and `case:strict` tag options"),
-	}, {
-		name: jsontest.Name("InlineOption"),
-		in: struct {
-			FieldName int `json:",inline"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, inline: true},
-	}, {
-		name: jsontest.Name("UnknownOption"),
-		in: struct {
-			FieldName int `json:",unknown"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, unknown: true},
-	}, {
-		name: jsontest.Name("OmitZeroOption"),
-		in: struct {
-			FieldName int `json:",omitzero"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, omitzero: true},
-	}, {
-		name: jsontest.Name("OmitEmptyOption"),
-		in: struct {
-			FieldName int `json:",omitempty"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, omitempty: true},
-	}, {
-		name: jsontest.Name("StringOption"),
-		in: struct {
-			FieldName int `json:",string"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, string: true},
-	}, {
-		name: jsontest.Name("FormatOptionEqual"),
-		in: struct {
-			FieldName int `json:",format=fizzbuzz"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName is missing value for `format` tag option"),
-	}, {
-		name: jsontest.Name("FormatOptionColon"),
-		in: struct {
-			FieldName int `json:",format:fizzbuzz"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, format: "fizzbuzz"},
-	}, {
-		name: jsontest.Name("FormatOptionQuoted"),
-		in: struct {
-			FieldName int `json:",format:'2006-01-02'"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, format: "2006-01-02"},
-	}, {
-		name: jsontest.Name("FormatOptionInvalid"),
-		in: struct {
-			FieldName int `json:",format:'2006-01-02"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName has malformed value for `format` tag option: single-quoted string not terminated: '2006-01-0..."),
-	}, {
-		name: jsontest.Name("FormatOptionNotLast"),
-		in: struct {
-			FieldName int `json:",format:alpha,ordered"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, format: "alpha"},
-		wantErr:  errors.New("Go struct field FieldName has `format` tag option that was not specified last"),
-	}, {
-		name: jsontest.Name("AllOptions"),
-		in: struct {
-			FieldName int `json:",case:ignore,inline,unknown,omitzero,omitempty,string,format:format"`
-		}{},
-		wantOpts: fieldOptions{
-			name:       "FieldName",
-			quotedName: `"FieldName"`,
-			casing:     caseIgnore,
-			inline:     true,
-			unknown:    true,
-			omitzero:   true,
-			omitempty:  true,
-			string:     true,
-			format:     "format",
-		},
-	}, {
-		name: jsontest.Name("AllOptionsQuoted"),
-		in: struct {
-			FieldName int `json:",'case':'ignore','inline','unknown','omitzero','omitempty','string','format':'format'"`
-		}{},
-		wantOpts: fieldOptions{
-			name:       "FieldName",
-			quotedName: `"FieldName"`,
-			casing:     caseIgnore,
-			inline:     true,
-			unknown:    true,
-			omitzero:   true,
-			omitempty:  true,
-			string:     true,
-			format:     "format",
-		},
-		wantErr: errors.New("Go struct field FieldName has unnecessarily quoted appearance of `'case'` tag option; specify `case` instead"),
-	}, {
-		name: jsontest.Name("AllOptionsCaseSensitive"),
-		in: struct {
-			FieldName int `json:",CASE:IGNORE,INLINE,UNKNOWN,OMITZERO,OMITEMPTY,STRING,FORMAT:FORMAT"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName has invalid appearance of `CASE` tag option; specify `case` instead"),
-	}, {
-		name: jsontest.Name("AllOptionsSpaceSensitive"),
-		in: struct {
-			FieldName int `json:", case:ignore , inline , unknown , omitzero , omitempty , string , format:format "`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`},
-		wantErr:  errors.New("Go struct field FieldName has malformed `json` tag: invalid character ' ' at start of option (expecting Unicode letter or single quote)"),
-	}, {
-		name: jsontest.Name("UnknownTagOption"),
-		in: struct {
-			FieldName int `json:",inline,whoknows,string"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, inline: true, string: true},
-	}, {
-		name: jsontest.Name("MalformedQuotedString/MissingQuote"),
-		in: struct {
-			FieldName int `json:"'hello,string"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, string: true},
-		wantErr:  errors.New("Go struct field FieldName has malformed `json` tag: single-quoted string not terminated: 'hello,str..."),
-	}, {
-		name: jsontest.Name("MalformedQuotedString/MissingComma"),
-		in: struct {
-			FieldName int `json:"'hello'inline,string"`
-		}{},
-		wantOpts: fieldOptions{hasName: true, name: "hello", quotedName: `"hello"`, inline: true, string: true},
-		wantErr:  errors.New("Go struct field FieldName has malformed `json` tag: invalid character 'i' before next option (expecting ',')"),
-	}, {
-		name: jsontest.Name("MalformedQuotedString/InvalidEscape"),
-		in: struct {
-			FieldName int `json:"'hello\\u####',inline,string"`
-		}{},
-		wantOpts: fieldOptions{name: "FieldName", quotedName: `"FieldName"`, inline: true, string: true},
-		wantErr:  errors.New("Go struct field FieldName has malformed `json` tag: invalid single-quoted string: 'hello\\u####'"),
-	}, {
-		name: jsontest.Name("MisnamedTag"),
-		in: struct {
-			V int `jsom:"Misnamed"`
-		}{},
-		wantOpts: fieldOptions{name: "V", quotedName: `"V"`},
-	}}
-
-	for _, tt := range tests {
-		t.Run(tt.name.Name, func(t *testing.T) {
-			fs := reflect.TypeOf(tt.in).Field(0)
-			gotOpts, gotIgnored, gotErr := parseFieldOptions(fs)
-			if !reflect.DeepEqual(gotOpts, tt.wantOpts) || gotIgnored != tt.wantIgnored || !reflect.DeepEqual(gotErr, tt.wantErr) {
-				t.Errorf("%s: parseFieldOptions(%T) = (\n\t%v,\n\t%v,\n\t%v\n), want (\n\t%v,\n\t%v,\n\t%v\n)", tt.name.Where, tt.in, gotOpts, gotIgnored, gotErr, tt.wantOpts, tt.wantIgnored, tt.wantErr)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/v2/fold.go b/src/encoding/json/v2/fold.go
deleted file mode 100644
index ca33efe85fd9aa..00000000000000
--- a/src/encoding/json/v2/fold.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"unicode"
-	"unicode/utf8"
-)
-
-// foldName returns a folded string such that foldName(x) == foldName(y)
-// is similar to strings.EqualFold(x, y), but ignores underscore and dashes.
-// This allows foldName to match common naming conventions.
-func foldName(in []byte) []byte {
-	// This is inlinable to take advantage of "function outlining".
-	// See https://blog.filippo.io/efficient-go-apis-with-the-inliner/
-	var arr [32]byte // large enough for most JSON names
-	return appendFoldedName(arr[:0], in)
-}
-func appendFoldedName(out, in []byte) []byte {
-	for i := 0; i < len(in); {
-		// Handle single-byte ASCII.
-		if c := in[i]; c < utf8.RuneSelf {
-			if c != '_' && c != '-' {
-				if 'a' <= c && c <= 'z' {
-					c -= 'a' - 'A'
-				}
-				out = append(out, c)
-			}
-			i++
-			continue
-		}
-		// Handle multi-byte Unicode.
-		r, n := utf8.DecodeRune(in[i:])
-		out = utf8.AppendRune(out, foldRune(r))
-		i += n
-	}
-	return out
-}
-
-// foldRune is a variation on unicode.SimpleFold that returns the same rune
-// for all runes in the same fold set.
-//
-// Invariant:
-//
-//	foldRune(x) == foldRune(y) ⇔ strings.EqualFold(string(x), string(y))
-func foldRune(r rune) rune {
-	for {
-		r2 := unicode.SimpleFold(r)
-		if r2 <= r {
-			return r2 // smallest character in the fold set
-		}
-		r = r2
-	}
-}
diff --git a/src/encoding/json/v2/fold_test.go b/src/encoding/json/v2/fold_test.go
deleted file mode 100644
index a1c89723802983..00000000000000
--- a/src/encoding/json/v2/fold_test.go
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"fmt"
-	"reflect"
-	"testing"
-	"unicode"
-)
-
-var equalFoldTestdata = []struct {
-	in1, in2 string
-	want     bool
-}{
-	{"", "", true},
-	{"abc", "abc", true},
-	{"ABcd", "ABcd", true},
-	{"123abc", "123ABC", true},
-	{"_1_2_-_3__--a-_-b-c-", "123ABC", true},
-	{"αβδ", "ΑΒΔ", true},
-	{"abc", "xyz", false},
-	{"abc", "XYZ", false},
-	{"abcdefghijk", "abcdefghijX", false},
-	{"abcdefghijk", "abcdefghij\u212A", true},
-	{"abcdefghijK", "abcdefghij\u212A", true},
-	{"abcdefghijkz", "abcdefghij\u212Ay", false},
-	{"abcdefghijKz", "abcdefghij\u212Ay", false},
-	{"1", "2", false},
-	{"utf-8", "US-ASCII", false},
-	{"hello, world!", "hello, world!", true},
-	{"hello, world!", "Hello, World!", true},
-	{"hello, world!", "HELLO, WORLD!", true},
-	{"hello, world!", "jello, world!", false},
-	{"γειά, κόσμε!", "γειά, κόσμε!", true},
-	{"γειά, κόσμε!", "Γειά, Κόσμε!", true},
-	{"γειά, κόσμε!", "ΓΕΙΆ, ΚΌΣΜΕ!", true},
-	{"γειά, κόσμε!", "ΛΕΙΆ, ΚΌΣΜΕ!", false},
-	{"AESKey", "aesKey", true},
-	{"γειά, κόσμε!", "Γ\xce_\xb5ιά, Κόσμε!", false},
-	{"aeskey", "AESKEY", true},
-	{"AESKEY", "aes_key", true},
-	{"aes_key", "AES_KEY", true},
-	{"AES_KEY", "aes-key", true},
-	{"aes-key", "AES-KEY", true},
-	{"AES-KEY", "aesKey", true},
-	{"aesKey", "AesKey", true},
-	{"AesKey", "AESKey", true},
-	{"AESKey", "aeskey", true},
-	{"DESKey", "aeskey", false},
-	{"AES Key", "aeskey", false},
-	{"aes﹏key", "aeskey", false}, // Unicode underscore not handled
-	{"aes〰key", "aeskey", false}, // Unicode dash not handled
-}
-
-func TestEqualFold(t *testing.T) {
-	for _, tt := range equalFoldTestdata {
-		got := equalFold([]byte(tt.in1), []byte(tt.in2))
-		if got != tt.want {
-			t.Errorf("equalFold(%q, %q) = %v, want %v", tt.in1, tt.in2, got, tt.want)
-		}
-	}
-}
-
-func equalFold(x, y []byte) bool {
-	return string(foldName(x)) == string(foldName(y))
-}
-
-func TestFoldRune(t *testing.T) {
-	if testing.Short() {
-		t.Skip()
-	}
-
-	var foldSet []rune
-	for r := range rune(unicode.MaxRune + 1) {
-		// Derive all runes that are all part of the same fold set.
-		foldSet = foldSet[:0]
-		for r0 := r; r != r0 || len(foldSet) == 0; r = unicode.SimpleFold(r) {
-			foldSet = append(foldSet, r)
-		}
-
-		// Normalized form of each rune in a foldset must be the same and
-		// also be within the set itself.
-		var withinSet bool
-		rr0 := foldRune(foldSet[0])
-		for _, r := range foldSet {
-			withinSet = withinSet || rr0 == r
-			rr := foldRune(r)
-			if rr0 != rr {
-				t.Errorf("foldRune(%q) = %q, want %q", r, rr, rr0)
-			}
-		}
-		if !withinSet {
-			t.Errorf("foldRune(%q) = %q not in fold set %q", foldSet[0], rr0, string(foldSet))
-		}
-	}
-}
-
-// TestBenchmarkUnmarshalUnknown unmarshals an unknown field into a struct with
-// varying number of fields. Since the unknown field does not directly match
-// any known field by name, it must fall back on case-insensitive matching.
-func TestBenchmarkUnmarshalUnknown(t *testing.T) {
-	in := []byte(`{"NameUnknown":null}`)
-	for _, n := range []int{1, 2, 5, 10, 20, 50, 100} {
-		unmarshal := Unmarshal
-
-		var fields []reflect.StructField
-		for i := range n {
-			fields = append(fields, reflect.StructField{
-				Name: fmt.Sprintf("Name%d", i),
-				Type: T[int](),
-				Tag:  `json:",case:ignore"`,
-			})
-		}
-		out := reflect.New(reflect.StructOf(fields)).Interface()
-
-		t.Run(fmt.Sprintf("N%d", n), func(t *testing.T) {
-			if err := unmarshal(in, out); err != nil {
-				t.Fatalf("Unmarshal error: %v", err)
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/v2/fuzz_test.go b/src/encoding/json/v2/fuzz_test.go
deleted file mode 100644
index 491a08311eb0a3..00000000000000
--- a/src/encoding/json/v2/fuzz_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"testing"
-)
-
-func FuzzEqualFold(f *testing.F) {
-	for _, tt := range equalFoldTestdata {
-		f.Add([]byte(tt.in1), []byte(tt.in2))
-	}
-
-	equalFoldSimple := func(x, y []byte) bool {
-		strip := func(b []byte) []byte {
-			return bytes.Map(func(r rune) rune {
-				if r == '_' || r == '-' {
-					return -1 // ignore underscores and dashes
-				}
-				return r
-			}, b)
-		}
-		return bytes.EqualFold(strip(x), strip(y))
-	}
-
-	f.Fuzz(func(t *testing.T, s1, s2 []byte) {
-		// Compare the optimized and simplified implementations.
-		got := equalFold(s1, s2)
-		want := equalFoldSimple(s1, s2)
-		if got != want {
-			t.Errorf("equalFold(%q, %q) = %v, want %v", s1, s2, got, want)
-		}
-	})
-}
diff --git a/src/encoding/json/v2/inline_test.go b/src/encoding/json/v2/inline_test.go
deleted file mode 100644
index b68fefb0642579..00000000000000
--- a/src/encoding/json/v2/inline_test.go
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"os"
-	"os/exec"
-	"strings"
-	"testing"
-)
-
-// Whether a function is inlinable is dependent on the Go compiler version
-// and also relies on the presence of the Go toolchain itself being installed.
-// This test is disabled by default and explicitly enabled with an
-// environment variable that is specified in our integration tests,
-// which have fine control over exactly which Go version is being tested.
-var testInline = os.Getenv("TEST_INLINE") != ""
-
-func TestInline(t *testing.T) {
-	if !testInline {
-		t.SkipNow()
-	}
-
-	pkgs := map[string]map[string]bool{
-		".": {
-			"hash64":   true,
-			"foldName": true, // thin wrapper over appendFoldedName
-		},
-		"./internal/jsonwire": {
-			"ConsumeWhitespace":    true,
-			"ConsumeNull":          true,
-			"ConsumeFalse":         true,
-			"ConsumeTrue":          true,
-			"ConsumeSimpleString":  true,
-			"ConsumeString":        true, // thin wrapper over consumeStringResumable
-			"ConsumeSimpleNumber":  true,
-			"ConsumeNumber":        true, // thin wrapper over consumeNumberResumable
-			"UnquoteMayCopy":       true, // thin wrapper over unescapeString
-			"HasSuffixByte":        true,
-			"TrimSuffixByte":       true,
-			"TrimSuffixString":     true,
-			"TrimSuffixWhitespace": true,
-		},
-		"./jsontext": {
-			"encoderState.NeedFlush":                  true,
-			"Decoder.ReadToken":                       true, // thin wrapper over decoderState.ReadToken
-			"Decoder.ReadValue":                       true, // thin wrapper over decoderState.ReadValue
-			"Encoder.WriteToken":                      true, // thin wrapper over encoderState.WriteToken
-			"Encoder.WriteValue":                      true, // thin wrapper over encoderState.WriteValue
-			"decodeBuffer.needMore":                   true,
-			"stateMachine.appendLiteral":              true,
-			"stateMachine.appendNumber":               true,
-			"stateMachine.appendString":               true,
-			"stateMachine.Depth":                      true,
-			"stateMachine.reset":                      true,
-			"stateMachine.MayAppendDelim":             true,
-			"stateMachine.needDelim":                  true,
-			"stateMachine.popArray":                   true,
-			"stateMachine.popObject":                  true,
-			"stateMachine.pushArray":                  true,
-			"stateMachine.pushObject":                 true,
-			"stateEntry.Increment":                    true,
-			"stateEntry.decrement":                    true,
-			"stateEntry.isArray":                      true,
-			"stateEntry.isObject":                     true,
-			"stateEntry.Length":                       true,
-			"stateEntry.needImplicitColon":            true,
-			"stateEntry.needImplicitComma":            true,
-			"stateEntry.NeedObjectName":               true,
-			"stateEntry.needObjectValue":              true,
-			"objectNameStack.reset":                   true,
-			"objectNameStack.length":                  true,
-			"objectNameStack.getUnquoted":             true,
-			"objectNameStack.push":                    true,
-			"objectNameStack.ReplaceLastQuotedOffset": true,
-			"objectNameStack.replaceLastUnquotedName": true,
-			"objectNameStack.pop":                     true,
-			"objectNameStack.ensureCopiedBuffer":      true,
-			"objectNamespace.insertQuoted":            true, // thin wrapper over objectNamespace.insert
-			"objectNamespace.InsertUnquoted":          true, // thin wrapper over objectNamespace.insert
-			"Token.String":                            true, // thin wrapper over Token.string
-		},
-	}
-
-	for pkg, fncs := range pkgs {
-		cmd := exec.Command("go", "build", "-gcflags=-m", pkg)
-		b, err := cmd.CombinedOutput()
-		if err != nil {
-			t.Fatalf("exec.Command error: %v\n\n%s", err, b)
-		}
-		for _, line := range strings.Split(string(b), "\n") {
-			const phrase = ": can inline "
-			if i := strings.Index(line, phrase); i >= 0 {
-				fnc := line[i+len(phrase):]
-				fnc = strings.ReplaceAll(fnc, "(", "")
-				fnc = strings.ReplaceAll(fnc, "*", "")
-				fnc = strings.ReplaceAll(fnc, ")", "")
-				delete(fncs, fnc)
-			}
-		}
-		for fnc := range fncs {
-			t.Errorf("%v is not inlinable, expected it to be", fnc)
-		}
-	}
-}
diff --git a/src/encoding/json/v2/intern.go b/src/encoding/json/v2/intern.go
deleted file mode 100644
index 3c75e034f05537..00000000000000
--- a/src/encoding/json/v2/intern.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2022 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"encoding/binary"
-	"math/bits"
-)
-
-// stringCache is a cache for strings converted from a []byte.
-type stringCache = [256]string // 256*unsafe.Sizeof(string("")) => 4KiB
-
-// makeString returns the string form of b.
-// It returns a pre-allocated string from c if present, otherwise
-// it allocates a new string, inserts it into the cache, and returns it.
-func makeString(c *stringCache, b []byte) string {
-	const (
-		minCachedLen = 2   // single byte strings are already interned by the runtime
-		maxCachedLen = 256 // large enough for UUIDs, IPv6 addresses, SHA-256 checksums, etc.
-	)
-	if c == nil || len(b) < minCachedLen || len(b) > maxCachedLen {
-		return string(b)
-	}
-
-	// Compute a hash from the fixed-width prefix and suffix of the string.
-	// This ensures hashing a string is a constant time operation.
-	var h uint32
-	switch {
-	case len(b) >= 8:
-		lo := binary.LittleEndian.Uint64(b[:8])
-		hi := binary.LittleEndian.Uint64(b[len(b)-8:])
-		h = hash64(uint32(lo), uint32(lo>>32)) ^ hash64(uint32(hi), uint32(hi>>32))
-	case len(b) >= 4:
-		lo := binary.LittleEndian.Uint32(b[:4])
-		hi := binary.LittleEndian.Uint32(b[len(b)-4:])
-		h = hash64(lo, hi)
-	case len(b) >= 2:
-		lo := binary.LittleEndian.Uint16(b[:2])
-		hi := binary.LittleEndian.Uint16(b[len(b)-2:])
-		h = hash64(uint32(lo), uint32(hi))
-	}
-
-	// Check the cache for the string.
-	i := h % uint32(len(*c))
-	if s := (*c)[i]; s == string(b) {
-		return s
-	}
-	s := string(b)
-	(*c)[i] = s
-	return s
-}
-
-// hash64 returns the hash of two uint32s as a single uint32.
-func hash64(lo, hi uint32) uint32 {
-	// If avalanche=true, this is identical to XXH32 hash on a 8B string:
-	//	var b [8]byte
-	//	binary.LittleEndian.PutUint32(b[:4], lo)
-	//	binary.LittleEndian.PutUint32(b[4:], hi)
-	//	return xxhash.Sum32(b[:])
-	const (
-		prime1 = 0x9e3779b1
-		prime2 = 0x85ebca77
-		prime3 = 0xc2b2ae3d
-		prime4 = 0x27d4eb2f
-		prime5 = 0x165667b1
-	)
-	h := prime5 + uint32(8)
-	h += lo * prime3
-	h = bits.RotateLeft32(h, 17) * prime4
-	h += hi * prime3
-	h = bits.RotateLeft32(h, 17) * prime4
-	// Skip final mix (avalanche) step of XXH32 for performance reasons.
-	// Empirical testing shows that the improvements in unbiased distribution
-	// does not outweigh the extra cost in computational complexity.
-	const avalanche = false
-	if avalanche {
-		h ^= h >> 15
-		h *= prime2
-		h ^= h >> 13
-		h *= prime3
-		h ^= h >> 16
-	}
-	return h
-}
diff --git a/src/encoding/json/v2/intern_test.go b/src/encoding/json/v2/intern_test.go
deleted file mode 100644
index 9163f41006a4ef..00000000000000
--- a/src/encoding/json/v2/intern_test.go
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2022 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-	"encoding/json/jsontext"
-)
-
-func TestIntern(t *testing.T) {
-	var sc stringCache
-	const alphabet = "abcdefghijklmnopqrstuvwxyz"
-	for i := range len(alphabet) + 1 {
-		want := alphabet[i:]
-		if got := makeString(&sc, []byte(want)); got != want {
-			t.Fatalf("make = %v, want %v", got, want)
-		}
-	}
-	for i := range 1000 {
-		want := fmt.Sprintf("test%b", i)
-		if got := makeString(&sc, []byte(want)); got != want {
-			t.Fatalf("make = %v, want %v", got, want)
-		}
-	}
-}
-
-var sink string
-
-func BenchmarkIntern(b *testing.B) {
-	datasetStrings := func(name string) (out [][]byte) {
-		var data []byte
-		for _, ts := range jsontest.Data {
-			if ts.Name == name {
-				data = ts.Data()
-			}
-		}
-		dec := jsontext.NewDecoder(bytes.NewReader(data))
-		for {
-			k, n := dec.StackIndex(dec.StackDepth())
-			isObjectName := k == '{' && n%2 == 0
-			tok, err := dec.ReadToken()
-			if err != nil {
-				if err == io.EOF {
-					break
-				}
-				b.Fatalf("ReadToken error: %v", err)
-			}
-			if tok.Kind() == '"' && !isObjectName {
-				out = append(out, []byte(tok.String()))
-			}
-		}
-		return out
-	}
-
-	tests := []struct {
-		label string
-		data  [][]byte
-	}{
-		// Best is the best case scenario where every string is the same.
-		{"Best", func() (out [][]byte) {
-			for range 1000 {
-				out = append(out, []byte("hello, world!"))
-			}
-			return out
-		}()},
-
-		// Repeat is a sequence of the same set of names repeated.
-		// This commonly occurs when unmarshaling a JSON array of JSON objects,
-		// where the set of all names is usually small.
-		{"Repeat", func() (out [][]byte) {
-			for range 100 {
-				for _, s := range []string{"first_name", "last_name", "age", "address", "street_address", "city", "state", "postal_code", "phone_numbers", "gender"} {
-					out = append(out, []byte(s))
-				}
-			}
-			return out
-		}()},
-
-		// Synthea is all string values encountered in the Synthea FHIR dataset.
-		{"Synthea", datasetStrings("SyntheaFhir")},
-
-		// Twitter is all string values encountered in the Twitter dataset.
-		{"Twitter", datasetStrings("TwitterStatus")},
-
-		// Worst is the worst case scenario where every string is different
-		// resulting in wasted time looking up a string that will never match.
-		{"Worst", func() (out [][]byte) {
-			for i := range 1000 {
-				out = append(out, []byte(fmt.Sprintf("%016x", i)))
-			}
-			return out
-		}()},
-	}
-
-	for _, tt := range tests {
-		b.Run(tt.label, func(b *testing.B) {
-			// Alloc simply heap allocates each string.
-			// This provides an upper bound on the number of allocations.
-			b.Run("Alloc", func(b *testing.B) {
-				b.ReportAllocs()
-				for range b.N {
-					for _, b := range tt.data {
-						sink = string(b)
-					}
-				}
-			})
-			// Cache interns strings using stringCache.
-			// We want to optimize for having a faster runtime than Alloc,
-			// and also keeping the number of allocations closer to GoMap.
-			b.Run("Cache", func(b *testing.B) {
-				b.ReportAllocs()
-				for range b.N {
-					var sc stringCache
-					for _, b := range tt.data {
-						sink = makeString(&sc, b)
-					}
-				}
-			})
-			// GoMap interns all strings in a simple Go map.
-			// This provides a lower bound on the number of allocations.
-			b.Run("GoMap", func(b *testing.B) {
-				b.ReportAllocs()
-				for range b.N {
-					m := make(map[string]string)
-					for _, b := range tt.data {
-						s, ok := m[string(b)]
-						if !ok {
-							s = string(b)
-							m[s] = s
-						}
-						sink = s
-					}
-				}
-			})
-		})
-	}
-}
diff --git a/src/encoding/json/v2/options.go b/src/encoding/json/v2/options.go
deleted file mode 100644
index 12bbdb5d86bcf3..00000000000000
--- a/src/encoding/json/v2/options.go
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright 2023 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.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"fmt"
-
-	"encoding/json/internal"
-	"encoding/json/internal/jsonflags"
-	"encoding/json/internal/jsonopts"
-)
-
-// Options configure [Marshal], [MarshalWrite], [MarshalEncode],
-// [Unmarshal], [UnmarshalRead], and [UnmarshalDecode] with specific features.
-// Each function takes in a variadic list of options, where properties
-// set in later options override the value of previously set properties.
-//
-// The Options type is identical to [encoding/json.Options] and
-// [encoding/json/jsontext.Options]. Options from the other packages can
-// be used interchangeably with functionality in this package.
-//
-// Options represent either a singular option or a set of options.
-// It can be functionally thought of as a Go map of option properties
-// (even though the underlying implementation avoids Go maps for performance).
-//
-// The constructors (e.g., [Deterministic]) return a singular option value:
-//
-//	opt := Deterministic(true)
-//
-// which is analogous to creating a single entry map:
-//
-//	opt := Options{"Deterministic": true}
-//
-// [JoinOptions] composes multiple options values to together:
-//
-//	out := JoinOptions(opts...)
-//
-// which is analogous to making a new map and copying the options over:
-//
-//	out := make(Options)
-//	for _, m := range opts {
-//		for k, v := range m {
-//			out[k] = v
-//		}
-//	}
-//
-// [GetOption] looks up the value of options parameter:
-//
-//	v, ok := GetOption(opts, Deterministic)
-//
-// which is analogous to a Go map lookup:
-//
-//	v, ok := Options["Deterministic"]
-//
-// There is a single Options type, which is used with both marshal and unmarshal.
-// Some options affect both operations, while others only affect one operation:
-//
-//   - [StringifyNumbers] affects marshaling and unmarshaling
-//   - [Deterministic] affects marshaling only
-//   - [FormatNilSliceAsNull] affects marshaling only
-//   - [FormatNilMapAsNull] affects marshaling only
-//   - [OmitZeroStructFields] affects marshaling only
-//   - [MatchCaseInsensitiveNames] affects marshaling and unmarshaling
-//   - [DiscardUnknownMembers] affects marshaling only
-//   - [RejectUnknownMembers] affects unmarshaling only
-//   - [WithMarshalers] affects marshaling only
-//   - [WithUnmarshalers] affects unmarshaling only
-//
-// Options that do not affect a particular operation are ignored.
-type Options = jsonopts.Options
-
-// JoinOptions coalesces the provided list of options into a single Options.
-// Properties set in later options override the value of previously set properties.
-func JoinOptions(srcs ...Options) Options {
-	var dst jsonopts.Struct
-	dst.Join(srcs...)
-	return &dst
-}
-
-// GetOption returns the value stored in opts with the provided setter,
-// reporting whether the value is present.
-//
-// Example usage:
-//
-//	v, ok := json.GetOption(opts, json.Deterministic)
-//
-// Options are most commonly introspected to alter the JSON representation of
-// [MarshalerTo.MarshalJSONTo] and [UnmarshalerFrom.UnmarshalJSONFrom] methods, and
-// [MarshalToFunc] and [UnmarshalFromFunc] functions.
-// In such cases, the presence bit should generally be ignored.
-func GetOption[T any](opts Options, setter func(T) Options) (T, bool) {
-	return jsonopts.GetOption(opts, setter)
-}
-
-// DefaultOptionsV2 is the full set of all options that define v2 semantics.
-// It is equivalent to all options under [Options], [encoding/json.Options],
-// and [encoding/json/jsontext.Options] being set to false or the zero value,
-// except for the options related to whitespace formatting.
-func DefaultOptionsV2() Options {
-	return &jsonopts.DefaultOptionsV2
-}
-
-// StringifyNumbers specifies that numeric Go types should be marshaled
-// as a JSON string containing the equivalent JSON number value.
-// When unmarshaling, numeric Go types are parsed from a JSON string
-// containing the JSON number without any surrounding whitespace.
-//
-// According to RFC 8259, section 6, a JSON implementation may choose to
-// limit the representation of a JSON number to an IEEE 754 binary64 value.
-// This may cause decoders to lose precision for int64 and uint64 types.
-// Quoting JSON numbers as a JSON string preserves the exact precision.
-//
-// This affects either marshaling or unmarshaling.
-func StringifyNumbers(v bool) Options {
-	if v {
-		return jsonflags.StringifyNumbers | 1
-	} else {
-		return jsonflags.StringifyNumbers | 0
-	}
-}
-
-// Deterministic specifies that the same input value will be serialized
-// as the exact same output bytes. Different processes of
-// the same program will serialize equal values to the same bytes,
-// but different versions of the same program are not guaranteed
-// to produce the exact same sequence of bytes.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func Deterministic(v bool) Options {
-	if v {
-		return jsonflags.Deterministic | 1
-	} else {
-		return jsonflags.Deterministic | 0
-	}
-}
-
-// FormatNilSliceAsNull specifies that a nil Go slice should marshal as a
-// JSON null instead of the default representation as an empty JSON array
-// (or an empty JSON string in the case of ~[]byte).
-// Slice fields explicitly marked with `format:emitempty` still marshal
-// as an empty JSON array.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func FormatNilSliceAsNull(v bool) Options {
-	if v {
-		return jsonflags.FormatNilSliceAsNull | 1
-	} else {
-		return jsonflags.FormatNilSliceAsNull | 0
-	}
-}
-
-// FormatNilMapAsNull specifies that a nil Go map should marshal as a
-// JSON null instead of the default representation as an empty JSON object.
-// Map fields explicitly marked with `format:emitempty` still marshal
-// as an empty JSON object.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func FormatNilMapAsNull(v bool) Options {
-	if v {
-		return jsonflags.FormatNilMapAsNull | 1
-	} else {
-		return jsonflags.FormatNilMapAsNull | 0
-	}
-}
-
-// OmitZeroStructFields specifies that a Go struct should marshal in such a way
-// that all struct fields that are zero are omitted from the marshaled output
-// if the value is zero as determined by the "IsZero() bool" method if present,
-// otherwise based on whether the field is the zero Go value.
-// This is semantically equivalent to specifying the `omitzero` tag option
-// on every field in a Go struct.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func OmitZeroStructFields(v bool) Options {
-	if v {
-		return jsonflags.OmitZeroStructFields | 1
-	} else {
-		return jsonflags.OmitZeroStructFields | 0
-	}
-}
-
-// MatchCaseInsensitiveNames specifies that JSON object members are matched
-// against Go struct fields using a case-insensitive match of the name.
-// Go struct fields explicitly marked with `case:strict` or `case:ignore`
-// always use case-sensitive (or case-insensitive) name matching,
-// regardless of the value of this option.
-//
-// This affects either marshaling or unmarshaling.
-// For marshaling, this option may alter the detection of duplicate names
-// (assuming [jsontext.AllowDuplicateNames] is false) from inlined fields
-// if it matches one of the declared fields in the Go struct.
-func MatchCaseInsensitiveNames(v bool) Options {
-	if v {
-		return jsonflags.MatchCaseInsensitiveNames | 1
-	} else {
-		return jsonflags.MatchCaseInsensitiveNames | 0
-	}
-}
-
-// DiscardUnknownMembers specifies that marshaling should ignore any
-// JSON object members stored in Go struct fields dedicated to storing
-// unknown JSON object members.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func DiscardUnknownMembers(v bool) Options {
-	if v {
-		return jsonflags.DiscardUnknownMembers | 1
-	} else {
-		return jsonflags.DiscardUnknownMembers | 0
-	}
-}
-
-// RejectUnknownMembers specifies that unknown members should be rejected
-// when unmarshaling a JSON object, regardless of whether there is a field
-// to store unknown members.
-//
-// This only affects unmarshaling and is ignored when marshaling.
-func RejectUnknownMembers(v bool) Options {
-	if v {
-		return jsonflags.RejectUnknownMembers | 1
-	} else {
-		return jsonflags.RejectUnknownMembers | 0
-	}
-}
-
-// WithMarshalers specifies a list of type-specific marshalers to use,
-// which can be used to override the default marshal behavior for values
-// of particular types.
-//
-// This only affects marshaling and is ignored when unmarshaling.
-func WithMarshalers(v *Marshalers) Options {
-	return (*marshalersOption)(v)
-}
-
-// WithUnmarshalers specifies a list of type-specific unmarshalers to use,
-// which can be used to override the default unmarshal behavior for values
-// of particular types.
-//
-// This only affects unmarshaling and is ignored when marshaling.
-func WithUnmarshalers(v *Unmarshalers) Options {
-	return (*unmarshalersOption)(v)
-}
-
-// These option types are declared here instead of "jsonopts"
-// to avoid a dependency on "reflect" from "jsonopts".
-type (
-	marshalersOption   Marshalers
-	unmarshalersOption Unmarshalers
-)
-
-func (*marshalersOption) JSONOptions(internal.NotForPublicUse)   {}
-func (*unmarshalersOption) JSONOptions(internal.NotForPublicUse) {}
-
-// Inject support into "jsonopts" to handle these types.
-func init() {
-	jsonopts.GetUnknownOption = func(src *jsonopts.Struct, zero jsonopts.Options) (any, bool) {
-		switch zero.(type) {
-		case *marshalersOption:
-			if !src.Flags.Has(jsonflags.Marshalers) {
-				return (*Marshalers)(nil), false
-			}
-			return src.Marshalers.(*Marshalers), true
-		case *unmarshalersOption:
-			if !src.Flags.Has(jsonflags.Unmarshalers) {
-				return (*Unmarshalers)(nil), false
-			}
-			return src.Unmarshalers.(*Unmarshalers), true
-		default:
-			panic(fmt.Sprintf("unknown option %T", zero))
-		}
-	}
-	jsonopts.JoinUnknownOption = func(dst *jsonopts.Struct, src jsonopts.Options) {
-		switch src := src.(type) {
-		case *marshalersOption:
-			dst.Flags.Set(jsonflags.Marshalers | 1)
-			dst.Marshalers = (*Marshalers)(src)
-		case *unmarshalersOption:
-			dst.Flags.Set(jsonflags.Unmarshalers | 1)
-			dst.Unmarshalers = (*Unmarshalers)(src)
-		default:
-			panic(fmt.Sprintf("unknown option %T", src))
-		}
-	}
-}
diff --git a/src/encoding/json/v2_bench_test.go b/src/encoding/json/v2_bench_test.go
deleted file mode 100644
index b9ed7b62207be1..00000000000000
--- a/src/encoding/json/v2_bench_test.go
+++ /dev/null
@@ -1,483 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.jsonv2
-
-// Large data benchmark.
-// The JSON data is a summary of agl's changes in the
-// go, webkit, and chromium open source projects.
-// We benchmark converting between the JSON form
-// and in-memory data structures.
-
-package json
-
-import (
-	"bytes"
-	"io"
-	"strings"
-	"testing"
-
-	"encoding/json/internal/jsontest"
-)
-
-type codeResponse struct {
-	Tree     *codeNode `json:"tree"`
-	Username string    `json:"username"`
-}
-
-type codeNode struct {
-	Name     string      `json:"name"`
-	Kids     []*codeNode `json:"kids"`
-	CLWeight float64     `json:"cl_weight"`
-	Touches  int         `json:"touches"`
-	MinT     int64       `json:"min_t"`
-	MaxT     int64       `json:"max_t"`
-	MeanT    int64       `json:"mean_t"`
-}
-
-var codeJSON []byte
-var codeStruct codeResponse
-
-func codeInit() {
-	var data []byte
-	for _, entry := range jsontest.Data {
-		if entry.Name == "GolangSource" {
-			data = entry.Data()
-		}
-	}
-	codeJSON = data
-
-	if err := Unmarshal(codeJSON, &codeStruct); err != nil {
-		panic("unmarshal code.json: " + err.Error())
-	}
-
-	var err error
-	if data, err = Marshal(&codeStruct); err != nil {
-		panic("marshal code.json: " + err.Error())
-	}
-
-	if !bytes.Equal(data, codeJSON) {
-		println("different lengths", len(data), len(codeJSON))
-		for i := 0; i < len(data) && i < len(codeJSON); i++ {
-			if data[i] != codeJSON[i] {
-				println("re-marshal: changed at byte", i)
-				println("orig: ", string(codeJSON[i-10:i+10]))
-				println("new: ", string(data[i-10:i+10]))
-				break
-			}
-		}
-		panic("re-marshal code.json: different result")
-	}
-}
-
-func BenchmarkCodeEncoder(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		enc := NewEncoder(io.Discard)
-		for pb.Next() {
-			if err := enc.Encode(&codeStruct); err != nil {
-				b.Fatalf("Encode error: %v", err)
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkCodeEncoderError(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-
-	// Trigger an error in Marshal with cyclic data.
-	type Dummy struct {
-		Name string
-		Next *Dummy
-	}
-	dummy := Dummy{Name: "Dummy"}
-	dummy.Next = &dummy
-
-	b.RunParallel(func(pb *testing.PB) {
-		enc := NewEncoder(io.Discard)
-		for pb.Next() {
-			if err := enc.Encode(&codeStruct); err != nil {
-				b.Fatalf("Encode error: %v", err)
-			}
-			if _, err := Marshal(dummy); err == nil {
-				b.Fatal("Marshal error: got nil, want non-nil")
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkCodeMarshal(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			if _, err := Marshal(&codeStruct); err != nil {
-				b.Fatalf("Marshal error: %v", err)
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkCodeMarshalError(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-
-	// Trigger an error in Marshal with cyclic data.
-	type Dummy struct {
-		Name string
-		Next *Dummy
-	}
-	dummy := Dummy{Name: "Dummy"}
-	dummy.Next = &dummy
-
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			if _, err := Marshal(&codeStruct); err != nil {
-				b.Fatalf("Marshal error: %v", err)
-			}
-			if _, err := Marshal(dummy); err == nil {
-				b.Fatal("Marshal error: got nil, want non-nil")
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func benchMarshalBytes(n int) func(*testing.B) {
-	sample := []byte("hello world")
-	// Use a struct pointer, to avoid an allocation when passing it as an
-	// interface parameter to Marshal.
-	v := &struct {
-		Bytes []byte
-	}{
-		bytes.Repeat(sample, (n/len(sample))+1)[:n],
-	}
-	return func(b *testing.B) {
-		for i := 0; i < b.N; i++ {
-			if _, err := Marshal(v); err != nil {
-				b.Fatalf("Marshal error: %v", err)
-			}
-		}
-	}
-}
-
-func benchMarshalBytesError(n int) func(*testing.B) {
-	sample := []byte("hello world")
-	// Use a struct pointer, to avoid an allocation when passing it as an
-	// interface parameter to Marshal.
-	v := &struct {
-		Bytes []byte
-	}{
-		bytes.Repeat(sample, (n/len(sample))+1)[:n],
-	}
-
-	// Trigger an error in Marshal with cyclic data.
-	type Dummy struct {
-		Name string
-		Next *Dummy
-	}
-	dummy := Dummy{Name: "Dummy"}
-	dummy.Next = &dummy
-
-	return func(b *testing.B) {
-		for i := 0; i < b.N; i++ {
-			if _, err := Marshal(v); err != nil {
-				b.Fatalf("Marshal error: %v", err)
-			}
-			if _, err := Marshal(dummy); err == nil {
-				b.Fatal("Marshal error: got nil, want non-nil")
-			}
-		}
-	}
-}
-
-func BenchmarkMarshalBytes(b *testing.B) {
-	b.ReportAllocs()
-	// 32 fits within encodeState.scratch.
-	b.Run("32", benchMarshalBytes(32))
-	// 256 doesn't fit in encodeState.scratch, but is small enough to
-	// allocate and avoid the slower base64.NewEncoder.
-	b.Run("256", benchMarshalBytes(256))
-	// 4096 is large enough that we want to avoid allocating for it.
-	b.Run("4096", benchMarshalBytes(4096))
-}
-
-func BenchmarkMarshalBytesError(b *testing.B) {
-	b.ReportAllocs()
-	// 32 fits within encodeState.scratch.
-	b.Run("32", benchMarshalBytesError(32))
-	// 256 doesn't fit in encodeState.scratch, but is small enough to
-	// allocate and avoid the slower base64.NewEncoder.
-	b.Run("256", benchMarshalBytesError(256))
-	// 4096 is large enough that we want to avoid allocating for it.
-	b.Run("4096", benchMarshalBytesError(4096))
-}
-
-func BenchmarkMarshalMap(b *testing.B) {
-	b.ReportAllocs()
-	m := map[string]int{
-		"key3": 3,
-		"key2": 2,
-		"key1": 1,
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			if _, err := Marshal(m); err != nil {
-				b.Fatal("Marshal:", err)
-			}
-		}
-	})
-}
-
-func BenchmarkCodeDecoder(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		var buf bytes.Buffer
-		dec := NewDecoder(&buf)
-		var r codeResponse
-		for pb.Next() {
-			buf.Write(codeJSON)
-			// hide EOF
-			buf.WriteByte('\n')
-			buf.WriteByte('\n')
-			buf.WriteByte('\n')
-			if err := dec.Decode(&r); err != nil {
-				b.Fatalf("Decode error: %v", err)
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkUnicodeDecoder(b *testing.B) {
-	b.ReportAllocs()
-	j := []byte(`"\uD83D\uDE01"`)
-	b.SetBytes(int64(len(j)))
-	r := bytes.NewReader(j)
-	dec := NewDecoder(r)
-	var out string
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		if err := dec.Decode(&out); err != nil {
-			b.Fatalf("Decode error: %v", err)
-		}
-		r.Seek(0, 0)
-	}
-}
-
-func BenchmarkDecoderStream(b *testing.B) {
-	b.ReportAllocs()
-	b.StopTimer()
-	var buf bytes.Buffer
-	dec := NewDecoder(&buf)
-	buf.WriteString(`"` + strings.Repeat("x", 1000000) + `"` + "\n\n\n")
-	var x any
-	if err := dec.Decode(&x); err != nil {
-		b.Fatalf("Decode error: %v", err)
-	}
-	ones := strings.Repeat(" 1\n", 300000) + "\n\n\n"
-	b.StartTimer()
-	for i := 0; i < b.N; i++ {
-		if i%300000 == 0 {
-			buf.WriteString(ones)
-		}
-		x = nil
-		switch err := dec.Decode(&x); {
-		case err != nil:
-			b.Fatalf("Decode error: %v", err)
-		case x != 1.0:
-			b.Fatalf("Decode: got %v want 1.0", i)
-		}
-	}
-}
-
-func BenchmarkCodeUnmarshal(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			var r codeResponse
-			if err := Unmarshal(codeJSON, &r); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkCodeUnmarshalReuse(b *testing.B) {
-	b.ReportAllocs()
-	if codeJSON == nil {
-		b.StopTimer()
-		codeInit()
-		b.StartTimer()
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		var r codeResponse
-		for pb.Next() {
-			if err := Unmarshal(codeJSON, &r); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-	b.SetBytes(int64(len(codeJSON)))
-}
-
-func BenchmarkUnmarshalString(b *testing.B) {
-	b.ReportAllocs()
-	data := []byte(`"hello, world"`)
-	b.RunParallel(func(pb *testing.PB) {
-		var s string
-		for pb.Next() {
-			if err := Unmarshal(data, &s); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkUnmarshalFloat64(b *testing.B) {
-	b.ReportAllocs()
-	data := []byte(`3.14`)
-	b.RunParallel(func(pb *testing.PB) {
-		var f float64
-		for pb.Next() {
-			if err := Unmarshal(data, &f); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkUnmarshalInt64(b *testing.B) {
-	b.ReportAllocs()
-	data := []byte(`3`)
-	b.RunParallel(func(pb *testing.PB) {
-		var x int64
-		for pb.Next() {
-			if err := Unmarshal(data, &x); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkUnmarshalMap(b *testing.B) {
-	b.ReportAllocs()
-	data := []byte(`{"key1":"value1","key2":"value2","key3":"value3"}`)
-	b.RunParallel(func(pb *testing.PB) {
-		x := make(map[string]string, 3)
-		for pb.Next() {
-			if err := Unmarshal(data, &x); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkIssue10335(b *testing.B) {
-	b.ReportAllocs()
-	j := []byte(`{"a":{ }}`)
-	b.RunParallel(func(pb *testing.PB) {
-		var s struct{}
-		for pb.Next() {
-			if err := Unmarshal(j, &s); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkIssue34127(b *testing.B) {
-	b.ReportAllocs()
-	j := struct {
-		Bar string `json:"bar,string"`
-	}{
-		Bar: `foobar`,
-	}
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			if _, err := Marshal(&j); err != nil {
-				b.Fatalf("Marshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkUnmapped(b *testing.B) {
-	b.ReportAllocs()
-	j := []byte(`{"s": "hello", "y": 2, "o": {"x": 0}, "a": [1, 99, {"x": 1}]}`)
-	b.RunParallel(func(pb *testing.PB) {
-		var s struct{}
-		for pb.Next() {
-			if err := Unmarshal(j, &s); err != nil {
-				b.Fatalf("Unmarshal error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkEncodeMarshaler(b *testing.B) {
-	b.ReportAllocs()
-
-	m := struct {
-		A int
-		B RawMessage
-	}{}
-
-	b.RunParallel(func(pb *testing.PB) {
-		enc := NewEncoder(io.Discard)
-
-		for pb.Next() {
-			if err := enc.Encode(&m); err != nil {
-				b.Fatalf("Encode error: %v", err)
-			}
-		}
-	})
-}
-
-func BenchmarkEncoderEncode(b *testing.B) {
-	b.ReportAllocs()
-	type T struct {
-		X, Y string
-	}
-	v := &T{"foo", "bar"}
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			if err := NewEncoder(io.Discard).Encode(v); err != nil {
-				b.Fatalf("Encode error: %v", err)
-			}
-		}
-	})
-}
diff --git a/src/encoding/json/v2_decode.go b/src/encoding/json/v2_decode.go
deleted file mode 100644
index 4b9e8509395d34..00000000000000
--- a/src/encoding/json/v2_decode.go
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.jsonv2
-
-// Represents JSON data structure using native Go types: booleans, floats,
-// strings, arrays, and maps.
-
-package json
-
-import (
-	"cmp"
-	"fmt"
-	"reflect"
-	"strconv"
-
-	"encoding/json/internal/jsonwire"
-	"encoding/json/jsontext"
-	jsonv2 "encoding/json/v2"
-)
-
-// Unmarshal parses the JSON-encoded data and stores the result
-// in the value pointed to by v. If v is nil or not a pointer,
-// Unmarshal returns an [InvalidUnmarshalError].
-//
-// Unmarshal uses the inverse of the encodings that
-// [Marshal] uses, allocating maps, slices, and pointers as necessary,
-// with the following additional rules:
-//
-// To unmarshal JSON into a pointer, Unmarshal first handles the case of
-// the JSON being the JSON literal null. In that case, Unmarshal sets
-// the pointer to nil. Otherwise, Unmarshal unmarshals the JSON into
-// the value pointed at by the pointer. If the pointer is nil, Unmarshal
-// allocates a new value for it to point to.
-//
-// To unmarshal JSON into a value implementing [Unmarshaler],
-// Unmarshal calls that value's [Unmarshaler.UnmarshalJSON] method, including
-// when the input is a JSON null.
-// Otherwise, if the value implements [encoding.TextUnmarshaler]
-// and the input is a JSON quoted string, Unmarshal calls
-// [encoding.TextUnmarshaler.UnmarshalText] with the unquoted form of the string.
-//
-// To unmarshal JSON into a struct, Unmarshal matches incoming object
-// keys to the keys used by [Marshal] (either the struct field name or its tag),
-// preferring an exact match but also accepting a case-insensitive match. By
-// default, object keys which don't have a corresponding struct field are
-// ignored (see [Decoder.DisallowUnknownFields] for an alternative).
-//
-// To unmarshal JSON into an interface value,
-// Unmarshal stores one of these in the interface value:
-//
-//   - bool, for JSON booleans
-//   - float64, for JSON numbers
-//   - string, for JSON strings
-//   - []any, for JSON arrays
-//   - map[string]any, for JSON objects
-//   - nil for JSON null
-//
-// To unmarshal a JSON array into a slice, Unmarshal resets the slice length
-// to zero and then appends each element to the slice.
-// As a special case, to unmarshal an empty JSON array into a slice,
-// Unmarshal replaces the slice with a new empty slice.
-//
-// To unmarshal a JSON array into a Go array, Unmarshal decodes
-// JSON array elements into corresponding Go array elements.
-// If the Go array is smaller than the JSON array,
-// the additional JSON array elements are discarded.
-// If the JSON array is smaller than the Go array,
-// the additional Go array elements are set to zero values.
-//
-// To unmarshal a JSON object into a map, Unmarshal first establishes a map to
-// use. If the map is nil, Unmarshal allocates a new map. Otherwise Unmarshal
-// reuses the existing map, keeping existing entries. Unmarshal then stores
-// key-value pairs from the JSON object into the map. The map's key type must
-// either be any string type, an integer, or implement [encoding.TextUnmarshaler].
-//
-// If the JSON-encoded data contain a syntax error, Unmarshal returns a [SyntaxError].
-//
-// If a JSON value is not appropriate for a given target type,
-// or if a JSON number overflows the target type, Unmarshal
-// skips that field and completes the unmarshaling as best it can.
-// If no more serious errors are encountered, Unmarshal returns
-// an [UnmarshalTypeError] describing the earliest such error. In any
-// case, it's not guaranteed that all the remaining fields following
-// the problematic one will be unmarshaled into the target object.
-//
-// The JSON null value unmarshals into an interface, map, pointer, or slice
-// by setting that Go value to nil. Because null is often used in JSON to mean
-// “not present,” unmarshaling a JSON null into any other Go type has no effect
-// on the value and produces no error.
-//
-// When unmarshaling quoted strings, invalid UTF-8 or
-// invalid UTF-16 surrogate pairs are not treated as an error.
-// Instead, they are replaced by the Unicode replacement
-// character U+FFFD.
-func Unmarshal(data []byte, v any) error {
-	return jsonv2.Unmarshal(data, v, DefaultOptionsV1())
-}
-
-// Unmarshaler is the interface implemented by types
-// that can unmarshal a JSON description of themselves.
-// The input can be assumed to be a valid encoding of
-// a JSON value. UnmarshalJSON must copy the JSON data
-// if it wishes to retain the data after returning.
-type Unmarshaler = jsonv2.Unmarshaler
-
-// An UnmarshalTypeError describes a JSON value that was
-// not appropriate for a value of a specific Go type.
-type UnmarshalTypeError struct {
-	Value  string       // description of JSON value - "bool", "array", "number -5"
-	Type   reflect.Type // type of Go value it could not be assigned to
-	Offset int64        // error occurred after reading Offset bytes
-	Struct string       // name of the root type containing the field
-	Field  string       // the full path from root node to the value
-	Err    error        // may be nil
-}
-
-func (e *UnmarshalTypeError) Error() string {
-	s := "json: cannot unmarshal"
-	if e.Value != "" {
-		s += " JSON " + e.Value
-	}
-	s += " into"
-	var preposition string
-	if e.Field != "" {
-		s += " " + e.Struct + "." + e.Field
-		preposition = " of"
-	}
-	if e.Type != nil {
-		s += preposition
-		s += " Go type " + e.Type.String()
-	}
-	if e.Err != nil {
-		s += ": " + e.Err.Error()
-	}
-	return s
-}
-
-func (e *UnmarshalTypeError) Unwrap() error {
-	return e.Err
-}
-
-// An UnmarshalFieldError describes a JSON object key that
-// led to an unexported (and therefore unwritable) struct field.
-//
-// Deprecated: No longer used; kept for compatibility.
-type UnmarshalFieldError struct {
-	Key   string
-	Type  reflect.Type
-	Field reflect.StructField
-}
-
-func (e *UnmarshalFieldError) Error() string {
-	return "json: cannot unmarshal object key " + strconv.Quote(e.Key) + " into unexported field " + e.Field.Name + " of type " + e.Type.String()
-}
-
-// An InvalidUnmarshalError describes an invalid argument passed to [Unmarshal].
-// (The argument to [Unmarshal] must be a non-nil pointer.)
-type InvalidUnmarshalError struct {
-	Type reflect.Type
-}
-
-func (e *InvalidUnmarshalError) Error() string {
-	if e.Type == nil {
-		return "json: Unmarshal(nil)"
-	}
-
-	if e.Type.Kind() != reflect.Pointer {
-		return "json: Unmarshal(non-pointer " + e.Type.String() + ")"
-	}
-	return "json: Unmarshal(nil " + e.Type.String() + ")"
-}
-
-// A Number represents a JSON number literal.
-type Number string
-
-// String returns the literal text of the number.
-func (n Number) String() string { return string(n) }
-
-// Float64 returns the number as a float64.
-func (n Number) Float64() (float64, error) {
-	return strconv.ParseFloat(string(n), 64)
-}
-
-// Int64 returns the number as an int64.
-func (n Number) Int64() (int64, error) {
-	return strconv.ParseInt(string(n), 10, 64)
-}
-
-var numberType = reflect.TypeFor[Number]()
-
-// MarshalJSONTo implements [jsonv2.MarshalerTo].
-func (n Number) MarshalJSONTo(enc *jsontext.Encoder) error {
-	opts := enc.Options()
-	stringify, _ := jsonv2.GetOption(opts, jsonv2.StringifyNumbers)
-	if k, n := enc.StackIndex(enc.StackDepth()); k == '{' && n%2 == 0 {
-		stringify = true // expecting a JSON object name
-	}
-	n = cmp.Or(n, "0")
-	var num []byte
-	val := enc.UnusedBuffer()
-	if stringify {
-		val = append(val, '"')
-		val = append(val, n...)
-		val = append(val, '"')
-		num = val[len(`"`) : len(val)-len(`"`)]
-	} else {
-		val = append(val, n...)
-		num = val
-	}
-	if n, err := jsonwire.ConsumeNumber(num); n != len(num) || err != nil {
-		return fmt.Errorf("cannot parse %q as JSON number: %w", val, strconv.ErrSyntax)
-	}
-	return enc.WriteValue(val)
-}
-
-// UnmarshalJSONFrom implements [jsonv2.UnmarshalerFrom].
-func (n *Number) UnmarshalJSONFrom(dec *jsontext.Decoder) error {
-	opts := dec.Options()
-	stringify, _ := jsonv2.GetOption(opts, jsonv2.StringifyNumbers)
-	if k, n := dec.StackIndex(dec.StackDepth()); k == '{' && n%2 == 0 {
-		stringify = true // expecting a JSON object name
-	}
-	val, err := dec.ReadValue()
-	if err != nil {
-		return err
-	}
-	val0 := val
-	k := val.Kind()
-	switch k {
-	case 'n':
-		if legacy, _ := jsonv2.GetOption(opts, MergeWithLegacySemantics); !legacy {
-			*n = ""
-		}
-		return nil
-	case '"':
-		verbatim := jsonwire.ConsumeSimpleString(val) == len(val)
-		val = jsonwire.UnquoteMayCopy(val, verbatim)
-		if n, err := jsonwire.ConsumeNumber(val); n != len(val) || err != nil {
-			return &jsonv2.SemanticError{JSONKind: val0.Kind(), JSONValue: val0.Clone(), GoType: numberType, Err: strconv.ErrSyntax}
-		}
-		*n = Number(val)
-		return nil
-	case '0':
-		if stringify {
-			break
-		}
-		*n = Number(val)
-		return nil
-	}
-	return &jsonv2.SemanticError{JSONKind: k, GoType: numberType}
-}
diff --git a/src/encoding/json/v2_decode_test.go b/src/encoding/json/v2_decode_test.go
deleted file mode 100644
index fe814a3cfd52c0..00000000000000
--- a/src/encoding/json/v2_decode_test.go
+++ /dev/null
@@ -1,2803 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.jsonv2
-
-package json
-
-import (
-	"bytes"
-	"encoding"
-	"errors"
-	"fmt"
-	"image"
-	"maps"
-	"math"
-	"math/big"
-	"net"
-	"reflect"
-	"slices"
-	"strconv"
-	"strings"
-	"testing"
-	"time"
-)
-
-func len64(s string) int64 {
-	return int64(len(s))
-}
-
-type T struct {
-	X string
-	Y int
-	Z int `json:"-"`
-}
-
-type U struct {
-	Alphabet string `json:"alpha"`
-}
-
-type V struct {
-	F1 any
-	F2 int32
-	F3 Number
-	F4 *VOuter
-}
-
-type VOuter struct {
-	V V
-}
-
-type W struct {
-	S SS
-}
-
-type P struct {
-	PP PP
-}
-
-type PP struct {
-	T  T
-	Ts []T
-}
-
-type SS string
-
-func (*SS) UnmarshalJSON(data []byte) error {
-	return &UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[SS]()}
-}
-
-type TAlias T
-
-func (tt *TAlias) UnmarshalJSON(data []byte) error {
-	t := T{}
-	if err := Unmarshal(data, &t); err != nil {
-		return err
-	}
-	*tt = TAlias(t)
-	return nil
-}
-
-type TOuter struct {
-	T TAlias
-}
-
-// ifaceNumAsFloat64/ifaceNumAsNumber are used to test unmarshaling with and
-// without UseNumber
-var ifaceNumAsFloat64 = map[string]any{
-	"k1": float64(1),
-	"k2": "s",
-	"k3": []any{float64(1), float64(2.0), float64(3e-3)},
-	"k4": map[string]any{"kk1": "s", "kk2": float64(2)},
-}
-
-var ifaceNumAsNumber = map[string]any{
-	"k1": Number("1"),
-	"k2": "s",
-	"k3": []any{Number("1"), Number("2.0"), Number("3e-3")},
-	"k4": map[string]any{"kk1": "s", "kk2": Number("2")},
-}
-
-type tx struct {
-	x int
-}
-
-type u8 uint8
-
-// A type that can unmarshal itself.
-
-type unmarshaler struct {
-	T bool
-}
-
-func (u *unmarshaler) UnmarshalJSON(b []byte) error {
-	*u = unmarshaler{true} // All we need to see that UnmarshalJSON is called.
-	return nil
-}
-
-type ustruct struct {
-	M unmarshaler
-}
-
-type unmarshalerText struct {
-	A, B string
-}
-
-// needed for re-marshaling tests
-func (u unmarshalerText) MarshalText() ([]byte, error) {
-	return []byte(u.A + ":" + u.B), nil
-}
-
-func (u *unmarshalerText) UnmarshalText(b []byte) error {
-	pos := bytes.IndexByte(b, ':')
-	if pos == -1 {
-		return errors.New("missing separator")
-	}
-	u.A, u.B = string(b[:pos]), string(b[pos+1:])
-	return nil
-}
-
-var _ encoding.TextUnmarshaler = (*unmarshalerText)(nil)
-
-type ustructText struct {
-	M unmarshalerText
-}
-
-// u8marshal is an integer type that can marshal/unmarshal itself.
-type u8marshal uint8
-
-func (u8 u8marshal) MarshalText() ([]byte, error) {
-	return []byte(fmt.Sprintf("u%d", u8)), nil
-}
-
-var errMissingU8Prefix = errors.New("missing 'u' prefix")
-
-func (u8 *u8marshal) UnmarshalText(b []byte) error {
-	if !bytes.HasPrefix(b, []byte{'u'}) {
-		return errMissingU8Prefix
-	}
-	n, err := strconv.Atoi(string(b[1:]))
-	if err != nil {
-		return err
-	}
-	*u8 = u8marshal(n)
-	return nil
-}
-
-var _ encoding.TextUnmarshaler = (*u8marshal)(nil)
-
-var (
-	umtrue   = unmarshaler{true}
-	umslice  = []unmarshaler{{true}}
-	umstruct = ustruct{unmarshaler{true}}
-
-	umtrueXY   = unmarshalerText{"x", "y"}
-	umsliceXY  = []unmarshalerText{{"x", "y"}}
-	umstructXY = ustructText{unmarshalerText{"x", "y"}}
-
-	ummapXY = map[unmarshalerText]bool{{"x", "y"}: true}
-)
-
-// Test data structures for anonymous fields.
-
-type Point struct {
-	Z int
-}
-
-type Top struct {
-	Level0 int
-	Embed0
-	*Embed0a
-	*Embed0b `json:"e,omitempty"` // treated as named
-	Embed0c  `json:"-"`           // ignored
-	Loop
-	Embed0p // has Point with X, Y, used
-	Embed0q // has Point with Z, used
-	embed   // contains exported field
-}
-
-type Embed0 struct {
-	Level1a int // overridden by Embed0a's Level1a with json tag
-	Level1b int // used because Embed0a's Level1b is renamed
-	Level1c int // used because Embed0a's Level1c is ignored
-	Level1d int // annihilated by Embed0a's Level1d
-	Level1e int `json:"x"` // annihilated by Embed0a.Level1e
-}
-
-type Embed0a struct {
-	Level1a int `json:"Level1a,omitempty"`
-	Level1b int `json:"LEVEL1B,omitempty"`
-	Level1c int `json:"-"`
-	Level1d int // annihilated by Embed0's Level1d
-	Level1f int `json:"x"` // annihilated by Embed0's Level1e
-}
-
-type Embed0b Embed0
-
-type Embed0c Embed0
-
-type Embed0p struct {
-	image.Point
-}
-
-type Embed0q struct {
-	Point
-}
-
-type embed struct {
-	Q int
-}
-
-type Loop struct {
-	Loop1 int `json:",omitempty"`
-	Loop2 int `json:",omitempty"`
-	*Loop
-}
-
-// From reflect test:
-// The X in S6 and S7 annihilate, but they also block the X in S8.S9.
-type S5 struct {
-	S6
-	S7
-	S8
-}
-
-type S6 struct {
-	X int
-}
-
-type S7 S6
-
-type S8 struct {
-	S9
-}
-
-type S9 struct {
-	X int
-	Y int
-}
-
-// From reflect test:
-// The X in S11.S6 and S12.S6 annihilate, but they also block the X in S13.S8.S9.
-type S10 struct {
-	S11
-	S12
-	S13
-}
-
-type S11 struct {
-	S6
-}
-
-type S12 struct {
-	S6
-}
-
-type S13 struct {
-	S8
-}
-
-type Ambig struct {
-	// Given "hello", the first match should win.
-	First  int `json:"HELLO"`
-	Second int `json:"Hello"`
-}
-
-type XYZ struct {
-	X any
-	Y any
-	Z any
-}
-
-type unexportedWithMethods struct{}
-
-func (unexportedWithMethods) F() {}
-
-type byteWithMarshalJSON byte
-
-func (b byteWithMarshalJSON) MarshalJSON() ([]byte, error) {
-	return []byte(fmt.Sprintf(`"Z%.2x"`, byte(b))), nil
-}
-
-func (b *byteWithMarshalJSON) UnmarshalJSON(data []byte) error {
-	if len(data) != 5 || data[0] != '"' || data[1] != 'Z' || data[4] != '"' {
-		return fmt.Errorf("bad quoted string")
-	}
-	i, err := strconv.ParseInt(string(data[2:4]), 16, 8)
-	if err != nil {
-		return fmt.Errorf("bad hex")
-	}
-	*b = byteWithMarshalJSON(i)
-	return nil
-}
-
-type byteWithPtrMarshalJSON byte
-
-func (b *byteWithPtrMarshalJSON) MarshalJSON() ([]byte, error) {
-	return byteWithMarshalJSON(*b).MarshalJSON()
-}
-
-func (b *byteWithPtrMarshalJSON) UnmarshalJSON(data []byte) error {
-	return (*byteWithMarshalJSON)(b).UnmarshalJSON(data)
-}
-
-type byteWithMarshalText byte
-
-func (b byteWithMarshalText) MarshalText() ([]byte, error) {
-	return []byte(fmt.Sprintf(`Z%.2x`, byte(b))), nil
-}
-
-func (b *byteWithMarshalText) UnmarshalText(data []byte) error {
-	if len(data) != 3 || data[0] != 'Z' {
-		return fmt.Errorf("bad quoted string")
-	}
-	i, err := strconv.ParseInt(string(data[1:3]), 16, 8)
-	if err != nil {
-		return fmt.Errorf("bad hex")
-	}
-	*b = byteWithMarshalText(i)
-	return nil
-}
-
-type byteWithPtrMarshalText byte
-
-func (b *byteWithPtrMarshalText) MarshalText() ([]byte, error) {
-	return byteWithMarshalText(*b).MarshalText()
-}
-
-func (b *byteWithPtrMarshalText) UnmarshalText(data []byte) error {
-	return (*byteWithMarshalText)(b).UnmarshalText(data)
-}
-
-type intWithMarshalJSON int
-
-func (b intWithMarshalJSON) MarshalJSON() ([]byte, error) {
-	return []byte(fmt.Sprintf(`"Z%.2x"`, int(b))), nil
-}
-
-func (b *intWithMarshalJSON) UnmarshalJSON(data []byte) error {
-	if len(data) != 5 || data[0] != '"' || data[1] != 'Z' || data[4] != '"' {
-		return fmt.Errorf("bad quoted string")
-	}
-	i, err := strconv.ParseInt(string(data[2:4]), 16, 8)
-	if err != nil {
-		return fmt.Errorf("bad hex")
-	}
-	*b = intWithMarshalJSON(i)
-	return nil
-}
-
-type intWithPtrMarshalJSON int
-
-func (b *intWithPtrMarshalJSON) MarshalJSON() ([]byte, error) {
-	return intWithMarshalJSON(*b).MarshalJSON()
-}
-
-func (b *intWithPtrMarshalJSON) UnmarshalJSON(data []byte) error {
-	return (*intWithMarshalJSON)(b).UnmarshalJSON(data)
-}
-
-type intWithMarshalText int
-
-func (b intWithMarshalText) MarshalText() ([]byte, error) {
-	return []byte(fmt.Sprintf(`Z%.2x`, int(b))), nil
-}
-
-func (b *intWithMarshalText) UnmarshalText(data []byte) error {
-	if len(data) != 3 || data[0] != 'Z' {
-		return fmt.Errorf("bad quoted string")
-	}
-	i, err := strconv.ParseInt(string(data[1:3]), 16, 8)
-	if err != nil {
-		return fmt.Errorf("bad hex")
-	}
-	*b = intWithMarshalText(i)
-	return nil
-}
-
-type intWithPtrMarshalText int
-
-func (b *intWithPtrMarshalText) MarshalText() ([]byte, error) {
-	return intWithMarshalText(*b).MarshalText()
-}
-
-func (b *intWithPtrMarshalText) UnmarshalText(data []byte) error {
-	return (*intWithMarshalText)(b).UnmarshalText(data)
-}
-
-type mapStringToStringData struct {
-	Data map[string]string `json:"data"`
-}
-
-type B struct {
-	B bool `json:",string"`
-}
-
-type DoublePtr struct {
-	I **int
-	J **int
-}
-
-var unmarshalTests = []struct {
-	CaseName
-	in                    string
-	ptr                   any // new(type)
-	out                   any
-	err                   error
-	useNumber             bool
-	golden                bool
-	disallowUnknownFields bool
-}{
-	// basic types
-	{CaseName: Name(""), in: `true`, ptr: new(bool), out: true},
-	{CaseName: Name(""), in: `1`, ptr: new(int), out: 1},
-	{CaseName: Name(""), in: `1.2`, ptr: new(float64), out: 1.2},
-	{CaseName: Name(""), in: `-5`, ptr: new(int16), out: int16(-5)},
-	{CaseName: Name(""), in: `2`, ptr: new(Number), out: Number("2"), useNumber: true},
-	{CaseName: Name(""), in: `2`, ptr: new(Number), out: Number("2")},
-	{CaseName: Name(""), in: `2`, ptr: new(any), out: float64(2.0)},
-	{CaseName: Name(""), in: `2`, ptr: new(any), out: Number("2"), useNumber: true},
-	{CaseName: Name(""), in: `"a\u1234"`, ptr: new(string), out: "a\u1234"},
-	{CaseName: Name(""), in: `"http:\/\/"`, ptr: new(string), out: "http://"},
-	{CaseName: Name(""), in: `"g-clef: \uD834\uDD1E"`, ptr: new(string), out: "g-clef: \U0001D11E"},
-	{CaseName: Name(""), in: `"invalid: \uD834x\uDD1E"`, ptr: new(string), out: "invalid: \uFFFDx\uFFFD"},
-	{CaseName: Name(""), in: "null", ptr: new(any), out: nil},
-	{CaseName: Name(""), in: `{"X": [1,2,3], "Y": 4}`, ptr: new(T), out: T{Y: 4}, err: &UnmarshalTypeError{"array", reflect.TypeFor[string](), len64(`{"X": `), "T", "X", nil}},
-	{CaseName: Name(""), in: `{"X": 23}`, ptr: new(T), out: T{}, err: &UnmarshalTypeError{"number", reflect.TypeFor[string](), len64(`{"X": `), "T", "X", nil}},
-	{CaseName: Name(""), in: `{"x": 1}`, ptr: new(tx), out: tx{}},
-	{CaseName: Name(""), in: `{"x": 1}`, ptr: new(tx), out: tx{}},
-	{CaseName: Name(""), in: `{"x": 1}`, ptr: new(tx), err: fmt.Errorf("json: unknown field \"x\""), disallowUnknownFields: true},
-	{CaseName: Name(""), in: `{"S": 23}`, ptr: new(W), out: W{}, err: &UnmarshalTypeError{"number", reflect.TypeFor[SS](), 0, "", "", nil}},
-	{CaseName: Name(""), in: `{"T": {"X": 23}}`, ptr: new(TOuter), out: TOuter{}, err: &UnmarshalTypeError{"number", reflect.TypeFor[string](), len64(`{"X": `), "T", "X", nil}},
-	{CaseName: Name(""), in: `{"F1":1,"F2":2,"F3":3}`, ptr: new(V), out: V{F1: float64(1), F2: int32(2), F3: Number("3")}},
-	{CaseName: Name(""), in: `{"F1":1,"F2":2,"F3":3}`, ptr: new(V), out: V{F1: Number("1"), F2: int32(2), F3: Number("3")}, useNumber: true},
-	{CaseName: Name(""), in: `{"k1":1,"k2":"s","k3":[1,2.0,3e-3],"k4":{"kk1":"s","kk2":2}}`, ptr: new(any), out: ifaceNumAsFloat64},
-	{CaseName: Name(""), in: `{"k1":1,"k2":"s","k3":[1,2.0,3e-3],"k4":{"kk1":"s","kk2":2}}`, ptr: new(any), out: ifaceNumAsNumber, useNumber: true},
-
-	// raw values with whitespace
-	{CaseName: Name(""), in: "\n true ", ptr: new(bool), out: true},
-	{CaseName: Name(""), in: "\t 1 ", ptr: new(int), out: 1},
-	{CaseName: Name(""), in: "\r 1.2 ", ptr: new(float64), out: 1.2},
-	{CaseName: Name(""), in: "\t -5 \n", ptr: new(int16), out: int16(-5)},
-	{CaseName: Name(""), in: "\t \"a\\u1234\" \n", ptr: new(string), out: "a\u1234"},
-
-	// Z has a "-" tag.
-	{CaseName: Name(""), in: `{"Y": 1, "Z": 2}`, ptr: new(T), out: T{Y: 1}},
-	{CaseName: Name(""), in: `{"Y": 1, "Z": 2}`, ptr: new(T), out: T{Y: 1}, err: fmt.Errorf("json: unknown field \"Z\""), disallowUnknownFields: true},
-
-	{CaseName: Name(""), in: `{"alpha": "abc", "alphabet": "xyz"}`, ptr: new(U), out: U{Alphabet: "abc"}},
-	{CaseName: Name(""), in: `{"alpha": "abc", "alphabet": "xyz"}`, ptr: new(U), out: U{Alphabet: "abc"}, err: fmt.Errorf("json: unknown field \"alphabet\""), disallowUnknownFields: true},
-	{CaseName: Name(""), in: `{"alpha": "abc"}`, ptr: new(U), out: U{Alphabet: "abc"}},
-	{CaseName: Name(""), in: `{"alphabet": "xyz"}`, ptr: new(U), out: U{}},
-	{CaseName: Name(""), in: `{"alphabet": "xyz"}`, ptr: new(U), err: fmt.Errorf("json: unknown field \"alphabet\""), disallowUnknownFields: true},
-
-	// syntax errors
-	{CaseName: Name(""), in: `{"X": "foo", "Y"}`, err: &SyntaxError{"invalid character '}' after object key", len64(`{"X": "foo", "Y"`)}},
-	{CaseName: Name(""), in: `[1, 2, 3+]`, err: &SyntaxError{"invalid character '+' after array element", len64(`[1, 2, 3`)}},
-	{CaseName: Name(""), in: `{"X":12x}`, err: &SyntaxError{"invalid character 'x' after object key:value pair", len64(`{"X":12`)}, useNumber: true},
-	{CaseName: Name(""), in: `[2, 3`, err: &SyntaxError{msg: "unexpected end of JSON input", Offset: len64(`[2, 3`)}},
-	{CaseName: Name(""), in: `{"F3": -}`, ptr: new(V), err: &SyntaxError{msg: "invalid character '}' in numeric literal", Offset: len64(`{"F3": -`)}},
-
-	// raw value errors
-	{CaseName: Name(""), in: "\x01 42", err: &SyntaxError{"invalid character '\\x01' looking for beginning of value", len64(``)}},
-	{CaseName: Name(""), in: " 42 \x01", err: &SyntaxError{"invalid character '\\x01' after top-level value", len64(` 42 `)}},
-	{CaseName: Name(""), in: "\x01 true", err: &SyntaxError{"invalid character '\\x01' looking for beginning of value", len64(``)}},
-	{CaseName: Name(""), in: " false \x01", err: &SyntaxError{"invalid character '\\x01' after top-level value", len64(` false `)}},
-	{CaseName: Name(""), in: "\x01 1.2", err: &SyntaxError{"invalid character '\\x01' looking for beginning of value", len64(``)}},
-	{CaseName: Name(""), in: " 3.4 \x01", err: &SyntaxError{"invalid character '\\x01' after top-level value", len64(` 3.4 `)}},
-	{CaseName: Name(""), in: "\x01 \"string\"", err: &SyntaxError{"invalid character '\\x01' looking for beginning of value", len64(``)}},
-	{CaseName: Name(""), in: " \"string\" \x01", err: &SyntaxError{"invalid character '\\x01' after top-level value", len64(` "string" `)}},
-
-	// array tests
-	{CaseName: Name(""), in: `[1, 2, 3]`, ptr: new([3]int), out: [3]int{1, 2, 3}},
-	{CaseName: Name(""), in: `[1, 2, 3]`, ptr: new([1]int), out: [1]int{1}},
-	{CaseName: Name(""), in: `[1, 2, 3]`, ptr: new([5]int), out: [5]int{1, 2, 3, 0, 0}},
-	{CaseName: Name(""), in: `[1, 2, 3]`, ptr: new(MustNotUnmarshalJSON), err: errors.New("MustNotUnmarshalJSON was used")},
-
-	// empty array to interface test
-	{CaseName: Name(""), in: `[]`, ptr: new([]any), out: []any{}},
-	{CaseName: Name(""), in: `null`, ptr: new([]any), out: []any(nil)},
-	{CaseName: Name(""), in: `{"T":[]}`, ptr: new(map[string]any), out: map[string]any{"T": []any{}}},
-	{CaseName: Name(""), in: `{"T":null}`, ptr: new(map[string]any), out: map[string]any{"T": any(nil)}},
-
-	// composite tests
-	{CaseName: Name(""), in: allValueIndent, ptr: new(All), out: allValue},
-	{CaseName: Name(""), in: allValueCompact, ptr: new(All), out: allValue},
-	{CaseName: Name(""), in: allValueIndent, ptr: new(*All), out: &allValue},
-	{CaseName: Name(""), in: allValueCompact, ptr: new(*All), out: &allValue},
-	{CaseName: Name(""), in: pallValueIndent, ptr: new(All), out: pallValue},
-	{CaseName: Name(""), in: pallValueCompact, ptr: new(All), out: pallValue},
-	{CaseName: Name(""), in: pallValueIndent, ptr: new(*All), out: &pallValue},
-	{CaseName: Name(""), in: pallValueCompact, ptr: new(*All), out: &pallValue},
-
-	// unmarshal interface test
-	{CaseName: Name(""), in: `{"T":false}`, ptr: new(unmarshaler), out: umtrue}, // use "false" so test will fail if custom unmarshaler is not called
-	{CaseName: Name(""), in: `{"T":false}`, ptr: new(*unmarshaler), out: &umtrue},
-	{CaseName: Name(""), in: `[{"T":false}]`, ptr: new([]unmarshaler), out: umslice},
-	{CaseName: Name(""), in: `[{"T":false}]`, ptr: new(*[]unmarshaler), out: &umslice},
-	{CaseName: Name(""), in: `{"M":{"T":"x:y"}}`, ptr: new(ustruct), out: umstruct},
-
-	// UnmarshalText interface test
-	{CaseName: Name(""), in: `"x:y"`, ptr: new(unmarshalerText), out: umtrueXY},
-	{CaseName: Name(""), in: `"x:y"`, ptr: new(*unmarshalerText), out: &umtrueXY},
-	{CaseName: Name(""), in: `["x:y"]`, ptr: new([]unmarshalerText), out: umsliceXY},
-	{CaseName: Name(""), in: `["x:y"]`, ptr: new(*[]unmarshalerText), out: &umsliceXY},
-	{CaseName: Name(""), in: `{"M":"x:y"}`, ptr: new(ustructText), out: umstructXY},
-
-	// integer-keyed map test
-	{
-		CaseName: Name(""),
-		in:       `{"-1":"a","0":"b","1":"c"}`,
-		ptr:      new(map[int]string),
-		out:      map[int]string{-1: "a", 0: "b", 1: "c"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"0":"a","10":"c","9":"b"}`,
-		ptr:      new(map[u8]string),
-		out:      map[u8]string{0: "a", 9: "b", 10: "c"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"-9223372036854775808":"min","9223372036854775807":"max"}`,
-		ptr:      new(map[int64]string),
-		out:      map[int64]string{math.MinInt64: "min", math.MaxInt64: "max"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"18446744073709551615":"max"}`,
-		ptr:      new(map[uint64]string),
-		out:      map[uint64]string{math.MaxUint64: "max"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"0":false,"10":true}`,
-		ptr:      new(map[uintptr]bool),
-		out:      map[uintptr]bool{0: false, 10: true},
-	},
-
-	// Check that MarshalText and UnmarshalText take precedence
-	// over default integer handling in map keys.
-	{
-		CaseName: Name(""),
-		in:       `{"u2":4}`,
-		ptr:      new(map[u8marshal]int),
-		out:      map[u8marshal]int{2: 4},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"2":4}`,
-		ptr:      new(map[u8marshal]int),
-		out:      map[u8marshal]int{},
-		err:      errMissingU8Prefix,
-	},
-
-	// integer-keyed map errors
-	{
-		CaseName: Name(""),
-		in:       `{"abc":"abc"}`,
-		ptr:      new(map[int]string),
-		out:      map[int]string{},
-		err:      &UnmarshalTypeError{Value: "number abc", Type: reflect.TypeFor[int](), Field: "abc", Offset: len64(`{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"256":"abc"}`,
-		ptr:      new(map[uint8]string),
-		out:      map[uint8]string{},
-		err:      &UnmarshalTypeError{Value: "number 256", Type: reflect.TypeFor[uint8](), Field: "256", Offset: len64(`{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"128":"abc"}`,
-		ptr:      new(map[int8]string),
-		out:      map[int8]string{},
-		err:      &UnmarshalTypeError{Value: "number 128", Type: reflect.TypeFor[int8](), Field: "128", Offset: len64(`{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"-1":"abc"}`,
-		ptr:      new(map[uint8]string),
-		out:      map[uint8]string{},
-		err:      &UnmarshalTypeError{Value: "number -1", Type: reflect.TypeFor[uint8](), Field: "-1", Offset: len64(`{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"F":{"a":2,"3":4}}`,
-		ptr:      new(map[string]map[int]int),
-		out:      map[string]map[int]int{"F": {3: 4}},
-		err:      &UnmarshalTypeError{Value: "number a", Type: reflect.TypeFor[int](), Field: "F.a", Offset: len64(`{"F":{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"F":{"a":2,"3":4}}`,
-		ptr:      new(map[string]map[uint]int),
-		out:      map[string]map[uint]int{"F": {3: 4}},
-		err:      &UnmarshalTypeError{Value: "number a", Type: reflect.TypeFor[uint](), Field: "F.a", Offset: len64(`{"F":{`)},
-	},
-
-	// Map keys can be encoding.TextUnmarshalers.
-	{CaseName: Name(""), in: `{"x:y":true}`, ptr: new(map[unmarshalerText]bool), out: ummapXY},
-	// If multiple values for the same key exists, only the most recent value is used.
-	{CaseName: Name(""), in: `{"x:y":false,"x:y":true}`, ptr: new(map[unmarshalerText]bool), out: ummapXY},
-
-	{
-		CaseName: Name(""),
-		in: `{
-			"Level0": 1,
-			"Level1b": 2,
-			"Level1c": 3,
-			"x": 4,
-			"Level1a": 5,
-			"LEVEL1B": 6,
-			"e": {
-				"Level1a": 8,
-				"Level1b": 9,
-				"Level1c": 10,
-				"Level1d": 11,
-				"x": 12
-			},
-			"Loop1": 13,
-			"Loop2": 14,
-			"X": 15,
-			"Y": 16,
-			"Z": 17,
-			"Q": 18
-		}`,
-		ptr: new(Top),
-		out: Top{
-			Level0: 1,
-			Embed0: Embed0{
-				Level1b: 2,
-				Level1c: 3,
-			},
-			Embed0a: &Embed0a{
-				Level1a: 5,
-				Level1b: 6,
-			},
-			Embed0b: &Embed0b{
-				Level1a: 8,
-				Level1b: 9,
-				Level1c: 10,
-				Level1d: 11,
-				Level1e: 12,
-			},
-			Loop: Loop{
-				Loop1: 13,
-				Loop2: 14,
-			},
-			Embed0p: Embed0p{
-				Point: image.Point{X: 15, Y: 16},
-			},
-			Embed0q: Embed0q{
-				Point: Point{Z: 17},
-			},
-			embed: embed{
-				Q: 18,
-			},
-		},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"hello": 1}`,
-		ptr:      new(Ambig),
-		out:      Ambig{First: 1},
-	},
-
-	{
-		CaseName: Name(""),
-		in:       `{"X": 1,"Y":2}`,
-		ptr:      new(S5),
-		out:      S5{S8: S8{S9: S9{Y: 2}}},
-	},
-	{
-		CaseName:              Name(""),
-		in:                    `{"X": 1,"Y":2}`,
-		ptr:                   new(S5),
-		out:                   S5{S8: S8{S9{Y: 2}}},
-		err:                   fmt.Errorf("json: unknown field \"X\""),
-		disallowUnknownFields: true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"X": 1,"Y":2}`,
-		ptr:      new(S10),
-		out:      S10{S13: S13{S8: S8{S9: S9{Y: 2}}}},
-	},
-	{
-		CaseName:              Name(""),
-		in:                    `{"X": 1,"Y":2}`,
-		ptr:                   new(S10),
-		out:                   S10{S13: S13{S8{S9{Y: 2}}}},
-		err:                   fmt.Errorf("json: unknown field \"X\""),
-		disallowUnknownFields: true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"I": 0, "I": null, "J": null}`,
-		ptr:      new(DoublePtr),
-		out:      DoublePtr{I: nil, J: nil},
-	},
-
-	// invalid UTF-8 is coerced to valid UTF-8.
-	{
-		CaseName: Name(""),
-		in:       "\"hello\xffworld\"",
-		ptr:      new(string),
-		out:      "hello\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\xc2\xc2world\"",
-		ptr:      new(string),
-		out:      "hello\ufffd\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\xc2\xffworld\"",
-		ptr:      new(string),
-		out:      "hello\ufffd\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\\ud800world\"",
-		ptr:      new(string),
-		out:      "hello\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\\ud800\\ud800world\"",
-		ptr:      new(string),
-		out:      "hello\ufffd\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\\ud800\\ud800world\"",
-		ptr:      new(string),
-		out:      "hello\ufffd\ufffdworld",
-	},
-	{
-		CaseName: Name(""),
-		in:       "\"hello\xed\xa0\x80\xed\xb0\x80world\"",
-		ptr:      new(string),
-		out:      "hello\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdworld",
-	},
-
-	// Used to be issue 8305, but time.Time implements encoding.TextUnmarshaler so this works now.
-	{
-		CaseName: Name(""),
-		in:       `{"2009-11-10T23:00:00Z": "hello world"}`,
-		ptr:      new(map[time.Time]string),
-		out:      map[time.Time]string{time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC): "hello world"},
-	},
-
-	// issue 8305
-	{
-		CaseName: Name(""),
-		in:       `{"2009-11-10T23:00:00Z": "hello world"}`,
-		ptr:      new(map[Point]string),
-		out:      map[Point]string{},
-		err:      &UnmarshalTypeError{Value: "string", Type: reflect.TypeFor[Point](), Field: `2009-11-10T23:00:00Z`, Offset: len64(`{`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"asdf": "hello world"}`,
-		ptr:      new(map[unmarshaler]string),
-		out:      map[unmarshaler]string{},
-		err:      &UnmarshalTypeError{Value: "string", Type: reflect.TypeFor[unmarshaler](), Field: "asdf", Offset: len64(`{`)},
-	},
-
-	// related to issue 13783.
-	// Go 1.7 changed marshaling a slice of typed byte to use the methods on the byte type,
-	// similar to marshaling a slice of typed int.
-	// These tests check that, assuming the byte type also has valid decoding methods,
-	// either the old base64 string encoding or the new per-element encoding can be
-	// successfully unmarshaled. The custom unmarshalers were accessible in earlier
-	// versions of Go, even though the custom marshaler was not.
-	{
-		CaseName: Name(""),
-		in:       `"AQID"`,
-		ptr:      new([]byteWithMarshalJSON),
-		out:      []byteWithMarshalJSON{1, 2, 3},
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]byteWithMarshalJSON),
-		out:      []byteWithMarshalJSON{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `"AQID"`,
-		ptr:      new([]byteWithMarshalText),
-		out:      []byteWithMarshalText{1, 2, 3},
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]byteWithMarshalText),
-		out:      []byteWithMarshalText{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `"AQID"`,
-		ptr:      new([]byteWithPtrMarshalJSON),
-		out:      []byteWithPtrMarshalJSON{1, 2, 3},
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]byteWithPtrMarshalJSON),
-		out:      []byteWithPtrMarshalJSON{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `"AQID"`,
-		ptr:      new([]byteWithPtrMarshalText),
-		out:      []byteWithPtrMarshalText{1, 2, 3},
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]byteWithPtrMarshalText),
-		out:      []byteWithPtrMarshalText{1, 2, 3},
-		golden:   true,
-	},
-
-	// ints work with the marshaler but not the base64 []byte case
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]intWithMarshalJSON),
-		out:      []intWithMarshalJSON{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]intWithMarshalText),
-		out:      []intWithMarshalText{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]intWithPtrMarshalJSON),
-		out:      []intWithPtrMarshalJSON{1, 2, 3},
-		golden:   true,
-	},
-	{
-		CaseName: Name(""),
-		in:       `["Z01","Z02","Z03"]`,
-		ptr:      new([]intWithPtrMarshalText),
-		out:      []intWithPtrMarshalText{1, 2, 3},
-		golden:   true,
-	},
-
-	{CaseName: Name(""), in: `0.000001`, ptr: new(float64), out: 0.000001, golden: true},
-	{CaseName: Name(""), in: `1e-7`, ptr: new(float64), out: 1e-7, golden: true},
-	{CaseName: Name(""), in: `100000000000000000000`, ptr: new(float64), out: 100000000000000000000.0, golden: true},
-	{CaseName: Name(""), in: `1e+21`, ptr: new(float64), out: 1e21, golden: true},
-	{CaseName: Name(""), in: `-0.000001`, ptr: new(float64), out: -0.000001, golden: true},
-	{CaseName: Name(""), in: `-1e-7`, ptr: new(float64), out: -1e-7, golden: true},
-	{CaseName: Name(""), in: `-100000000000000000000`, ptr: new(float64), out: -100000000000000000000.0, golden: true},
-	{CaseName: Name(""), in: `-1e+21`, ptr: new(float64), out: -1e21, golden: true},
-	{CaseName: Name(""), in: `999999999999999900000`, ptr: new(float64), out: 999999999999999900000.0, golden: true},
-	{CaseName: Name(""), in: `9007199254740992`, ptr: new(float64), out: 9007199254740992.0, golden: true},
-	{CaseName: Name(""), in: `9007199254740993`, ptr: new(float64), out: 9007199254740992.0, golden: false},
-
-	{
-		CaseName: Name(""),
-		in:       `{"V": {"F2": "hello"}}`,
-		ptr:      new(VOuter),
-		err: &UnmarshalTypeError{
-			Value:  "string",
-			Struct: "VOuter",
-			Field:  "V.F2",
-			Type:   reflect.TypeFor[int32](),
-			Offset: len64(`{"V": {"F2": `),
-		},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"V": {"F4": {}, "F2": "hello"}}`,
-		ptr:      new(VOuter),
-		out:      VOuter{V: V{F4: &VOuter{}}},
-		err: &UnmarshalTypeError{
-			Value:  "string",
-			Struct: "VOuter",
-			Field:  "V.F2",
-			Type:   reflect.TypeFor[int32](),
-			Offset: len64(`{"V": {"F4": {}, "F2": `),
-		},
-	},
-
-	{
-		CaseName: Name(""),
-		in:       `{"Level1a": "hello"}`,
-		ptr:      new(Top),
-		out:      Top{Embed0a: &Embed0a{}},
-		err: &UnmarshalTypeError{
-			Value:  "string",
-			Struct: "Top",
-			Field:  "Level1a",
-			Type:   reflect.TypeFor[int](),
-			Offset: len64(`{"Level1a": `),
-		},
-	},
-
-	// issue 15146.
-	// invalid inputs in wrongStringTests below.
-	{CaseName: Name(""), in: `{"B":"true"}`, ptr: new(B), out: B{true}, golden: true},
-	{CaseName: Name(""), in: `{"B":"false"}`, ptr: new(B), out: B{false}, golden: true},
-	{CaseName: Name(""), in: `{"B": "maybe"}`, ptr: new(B), err: &UnmarshalTypeError{Value: `string "maybe"`, Type: reflect.TypeFor[bool](), Struct: "B", Field: "B", Offset: len64(`{"B": `), Err: strconv.ErrSyntax}},
-	{CaseName: Name(""), in: `{"B": "tru"}`, ptr: new(B), err: &UnmarshalTypeError{Value: `string "tru"`, Type: reflect.TypeFor[bool](), Struct: "B", Field: "B", Offset: len64(`{"B": `), Err: strconv.ErrSyntax}},
-	{CaseName: Name(""), in: `{"B": "False"}`, ptr: new(B), err: &UnmarshalTypeError{Value: `string "False"`, Type: reflect.TypeFor[bool](), Struct: "B", Field: "B", Offset: len64(`{"B": `), Err: strconv.ErrSyntax}},
-	{CaseName: Name(""), in: `{"B": "null"}`, ptr: new(B), out: B{false}},
-	{CaseName: Name(""), in: `{"B": "nul"}`, ptr: new(B), err: &UnmarshalTypeError{Value: `string "nul"`, Type: reflect.TypeFor[bool](), Struct: "B", Field: "B", Offset: len64(`{"B": `), Err: strconv.ErrSyntax}},
-	{CaseName: Name(""), in: `{"B": [2, 3]}`, ptr: new(B), err: &UnmarshalTypeError{Value: "array", Type: reflect.TypeFor[bool](), Struct: "B", Field: "B", Offset: len64(`{"B": `)}},
-
-	// additional tests for disallowUnknownFields
-	{
-		CaseName: Name(""),
-		in: `{
-			"Level0": 1,
-			"Level1b": 2,
-			"Level1c": 3,
-			"x": 4,
-			"Level1a": 5,
-			"LEVEL1B": 6,
-			"e": {
-				"Level1a": 8,
-				"Level1b": 9,
-				"Level1c": 10,
-				"Level1d": 11,
-				"x": 12
-			},
-			"Loop1": 13,
-			"Loop2": 14,
-			"X": 15,
-			"Y": 16,
-			"Z": 17,
-			"Q": 18,
-			"extra": true
-		}`,
-		ptr: new(Top),
-		out: Top{
-			Level0: 1,
-			Embed0: Embed0{
-				Level1b: 2,
-				Level1c: 3,
-			},
-			Embed0a: &Embed0a{Level1a: 5, Level1b: 6},
-			Embed0b: &Embed0b{Level1a: 8, Level1b: 9, Level1c: 10, Level1d: 11, Level1e: 12},
-			Loop: Loop{
-				Loop1: 13,
-				Loop2: 14,
-				Loop:  nil,
-			},
-			Embed0p: Embed0p{
-				Point: image.Point{
-					X: 15,
-					Y: 16,
-				},
-			},
-			Embed0q: Embed0q{Point: Point{Z: 17}},
-			embed:   embed{Q: 18},
-		},
-		err:                   fmt.Errorf("json: unknown field \"extra\""),
-		disallowUnknownFields: true,
-	},
-	{
-		CaseName: Name(""),
-		in: `{
-			"Level0": 1,
-			"Level1b": 2,
-			"Level1c": 3,
-			"x": 4,
-			"Level1a": 5,
-			"LEVEL1B": 6,
-			"e": {
-				"Level1a": 8,
-				"Level1b": 9,
-				"Level1c": 10,
-				"Level1d": 11,
-				"x": 12,
-				"extra": null
-			},
-			"Loop1": 13,
-			"Loop2": 14,
-			"X": 15,
-			"Y": 16,
-			"Z": 17,
-			"Q": 18
-		}`,
-		ptr: new(Top),
-		out: Top{
-			Level0: 1,
-			Embed0: Embed0{
-				Level1b: 2,
-				Level1c: 3,
-			},
-			Embed0a: &Embed0a{Level1a: 5, Level1b: 6},
-			Embed0b: &Embed0b{Level1a: 8, Level1b: 9, Level1c: 10, Level1d: 11, Level1e: 12},
-			Loop: Loop{
-				Loop1: 13,
-				Loop2: 14,
-				Loop:  nil,
-			},
-			Embed0p: Embed0p{
-				Point: image.Point{
-					X: 15,
-					Y: 16,
-				},
-			},
-			Embed0q: Embed0q{Point: Point{Z: 17}},
-			embed:   embed{Q: 18},
-		},
-		err:                   fmt.Errorf("json: unknown field \"extra\""),
-		disallowUnknownFields: true,
-	},
-	// issue 26444
-	// UnmarshalTypeError without field & struct values
-	{
-		CaseName: Name(""),
-		in:       `{"data":{"test1": "bob", "test2": 123}}`,
-		ptr:      new(mapStringToStringData),
-		out:      mapStringToStringData{map[string]string{"test1": "bob", "test2": ""}},
-		err:      &UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[string](), Offset: len64(`{"data":{"test1": "bob", "test2": `), Struct: "mapStringToStringData", Field: "data.test2"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"data":{"test1": 123, "test2": "bob"}}`,
-		ptr:      new(mapStringToStringData),
-		out:      mapStringToStringData{Data: map[string]string{"test1": "", "test2": "bob"}},
-		err:      &UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[string](), Offset: len64(`{"data":{"test1": `), Struct: "mapStringToStringData", Field: "data.test1"},
-	},
-
-	// trying to decode JSON arrays or objects via TextUnmarshaler
-	{
-		CaseName: Name(""),
-		in:       `[1, 2, 3]`,
-		ptr:      new(MustNotUnmarshalText),
-		err:      &UnmarshalTypeError{Value: "array", Type: reflect.TypeFor[MustNotUnmarshalText](), Err: errors.New("JSON value must be string type")},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"foo": "bar"}`,
-		ptr:      new(MustNotUnmarshalText),
-		err:      &UnmarshalTypeError{Value: "object", Type: reflect.TypeFor[MustNotUnmarshalText](), Err: errors.New("JSON value must be string type")},
-	},
-	// #22369
-	{
-		CaseName: Name(""),
-		in:       `{"PP": {"T": {"Y": "bad-type"}}}`,
-		ptr:      new(P),
-		err: &UnmarshalTypeError{
-			Value:  "string",
-			Struct: "P",
-			Field:  "PP.T.Y",
-			Type:   reflect.TypeFor[int](),
-			Offset: len64(`{"PP": {"T": {"Y": `),
-		},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"Ts": [{"Y": 1}, {"Y": 2}, {"Y": "bad-type"}]}`,
-		ptr:      new(PP),
-		out:      PP{Ts: []T{{Y: 1}, {Y: 2}, {Y: 0}}},
-		err: &UnmarshalTypeError{
-			Value:  "string",
-			Struct: "PP",
-			Field:  "Ts.2.Y",
-			Type:   reflect.TypeFor[int](),
-			Offset: len64(`{"Ts": [{"Y": 1}, {"Y": 2}, {"Y": `),
-		},
-	},
-	// #14702
-	{
-		CaseName: Name(""),
-		in:       `invalid`,
-		ptr:      new(Number),
-		err: &SyntaxError{
-			msg:    "invalid character 'i' looking for beginning of value",
-			Offset: len64(``),
-		},
-	},
-	{
-		CaseName: Name(""),
-		in:       `"invalid"`,
-		ptr:      new(Number),
-		err:      &UnmarshalTypeError{Value: `string "invalid"`, Type: reflect.TypeFor[Number](), Err: strconv.ErrSyntax},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"A":"invalid"}`,
-		ptr:      new(struct{ A Number }),
-		err:      &UnmarshalTypeError{Value: `string "invalid"`, Type: reflect.TypeFor[Number](), Err: strconv.ErrSyntax},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"A":"invalid"}`,
-		ptr: new(struct {
-			A Number `json:",string"`
-		}),
-		err: &UnmarshalTypeError{Value: `string "invalid"`, Type: reflect.TypeFor[Number](), Err: strconv.ErrSyntax},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"A":"invalid"}`,
-		ptr:      new(map[string]Number),
-		out:      map[string]Number{"A": ""},
-		err:      &UnmarshalTypeError{Value: `string "invalid"`, Type: reflect.TypeFor[Number](), Err: strconv.ErrSyntax},
-	},
-
-	{
-		CaseName: Name(""),
-		in:       `5`,
-		ptr:      new(Number),
-		out:      Number("5"),
-	},
-	{
-		CaseName: Name(""),
-		in:       `"5"`,
-		ptr:      new(Number),
-		out:      Number("5"),
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"N":5}`,
-		ptr:      new(struct{ N Number }),
-		out:      struct{ N Number }{"5"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"N":"5"}`,
-		ptr:      new(struct{ N Number }),
-		out:      struct{ N Number }{"5"},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"N":5}`,
-		ptr: new(struct {
-			N Number `json:",string"`
-		}),
-		err: &UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[Number]()},
-	},
-	{
-		CaseName: Name(""),
-		in:       `{"N":"5"}`,
-		ptr: new(struct {
-			N Number `json:",string"`
-		}),
-		out: struct {
-			N Number `json:",string"`
-		}{"5"},
-	},
-
-	// Verify that syntactic errors are immediately fatal,
-	// while semantic errors are lazily reported
-	// (i.e., allow processing to continue).
-	{
-		CaseName: Name(""),
-		in:       `[1,2,true,4,5}`,
-		ptr:      new([]int),
-		err:      &SyntaxError{msg: "invalid character '}' after array element", Offset: len64(`[1,2,true,4,5`)},
-	},
-	{
-		CaseName: Name(""),
-		in:       `[1,2,true,4,5]`,
-		ptr:      new([]int),
-		out:      []int{1, 2, 0, 4, 5},
-		err:      &UnmarshalTypeError{Value: "bool", Type: reflect.TypeFor[int](), Field: "2", Offset: len64(`[1,2,`)},
-	},
-}
-
-func TestMarshal(t *testing.T) {
-	b, err := Marshal(allValue)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	if string(b) != allValueCompact {
-		t.Errorf("Marshal:")
-		diff(t, b, []byte(allValueCompact))
-		return
-	}
-
-	b, err = Marshal(pallValue)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	if string(b) != pallValueCompact {
-		t.Errorf("Marshal:")
-		diff(t, b, []byte(pallValueCompact))
-		return
-	}
-}
-
-func TestMarshalInvalidUTF8(t *testing.T) {
-	tests := []struct {
-		CaseName
-		in   string
-		want string
-	}{
-		{Name(""), "hello\xffworld", `"hello\ufffdworld"`},
-		{Name(""), "", `""`},
-		{Name(""), "\xff", `"\ufffd"`},
-		{Name(""), "\xff\xff", `"\ufffd\ufffd"`},
-		{Name(""), "a\xffb", `"a\ufffdb"`},
-		{Name(""), "\xe6\x97\xa5\xe6\x9c\xac\xff\xaa\x9e", `"日本\ufffd\ufffd\ufffd"`},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			got, err := Marshal(tt.in)
-			if string(got) != tt.want || err != nil {
-				t.Errorf("%s: Marshal(%q):\n\tgot:  (%q, %v)\n\twant: (%q, nil)", tt.Where, tt.in, got, err, tt.want)
-			}
-		})
-	}
-}
-
-func TestMarshalNumberZeroVal(t *testing.T) {
-	var n Number
-	out, err := Marshal(n)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	got := string(out)
-	if got != "0" {
-		t.Fatalf("Marshal: got %s, want 0", got)
-	}
-}
-
-func TestMarshalEmbeds(t *testing.T) {
-	top := &Top{
-		Level0: 1,
-		Embed0: Embed0{
-			Level1b: 2,
-			Level1c: 3,
-		},
-		Embed0a: &Embed0a{
-			Level1a: 5,
-			Level1b: 6,
-		},
-		Embed0b: &Embed0b{
-			Level1a: 8,
-			Level1b: 9,
-			Level1c: 10,
-			Level1d: 11,
-			Level1e: 12,
-		},
-		Loop: Loop{
-			Loop1: 13,
-			Loop2: 14,
-		},
-		Embed0p: Embed0p{
-			Point: image.Point{X: 15, Y: 16},
-		},
-		Embed0q: Embed0q{
-			Point: Point{Z: 17},
-		},
-		embed: embed{
-			Q: 18,
-		},
-	}
-	got, err := Marshal(top)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	want := "{\"Level0\":1,\"Level1b\":2,\"Level1c\":3,\"Level1a\":5,\"LEVEL1B\":6,\"e\":{\"Level1a\":8,\"Level1b\":9,\"Level1c\":10,\"Level1d\":11,\"x\":12},\"Loop1\":13,\"Loop2\":14,\"X\":15,\"Y\":16,\"Z\":17,\"Q\":18}"
-	if string(got) != want {
-		t.Errorf("Marshal:\n\tgot:  %s\n\twant: %s", got, want)
-	}
-}
-
-func equalError(a, b error) bool {
-	isJSONError := func(err error) bool {
-		switch err.(type) {
-		case
-			*InvalidUTF8Error,
-			*InvalidUnmarshalError,
-			*MarshalerError,
-			*SyntaxError,
-			*UnmarshalFieldError,
-			*UnmarshalTypeError,
-			*UnsupportedTypeError,
-			*UnsupportedValueError:
-			return true
-		}
-		return false
-	}
-
-	if a == nil || b == nil {
-		return a == nil && b == nil
-	}
-	if isJSONError(a) || isJSONError(b) {
-		return reflect.DeepEqual(a, b) // safe for locally defined error types
-	}
-	return a.Error() == b.Error()
-}
-
-func TestUnmarshal(t *testing.T) {
-	for _, tt := range unmarshalTests {
-		t.Run(tt.Name, func(t *testing.T) {
-			in := []byte(tt.in)
-			if err := checkValid(in); err != nil {
-				if !equalError(err, tt.err) {
-					t.Fatalf("%s: checkValid error:\n\tgot  %#v\n\twant %#v", tt.Where, err, tt.err)
-				}
-			}
-			if tt.ptr == nil {
-				return
-			}
-
-			typ := reflect.TypeOf(tt.ptr)
-			if typ.Kind() != reflect.Pointer {
-				t.Fatalf("%s: unmarshalTest.ptr %T is not a pointer type", tt.Where, tt.ptr)
-			}
-			typ = typ.Elem()
-
-			// v = new(right-type)
-			v := reflect.New(typ)
-
-			if !reflect.DeepEqual(tt.ptr, v.Interface()) {
-				// There's no reason for ptr to point to non-zero data,
-				// as we decode into new(right-type), so the data is
-				// discarded.
-				// This can easily mean tests that silently don't test
-				// what they should. To test decoding into existing
-				// data, see TestPrefilled.
-				t.Fatalf("%s: unmarshalTest.ptr %#v is not a pointer to a zero value", tt.Where, tt.ptr)
-			}
-
-			dec := NewDecoder(bytes.NewReader(in))
-			if tt.useNumber {
-				dec.UseNumber()
-			}
-			if tt.disallowUnknownFields {
-				dec.DisallowUnknownFields()
-			}
-			if err := dec.Decode(v.Interface()); !equalError(err, tt.err) {
-				t.Fatalf("%s: Decode error:\n\tgot:  %v\n\twant: %v\n\n\tgot:  %#v\n\twant: %#v", tt.Where, err, tt.err, err, tt.err)
-			} else if err != nil && tt.out == nil {
-				// Initialize tt.out during an error where there are no mutations,
-				// so the output is just the zero value of the input type.
-				tt.out = reflect.Zero(v.Elem().Type()).Interface()
-			}
-			if got := v.Elem().Interface(); !reflect.DeepEqual(got, tt.out) {
-				gotJSON, _ := Marshal(got)
-				wantJSON, _ := Marshal(tt.out)
-				t.Fatalf("%s: Decode:\n\tgot:  %#+v\n\twant: %#+v\n\n\tgotJSON:  %s\n\twantJSON: %s", tt.Where, got, tt.out, gotJSON, wantJSON)
-			}
-
-			// Check round trip also decodes correctly.
-			if tt.err == nil {
-				enc, err := Marshal(v.Interface())
-				if err != nil {
-					t.Fatalf("%s: Marshal error after roundtrip: %v", tt.Where, err)
-				}
-				if tt.golden && !bytes.Equal(enc, in) {
-					t.Errorf("%s: Marshal:\n\tgot:  %s\n\twant: %s", tt.Where, enc, in)
-				}
-				vv := reflect.New(reflect.TypeOf(tt.ptr).Elem())
-				dec = NewDecoder(bytes.NewReader(enc))
-				if tt.useNumber {
-					dec.UseNumber()
-				}
-				if err := dec.Decode(vv.Interface()); err != nil {
-					t.Fatalf("%s: Decode(%#q) error after roundtrip: %v", tt.Where, enc, err)
-				}
-				if !reflect.DeepEqual(v.Elem().Interface(), vv.Elem().Interface()) {
-					t.Fatalf("%s: Decode:\n\tgot:  %#+v\n\twant: %#+v\n\n\tgotJSON:  %s\n\twantJSON: %s",
-						tt.Where, v.Elem().Interface(), vv.Elem().Interface(),
-						stripWhitespace(string(enc)), stripWhitespace(string(in)))
-				}
-			}
-		})
-	}
-}
-
-func TestUnmarshalMarshal(t *testing.T) {
-	initBig()
-	var v any
-	if err := Unmarshal(jsonBig, &v); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	b, err := Marshal(v)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	if !bytes.Equal(jsonBig, b) {
-		t.Errorf("Marshal:")
-		diff(t, b, jsonBig)
-		return
-	}
-}
-
-// Independent of Decode, basic coverage of the accessors in Number
-func TestNumberAccessors(t *testing.T) {
-	tests := []struct {
-		CaseName
-		in       string
-		i        int64
-		intErr   string
-		f        float64
-		floatErr string
-	}{
-		{CaseName: Name(""), in: "-1.23e1", intErr: "strconv.ParseInt: parsing \"-1.23e1\": invalid syntax", f: -1.23e1},
-		{CaseName: Name(""), in: "-12", i: -12, f: -12.0},
-		{CaseName: Name(""), in: "1e1000", intErr: "strconv.ParseInt: parsing \"1e1000\": invalid syntax", floatErr: "strconv.ParseFloat: parsing \"1e1000\": value out of range"},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			n := Number(tt.in)
-			if got := n.String(); got != tt.in {
-				t.Errorf("%s: Number(%q).String() = %s, want %s", tt.Where, tt.in, got, tt.in)
-			}
-			if i, err := n.Int64(); err == nil && tt.intErr == "" && i != tt.i {
-				t.Errorf("%s: Number(%q).Int64() = %d, want %d", tt.Where, tt.in, i, tt.i)
-			} else if (err == nil && tt.intErr != "") || (err != nil && err.Error() != tt.intErr) {
-				t.Errorf("%s: Number(%q).Int64() error:\n\tgot:  %v\n\twant: %v", tt.Where, tt.in, err, tt.intErr)
-			}
-			if f, err := n.Float64(); err == nil && tt.floatErr == "" && f != tt.f {
-				t.Errorf("%s: Number(%q).Float64() = %g, want %g", tt.Where, tt.in, f, tt.f)
-			} else if (err == nil && tt.floatErr != "") || (err != nil && err.Error() != tt.floatErr) {
-				t.Errorf("%s: Number(%q).Float64() error:\n\tgot  %v\n\twant: %v", tt.Where, tt.in, err, tt.floatErr)
-			}
-		})
-	}
-}
-
-func TestLargeByteSlice(t *testing.T) {
-	s0 := make([]byte, 2000)
-	for i := range s0 {
-		s0[i] = byte(i)
-	}
-	b, err := Marshal(s0)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var s1 []byte
-	if err := Unmarshal(b, &s1); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if !bytes.Equal(s0, s1) {
-		t.Errorf("Marshal:")
-		diff(t, s0, s1)
-	}
-}
-
-type Xint struct {
-	X int
-}
-
-func TestUnmarshalInterface(t *testing.T) {
-	var xint Xint
-	var i any = &xint
-	if err := Unmarshal([]byte(`{"X":1}`), &i); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if xint.X != 1 {
-		t.Fatalf("xint.X = %d, want 1", xint.X)
-	}
-}
-
-func TestUnmarshalPtrPtr(t *testing.T) {
-	var xint Xint
-	pxint := &xint
-	if err := Unmarshal([]byte(`{"X":1}`), &pxint); err != nil {
-		t.Fatalf("Unmarshal: %v", err)
-	}
-	if xint.X != 1 {
-		t.Fatalf("xint.X = %d, want 1", xint.X)
-	}
-}
-
-func TestEscape(t *testing.T) {
-	const input = `"foobar"` + " [\u2028 \u2029]"
-	const want = `"\"foobar\"\u003chtml\u003e [\u2028 \u2029]"`
-	got, err := Marshal(input)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	if string(got) != want {
-		t.Errorf("Marshal(%#q):\n\tgot:  %s\n\twant: %s", input, got, want)
-	}
-}
-
-// If people misuse the ,string modifier, the error message should be
-// helpful, telling the user that they're doing it wrong.
-func TestErrorMessageFromMisusedString(t *testing.T) {
-	// WrongString is a struct that's misusing the ,string modifier.
-	type WrongString struct {
-		Message string `json:"result,string"`
-	}
-	tests := []struct {
-		CaseName
-		in, err string
-	}{
-		{Name(""), `{"result":"x"}`, `json: cannot unmarshal JSON string into WrongString.result of Go type string: invalid character 'x' looking for beginning of object key string`},
-		{Name(""), `{"result":"foo"}`, `json: cannot unmarshal JSON string into WrongString.result of Go type string: invalid character 'f' looking for beginning of object key string`},
-		{Name(""), `{"result":"123"}`, `json: cannot unmarshal JSON string into WrongString.result of Go type string: invalid character '1' looking for beginning of object key string`},
-		{Name(""), `{"result":123}`, `json: cannot unmarshal JSON number into WrongString.result of Go type string`},
-		{Name(""), `{"result":"\""}`, `json: cannot unmarshal JSON string into WrongString.result of Go type string: unexpected end of JSON input`},
-		{Name(""), `{"result":"\"foo"}`, `json: cannot unmarshal JSON string into WrongString.result of Go type string: unexpected end of JSON input`},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			r := strings.NewReader(tt.in)
-			var s WrongString
-			err := NewDecoder(r).Decode(&s)
-			got := fmt.Sprintf("%v", err)
-			if got != tt.err {
-				t.Errorf("%s: Decode error:\n\tgot:  %s\n\twant: %s", tt.Where, got, tt.err)
-			}
-		})
-	}
-}
-
-type All struct {
-	Bool    bool
-	Int     int
-	Int8    int8
-	Int16   int16
-	Int32   int32
-	Int64   int64
-	Uint    uint
-	Uint8   uint8
-	Uint16  uint16
-	Uint32  uint32
-	Uint64  uint64
-	Uintptr uintptr
-	Float32 float32
-	Float64 float64
-
-	Foo  string `json:"bar"`
-	Foo2 string `json:"bar2,dummyopt"`
-
-	IntStr     int64   `json:",string"`
-	UintptrStr uintptr `json:",string"`
-
-	PBool    *bool
-	PInt     *int
-	PInt8    *int8
-	PInt16   *int16
-	PInt32   *int32
-	PInt64   *int64
-	PUint    *uint
-	PUint8   *uint8
-	PUint16  *uint16
-	PUint32  *uint32
-	PUint64  *uint64
-	PUintptr *uintptr
-	PFloat32 *float32
-	PFloat64 *float64
-
-	String  string
-	PString *string
-
-	Map   map[string]Small
-	MapP  map[string]*Small
-	PMap  *map[string]Small
-	PMapP *map[string]*Small
-
-	EmptyMap map[string]Small
-	NilMap   map[string]Small
-
-	Slice   []Small
-	SliceP  []*Small
-	PSlice  *[]Small
-	PSliceP *[]*Small
-
-	EmptySlice []Small
-	NilSlice   []Small
-
-	StringSlice []string
-	ByteSlice   []byte
-
-	Small   Small
-	PSmall  *Small
-	PPSmall **Small
-
-	Interface  any
-	PInterface *any
-
-	unexported int
-}
-
-type Small struct {
-	Tag string
-}
-
-var allValue = All{
-	Bool:       true,
-	Int:        2,
-	Int8:       3,
-	Int16:      4,
-	Int32:      5,
-	Int64:      6,
-	Uint:       7,
-	Uint8:      8,
-	Uint16:     9,
-	Uint32:     10,
-	Uint64:     11,
-	Uintptr:    12,
-	Float32:    14.1,
-	Float64:    15.1,
-	Foo:        "foo",
-	Foo2:       "foo2",
-	IntStr:     42,
-	UintptrStr: 44,
-	String:     "16",
-	Map: map[string]Small{
-		"17": {Tag: "tag17"},
-		"18": {Tag: "tag18"},
-	},
-	MapP: map[string]*Small{
-		"19": {Tag: "tag19"},
-		"20": nil,
-	},
-	EmptyMap:    map[string]Small{},
-	Slice:       []Small{{Tag: "tag20"}, {Tag: "tag21"}},
-	SliceP:      []*Small{{Tag: "tag22"}, nil, {Tag: "tag23"}},
-	EmptySlice:  []Small{},
-	StringSlice: []string{"str24", "str25", "str26"},
-	ByteSlice:   []byte{27, 28, 29},
-	Small:       Small{Tag: "tag30"},
-	PSmall:      &Small{Tag: "tag31"},
-	Interface:   5.2,
-}
-
-var pallValue = All{
-	PBool:      &allValue.Bool,
-	PInt:       &allValue.Int,
-	PInt8:      &allValue.Int8,
-	PInt16:     &allValue.Int16,
-	PInt32:     &allValue.Int32,
-	PInt64:     &allValue.Int64,
-	PUint:      &allValue.Uint,
-	PUint8:     &allValue.Uint8,
-	PUint16:    &allValue.Uint16,
-	PUint32:    &allValue.Uint32,
-	PUint64:    &allValue.Uint64,
-	PUintptr:   &allValue.Uintptr,
-	PFloat32:   &allValue.Float32,
-	PFloat64:   &allValue.Float64,
-	PString:    &allValue.String,
-	PMap:       &allValue.Map,
-	PMapP:      &allValue.MapP,
-	PSlice:     &allValue.Slice,
-	PSliceP:    &allValue.SliceP,
-	PPSmall:    &allValue.PSmall,
-	PInterface: &allValue.Interface,
-}
-
-var allValueIndent = `{
-	"Bool": true,
-	"Int": 2,
-	"Int8": 3,
-	"Int16": 4,
-	"Int32": 5,
-	"Int64": 6,
-	"Uint": 7,
-	"Uint8": 8,
-	"Uint16": 9,
-	"Uint32": 10,
-	"Uint64": 11,
-	"Uintptr": 12,
-	"Float32": 14.1,
-	"Float64": 15.1,
-	"bar": "foo",
-	"bar2": "foo2",
-	"IntStr": "42",
-	"UintptrStr": "44",
-	"PBool": null,
-	"PInt": null,
-	"PInt8": null,
-	"PInt16": null,
-	"PInt32": null,
-	"PInt64": null,
-	"PUint": null,
-	"PUint8": null,
-	"PUint16": null,
-	"PUint32": null,
-	"PUint64": null,
-	"PUintptr": null,
-	"PFloat32": null,
-	"PFloat64": null,
-	"String": "16",
-	"PString": null,
-	"Map": {
-		"17": {
-			"Tag": "tag17"
-		},
-		"18": {
-			"Tag": "tag18"
-		}
-	},
-	"MapP": {
-		"19": {
-			"Tag": "tag19"
-		},
-		"20": null
-	},
-	"PMap": null,
-	"PMapP": null,
-	"EmptyMap": {},
-	"NilMap": null,
-	"Slice": [
-		{
-			"Tag": "tag20"
-		},
-		{
-			"Tag": "tag21"
-		}
-	],
-	"SliceP": [
-		{
-			"Tag": "tag22"
-		},
-		null,
-		{
-			"Tag": "tag23"
-		}
-	],
-	"PSlice": null,
-	"PSliceP": null,
-	"EmptySlice": [],
-	"NilSlice": null,
-	"StringSlice": [
-		"str24",
-		"str25",
-		"str26"
-	],
-	"ByteSlice": "Gxwd",
-	"Small": {
-		"Tag": "tag30"
-	},
-	"PSmall": {
-		"Tag": "tag31"
-	},
-	"PPSmall": null,
-	"Interface": 5.2,
-	"PInterface": null
-}`
-
-var allValueCompact = stripWhitespace(allValueIndent)
-
-var pallValueIndent = `{
-	"Bool": false,
-	"Int": 0,
-	"Int8": 0,
-	"Int16": 0,
-	"Int32": 0,
-	"Int64": 0,
-	"Uint": 0,
-	"Uint8": 0,
-	"Uint16": 0,
-	"Uint32": 0,
-	"Uint64": 0,
-	"Uintptr": 0,
-	"Float32": 0,
-	"Float64": 0,
-	"bar": "",
-	"bar2": "",
-        "IntStr": "0",
-	"UintptrStr": "0",
-	"PBool": true,
-	"PInt": 2,
-	"PInt8": 3,
-	"PInt16": 4,
-	"PInt32": 5,
-	"PInt64": 6,
-	"PUint": 7,
-	"PUint8": 8,
-	"PUint16": 9,
-	"PUint32": 10,
-	"PUint64": 11,
-	"PUintptr": 12,
-	"PFloat32": 14.1,
-	"PFloat64": 15.1,
-	"String": "",
-	"PString": "16",
-	"Map": null,
-	"MapP": null,
-	"PMap": {
-		"17": {
-			"Tag": "tag17"
-		},
-		"18": {
-			"Tag": "tag18"
-		}
-	},
-	"PMapP": {
-		"19": {
-			"Tag": "tag19"
-		},
-		"20": null
-	},
-	"EmptyMap": null,
-	"NilMap": null,
-	"Slice": null,
-	"SliceP": null,
-	"PSlice": [
-		{
-			"Tag": "tag20"
-		},
-		{
-			"Tag": "tag21"
-		}
-	],
-	"PSliceP": [
-		{
-			"Tag": "tag22"
-		},
-		null,
-		{
-			"Tag": "tag23"
-		}
-	],
-	"EmptySlice": null,
-	"NilSlice": null,
-	"StringSlice": null,
-	"ByteSlice": null,
-	"Small": {
-		"Tag": ""
-	},
-	"PSmall": null,
-	"PPSmall": {
-		"Tag": "tag31"
-	},
-	"Interface": null,
-	"PInterface": 5.2
-}`
-
-var pallValueCompact = stripWhitespace(pallValueIndent)
-
-func TestRefUnmarshal(t *testing.T) {
-	type S struct {
-		// Ref is defined in encode_test.go.
-		R0 Ref
-		R1 *Ref
-		R2 RefText
-		R3 *RefText
-	}
-	want := S{
-		R0: 12,
-		R1: new(Ref),
-		R2: 13,
-		R3: new(RefText),
-	}
-	*want.R1 = 12
-	*want.R3 = 13
-
-	var got S
-	if err := Unmarshal([]byte(`{"R0":"ref","R1":"ref","R2":"ref","R3":"ref"}`), &got); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if !reflect.DeepEqual(got, want) {
-		t.Errorf("Unmarsha:\n\tgot:  %+v\n\twant: %+v", got, want)
-	}
-}
-
-// Test that the empty string doesn't panic decoding when ,string is specified
-// Issue 3450
-func TestEmptyString(t *testing.T) {
-	type T2 struct {
-		Number1 int `json:",string"`
-		Number2 int `json:",string"`
-	}
-	data := `{"Number1":"1", "Number2":""}`
-	dec := NewDecoder(strings.NewReader(data))
-	var got T2
-	switch err := dec.Decode(&got); {
-	case err == nil:
-		t.Fatalf("Decode error: got nil, want non-nil")
-	case got.Number1 != 1:
-		t.Fatalf("Decode: got.Number1 = %d, want 1", got.Number1)
-	}
-}
-
-// Test that a null for ,string is not replaced with the previous quoted string (issue 7046).
-// It should also not be an error (issue 2540, issue 8587).
-func TestNullString(t *testing.T) {
-	type T struct {
-		A int  `json:",string"`
-		B int  `json:",string"`
-		C *int `json:",string"`
-	}
-	data := []byte(`{"A": "1", "B": null, "C": null}`)
-	var s T
-	s.B = 1
-	s.C = new(int)
-	*s.C = 2
-	switch err := Unmarshal(data, &s); {
-	case err != nil:
-		t.Fatalf("Unmarshal error: %v", err)
-	case s.B != 1:
-		t.Fatalf("Unmarshal: s.B = %d, want 1", s.B)
-	case s.C != nil:
-		t.Fatalf("Unmarshal: s.C = %d, want non-nil", s.C)
-	}
-}
-
-func addr[T any](v T) *T {
-	return &v
-}
-
-func TestInterfaceSet(t *testing.T) {
-	errUnmarshal := &UnmarshalTypeError{Value: "object", Offset: 5, Type: reflect.TypeFor[int](), Field: "X"}
-	tests := []struct {
-		CaseName
-		pre  any
-		json string
-		post any
-	}{
-		{Name(""), "foo", `"bar"`, "bar"},
-		{Name(""), "foo", `2`, 2.0},
-		{Name(""), "foo", `true`, true},
-		{Name(""), "foo", `null`, nil},
-		{Name(""), map[string]any{}, `true`, true},
-		{Name(""), []string{}, `true`, true},
-
-		{Name(""), any(nil), `null`, any(nil)},
-		{Name(""), (*int)(nil), `null`, any(nil)},
-		{Name(""), (*int)(addr(0)), `null`, any(nil)},
-		{Name(""), (*int)(addr(1)), `null`, any(nil)},
-		{Name(""), (**int)(nil), `null`, any(nil)},
-		{Name(""), (**int)(addr[*int](nil)), `null`, (**int)(addr[*int](nil))},
-		{Name(""), (**int)(addr(addr(1))), `null`, (**int)(addr[*int](nil))},
-		{Name(""), (***int)(nil), `null`, any(nil)},
-		{Name(""), (***int)(addr[**int](nil)), `null`, (***int)(addr[**int](nil))},
-		{Name(""), (***int)(addr(addr[*int](nil))), `null`, (***int)(addr[**int](nil))},
-		{Name(""), (***int)(addr(addr(addr(1)))), `null`, (***int)(addr[**int](nil))},
-
-		{Name(""), any(nil), `2`, float64(2)},
-		{Name(""), (int)(1), `2`, float64(2)},
-		{Name(""), (*int)(nil), `2`, float64(2)},
-		{Name(""), (*int)(addr(0)), `2`, (*int)(addr(2))},
-		{Name(""), (*int)(addr(1)), `2`, (*int)(addr(2))},
-		{Name(""), (**int)(nil), `2`, float64(2)},
-		{Name(""), (**int)(addr[*int](nil)), `2`, (**int)(addr(addr(2)))},
-		{Name(""), (**int)(addr(addr(1))), `2`, (**int)(addr(addr(2)))},
-		{Name(""), (***int)(nil), `2`, float64(2)},
-		{Name(""), (***int)(addr[**int](nil)), `2`, (***int)(addr(addr(addr(2))))},
-		{Name(""), (***int)(addr(addr[*int](nil))), `2`, (***int)(addr(addr(addr(2))))},
-		{Name(""), (***int)(addr(addr(addr(1)))), `2`, (***int)(addr(addr(addr(2))))},
-
-		{Name(""), any(nil), `{}`, map[string]any{}},
-		{Name(""), (int)(1), `{}`, map[string]any{}},
-		{Name(""), (*int)(nil), `{}`, map[string]any{}},
-		{Name(""), (*int)(addr(0)), `{}`, errUnmarshal},
-		{Name(""), (*int)(addr(1)), `{}`, errUnmarshal},
-		{Name(""), (**int)(nil), `{}`, map[string]any{}},
-		{Name(""), (**int)(addr[*int](nil)), `{}`, errUnmarshal},
-		{Name(""), (**int)(addr(addr(1))), `{}`, errUnmarshal},
-		{Name(""), (***int)(nil), `{}`, map[string]any{}},
-		{Name(""), (***int)(addr[**int](nil)), `{}`, errUnmarshal},
-		{Name(""), (***int)(addr(addr[*int](nil))), `{}`, errUnmarshal},
-		{Name(""), (***int)(addr(addr(addr(1)))), `{}`, errUnmarshal},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			b := struct{ X any }{tt.pre}
-			blob := `{"X":` + tt.json + `}`
-			if err := Unmarshal([]byte(blob), &b); err != nil {
-				if wantErr, _ := tt.post.(error); equalError(err, wantErr) {
-					return
-				}
-				t.Fatalf("%s: Unmarshal(%#q) error: %v", tt.Where, blob, err)
-			}
-			if !reflect.DeepEqual(b.X, tt.post) {
-				t.Errorf("%s: Unmarshal(%#q):\n\tpre.X:  %#v\n\tgot.X:  %#v\n\twant.X: %#v", tt.Where, blob, tt.pre, b.X, tt.post)
-			}
-		})
-	}
-}
-
-type NullTest struct {
-	Bool      bool
-	Int       int
-	Int8      int8
-	Int16     int16
-	Int32     int32
-	Int64     int64
-	Uint      uint
-	Uint8     uint8
-	Uint16    uint16
-	Uint32    uint32
-	Uint64    uint64
-	Float32   float32
-	Float64   float64
-	String    string
-	PBool     *bool
-	Map       map[string]string
-	Slice     []string
-	Interface any
-
-	PRaw    *RawMessage
-	PTime   *time.Time
-	PBigInt *big.Int
-	PText   *MustNotUnmarshalText
-	PBuffer *bytes.Buffer // has methods, just not relevant ones
-	PStruct *struct{}
-
-	Raw    RawMessage
-	Time   time.Time
-	BigInt big.Int
-	Text   MustNotUnmarshalText
-	Buffer bytes.Buffer
-	Struct struct{}
-}
-
-// JSON null values should be ignored for primitives and string values instead of resulting in an error.
-// Issue 2540
-func TestUnmarshalNulls(t *testing.T) {
-	// Unmarshal docs:
-	// The JSON null value unmarshals into an interface, map, pointer, or slice
-	// by setting that Go value to nil. Because null is often used in JSON to mean
-	// ``not present,'' unmarshaling a JSON null into any other Go type has no effect
-	// on the value and produces no error.
-
-	jsonData := []byte(`{
-				"Bool"    : null,
-				"Int"     : null,
-				"Int8"    : null,
-				"Int16"   : null,
-				"Int32"   : null,
-				"Int64"   : null,
-				"Uint"    : null,
-				"Uint8"   : null,
-				"Uint16"  : null,
-				"Uint32"  : null,
-				"Uint64"  : null,
-				"Float32" : null,
-				"Float64" : null,
-				"String"  : null,
-				"PBool": null,
-				"Map": null,
-				"Slice": null,
-				"Interface": null,
-				"PRaw": null,
-				"PTime": null,
-				"PBigInt": null,
-				"PText": null,
-				"PBuffer": null,
-				"PStruct": null,
-				"Raw": null,
-				"Time": null,
-				"BigInt": null,
-				"Text": null,
-				"Buffer": null,
-				"Struct": null
-			}`)
-	nulls := NullTest{
-		Bool:      true,
-		Int:       2,
-		Int8:      3,
-		Int16:     4,
-		Int32:     5,
-		Int64:     6,
-		Uint:      7,
-		Uint8:     8,
-		Uint16:    9,
-		Uint32:    10,
-		Uint64:    11,
-		Float32:   12.1,
-		Float64:   13.1,
-		String:    "14",
-		PBool:     new(bool),
-		Map:       map[string]string{},
-		Slice:     []string{},
-		Interface: new(MustNotUnmarshalJSON),
-		PRaw:      new(RawMessage),
-		PTime:     new(time.Time),
-		PBigInt:   new(big.Int),
-		PText:     new(MustNotUnmarshalText),
-		PStruct:   new(struct{}),
-		PBuffer:   new(bytes.Buffer),
-		Raw:       RawMessage("123"),
-		Time:      time.Unix(123456789, 0),
-		BigInt:    *big.NewInt(123),
-	}
-
-	before := nulls.Time.String()
-
-	err := Unmarshal(jsonData, &nulls)
-	if err != nil {
-		t.Errorf("Unmarshal of null values failed: %v", err)
-	}
-	if !nulls.Bool || nulls.Int != 2 || nulls.Int8 != 3 || nulls.Int16 != 4 || nulls.Int32 != 5 || nulls.Int64 != 6 ||
-		nulls.Uint != 7 || nulls.Uint8 != 8 || nulls.Uint16 != 9 || nulls.Uint32 != 10 || nulls.Uint64 != 11 ||
-		nulls.Float32 != 12.1 || nulls.Float64 != 13.1 || nulls.String != "14" {
-		t.Errorf("Unmarshal of null values affected primitives")
-	}
-
-	if nulls.PBool != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PBool")
-	}
-	if nulls.Map != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.Map")
-	}
-	if nulls.Slice != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.Slice")
-	}
-	if nulls.Interface != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.Interface")
-	}
-	if nulls.PRaw != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PRaw")
-	}
-	if nulls.PTime != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PTime")
-	}
-	if nulls.PBigInt != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PBigInt")
-	}
-	if nulls.PText != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PText")
-	}
-	if nulls.PBuffer != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PBuffer")
-	}
-	if nulls.PStruct != nil {
-		t.Errorf("Unmarshal of null did not clear nulls.PStruct")
-	}
-
-	if string(nulls.Raw) != "null" {
-		t.Errorf("Unmarshal of RawMessage null did not record null: %v", string(nulls.Raw))
-	}
-	if nulls.Time.String() != before {
-		t.Errorf("Unmarshal of time.Time null set time to %v", nulls.Time.String())
-	}
-	if nulls.BigInt.String() != "123" {
-		t.Errorf("Unmarshal of big.Int null set int to %v", nulls.BigInt.String())
-	}
-}
-
-type MustNotUnmarshalJSON struct{}
-
-func (x MustNotUnmarshalJSON) UnmarshalJSON(data []byte) error {
-	return errors.New("MustNotUnmarshalJSON was used")
-}
-
-type MustNotUnmarshalText struct{}
-
-func (x MustNotUnmarshalText) UnmarshalText(text []byte) error {
-	return errors.New("MustNotUnmarshalText was used")
-}
-
-func TestStringKind(t *testing.T) {
-	type stringKind string
-	want := map[stringKind]int{"foo": 42}
-	data, err := Marshal(want)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var got map[stringKind]int
-	err = Unmarshal(data, &got)
-	if err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if !maps.Equal(got, want) {
-		t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot:  %v\n\twant: %v", got, want)
-	}
-}
-
-// Custom types with []byte as underlying type could not be marshaled
-// and then unmarshaled.
-// Issue 8962.
-func TestByteKind(t *testing.T) {
-	type byteKind []byte
-	want := byteKind("hello")
-	data, err := Marshal(want)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var got byteKind
-	err = Unmarshal(data, &got)
-	if err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if !slices.Equal(got, want) {
-		t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot:  %v\n\twant: %v", got, want)
-	}
-}
-
-// The fix for issue 8962 introduced a regression.
-// Issue 12921.
-func TestSliceOfCustomByte(t *testing.T) {
-	type Uint8 uint8
-	want := []Uint8("hello")
-	data, err := Marshal(want)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var got []Uint8
-	err = Unmarshal(data, &got)
-	if err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if !slices.Equal(got, want) {
-		t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot:  %v\n\twant: %v", got, want)
-	}
-}
-
-func TestUnmarshalTypeError(t *testing.T) {
-	tests := []struct {
-		CaseName
-		dest any
-		in   string
-	}{
-		{Name(""), new(string), `{"user": "name"}`}, // issue 4628.
-		{Name(""), new(error), `{}`},                // issue 4222
-		{Name(""), new(error), `[]`},
-		{Name(""), new(error), `""`},
-		{Name(""), new(error), `123`},
-		{Name(""), new(error), `true`},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			err := Unmarshal([]byte(tt.in), tt.dest)
-			if _, ok := err.(*UnmarshalTypeError); !ok {
-				t.Errorf("%s: Unmarshal(%#q, %T):\n\tgot:  %T\n\twant: %T",
-					tt.Where, tt.in, tt.dest, err, new(UnmarshalTypeError))
-			}
-		})
-	}
-}
-
-func TestUnmarshalSyntax(t *testing.T) {
-	var x any
-	tests := []struct {
-		CaseName
-		in string
-	}{
-		{Name(""), "tru"},
-		{Name(""), "fals"},
-		{Name(""), "nul"},
-		{Name(""), "123e"},
-		{Name(""), `"hello`},
-		{Name(""), `[1,2,3`},
-		{Name(""), `{"key":1`},
-		{Name(""), `{"key":1,`},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			err := Unmarshal([]byte(tt.in), &x)
-			if _, ok := err.(*SyntaxError); !ok {
-				t.Errorf("%s: Unmarshal(%#q, any):\n\tgot:  %T\n\twant: %T",
-					tt.Where, tt.in, err, new(SyntaxError))
-			}
-		})
-	}
-}
-
-// Test handling of unexported fields that should be ignored.
-// Issue 4660
-type unexportedFields struct {
-	Name string
-	m    map[string]any `json:"-"`
-	m2   map[string]any `json:"abcd"`
-
-	s []int `json:"-"`
-}
-
-func TestUnmarshalUnexported(t *testing.T) {
-	input := `{"Name": "Bob", "m": {"x": 123}, "m2": {"y": 456}, "abcd": {"z": 789}, "s": [2, 3]}`
-	want := &unexportedFields{Name: "Bob"}
-
-	out := &unexportedFields{}
-	err := Unmarshal([]byte(input), out)
-	if err != nil {
-		t.Errorf("Unmarshal error: %v", err)
-	}
-	if !reflect.DeepEqual(out, want) {
-		t.Errorf("Unmarshal:\n\tgot:  %+v\n\twant: %+v", out, want)
-	}
-}
-
-// Time3339 is a time.Time which encodes to and from JSON
-// as an RFC 3339 time in UTC.
-type Time3339 time.Time
-
-func (t *Time3339) UnmarshalJSON(b []byte) error {
-	if len(b) < 2 || b[0] != '"' || b[len(b)-1] != '"' {
-		return fmt.Errorf("types: failed to unmarshal non-string value %q as an RFC 3339 time", b)
-	}
-	tm, err := time.Parse(time.RFC3339, string(b[1:len(b)-1]))
-	if err != nil {
-		return err
-	}
-	*t = Time3339(tm)
-	return nil
-}
-
-func TestUnmarshalJSONLiteralError(t *testing.T) {
-	var t3 Time3339
-	switch err := Unmarshal([]byte(`"0000-00-00T00:00:00Z"`), &t3); {
-	case err == nil:
-		t.Fatalf("Unmarshal error: got nil, want non-nil")
-	case !strings.Contains(err.Error(), "range"):
-		t.Errorf("Unmarshal error:\n\tgot:  %v\n\twant: out of range", err)
-	}
-}
-
-// Test that extra object elements in an array do not result in a
-// "data changing underfoot" error.
-// Issue 3717
-func TestSkipArrayObjects(t *testing.T) {
-	json := `[{}]`
-	var dest [0]any
-
-	err := Unmarshal([]byte(json), &dest)
-	if err != nil {
-		t.Errorf("Unmarshal error: %v", err)
-	}
-}
-
-// Test semantics of pre-filled data, such as struct fields, map elements,
-// slices, and arrays.
-// Issues 4900 and 8837, among others.
-func TestPrefilled(t *testing.T) {
-	// Values here change, cannot reuse table across runs.
-	tests := []struct {
-		CaseName
-		in  string
-		ptr any
-		out any
-	}{{
-		CaseName: Name(""),
-		in:       `{"X": 1, "Y": 2}`,
-		ptr:      &XYZ{X: float32(3), Y: int16(4), Z: 1.5},
-		out:      &XYZ{X: float64(1), Y: float64(2), Z: 1.5},
-	}, {
-		CaseName: Name(""),
-		in:       `{"X": 1, "Y": 2}`,
-		ptr:      &map[string]any{"X": float32(3), "Y": int16(4), "Z": 1.5},
-		out:      &map[string]any{"X": float64(1), "Y": float64(2), "Z": 1.5},
-	}, {
-		CaseName: Name(""),
-		in:       `[2]`,
-		ptr:      &[]int{1},
-		out:      &[]int{2},
-	}, {
-		CaseName: Name(""),
-		in:       `[2, 3]`,
-		ptr:      &[]int{1},
-		out:      &[]int{2, 3},
-	}, {
-		CaseName: Name(""),
-		in:       `[2, 3]`,
-		ptr:      &[...]int{1},
-		out:      &[...]int{2},
-	}, {
-		CaseName: Name(""),
-		in:       `[3]`,
-		ptr:      &[...]int{1, 2},
-		out:      &[...]int{3, 0},
-	}}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			ptrstr := fmt.Sprintf("%v", tt.ptr)
-			err := Unmarshal([]byte(tt.in), tt.ptr) // tt.ptr edited here
-			if err != nil {
-				t.Errorf("%s: Unmarshal error: %v", tt.Where, err)
-			}
-			if !reflect.DeepEqual(tt.ptr, tt.out) {
-				t.Errorf("%s: Unmarshal(%#q, %T):\n\tgot:  %v\n\twant: %v", tt.Where, tt.in, ptrstr, tt.ptr, tt.out)
-			}
-		})
-	}
-}
-
-func TestInvalidUnmarshal(t *testing.T) {
-	tests := []struct {
-		CaseName
-		in      string
-		v       any
-		wantErr error
-	}{
-		{Name(""), `{"a":"1"}`, nil, &InvalidUnmarshalError{}},
-		{Name(""), `{"a":"1"}`, struct{}{}, &InvalidUnmarshalError{reflect.TypeFor[struct{}]()}},
-		{Name(""), `{"a":"1"}`, (*int)(nil), &InvalidUnmarshalError{reflect.TypeFor[*int]()}},
-		{Name(""), `123`, nil, &InvalidUnmarshalError{}},
-		{Name(""), `123`, struct{}{}, &InvalidUnmarshalError{reflect.TypeFor[struct{}]()}},
-		{Name(""), `123`, (*int)(nil), &InvalidUnmarshalError{reflect.TypeFor[*int]()}},
-		{Name(""), `123`, new(net.IP), &UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[net.IP](), Offset: len64(``), Err: errors.New("JSON value must be string type")}},
-	}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			switch gotErr := Unmarshal([]byte(tt.in), tt.v); {
-			case gotErr == nil:
-				t.Fatalf("%s: Unmarshal error: got nil, want non-nil", tt.Where)
-			case !reflect.DeepEqual(gotErr, tt.wantErr):
-				t.Errorf("%s: Unmarshal error:\n\tgot:  %#v\n\twant: %#v", tt.Where, gotErr, tt.wantErr)
-			}
-		})
-	}
-}
-
-// Test that string option is ignored for invalid types.
-// Issue 9812.
-func TestInvalidStringOption(t *testing.T) {
-	num := 0
-	item := struct {
-		T time.Time         `json:",string"`
-		M map[string]string `json:",string"`
-		S []string          `json:",string"`
-		A [1]string         `json:",string"`
-		I any               `json:",string"`
-		P *int              `json:",string"`
-	}{M: make(map[string]string), S: make([]string, 0), I: num, P: &num}
-
-	data, err := Marshal(item)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-
-	err = Unmarshal(data, &item)
-	if err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-}
-
-// Test unmarshal behavior with regards to embedded unexported structs.
-//
-// (Issue 21357) If the embedded struct is a pointer and is unallocated,
-// this returns an error because unmarshal cannot set the field.
-//
-// (Issue 24152) If the embedded struct is given an explicit name,
-// ensure that the normal unmarshal logic does not panic in reflect.
-//
-// (Issue 28145) If the embedded struct is given an explicit name and has
-// exported methods, don't cause a panic trying to get its value.
-func TestUnmarshalEmbeddedUnexported(t *testing.T) {
-	type (
-		embed1 struct{ Q int }
-		embed2 struct{ Q int }
-		embed3 struct {
-			Q int64 `json:",string"`
-		}
-		S1 struct {
-			*embed1
-			R int
-		}
-		S2 struct {
-			*embed1
-			Q int
-		}
-		S3 struct {
-			embed1
-			R int
-		}
-		S4 struct {
-			*embed1
-			embed2
-		}
-		S5 struct {
-			*embed3
-			R int
-		}
-		S6 struct {
-			embed1 `json:"embed1"`
-		}
-		S7 struct {
-			embed1 `json:"embed1"`
-			embed2
-		}
-		S8 struct {
-			embed1 `json:"embed1"`
-			embed2 `json:"embed2"`
-			Q      int
-		}
-		S9 struct {
-			unexportedWithMethods `json:"embed"`
-		}
-	)
-
-	tests := []struct {
-		CaseName
-		in  string
-		ptr any
-		out any
-		err error
-	}{{
-		// Error since we cannot set S1.embed1, but still able to set S1.R.
-		CaseName: Name(""),
-		in:       `{"R":2,"Q":1}`,
-		ptr:      new(S1),
-		out:      &S1{R: 2},
-		err: &UnmarshalTypeError{
-			Type:   reflect.TypeFor[S1](),
-			Offset: len64(`{"R":2,"Q":`),
-			Struct: "S1",
-			Field:  "Q",
-			Err:    errors.New("cannot set embedded pointer to unexported struct type"),
-		},
-	}, {
-		// The top level Q field takes precedence.
-		CaseName: Name(""),
-		in:       `{"Q":1}`,
-		ptr:      new(S2),
-		out:      &S2{Q: 1},
-	}, {
-		// No issue with non-pointer variant.
-		CaseName: Name(""),
-		in:       `{"R":2,"Q":1}`,
-		ptr:      new(S3),
-		out:      &S3{embed1: embed1{Q: 1}, R: 2},
-	}, {
-		// No error since both embedded structs have field R, which annihilate each other.
-		// Thus, no attempt is made at setting S4.embed1.
-		CaseName: Name(""),
-		in:       `{"R":2}`,
-		ptr:      new(S4),
-		out:      new(S4),
-	}, {
-		// Error since we cannot set S5.embed1, but still able to set S5.R.
-		CaseName: Name(""),
-		in:       `{"R":2,"Q":1}`,
-		ptr:      new(S5),
-		out:      &S5{R: 2},
-		err: &UnmarshalTypeError{
-			Type:   reflect.TypeFor[S5](),
-			Offset: len64(`{"R":2,"Q":`),
-			Struct: "S5",
-			Field:  "Q",
-			Err:    errors.New("cannot set embedded pointer to unexported struct type"),
-		},
-	}, {
-		// Issue 24152, ensure decodeState.indirect does not panic.
-		CaseName: Name(""),
-		in:       `{"embed1": {"Q": 1}}`,
-		ptr:      new(S6),
-		out:      &S6{embed1{1}},
-	}, {
-		// Issue 24153, check that we can still set forwarded fields even in
-		// the presence of a name conflict.
-		//
-		// This relies on obscure behavior of reflect where it is possible
-		// to set a forwarded exported field on an unexported embedded struct
-		// even though there is a name conflict, even when it would have been
-		// impossible to do so according to Go visibility rules.
-		// Go forbids this because it is ambiguous whether S7.Q refers to
-		// S7.embed1.Q or S7.embed2.Q. Since embed1 and embed2 are unexported,
-		// it should be impossible for an external package to set either Q.
-		//
-		// It is probably okay for a future reflect change to break this.
-		CaseName: Name(""),
-		in:       `{"embed1": {"Q": 1}, "Q": 2}`,
-		ptr:      new(S7),
-		out:      &S7{embed1{1}, embed2{2}},
-	}, {
-		// Issue 24153, similar to the S7 case.
-		CaseName: Name(""),
-		in:       `{"embed1": {"Q": 1}, "embed2": {"Q": 2}, "Q": 3}`,
-		ptr:      new(S8),
-		out:      &S8{embed1{1}, embed2{2}, 3},
-	}, {
-		// Issue 228145, similar to the cases above.
-		CaseName: Name(""),
-		in:       `{"embed": {}}`,
-		ptr:      new(S9),
-		out:      &S9{},
-	}}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			err := Unmarshal([]byte(tt.in), tt.ptr)
-			if !equalError(err, tt.err) {
-				t.Errorf("%s: Unmarshal error:\n\tgot:  %v\n\twant: %v", tt.Where, err, tt.err)
-			}
-			if !reflect.DeepEqual(tt.ptr, tt.out) {
-				t.Errorf("%s: Unmarshal:\n\tgot:  %#+v\n\twant: %#+v", tt.Where, tt.ptr, tt.out)
-			}
-		})
-	}
-}
-
-func TestUnmarshalErrorAfterMultipleJSON(t *testing.T) {
-	tests := []struct {
-		CaseName
-		in  string
-		err error
-	}{{
-		CaseName: Name(""),
-		in:       `1 false null :`,
-		err:      &SyntaxError{"invalid character ':' looking for beginning of value", len64(`1 false null `)},
-	}, {
-		CaseName: Name(""),
-		in:       `1 [] [,]`,
-		err:      &SyntaxError{"invalid character ',' looking for beginning of value", len64(`1 [] [`)},
-	}, {
-		CaseName: Name(""),
-		in:       `1 [] [true:]`,
-		err:      &SyntaxError{"invalid character ':' after array element", len64(`1 [] [true`)},
-	}, {
-		CaseName: Name(""),
-		in:       `1  {}    {"x"=}`,
-		err:      &SyntaxError{"invalid character '=' after object key", len64(`1  {}    {"x"`)},
-	}, {
-		CaseName: Name(""),
-		in:       `falsetruenul#`,
-		err:      &SyntaxError{"invalid character '#' in literal null (expecting 'l')", len64(`falsetruenul`)},
-	}}
-	for _, tt := range tests {
-		t.Run(tt.Name, func(t *testing.T) {
-			dec := NewDecoder(strings.NewReader(tt.in))
-			var err error
-			for err == nil {
-				var v any
-				err = dec.Decode(&v)
-			}
-			if !reflect.DeepEqual(err, tt.err) {
-				t.Errorf("%s: Decode error:\n\tgot:  %v\n\twant: %v", tt.Where, err, tt.err)
-			}
-		})
-	}
-}
-
-type unmarshalPanic struct{}
-
-func (unmarshalPanic) UnmarshalJSON([]byte) error { panic(0xdead) }
-
-func TestUnmarshalPanic(t *testing.T) {
-	defer func() {
-		if got := recover(); !reflect.DeepEqual(got, 0xdead) {
-			t.Errorf("panic() = (%T)(%v), want 0xdead", got, got)
-		}
-	}()
-	Unmarshal([]byte("{}"), &unmarshalPanic{})
-	t.Fatalf("Unmarshal should have panicked")
-}
-
-type textUnmarshalerString string
-
-func (m *textUnmarshalerString) UnmarshalText(text []byte) error {
-	*m = textUnmarshalerString(strings.ToLower(string(text)))
-	return nil
-}
-
-// Test unmarshal to a map, where the map key is a user defined type.
-// See golang.org/issues/34437.
-func TestUnmarshalMapWithTextUnmarshalerStringKey(t *testing.T) {
-	var p map[textUnmarshalerString]string
-	if err := Unmarshal([]byte(`{"FOO": "1"}`), &p); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-
-	if _, ok := p["foo"]; !ok {
-		t.Errorf(`key "foo" missing in map: %v`, p)
-	}
-}
-
-func TestUnmarshalRescanLiteralMangledUnquote(t *testing.T) {
-	// See golang.org/issues/38105.
-	var p map[textUnmarshalerString]string
-	if err := Unmarshal([]byte(`{"开源":"12345开源"}`), &p); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if _, ok := p["开源"]; !ok {
-		t.Errorf(`key "开源" missing in map: %v`, p)
-	}
-
-	// See golang.org/issues/38126.
-	type T struct {
-		F1 string `json:"F1,string"`
-	}
-	wantT := T{"aaa\tbbb"}
-
-	b, err := Marshal(wantT)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var gotT T
-	if err := Unmarshal(b, &gotT); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	if gotT != wantT {
-		t.Errorf("Marshal/Unmarshal roundtrip:\n\tgot:  %q\n\twant: %q", gotT, wantT)
-	}
-
-	// See golang.org/issues/39555.
-	input := map[textUnmarshalerString]string{"FOO": "", `"`: ""}
-
-	encoded, err := Marshal(input)
-	if err != nil {
-		t.Fatalf("Marshal error: %v", err)
-	}
-	var got map[textUnmarshalerString]string
-	if err := Unmarshal(encoded, &got); err != nil {
-		t.Fatalf("Unmarshal error: %v", err)
-	}
-	want := map[textUnmarshalerString]string{"foo": "", `"`: ""}
-	if !maps.Equal(got, want) {
-		t.Errorf("Marshal/Unmarshal roundtrip:\n\tgot:  %q\n\twant: %q", gotT, wantT)
-	}
-}
-
-func TestUnmarshalMaxDepth(t *testing.T) {
-	tests := []struct {
-		CaseName
-		data        string
-		errMaxDepth bool
-	}{{
-		CaseName:    Name("ArrayUnderMaxNestingDepth"),
-		data:        `{"a":` + strings.Repeat(`[`, 10000-1) + strings.Repeat(`]`, 10000-1) + `}`,
-		errMaxDepth: false,
-	}, {
-		CaseName:    Name("ArrayOverMaxNestingDepth"),
-		data:        `{"a":` + strings.Repeat(`[`, 10000) + strings.Repeat(`]`, 10000) + `}`,
-		errMaxDepth: true,
-	}, {
-		CaseName:    Name("ArrayOverStackDepth"),
-		data:        `{"a":` + strings.Repeat(`[`, 3000000) + strings.Repeat(`]`, 3000000) + `}`,
-		errMaxDepth: true,
-	}, {
-		CaseName:    Name("ObjectUnderMaxNestingDepth"),
-		data:        `{"a":` + strings.Repeat(`{"a":`, 10000-1) + `0` + strings.Repeat(`}`, 10000-1) + `}`,
-		errMaxDepth: false,
-	}, {
-		CaseName:    Name("ObjectOverMaxNestingDepth"),
-		data:        `{"a":` + strings.Repeat(`{"a":`, 10000) + `0` + strings.Repeat(`}`, 10000) + `}`,
-		errMaxDepth: true,
-	}, {
-		CaseName:    Name("ObjectOverStackDepth"),
-		data:        `{"a":` + strings.Repeat(`{"a":`, 3000000) + `0` + strings.Repeat(`}`, 3000000) + `}`,
-		errMaxDepth: true,
-	}}
-
-	targets := []struct {
-		CaseName
-		newValue func() any
-	}{{
-		CaseName: Name("unstructured"),
-		newValue: func() any {
-			var v any
-			return &v
-		},
-	}, {
-		CaseName: Name("typed named field"),
-		newValue: func() any {
-			v := struct {
-				A any `json:"a"`
-			}{}
-			return &v
-		},
-	}, {
-		CaseName: Name("typed missing field"),
-		newValue: func() any {
-			v := struct {
-				B any `json:"b"`
-			}{}
-			return &v
-		},
-	}, {
-		CaseName: Name("custom unmarshaler"),
-		newValue: func() any {
-			v := unmarshaler{}
-			return &v
-		},
-	}}
-
-	for _, tt := range tests {
-		for _, target := range targets {
-			t.Run(target.Name+"-"+tt.Name, func(t *testing.T) {
-				err := Unmarshal([]byte(tt.data), target.newValue())
-				if !tt.errMaxDepth {
-					if err != nil {
-						t.Errorf("%s: %s: Unmarshal error: %v", tt.Where, target.Where, err)
-					}
-				} else {
-					if err == nil || !strings.Contains(err.Error(), "exceeded max depth") {
-						t.Errorf("%s: %s: Unmarshal error:\n\tgot:  %v\n\twant: exceeded max depth", tt.Where, target.Where, err)
-					}
-				}
-			})
-		}
-	}
-}
diff --git a/src/encoding/json/v2_diff_test.go b/src/encoding/json/v2_diff_test.go
deleted file mode 100644
index 871be497767b63..00000000000000
--- a/src/encoding/json/v2_diff_test.go
+++ /dev/null
@@ -1,1129 +0,0 @@
-// Copyright 2020 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.
-
-//go:build goexperiment.jsonv2
-
-package json_test
-
-import (
-	"errors"
-	"path"
-	"reflect"
-	"strings"
-	"testing"
-	"time"
-
-	jsonv1 "encoding/json"
-	"encoding/json/jsontext"
-	jsonv2 "encoding/json/v2"
-)
-
-// NOTE: This file serves as a list of semantic differences between v1 and v2.
-// Each test explains how v1 behaves, how v2 behaves, and
-// a rationale for why the behavior was changed.
-
-var jsonPackages = []struct {
-	Version   string
-	Marshal   func(any) ([]byte, error)
-	Unmarshal func([]byte, any) error
-}{
-	{"v1", jsonv1.Marshal, jsonv1.Unmarshal},
-	{"v2",
-		func(in any) ([]byte, error) { return jsonv2.Marshal(in) },
-		func(in []byte, out any) error { return jsonv2.Unmarshal(in, out) }},
-}
-
-// In v1, unmarshal matches struct fields using a case-insensitive match.
-// In v2, unmarshal matches struct fields using a case-sensitive match.
-//
-// Case-insensitive matching is a surprising default and
-// incurs significant performance cost when unmarshaling unknown fields.
-// In v2, we can opt into v1-like behavior with the `case:ignore` tag option.
-// The case-insensitive matching performed by v2 is looser than that of v1
-// where it also ignores dashes and underscores.
-// This allows v2 to match fields regardless of whether the name is in
-// snake_case, camelCase, or kebab-case.
-//
-// Related issue:
-//
-//	https://go.dev/issue/14750
-func TestCaseSensitivity(t *testing.T) {
-	type Fields struct {
-		FieldA bool
-		FieldB bool `json:"fooBar"`
-		FieldC bool `json:"fizzBuzz,case:ignore"` // `case:ignore` is used by v2 to explicitly enable case-insensitive matching
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			// This is a mapping from Go field names to JSON member names to
-			// whether the JSON member name would match the Go field name.
-			type goName = string
-			type jsonName = string
-			onlyV1 := json.Version == "v1"
-			onlyV2 := json.Version == "v2"
-			allMatches := map[goName]map[jsonName]bool{
-				"FieldA": {
-					"FieldA": true,   // exact match
-					"fielda": onlyV1, // v1 is case-insensitive by default
-					"fieldA": onlyV1, // v1 is case-insensitive by default
-					"FIELDA": onlyV1, // v1 is case-insensitive by default
-					"FieldB": false,
-					"FieldC": false,
-				},
-				"FieldB": {
-					"fooBar":   true,   // exact match for explicitly specified JSON name
-					"FooBar":   onlyV1, // v1 is case-insensitive even if an explicit JSON name is provided
-					"foobar":   onlyV1, // v1 is case-insensitive even if an explicit JSON name is provided
-					"FOOBAR":   onlyV1, // v1 is case-insensitive even if an explicit JSON name is provided
-					"fizzBuzz": false,
-					"FieldA":   false,
-					"FieldB":   false, // explicit JSON name means that the Go field name is not used for matching
-					"FieldC":   false,
-				},
-				"FieldC": {
-					"fizzBuzz":  true,   // exact match for explicitly specified JSON name
-					"fizzbuzz":  true,   // v2 is case-insensitive due to `case:ignore` tag
-					"FIZZBUZZ":  true,   // v2 is case-insensitive due to `case:ignore` tag
-					"fizz_buzz": onlyV2, // case-insensitivity in v2 ignores dashes and underscores
-					"fizz-buzz": onlyV2, // case-insensitivity in v2 ignores dashes and underscores
-					"fooBar":    false,
-					"FieldA":    false,
-					"FieldC":    false, // explicit JSON name means that the Go field name is not used for matching
-					"FieldB":    false,
-				},
-			}
-
-			for goFieldName, matches := range allMatches {
-				for jsonMemberName, wantMatch := range matches {
-					in := `{"` + jsonMemberName + `":true}`
-					var s Fields
-					if err := json.Unmarshal([]byte(in), &s); err != nil {
-						t.Fatalf("json.Unmarshal error: %v", err)
-					}
-					gotMatch := reflect.ValueOf(s).FieldByName(goFieldName).Bool()
-					if gotMatch != wantMatch {
-						t.Fatalf("%T.%s = %v, want %v", s, goFieldName, gotMatch, wantMatch)
-					}
-				}
-			}
-		})
-	}
-}
-
-// In v1, the "omitempty" option specifies that a struct field is omitted
-// when marshaling if it is an empty Go value, which is defined as
-// false, 0, a nil pointer, a nil interface value, and
-// any empty array, slice, map, or string.
-//
-// In v2, the "omitempty" option specifies that a struct field is omitted
-// when marshaling if it is an empty JSON value, which is defined as
-// a JSON null or empty JSON string, object, or array.
-//
-// In v2, we also provide the "omitzero" option which specifies that a field
-// is omitted if it is the zero Go value or if it implements an "IsZero() bool"
-// method that reports true. Together, "omitzero" and "omitempty" can cover
-// all the prior use cases of the v1 definition of "omitempty".
-// Note that "omitempty" is defined in terms of the Go type system in v1,
-// but now defined in terms of the JSON type system in v2.
-//
-// Related issues:
-//
-//	https://go.dev/issue/11939
-//	https://go.dev/issue/22480
-//	https://go.dev/issue/29310
-//	https://go.dev/issue/32675
-//	https://go.dev/issue/45669
-//	https://go.dev/issue/45787
-//	https://go.dev/issue/50480
-//	https://go.dev/issue/52803
-func TestOmitEmptyOption(t *testing.T) {
-	type Struct struct {
-		Foo string  `json:",omitempty"`
-		Bar []int   `json:",omitempty"`
-		Baz *Struct `json:",omitempty"`
-	}
-	type Types struct {
-		Bool       bool              `json:",omitempty"`
-		StringA    string            `json:",omitempty"`
-		StringB    string            `json:",omitempty"`
-		BytesA     []byte            `json:",omitempty"`
-		BytesB     []byte            `json:",omitempty"`
-		BytesC     []byte            `json:",omitempty"`
-		Int        int               `json:",omitempty"`
-		MapA       map[string]string `json:",omitempty"`
-		MapB       map[string]string `json:",omitempty"`
-		MapC       map[string]string `json:",omitempty"`
-		StructA    Struct            `json:",omitempty"`
-		StructB    Struct            `json:",omitempty"`
-		StructC    Struct            `json:",omitempty"`
-		SliceA     []string          `json:",omitempty"`
-		SliceB     []string          `json:",omitempty"`
-		SliceC     []string          `json:",omitempty"`
-		Array      [1]string         `json:",omitempty"`
-		PointerA   *string           `json:",omitempty"`
-		PointerB   *string           `json:",omitempty"`
-		PointerC   *string           `json:",omitempty"`
-		InterfaceA any               `json:",omitempty"`
-		InterfaceB any               `json:",omitempty"`
-		InterfaceC any               `json:",omitempty"`
-		InterfaceD any               `json:",omitempty"`
-	}
-
-	something := "something"
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			in := Types{
-				Bool:       false,
-				StringA:    "",
-				StringB:    something,
-				BytesA:     nil,
-				BytesB:     []byte{},
-				BytesC:     []byte(something),
-				Int:        0,
-				MapA:       nil,
-				MapB:       map[string]string{},
-				MapC:       map[string]string{something: something},
-				StructA:    Struct{},
-				StructB:    Struct{Bar: []int{}, Baz: new(Struct)},
-				StructC:    Struct{Foo: something},
-				SliceA:     nil,
-				SliceB:     []string{},
-				SliceC:     []string{something},
-				Array:      [1]string{something},
-				PointerA:   nil,
-				PointerB:   new(string),
-				PointerC:   &something,
-				InterfaceA: nil,
-				InterfaceB: (*string)(nil),
-				InterfaceC: new(string),
-				InterfaceD: &something,
-			}
-			b, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			var out map[string]any
-			if err := json.Unmarshal(b, &out); err != nil {
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-
-			onlyV1 := json.Version == "v1"
-			onlyV2 := json.Version == "v2"
-			wantPresent := map[string]bool{
-				"Bool":       onlyV2, // false is an empty Go bool, but is NOT an empty JSON value
-				"StringA":    false,
-				"StringB":    true,
-				"BytesA":     false,
-				"BytesB":     false,
-				"BytesC":     true,
-				"Int":        onlyV2, // 0 is an empty Go integer, but NOT an empty JSON value
-				"MapA":       false,
-				"MapB":       false,
-				"MapC":       true,
-				"StructA":    onlyV1, // Struct{} is NOT an empty Go value, but {} is an empty JSON value
-				"StructB":    onlyV1, // Struct{...} is NOT an empty Go value, but {} is an empty JSON value
-				"StructC":    true,
-				"SliceA":     false,
-				"SliceB":     false,
-				"SliceC":     true,
-				"Array":      true,
-				"PointerA":   false,
-				"PointerB":   onlyV1, // new(string) is NOT a nil Go pointer, but "" is an empty JSON value
-				"PointerC":   true,
-				"InterfaceA": false,
-				"InterfaceB": onlyV1, // (*string)(nil) is NOT a nil Go interface, but null is an empty JSON value
-				"InterfaceC": onlyV1, // new(string) is NOT a nil Go interface, but "" is an empty JSON value
-				"InterfaceD": true,
-			}
-			for field, want := range wantPresent {
-				_, got := out[field]
-				if got != want {
-					t.Fatalf("%T.%s = %v, want %v", in, field, got, want)
-				}
-			}
-		})
-	}
-}
-
-func addr[T any](v T) *T {
-	return &v
-}
-
-// In v1, the "string" option specifies that Go strings, bools, and numeric
-// values are encoded within a JSON string when marshaling and
-// are unmarshaled from its native representation escaped within a JSON string.
-// The "string" option is not applied recursively, and so does not affect
-// strings, bools, and numeric values within a Go slice or map, but
-// does have special handling to affect the underlying value within a pointer.
-// When unmarshaling, the "string" option permits decoding from a JSON null
-// escaped within a JSON string in some inconsistent cases.
-//
-// In v2, the "string" option specifies that only numeric values are encoded as
-// a JSON number within a JSON string when marshaling and are unmarshaled
-// from either a JSON number or a JSON string containing a JSON number.
-// The "string" option is applied recursively to all numeric sub-values,
-// and thus affects numeric values within a Go slice or map.
-// There is no support for escaped JSON nulls within a JSON string.
-//
-// The main utility for stringifying JSON numbers is because JSON parsers
-// often represents numbers as IEEE 754 floating-point numbers.
-// This results in a loss of precision representing 64-bit integer values.
-// Consequently, many JSON-based APIs actually requires that such values
-// be encoded within a JSON string. Since the main utility of stringification
-// is for numeric values, v2 limits the effect of the "string" option
-// to just numeric Go types. According to all code known by the Go module proxy,
-// there are close to zero usages of the "string" option on a Go string or bool.
-//
-// Regarding the recursive application of the "string" option,
-// there have been a number of issues filed about users being surprised that
-// the "string" option does not recursively affect numeric values
-// within a composite type like a Go map, slice, or interface value.
-// In v1, specifying the "string" option on composite type has no effect
-// and so this would be a largely backwards compatible change.
-//
-// The ability to decode from a JSON null wrapped within a JSON string
-// is removed in v2 because this behavior was surprising and inconsistent in v1.
-//
-// Related issues:
-//
-//	https://go.dev/issue/15624
-//	https://go.dev/issue/20651
-//	https://go.dev/issue/22177
-//	https://go.dev/issue/32055
-//	https://go.dev/issue/32117
-//	https://go.dev/issue/50997
-func TestStringOption(t *testing.T) {
-	type Types struct {
-		String     string              `json:",string"`
-		Bool       bool                `json:",string"`
-		Int        int                 `json:",string"`
-		Float      float64             `json:",string"`
-		Map        map[string]int      `json:",string"`
-		Struct     struct{ Field int } `json:",string"`
-		Slice      []int               `json:",string"`
-		Array      [1]int              `json:",string"`
-		PointerA   *int                `json:",string"`
-		PointerB   *int                `json:",string"`
-		PointerC   **int               `json:",string"`
-		InterfaceA any                 `json:",string"`
-		InterfaceB any                 `json:",string"`
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			in := Types{
-				String:     "string",
-				Bool:       true,
-				Int:        1,
-				Float:      1,
-				Map:        map[string]int{"Name": 1},
-				Struct:     struct{ Field int }{1},
-				Slice:      []int{1},
-				Array:      [1]int{1},
-				PointerA:   nil,
-				PointerB:   addr(1),
-				PointerC:   addr(addr(1)),
-				InterfaceA: nil,
-				InterfaceB: 1,
-			}
-			quote := func(s string) string {
-				b, _ := jsontext.AppendQuote(nil, s)
-				return string(b)
-			}
-			quoteOnlyV1 := func(s string) string {
-				if json.Version == "v1" {
-					s = quote(s)
-				}
-				return s
-			}
-			quoteOnlyV2 := func(s string) string {
-				if json.Version == "v2" {
-					s = quote(s)
-				}
-				return s
-			}
-			want := strings.Join([]string{
-				`{`,
-				`"String":` + quoteOnlyV1(`"string"`) + `,`, // in v1, Go strings are also stringified
-				`"Bool":` + quoteOnlyV1("true") + `,`,       // in v1, Go bools are also stringified
-				`"Int":` + quote("1") + `,`,
-				`"Float":` + quote("1") + `,`,
-				`"Map":{"Name":` + quoteOnlyV2("1") + `},`,     // in v2, numbers are recursively stringified
-				`"Struct":{"Field":` + quoteOnlyV2("1") + `},`, // in v2, numbers are recursively stringified
-				`"Slice":[` + quoteOnlyV2("1") + `],`,          // in v2, numbers are recursively stringified
-				`"Array":[` + quoteOnlyV2("1") + `],`,          // in v2, numbers are recursively stringified
-				`"PointerA":null,`,
-				`"PointerB":` + quote("1") + `,`,       // in v1, numbers are stringified after a single pointer indirection
-				`"PointerC":` + quoteOnlyV2("1") + `,`, // in v2, numbers are recursively stringified
-				`"InterfaceA":null,`,
-				`"InterfaceB":` + quoteOnlyV2("1") + ``, // in v2, numbers are recursively stringified
-				`}`}, "")
-			got, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			if string(got) != want {
-				t.Fatalf("json.Marshal = %s, want %s", got, want)
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal/Null", json.Version), func(t *testing.T) {
-			var got Types
-			err := json.Unmarshal([]byte(`{
-				"Bool":     "null",
-				"Int":      "null",
-				"PointerA": "null"
-			}`), &got)
-			switch {
-			case !reflect.DeepEqual(got, Types{}):
-				t.Fatalf("json.Unmarshal = %v, want %v", got, Types{})
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-
-		t.Run(path.Join("Unmarshal/Bool", json.Version), func(t *testing.T) {
-			var got Types
-			want := map[string]Types{
-				"v1": {Bool: true},
-				"v2": {Bool: false},
-			}[json.Version]
-			err := json.Unmarshal([]byte(`{"Bool": "true"}`), &got)
-			switch {
-			case !reflect.DeepEqual(got, want):
-				t.Fatalf("json.Unmarshal = %v, want %v", got, want)
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-
-		t.Run(path.Join("Unmarshal/Shallow", json.Version), func(t *testing.T) {
-			var got Types
-			want := Types{Int: 1, PointerB: addr(1)}
-			err := json.Unmarshal([]byte(`{
-				"Int":      "1",
-				"PointerB": "1"
-			}`), &got)
-			switch {
-			case !reflect.DeepEqual(got, want):
-				t.Fatalf("json.Unmarshal = %v, want %v", got, want)
-			case err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-		})
-
-		t.Run(path.Join("Unmarshal/Deep", json.Version), func(t *testing.T) {
-			var got Types
-			want := map[string]Types{
-				"v1": {
-					Map:      map[string]int{"Name": 0},
-					Slice:    []int{0},
-					PointerC: addr(addr(0)),
-				},
-				"v2": {
-					Map:      map[string]int{"Name": 1},
-					Struct:   struct{ Field int }{1},
-					Slice:    []int{1},
-					Array:    [1]int{1},
-					PointerC: addr(addr(1)),
-				},
-			}[json.Version]
-			err := json.Unmarshal([]byte(`{
-				"Map":      {"Name":"1"},
-				"Struct":   {"Field":"1"},
-				"Slice":    ["1"],
-				"Array":    ["1"],
-				"PointerC": "1"
-			}`), &got)
-			switch {
-			case !reflect.DeepEqual(got, want):
-				t.Fatalf("json.Unmarshal =\n%v, want\n%v", got, want)
-			case json.Version == "v1" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			case json.Version == "v2" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-		})
-	}
-}
-
-// In v1, nil slices and maps are marshaled as a JSON null.
-// In v2, nil slices and maps are marshaled as an empty JSON object or array.
-//
-// Users of v2 can opt into the v1 behavior by setting
-// the "format:emitnull" option in the `json` struct field tag:
-//
-//	struct {
-//		S []string          `json:",format:emitnull"`
-//		M map[string]string `json:",format:emitnull"`
-//	}
-//
-// JSON is a language-agnostic data interchange format.
-// The fact that maps and slices are nil-able in Go is a semantic detail of the
-// Go language. We should avoid leaking such details to the JSON representation.
-// When JSON implementations leak language-specific details,
-// it complicates transition to/from languages with different type systems.
-//
-// Furthermore, consider two related Go types: string and []byte.
-// It's an asymmetric oddity of v1 that zero values of string and []byte marshal
-// as an empty JSON string for the former, while the latter as a JSON null.
-// The non-zero values of those types always marshal as JSON strings.
-//
-// Related issues:
-//
-//	https://go.dev/issue/27589
-//	https://go.dev/issue/37711
-func TestNilSlicesAndMaps(t *testing.T) {
-	type Composites struct {
-		B []byte            // always encoded in v2 as a JSON string
-		S []string          // always encoded in v2 as a JSON array
-		M map[string]string // always encoded in v2 as a JSON object
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			in := []Composites{
-				{B: []byte(nil), S: []string(nil), M: map[string]string(nil)},
-				{B: []byte{}, S: []string{}, M: map[string]string{}},
-			}
-			want := map[string]string{
-				"v1": `[{"B":null,"S":null,"M":null},{"B":"","S":[],"M":{}}]`,
-				"v2": `[{"B":"","S":[],"M":{}},{"B":"","S":[],"M":{}}]`, // v2 emits nil slices and maps as empty JSON objects and arrays
-			}[json.Version]
-			got, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			if string(got) != want {
-				t.Fatalf("json.Marshal = %s, want %s", got, want)
-			}
-		})
-	}
-}
-
-// In v1, unmarshaling into a Go array permits JSON arrays with any length.
-// In v2, unmarshaling into a Go array requires that the JSON array
-// have the exact same number of elements as the Go array.
-//
-// Go arrays are often used because the exact length has significant meaning.
-// Ignoring this detail seems like a mistake. Also, the v1 behavior leads to
-// silent data loss when excess JSON array elements are discarded.
-func TestArrays(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal/TooFew", json.Version), func(t *testing.T) {
-			var got [2]int
-			err := json.Unmarshal([]byte(`[1]`), &got)
-			switch {
-			case got != [2]int{1, 0}:
-				t.Fatalf(`json.Unmarshal = %v, want [1 0]`, got)
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal/TooMany", json.Version), func(t *testing.T) {
-			var got [2]int
-			err := json.Unmarshal([]byte(`[1,2,3]`), &got)
-			switch {
-			case got != [2]int{1, 2}:
-				t.Fatalf(`json.Unmarshal = %v, want [1 2]`, got)
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-	}
-}
-
-// In v1, byte arrays are treated as arrays of unsigned integers.
-// In v2, byte arrays are treated as binary values (similar to []byte).
-// This is to make the behavior of [N]byte and []byte more consistent.
-//
-// Users of v2 can opt into the v1 behavior by setting
-// the "format:array" option in the `json` struct field tag:
-//
-//	struct {
-//		B [32]byte `json:",format:array"`
-//	}
-func TestByteArrays(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			in := [4]byte{1, 2, 3, 4}
-			got, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			want := map[string]string{
-				"v1": `[1,2,3,4]`,
-				"v2": `"AQIDBA=="`,
-			}[json.Version]
-			if string(got) != want {
-				t.Fatalf("json.Marshal = %s, want %s", got, want)
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			in := map[string]string{
-				"v1": `[1,2,3,4]`,
-				"v2": `"AQIDBA=="`,
-			}[json.Version]
-			var got [4]byte
-			err := json.Unmarshal([]byte(in), &got)
-			switch {
-			case err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case got != [4]byte{1, 2, 3, 4}:
-				t.Fatalf("json.Unmarshal = %v, want [1 2 3 4]", got)
-			}
-		})
-	}
-}
-
-// CallCheck implements json.{Marshaler,Unmarshaler} on a pointer receiver.
-type CallCheck string
-
-// MarshalJSON always returns a JSON string with the literal "CALLED".
-func (*CallCheck) MarshalJSON() ([]byte, error) {
-	return []byte(`"CALLED"`), nil
-}
-
-// UnmarshalJSON always stores a string with the literal "CALLED".
-func (v *CallCheck) UnmarshalJSON([]byte) error {
-	*v = `CALLED`
-	return nil
-}
-
-// In v1, the implementation is inconsistent about whether it calls
-// MarshalJSON and UnmarshalJSON methods declared on pointer receivers
-// when it has an unaddressable value (per reflect.Value.CanAddr) on hand.
-// When marshaling, it never boxes the value on the heap to make it addressable,
-// while it sometimes boxes values (e.g., for map entries) when unmarshaling.
-//
-// In v2, the implementation always calls MarshalJSON and UnmarshalJSON methods
-// by boxing the value on the heap if necessary.
-//
-// The v1 behavior is surprising at best and buggy at worst.
-// Unfortunately, it cannot be changed without breaking existing usages.
-//
-// Related issues:
-//
-//	https://go.dev/issue/27722
-//	https://go.dev/issue/33993
-//	https://go.dev/issue/42508
-func TestPointerReceiver(t *testing.T) {
-	type Values struct {
-		S []CallCheck
-		A [1]CallCheck
-		M map[string]CallCheck
-		V CallCheck
-		I any
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			var cc CallCheck
-			in := Values{
-				S: []CallCheck{cc},
-				A: [1]CallCheck{cc},             // MarshalJSON not called on v1
-				M: map[string]CallCheck{"": cc}, // MarshalJSON not called on v1
-				V: cc,                           // MarshalJSON not called on v1
-				I: cc,                           // MarshalJSON not called on v1
-			}
-			want := map[string]string{
-				"v1": `{"S":["CALLED"],"A":[""],"M":{"":""},"V":"","I":""}`,
-				"v2": `{"S":["CALLED"],"A":["CALLED"],"M":{"":"CALLED"},"V":"CALLED","I":"CALLED"}`,
-			}[json.Version]
-			got, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			if string(got) != want {
-				t.Fatalf("json.Marshal = %s, want %s", got, want)
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			in := `{"S":[""],"A":[""],"M":{"":""},"V":"","I":""}`
-			called := CallCheck("CALLED") // resulting state if UnmarshalJSON is called
-			want := map[string]Values{
-				"v1": {
-					S: []CallCheck{called},
-					A: [1]CallCheck{called},
-					M: map[string]CallCheck{"": called},
-					V: called,
-					I: "", // UnmarshalJSON not called on v1; replaced with Go string
-				},
-				"v2": {
-					S: []CallCheck{called},
-					A: [1]CallCheck{called},
-					M: map[string]CallCheck{"": called},
-					V: called,
-					I: called,
-				},
-			}[json.Version]
-			got := Values{
-				A: [1]CallCheck{CallCheck("")},
-				S: []CallCheck{CallCheck("")},
-				M: map[string]CallCheck{"": CallCheck("")},
-				V: CallCheck(""),
-				I: CallCheck(""),
-			}
-			if err := json.Unmarshal([]byte(in), &got); err != nil {
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-			if !reflect.DeepEqual(got, want) {
-				t.Fatalf("json.Unmarshal = %v, want %v", got, want)
-			}
-		})
-	}
-}
-
-// In v1, maps are marshaled in a deterministic order.
-// In v2, maps are marshaled in a non-deterministic order.
-//
-// The reason for the change is that v2 prioritizes performance and
-// the guarantee that marshaling operates primarily in a streaming manner.
-//
-// The v2 API provides jsontext.Value.Canonicalize if stability is needed:
-//
-//	(*jsontext.Value)(&b).Canonicalize()
-//
-// Related issue:
-//
-//	https://go.dev/issue/7872
-//	https://go.dev/issue/33714
-func TestMapDeterminism(t *testing.T) {
-	const iterations = 10
-	in := map[int]int{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			outs := make(map[string]bool)
-			for range iterations {
-				b, err := json.Marshal(in)
-				if err != nil {
-					t.Fatalf("json.Marshal error: %v", err)
-				}
-				outs[string(b)] = true
-			}
-			switch {
-			case json.Version == "v1" && len(outs) != 1:
-				t.Fatalf("json.Marshal encoded to %d unique forms, expected 1", len(outs))
-			case json.Version == "v2" && len(outs) == 1:
-				t.Logf("json.Marshal encoded to 1 unique form by chance; are you feeling lucky?")
-			}
-		})
-	}
-}
-
-// In v1, JSON string encoding escapes special characters related to HTML.
-// In v2, JSON string encoding uses a normalized representation (per RFC 8785).
-//
-// Users of v2 can opt into the v1 behavior by setting EscapeForHTML and EscapeForJS.
-//
-// Escaping HTML-specific characters in a JSON library is a layering violation.
-// It presumes that JSON is always used with HTML and ignores other
-// similar classes of injection attacks (e.g., SQL injection).
-// Users of JSON with HTML should either manually ensure that embedded JSON is
-// properly escaped or be relying on a module like "github.com/google/safehtml"
-// to handle safe interoperability of JSON and HTML.
-func TestEscapeHTML(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			const in = ``
-			got, err := json.Marshal(in)
-			if err != nil {
-				t.Fatalf("json.Marshal error: %v", err)
-			}
-			want := map[string]string{
-				"v1": `"\u003cscript\u003e console.log(\"Hello, world!\"); \u003c/script\u003e"`,
-				"v2": `""`,
-			}[json.Version]
-			if string(got) != want {
-				t.Fatalf("json.Marshal = %s, want %s", got, want)
-			}
-		})
-	}
-}
-
-// In v1, JSON serialization silently ignored invalid UTF-8 by
-// replacing such bytes with the Unicode replacement character.
-// In v2, JSON serialization reports an error if invalid UTF-8 is encountered.
-//
-// Users of v2 can opt into the v1 behavior by setting [AllowInvalidUTF8].
-//
-// Silently allowing invalid UTF-8 causes data corruption that can be difficult
-// to detect until it is too late. Once it has been discovered, strict UTF-8
-// behavior sometimes cannot be enabled since other logic may be depending
-// on the current behavior due to Hyrum's Law.
-//
-// Tim Bray, the author of RFC 8259 recommends that implementations should
-// go beyond RFC 8259 and instead target compliance with RFC 7493,
-// which makes strict decisions about behavior left undefined in RFC 8259.
-// In particular, RFC 7493 rejects the presence of invalid UTF-8.
-// See https://www.tbray.org/ongoing/When/201x/2017/12/14/RFC-8259-STD-90
-func TestInvalidUTF8(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			got, err := json.Marshal("\xff")
-			switch {
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Marshal error: %v", err)
-			case json.Version == "v1" && string(got) != `"\ufffd"`:
-				t.Fatalf(`json.Marshal = %s, want "\ufffd"`, got)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Marshal error is nil, want non-nil")
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			const in = "\"\xff\""
-			var got string
-			err := json.Unmarshal([]byte(in), &got)
-			switch {
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v1" && got != "\ufffd":
-				t.Fatalf(`json.Unmarshal = %q, want "\ufffd"`, got)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-	}
-}
-
-// In v1, duplicate JSON object names are permitted by default where
-// they follow the inconsistent and difficult-to-explain merge semantics of v1.
-// In v2, duplicate JSON object names are rejected by default where
-// they follow the merge semantics of v2 based on RFC 7396.
-//
-// Users of v2 can opt into the v1 behavior by setting [AllowDuplicateNames].
-//
-// Per RFC 8259, the handling of duplicate names is left as undefined behavior.
-// Rejecting such inputs is within the realm of valid behavior.
-// Tim Bray, the author of RFC 8259 recommends that implementations should
-// go beyond RFC 8259 and instead target compliance with RFC 7493,
-// which makes strict decisions about behavior left undefined in RFC 8259.
-// In particular, RFC 7493 rejects the presence of duplicate object names.
-// See https://www.tbray.org/ongoing/When/201x/2017/12/14/RFC-8259-STD-90
-//
-// The lack of duplicate name rejection has correctness implications where
-// roundtrip unmarshal/marshal do not result in semantically equivalent JSON.
-// This is surprising behavior for users when they accidentally
-// send JSON objects with duplicate names.
-//
-// The lack of duplicate name rejection may have security implications since it
-// becomes difficult for a security tool to validate the semantic meaning of a
-// JSON object since meaning is undefined in the presence of duplicate names.
-// See https://labs.bishopfox.com/tech-blog/an-exploration-of-json-interoperability-vulnerabilities
-//
-// Related issue:
-//
-//	https://go.dev/issue/48298
-func TestDuplicateNames(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			const in = `{"Name":1,"Name":2}`
-			var got struct{ Name int }
-			err := json.Unmarshal([]byte(in), &got)
-			switch {
-			case json.Version == "v1" && err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case json.Version == "v1" && got != struct{ Name int }{2}:
-				t.Fatalf(`json.Unmarshal = %v, want {2}`, got)
-			case json.Version == "v2" && err == nil:
-				t.Fatal("json.Unmarshal error is nil, want non-nil")
-			}
-		})
-	}
-}
-
-// In v1, unmarshaling a JSON null into a non-empty value was inconsistent
-// in that sometimes it would be ignored and other times clear the value.
-// In v2, unmarshaling a JSON null into a non-empty value would consistently
-// always clear the value regardless of the value's type.
-//
-// The purpose of this change is to have consistent behavior with how JSON nulls
-// are handled during Unmarshal. This semantic detail has no effect
-// when Unmarshaling into a empty value.
-//
-// Related issues:
-//
-//	https://go.dev/issue/22177
-//	https://go.dev/issue/33835
-func TestMergeNull(t *testing.T) {
-	type Types struct {
-		Bool      bool
-		String    string
-		Bytes     []byte
-		Int       int
-		Map       map[string]string
-		Struct    struct{ Field string }
-		Slice     []string
-		Array     [1]string
-		Pointer   *string
-		Interface any
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			// Start with a non-empty value where all fields are populated.
-			in := Types{
-				Bool:      true,
-				String:    "old",
-				Bytes:     []byte("old"),
-				Int:       1234,
-				Map:       map[string]string{"old": "old"},
-				Struct:    struct{ Field string }{"old"},
-				Slice:     []string{"old"},
-				Array:     [1]string{"old"},
-				Pointer:   new(string),
-				Interface: "old",
-			}
-
-			// Unmarshal a JSON null into every field.
-			if err := json.Unmarshal([]byte(`{
-				"Bool":      null,
-				"String":    null,
-				"Bytes":     null,
-				"Int":       null,
-				"Map":       null,
-				"Struct":    null,
-				"Slice":     null,
-				"Array":     null,
-				"Pointer":   null,
-				"Interface": null
-			}`), &in); err != nil {
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-
-			want := map[string]Types{
-				"v1": {
-					Bool:   true,
-					String: "old",
-					Int:    1234,
-					Struct: struct{ Field string }{"old"},
-					Array:  [1]string{"old"},
-				},
-				"v2": {}, // all fields are zeroed
-			}[json.Version]
-			if !reflect.DeepEqual(in, want) {
-				t.Fatalf("json.Unmarshal = %+v, want %+v", in, want)
-			}
-		})
-	}
-}
-
-// In v1, merge semantics are inconsistent and difficult to explain.
-// In v2, merge semantics replaces the destination value for anything
-// other than a JSON object, and recursively merges JSON objects.
-//
-// Merge semantics in v1 are inconsistent and difficult to explain
-// largely because the behavior came about organically, rather than
-// having a principled approach to how the semantics should operate.
-// In v2, merging follows behavior based on RFC 7396.
-//
-// Related issues:
-//
-//	https://go.dev/issue/21092
-//	https://go.dev/issue/26946
-//	https://go.dev/issue/27172
-//	https://go.dev/issue/30701
-//	https://go.dev/issue/31924
-//	https://go.dev/issue/43664
-func TestMergeComposite(t *testing.T) {
-	type Tuple struct{ Old, New bool }
-	type Composites struct {
-		Slice            []Tuple
-		Array            [1]Tuple
-		Map              map[string]Tuple
-		MapPointer       map[string]*Tuple
-		Struct           struct{ Tuple Tuple }
-		StructPointer    *struct{ Tuple Tuple }
-		Interface        any
-		InterfacePointer any
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			// Start with a non-empty value where all fields are populated.
-			in := Composites{
-				Slice:            []Tuple{{Old: true}, {Old: true}}[:1],
-				Array:            [1]Tuple{{Old: true}},
-				Map:              map[string]Tuple{"Tuple": {Old: true}},
-				MapPointer:       map[string]*Tuple{"Tuple": {Old: true}},
-				Struct:           struct{ Tuple Tuple }{Tuple{Old: true}},
-				StructPointer:    &struct{ Tuple Tuple }{Tuple{Old: true}},
-				Interface:        Tuple{Old: true},
-				InterfacePointer: &Tuple{Old: true},
-			}
-
-			// Unmarshal into every pre-populated field.
-			if err := json.Unmarshal([]byte(`{
-				"Slice":            [{"New":true}, {"New":true}],
-				"Array":            [{"New":true}],
-				"Map":              {"Tuple": {"New":true}},
-				"MapPointer":       {"Tuple": {"New":true}},
-				"Struct":           {"Tuple": {"New":true}},
-				"StructPointer":    {"Tuple": {"New":true}},
-				"Interface":        {"New":true},
-				"InterfacePointer": {"New":true}
-			}`), &in); err != nil {
-				t.Fatalf("json.Unmarshal error: %v", err)
-			}
-
-			merged := Tuple{Old: true, New: true}
-			replaced := Tuple{Old: false, New: true}
-			want := map[string]Composites{
-				"v1": {
-					Slice:            []Tuple{merged, merged},               // merged
-					Array:            [1]Tuple{merged},                      // merged
-					Map:              map[string]Tuple{"Tuple": replaced},   // replaced
-					MapPointer:       map[string]*Tuple{"Tuple": &replaced}, // replaced
-					Struct:           struct{ Tuple Tuple }{merged},         // merged (same as v2)
-					StructPointer:    &struct{ Tuple Tuple }{merged},        // merged (same as v2)
-					Interface:        map[string]any{"New": true},           // replaced
-					InterfacePointer: &merged,                               // merged (same as v2)
-				},
-				"v2": {
-					Slice:            []Tuple{replaced, replaced},         // replaced
-					Array:            [1]Tuple{replaced},                  // replaced
-					Map:              map[string]Tuple{"Tuple": merged},   // merged
-					MapPointer:       map[string]*Tuple{"Tuple": &merged}, // merged
-					Struct:           struct{ Tuple Tuple }{merged},       // merged (same as v1)
-					StructPointer:    &struct{ Tuple Tuple }{merged},      // merged (same as v1)
-					Interface:        merged,                              // merged
-					InterfacePointer: &merged,                             // merged (same as v1)
-				},
-			}[json.Version]
-			if !reflect.DeepEqual(in, want) {
-				t.Fatalf("json.Unmarshal = %+v, want %+v", in, want)
-			}
-		})
-	}
-}
-
-// In v1, there was no special support for time.Duration,
-// which resulted in that type simply being treated as a signed integer.
-// In v2, there is now first-class support for time.Duration, where the type is
-// formatted and parsed using time.Duration.String and time.ParseDuration.
-//
-// Users of v2 can opt into the v1 behavior by setting
-// the "format:nano" option in the `json` struct field tag:
-//
-//	struct {
-//		Duration time.Duration `json:",format:nano"`
-//	}
-//
-// Related issue:
-//
-//	https://go.dev/issue/10275
-func TestTimeDurations(t *testing.T) {
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Marshal", json.Version), func(t *testing.T) {
-			got, err := json.Marshal(time.Minute)
-			switch {
-			case err != nil:
-				t.Fatalf("json.Marshal error: %v", err)
-			case json.Version == "v1" && string(got) != "60000000000":
-				t.Fatalf("json.Marshal = %s, want 60000000000", got)
-			case json.Version == "v2" && string(got) != `"1m0s"`:
-				t.Fatalf(`json.Marshal = %s, want "1m0s"`, got)
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run(path.Join("Unmarshal", json.Version), func(t *testing.T) {
-			in := map[string]string{
-				"v1": "60000000000",
-				"v2": `"1m0s"`,
-			}[json.Version]
-			var got time.Duration
-			err := json.Unmarshal([]byte(in), &got)
-			switch {
-			case err != nil:
-				t.Fatalf("json.Unmarshal error: %v", err)
-			case got != time.Minute:
-				t.Fatalf("json.Unmarshal = %v, want 1m0s", got)
-			}
-		})
-	}
-}
-
-// In v1, non-empty structs without any JSON serializable fields are permitted.
-// In v2, non-empty structs without any JSON serializable fields are rejected.
-//
-// The purpose of this change is to avoid a common pitfall for new users
-// where they expect JSON serialization to handle unexported fields.
-// However, this does not work since Go reflection does not
-// provide the package the ability to mutate such fields.
-// Rejecting unserializable structs in v2 is intended to be a clear signal
-// that the type is not supposed to be serialized.
-func TestEmptyStructs(t *testing.T) {
-	never := func(string) bool { return false }
-	onlyV2 := func(v string) bool { return v == "v2" }
-	values := []struct {
-		in        any
-		wantError func(string) bool
-	}{
-		// It is okay to marshal a truly empty struct in v1 and v2.
-		{in: addr(struct{}{}), wantError: never},
-		// In v1, a non-empty struct without exported fields
-		// is equivalent to an empty struct, but is rejected in v2.
-		// Note that errors.errorString type has only unexported fields.
-		{in: errors.New("error"), wantError: onlyV2},
-		// A mix of exported and unexported fields is permitted.
-		{in: addr(struct{ Exported, unexported int }{}), wantError: never},
-	}
-
-	for _, json := range jsonPackages {
-		t.Run("Marshal", func(t *testing.T) {
-			for _, value := range values {
-				wantError := value.wantError(json.Version)
-				_, err := json.Marshal(value.in)
-				switch {
-				case (err == nil) && wantError:
-					t.Fatalf("json.Marshal error is nil, want non-nil")
-				case (err != nil) && !wantError:
-					t.Fatalf("json.Marshal error: %v", err)
-				}
-			}
-		})
-	}
-
-	for _, json := range jsonPackages {
-		t.Run("Unmarshal", func(t *testing.T) {
-			for _, value := range values {
-				wantError := value.wantError(json.Version)
-				out := reflect.New(reflect.TypeOf(value.in).Elem()).Interface()
-				err := json.Unmarshal([]byte("{}"), out)
-				switch {
-				case (err == nil) && wantError:
-					t.Fatalf("json.Unmarshal error is nil, want non-nil")
-				case (err != nil) && !wantError:
-					t.Fatalf("json.Unmarshal error: %v", err)
-				}
-			}
-		})
-	}
-}
diff --git a/src/encoding/json/v2_encode.go b/src/encoding/json/v2_encode.go
deleted file mode 100644
index c8f35d4281c751..00000000000000
--- a/src/encoding/json/v2_encode.go
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.jsonv2
-
-// Package json implements encoding and decoding of JSON as defined in
-// RFC 7159. The mapping between JSON and Go values is described
-// in the documentation for the Marshal and Unmarshal functions.
-//
-// See "JSON and Go" for an introduction to this package:
-// https://golang.org/doc/articles/json_and_go.html
-package json
-
-import (
-	"reflect"
-	"strconv"
-
-	jsonv2 "encoding/json/v2"
-)
-
-// Marshal returns the JSON encoding of v.
-//
-// Marshal traverses the value v recursively.
-// If an encountered value implements [Marshaler]
-// and is not a nil pointer, Marshal calls [Marshaler.MarshalJSON]
-// to produce JSON. If no [Marshaler.MarshalJSON] method is present but the
-// value implements [encoding.TextMarshaler] instead, Marshal calls
-// [encoding.TextMarshaler.MarshalText] and encodes the result as a JSON string.
-// The nil pointer exception is not strictly necessary
-// but mimics a similar, necessary exception in the behavior of
-// [Unmarshaler.UnmarshalJSON].
-//
-// Otherwise, Marshal uses the following type-dependent default encodings:
-//
-// Boolean values encode as JSON booleans.
-//
-// Floating point, integer, and [Number] values encode as JSON numbers.
-// NaN and +/-Inf values will return an [UnsupportedValueError].
-//
-// String values encode as JSON strings coerced to valid UTF-8,
-// replacing invalid bytes with the Unicode replacement rune.
-// So that the JSON will be safe to embed inside HTML